【问题标题】:Uninitialized Texture in OpenGLOpenGL中未初始化的纹理
【发布时间】:2011-04-14 16:36:43
【问题描述】:

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

我目前的做法是这样的:

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

但这不涉及上传任何内容。

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

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

【问题讨论】:

    标签: opengl textures


    【解决方案1】:

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

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

    【讨论】:

    • 哇...谁来了,我只是不知道这个? opengl.org 上的文档对此没有任何说明,是吗?您能否指出提到这一点的具体文字?
    • 啊,谢谢。我正在搜索文档和几个论坛,但没有查看规范
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    相关资源
    最近更新 更多