【发布时间】: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
【问题讨论】: