OpenGL中的未初始化纹理

OpenGL中的未初始化纹理,opengl,textures,Opengl,Textures,有没有一种简单快速的方法在OpenGL中创建未初始化的纹理 我目前的做法如下: std::vector<byte> nothing = std::vector<byte>([size of texture in bytes]); glTexImage( target, level, internalFormat, size, border, format, type, nothing ); std::vector n

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

我目前的做法如下:

std::vector<byte> nothing = std::vector<byte>([size of texture in bytes]);
glTexImage(
   target,
   level,
   internalFormat,
   size,
   border,
   format,
   type,
   nothing
   );
std::vector nothing=std::vector([纹理大小以字节为单位]);
glTexImage(
目标,,
水平,
内部格式,
大小,
边境
格式,
类型,
没有什么
);
但这不涉及上传任何内容

另一种方法是创建一个未初始化的缓冲区(在没有数据的情况下调用glBufferData),并从该缓冲区创建纹理。但至少这有两倍的内存占用(我的内存预算很低)


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

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

如果TexImage1D的数据参数, TexImage2D或TexImage3D为空 指针(表中的零值指针) C)实现),一个、两个或多个 建立了三维纹理阵列 使用指定的目标创建, 级别、格式、宽度、高度、, 和深度,但未指定图像 目录在这种情况下,没有像素值 在客户端内存中访问,并且没有 执行像素处理。错误 但是,生成的 尽管数据指针是有效的


哇哈。。。谁说我不知道这件事?opengl.org上的文档没有提到这一点,是吗?你能给我指一下提到这一点的具体文本吗?啊,谢谢。我在搜索文档和几个论坛,但还没有查看规范