【发布时间】:2023-12-29 00:35:01
【问题描述】:
我有以下片段着色器:
#version 330 core
layout (location = 0) out vec4 color;
uniform vec4 colour;
uniform vec2 light_pos;
in DATA
{
vec4 position;
vec2 texCoord;
float tid;
vec4 color;
} fs_in;
uniform sampler2D textures[32];
void main()
{
float intensity = 1.0 / length(fs_in.position.xy - light_pos);
vec4 texColor = fs_in.color;
if (fs_in.tid > 0.0)
{
int tid = int(fs_in.tid + 0.5);
texColor = texture(textures[tid], fs_in.texCoord);
}
color = texColor * intensity;
}
如果我运行我的程序,我会收到 opengl 错误 1282,这是无效操作。如果我不使用纹理(),所以我写了 texCoord = vec4(...) 它工作得很好。我总是将 tid (纹理 ID)作为 0 (无纹理)传递,因此该部分甚至不应该运行。我已经将纹理统一设置为某个占位符,但据我所知,这甚至不重要。那么什么会导致无效操作呢?
【问题讨论】:
标签: opengl glsl fragment-shader