繁体   English   中英

在此示例中加载纹理时是什么导致 glTexSubImage1D() - GL_INVALID_VALUE 错误?

[英]What causes glTexSubImage1D() - GL_INVALID_VALUE error in this example when loading a texture?

我正在尝试将传递函数加载为一维纹理,如下所示:

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<−b 或 (xoffset+width)>(w−b),则生成 GL_INVALID_VALUE,其中 w 是 GL_TEXTURE_WIDTH,b 是被修改的纹理图像的 GL_TEXTURE_BORDER 的宽度。 请注意, w 包括两倍的边框宽度。

如果宽度小于 0,则生成 GL_INVALID_VALUE。

我认为列出的任何一点都不适用于我的情况。 所以我想知道是什么导致了这个问题?

第二个参数(在GL_TEXTURE_1D之后)是 mipmap 级别。 级别 0 是最大的 mipmap 级别。 您的图像分配了一个级别(这是glTexStorage1D的第二个参数),但您正在尝试上传第二个级别(因为它们从 0 开始)。 将 0 传递给glTexSubImage1d作为级别编号而不是 1。

即使您的纹理确实有多个 mipmap 级别,您上传的数据对于第二个级别来说也太大了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM