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));
我正在尝试将帧大小 (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));