DEBUG_TYPE_ERROR 使用 glUniformMatrix2fv 传递 glm::vec2 类型时

DEBUG_TYPE_ERROR when passing glm::vec2 type using glUniformMatrix2fv

我正在尝试将帧大小 (X, Y) 传递给我的片段着色器。当我执行 GLAD 函数 glUniformMatrix2fv 时,出现以下错误:

GL CALLBACK: ** GL ERROR ** type = "0x824c", severity = "0x9146", message = Error has been generated. GL error GL_INVALID_OPERATION

我使用此方法为许多其他着色器传递 glm::vec4 数据类型(使用 glUniformMatrix4fv),没有问题。我查找了错误类型 0x824c,它似乎是 DEBUG_TYPE_ERROR. I have checked the function call in the relevant documention,而且它似乎是正确的。我错过了什么?

绘图代码:

uFrameSizeID = glGetUniformLocation(shader->id(), "uFrameSize");
glUniformMatrix2fv(uFrameSizeID, 1, GL_FALSE, glm::value_ptr(
    glm::vec2(static_cast<float>(X_RESOLUTION), static_cast<float>(Y_RESOLUTION))));

片段着色器:

layout(location = 0) out vec4 FragColor;

in VertexData
{
    vec4 color;
    vec2 texCoords;
} fs_in;

uniform sampler2D uTexture;
uniform sampler2D uDistortionMapX;
uniform sampler2D uDistortionMapY;
uniform vec4 uWindow;       // = [x0, y0, dx, dy]
uniform vec2 uFrameSize;    // = [X, Y] float

void main()
{
    vec2 v2_dist_vec;
    v2_dist_vec.x = texture(uDistortionMapX, fs_in.texCoords).r;
    v2_dist_vec.y = texture(uDistortionMapY, fs_in.texCoords).r;
    FragColor = texture(uTexture, fs_in.texCoords + v2_corr_vec);       
}

glUniformMatrix2fv 传递一个 2x2 矩阵。但是在您的着色器中,您使用 uniform vec2 uFrameSize; 这是一对浮点数。您必须使用 glUniform2fv,或者更简单的 glUniform2f:

uFrameSizeID = glGetUniformLocation(shader->id(), "uFrameSize");
glUniform2f(uFrameSizeID, static_cast<float>(X_RESOLUTION), static_cast<float>(Y_RESOLUTION));