【发布时间】:2019-12-16 12:51:36
【问题描述】:
我正在尝试将传递函数加载为一维纹理,如下所示:
glBindTexture(GL_TEXTURE_1D, transfer);
glTexStorage1D(GL_TEXTURE_1D, 1, GL_RGBA32F, 11);
glTexSubImage1D(GL_TEXTURE_1D, 1, 0, 11, GL_RGBA, GL_FLOAT, props.transColors);
props.transColors 是一个浮点数组(这些值可以在运行时从 GUI 更改):
float transColors[4 * 11] =
{
1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f
};
计划是使用glTexSubImage1D() 每帧将数组加载为一维纹理。
函数glTexSubImage1D() 总是会抛出 GL_INVALID_VALUE 错误。从文档中可以看出,错误可能是由于以下原因之一:
如果级别小于 0,则生成 GL_INVALID_VALUE。
如果 level 大于 log2 max,则可能会生成 GL_INVALID_VALUE, 其中 max 是 GL_MAX_TEXTURE_SIZE 的返回值。
如果 xoffset(w−b),其中 w 是 GL_TEXTURE_WIDTH,b 是 正在修改的纹理图像的 GL_TEXTURE_BORDER 的宽度。 请注意,w 包含两倍的边框宽度。
如果宽度小于 0,则生成 GL_INVALID_VALUE。
我认为列出的任何一点都不适用于我的情况。所以我想知道,是什么导致了这个问题?
【问题讨论】: