прямоугольник шейдера фрагмента glsl не покажет - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь нарисовать красный прямоугольник на моем экране, но после компиляции мой экран становится синим.Может ли кто-нибудь помочь мне понять, что я делаю неправильно?Я новичок в GLSL

#version 330

out vec4 outColor;

void drawRectangle(in vec2 pixelXY)
{
    if(pixelXY.x > 60 && pixelXY.x < 200 && pixelXY.y > 60 && pixelXY.y < 200)
    {
        outColor = vec4(1.0, 0.0, 0.0, 0.0);
    }
}

void main()
{
    outColor = vec4(0.0, 0.0, 1.0 , 0.0);
    drawRectangle(vec2(60,100));
}

1 Ответ

0 голосов
/ 27 октября 2018

Вы вызываете функцию drawRectangle с постоянными фактическими параметрами

drawRectangle(vec2(60,100));

Обратите внимание, что это то же самое, что:

if (60 > 60 && 60 < 200 && 100 > 60 && 100 < 200)
{
    outColor = vec4(1.0, 0.0, 0.0, 0.0);
}

Чтобы решить проблему, вы должны изменить фактическуюПараметр для координат окна фрагмента, который в данный момент обрабатывается.См. gl_FragCoord:

drawRectangle( gl_FragCoord.xy );

Обратите внимание, что Фрагментный шейдер выполняется один раз для каждого фрагмента и встроенной универсальной переменной gl_FragCoord содержит координаты текущего фрагмента.

...