有没有一种简单快捷的方法在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这有两倍的内存占用(而且我的内存预算很低).
有没有一种很好的方法来创建一个纹理,以便以后写入而不使用带宽或额外的内存?
只需为数据传递一个空指针.这是从版本1开始在OpenGL中指定的方式.从OpenGL 1.2规范,第3.8.1节,第118页,最后一段:
如果TexImage1D,TexImage2D或TexImage3D 的数据参数是空指针(C实现中的零值指针),则使用指定的目标,级别,内部格式创建一维,二维或三维纹理数组. ,宽度,高度和深度,但具有未指定的图像内容.在这种情况下,在客户端存储器中不访问像素值,并且不执行像素处理.然而,生成错误,就像数据指针有效一样.