我在网格中使用纹理:首先创建一个没有数据的大纹理(例如 1024x1024 或 2048x2048),然后使用 glTexSubImage2d
调用设置正在使用的区域。但是,我想让所有像素的初始值为 0xffff,而不是零。而且我觉得只为初始化纹理值分配兆字节的全 0xffff 主机内存是愚蠢的。那么是否可以通过几次调用将纹理的所有像素设置为特定值?
具体来说,在 OpenGL 2.1 中是否可行?
最佳答案
有glClearTexImage
, 但它是在 OpenGL 4.4 中引入的;看看它是否可用 ARB_clear_texture扩展名。
如果您绝对受限于核心 OpenGL 2.1,分配客户端内存并发出 glTexImage2D
调用是唯一的方法。特别是,您甚至无法使用未扩展的 OpenGL 2.1 渲染纹理,因此将纹理绑定(bind)到帧缓冲区 (OpenGL 3.0+) 和调用 glClearColor
等技巧不适用。然而,一次性分配和初始化 1-16MB 的纹理并不是什么大问题,即使它感觉“愚蠢”。
另请注意,新创建的纹理图像是未确定的;您不能指望它全为零,因此您必须以一种或另一种方式对其进行初始化。
关于opengl - 如何将纹理的所有像素设置为一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70652818/