OpenGL中未初始化的纹理

时间:2011-04-14 08:16:52

标签: opengl textures

是否有一种简单快捷的方法可以在OpenGL中创建未初始化的纹理?

我目前的做法如下:

std::vector<byte> nothing = std::vector<byte>([size of texture in bytes]);
glTexImage(
   target,
   level,
   internalFormat,
   size,
   border,
   format,
   type,
   nothing
   );

但这涉及上传任何内容。

另一种方法是创建一个未初始化的缓冲区(通过调用没有数据的glBufferData)并从该缓冲区创建纹理。但afaik这有两倍的内存占用(而且我的内存预算很低)。

有没有一种很好的方法来创建一个可以在不使用带宽或额外内存的情况下写入的纹理?

1 个答案:

答案 0 :(得分:6)

只需为数据传递空指针即可。这是从版本1开始在OpenGL中指定的方式。从OpenGL 1.2规范,第3.8.1节,第118页,最后一段:

  

如果TexImage1D的数据参数,   TexImage2D或TexImage3D为null   指针(一个零值指针)   C实现),一,二,或   三维纹理数组是   使用指定目标创建,   水平,内部格式,宽度,高度,   和深度,但有未指定的图像   内容。在这种情况下没有像素值   在客户端内存中访问,没有   执行像素处理。错误   然而,生成的确如此   虽然数据指针有效。