OpenGL中未初始化的纹理

fho*_*fho 3 opengl textures

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

我目前的方法如下:

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

但这涉及到什么都没上传.

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

有没有一种很好的方法来创建一个纹理,以便以后写入而不使用带宽或额外的内存?

dat*_*olf 6

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

如果TexImage1D,TexImage2D或TexImage3D 的数据参数是空指针(C实现中的零值指针),则使用指定的目标,级别,内部格式创建一维,二维或三维纹理数组. ,宽度,高度和深度,但具有未指定的图像内容.在这种情况下,在客户端存储器中不访问像素值,并且不执行像素处理.然而,生成错误,就像数据指针有效一样.