DEBUG_TYPE_ERROR при передаче типа glm :: vec2 с использованием glUniformMatrix2fv - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь передать размер кадра (X, Y) моему фрагментному шейдеру.Когда я выполняю функцию GLAD glUniformMatrix2fv, я получаю следующую ошибку:

GL CALLBACK: ** ОШИБКА GL ** тип = "0x824c", серьезность = "0x9146", сообщение = ошибка имеетбыл создан.Ошибка GL GL_INVALID_OPERATION

Я использую этот метод для передачи glm::vec4 типов данных (используя glUniformMatrix4fv) для многих других шейдеров без проблем.Я посмотрел тип ошибки 0x824c, и он выглядит как DEBUG_TYPE_ERROR .Я проверил вызов функции в соответствующей документации , и она кажется правильной.Чего мне не хватает?

Код чертежа:

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);       
}

1 Ответ

0 голосов
/ 18 декабря 2018

glUniformMatrix2fv проходит матрицу 2x2 .Но в вашем шейдере вы используете uniform vec2 uFrameSize;, который является парой с плавающей точкой.Вы должны использовать glUniform2fv, или даже проще glUniform2f:

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