gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:07:41 25 4
gpt4 key购买 nike

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

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()每帧将数组作为1D纹理加载。

函数 glTexSubImage1D()将始终引发GL_INVALID_VALUE错误。从文档中,该错误可能是由于以下原因之一引起的:

GL_INVALID_VALUE is generated if level is less than 0.

GL_INVALID_VALUE may be generated if level is greater than log2 max, where max is the returned value of GL_MAX_TEXTURE_SIZE.

GL_INVALID_VALUE is generated if xoffset<−b, or if (xoffset+width)>(w−b), where w is the GL_TEXTURE_WIDTH, and b is the width of the GL_TEXTURE_BORDER of the texture image being modified. Note that w includes twice the border width.

GL_INVALID_VALUE is generated if width is less than 0.



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

最佳答案

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

即使您的纹理确实具有多个mipmap级别,您要上传的数据对于第二个级别还是太大了。

关于c++ - 加载纹理时,此示例中是什么导致glTexSubImage1D()-GL_INVALID_VALUE错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59357036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com