2011-04-14 51 views
3

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

我目前的做法是这样的:

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

,但是这涉及东西的上传。

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

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

回答

6

只需传递数据的空指针即可。这是它是如何在OpenGL自1版从OpenGL的1.2规范第3.8.1节,第118页指定的最后一段:

如果TexImage1D, TexImage2D,或TexImage3D的数据参数是空 指针(在 C实现零值指针),一维,二维,或 三维纹理阵列 使用指定的目标, 水平,internalformat,宽度,高度,和 深度创建,但与未指定的图像 的内容。在这种情况下,在客户端存储器中不访问像素值 ,并且没有执行像素处理 。但是,生成错误 ,但是,尽管数据指针有效,但与 完全一样。

+0

woha ...谁来了,我只是不知道这一点? opengl.org上的文档对此没有提及,是吗?您能否指出我提到的具体文字? – fho 2011-04-14 08:43:15

+0

啊谢谢。我正在搜索文档和几个论坛,但没有看过规范 – fho 2011-04-14 09:17:37