如何将纹理的所有像素设置为一个值?
How to set all pixels of a texture to one value?
我在网格中使用纹理:首先在没有数据的情况下创建大纹理(例如 1024x1024 或 2048x2048),然后使用 glTexSubImage2d
调用设置正在使用的区域。但是,我想让所有像素的初始值为 0xffff,而不是零。而且我觉得只为初始化纹理值分配兆字节的全 0xffff 主机内存是愚蠢的。那么是否可以通过几次调用将纹理的所有像素设置为特定值?
具体来说,在 OpenGL 2.1 中是否可行?
有 glClearTexImage
, but it was introduced in OpenGL 4.4; see if it's available to you with the ARB_clear_texture 分机。
如果您绝对受限于核心 OpenGL 2.1,分配客户端内存并发出 glTexImage2D
调用是唯一的方法。特别是,您甚至无法使用未扩展的 OpenGL 2.1 渲染纹理,因此将纹理绑定到帧缓冲区 (OpenGL 3.0+) 和调用 glClearColor
等技巧不适用。然而,一次性分配和初始化一个 1-16MB 的纹理并不是什么大问题,即使感觉 'stupid'.
另请注意,新创建的纹理图像未确定;您不能指望它全为零,因此您必须以一种或另一种方式对其进行初始化。
我在网格中使用纹理:首先在没有数据的情况下创建大纹理(例如 1024x1024 或 2048x2048),然后使用 glTexSubImage2d
调用设置正在使用的区域。但是,我想让所有像素的初始值为 0xffff,而不是零。而且我觉得只为初始化纹理值分配兆字节的全 0xffff 主机内存是愚蠢的。那么是否可以通过几次调用将纹理的所有像素设置为特定值?
具体来说,在 OpenGL 2.1 中是否可行?
有 glClearTexImage
, but it was introduced in OpenGL 4.4; see if it's available to you with the ARB_clear_texture 分机。
如果您绝对受限于核心 OpenGL 2.1,分配客户端内存并发出 glTexImage2D
调用是唯一的方法。特别是,您甚至无法使用未扩展的 OpenGL 2.1 渲染纹理,因此将纹理绑定到帧缓冲区 (OpenGL 3.0+) 和调用 glClearColor
等技巧不适用。然而,一次性分配和初始化一个 1-16MB 的纹理并不是什么大问题,即使感觉 'stupid'.
另请注意,新创建的纹理图像未确定;您不能指望它全为零,因此您必须以一种或另一种方式对其进行初始化。