您现在的位置是:首页 >其他 >第三十八章 立方体贴图和GLSL总结网站首页其他
第三十八章 立方体贴图和GLSL总结
简介第三十八章 立方体贴图和GLSL总结
学习一些缓冲函数,以及如何用纹理对象来存储大量的数据。
OpenGL中的缓冲是一个管理特定内存块的对象,没有额外的功能。将它绑定到一个缓冲目标时,才有意义。当前,是使用glBufferData来填充缓冲对象管理的内存,
该函数会分配一块内存,并将数据添加到这块内存中。如果将data参数设置为NULL,那么这个函数只会分配内存,但不进行填充。需要预留特定大小的内存。
现在看下函数glBufferSubData,可以填充缓冲的特定区域。该函数需要一个缓冲目标,一个偏移量,数据的大小和数据本身作为它的参数。
该函数是可以提供一个偏移量,指定从何处开始填充这个缓冲。
当然,缓冲需要有足够的已分配的内存,对一个缓冲调用glBufferSubData之前必须先调用glBufferData
glBufferSubData(GL_ARRAY_BUFFER, 24, sizeof(data), &data); // 范围: [24, 24 + sizeof(data)]
将数据导入缓冲还有一种方法:请求缓冲内存的指针,直接将数据复制到缓冲中。
调用glMapBuffer,会返回当前绑定缓冲的内存指针:
float data[] = {
0.5f, 1.0f, -0.35f
…
};
glBindBuffer(GL_ARRAY_BUFFER, buffer);
// 获取指针
void *ptr = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
// 复制数据到内存
memcpy(ptr, data, sizeof(data));
// 记得告诉OpenGL我们不再需要这个指针了
glUnma
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。