繁体   English   中英

OpenGL 3.2为什么glTexStorage3D出现INVALID_ENUM错误?

[英]OpenGL 3.2 Why am I getting INVALID_ENUM error for glTexStorage3D?

stbi_uc* data = stbi_load(path, &width, &height, NULL, 4);
if (data == NULL) {
    return false;
}
gl_flush_errors();

glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_2D_ARRAY, id);
glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA, 50, 50, 1);

这是我的代码中来自INVALID_ENUM错误的部分,我将其范围缩小到glTexStorage3D调用。 在以下代码块之后,我也直接遇到了INVALID_VALUE错误:

glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, width, height, 1, GL_RGBA, GL_UNSIGNED_BYTE, data);

glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_CLAMP_TO_EDGE);

我的目标是在工作贴图实例化的情况下设置纹理数组,以便可以在一次绘制调用中渲染我的贴图。 我遇到了与此处相同的问题: 具有纹理图集的实例化图纸

但是,我不确定目前是否正确执行此操作,因此将不胜感激。 这些也是我的着色器,以防引起问题:

片段着色器

#version 330
// From vertex shader
in vec2 uvcoord;

// Application data
uniform sampler2DArray textures;
// uniform vec3 fcolor;

// Output color
layout(location = 0) out  vec4 color;

void main()
{

    color = texture(textures, vec3(uvcoord.x, uvcoord.y, 0.0));


}

顶点着色器

#version 330 
// Input attributes
in vec2 in_position;
in vec2 in_uvcoord;
in vec2 in_centre_pos;

// Passed to fragment shader
out vec2 uvcoord;
out vec2 vpos;

// Application data
uniform mat3 transform;
uniform mat3 projection;

void main()
{
    uvcoord = in_uvcoord;
    vpos = in_position;
    vec3 pos = projection * vec3(in_position.x + in_centre_pos.x, in_position.y + in_centre_pos.y, 1.0);
    gl_Position = vec4(pos.x, pos.y, 0.0, 1.0);
}

OpenGL 4.6 API核心配置文件规范; 8.19。 免疫形式的纹理图像; 第272页

TexStorage*命令指定绑定到每个命令目标参数的纹理对象的属性。

.....

错误

如果internalformat是表8.11中列出的未调整大小的基本内部格式之一,则会生成INVALID_ENUM错误。


这意味着它是不允许使用GL_RGBA为第三放慢参数glTexStorage3D

请改用GL_RGBA8

glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA8, 50, 50, 1);

您指定了OpenGL 3.2,在此版本中,函数glTexStorage3D不存在。 使用glTexImage3D ,它与GL_RGBA一起使用,而不是存储功能所需的大小格式GL_RGBA8

暂无
暂无

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

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