【问题标题】:glCopyImageSubData gives me GL_INVALID_VALUEglCopyImageSubData 给了我 GL_INVALID_VALUE
【发布时间】:2022-01-05 20:09:54
【问题描述】:

我制作了一个最小的代码示例来重现我的游戏中的错误。

我正在尝试将 TEXTURE_1D_ARRAY 的一个区域复制到另一个区域。

u32 tex0;
glGenTextures(1, &tex0);
glBindTexture(GL_TEXTURE_1D_ARRAY, tex0);
glTexImage2D(GL_TEXTURE_1D_ARRAY, 0, GL_RGBA8, 64, 2, 0, GL_RGBA, GL_FLOAT, initTexData);
glTexParameteri(GL_TEXTURE_1D_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_1D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_1D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

u32 tex1;
glGenTextures(1, &tex1);
glBindTexture(GL_TEXTURE_1D_ARRAY, tex1);
glTexImage2D(GL_TEXTURE_1D_ARRAY, 0, GL_RGBA8, 64, 3, 0, GL_RGBA, GL_FLOAT, nullptr);
glTexParameteri(GL_TEXTURE_1D_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_1D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_1D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glCopyImageSubData(
    tex0, GL_TEXTURE_1D_ARRAY,
    0, 0, 0, 0,
    tex1, GL_TEXTURE_1D_ARRAY,
    0, 0, 0, 0,
    64, 2, 1
);

纹理tex0 使用一些像素数据进行初始化,尺寸为 64x2。

然后我创建 tex1 尺寸为 64x3 和空数据。

最后我将tex0的内容复制到tex1,但操作失败。

它给出错误GL_INVALID_VALUE。根据documentation,该错误有几个不同的原因。但我已经使用 ApiTrace 对其进行了调试,它提供了一些有用的信息:

major api error 1281: GL_INVALID_VALUE error generated. The y values exceeds the boundaries of the corresponding image object.
glGetError(glCopyImageSubData) = GL_INVALID_VALUE

错误消息表明我越界了,但我不知道怎么做。我正在复制一个 64x2 的区域,它应该适合两种纹理。一定有什么愚蠢的错误,我看不到自己。

如需查看完整代码:https://gist.github.com/tuket/2198c17107c513c667d7381bbb34386d

【问题讨论】:

    标签: c++ opengl


    【解决方案1】:

    您会收到 INVALID_VALUE 错误,因为 glCopyImageSubDatasrcHeight 参数超出了相应图像对象的边界。

    一维纹理的高度始终为 1。然而,一维纹理数组的深度可以大于 1:

    glCopyImageSubData(
        tex0, GL_TEXTURE_1D_ARRAY,
        0, 0, 0, 0,
        tex1, GL_TEXTURE_1D_ARRAY,
        0, 0, 0, 0,
        64, 1, 2                  // height = 1, but depth = 2
    );
    

    不要让glTexImage2D 混淆了使用高度参数指定一维纹理数组的层的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多