【发布时间】:2018-09-24 11:03:29
【问题描述】:
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);
我的目标是使用我的工作图块实例设置一个纹理数组,以便我可以在一次绘制调用中渲染我的图块地图。我遇到了与这里相同的问题: Instanced drawing with texture atlas
但是,我不确定我目前是否正确执行此操作,因此我们将不胜感激任何帮助或指导。这些也是我的着色器,以防它们是问题的原因:
片段着色器
#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);
}
【问题讨论】: