opengl - 如何将纹理的所有像素设置为一个值?

标签 opengl textures

我在网格中使用纹理:首先创建一个没有数据的大纹理(例如 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/

相关文章:

c++ - 即使很困难,OpenGL、SDL 或 GLSL 都不会抛出错误,也没有绘制多边形

opengl - glSubTexImage 会阻塞吗?

python - 没有 CNN 的重复模式的图像语义分割

C++ OpenGL Multithreading 与缓冲区资源

c++ - PixelToaster 库上的鼠标处理

c++ - 对openGL的摄像头和摄像头空间转换的困惑

c++ - 使用VBO绘制不同宽度的彩色线条?

3d - Crytek Sponza 漏洞

c++ - 如何从原始数据加载 devIL 图像

opengl - 如何使用 GL_REPEAT 仅重复选择纹理图集? (OpenGL)