переход от gl_FragColor к значению "out" ничего не отображается - PullRequest
0 голосов
/ 31 октября 2019

Я обновляю большую часть своего старого кода OpenGL, включая фрагментный шейдер, и пытаюсь удалить ссылку на gl_FragColor , похоже, не работает.

#version 330

varying vec2 uvs;
uniform vec3 cameraPos;
uniform vec4 brushColor;
uniform sampler2D meshTexture;
uniform sampler2D paintTexture;
uniform int paintFboWidth;

layout(location = 0) out vec4 meshColor; // added this

void main() {
    vec2 paintUvs = vec2(gl_FragCoord.x/paintFboWidth, gl_FragCoord.y/paintFboWidth);
    float paintIntensity = texture(paintTexture, paintUvs).r;
    vec4 meshColor = texture(meshTexture, uvs);
    vec3 diffuseColor = mix(meshColor.rgb, brushColor.rgb, paintIntensity);

    meshColor = vec4(diffuseColor, 0); // added this
    //gl_FragData[0] = vec4(diffuseColor, 0); // trying to remove this
}

Насколько я понимаю, если я переключусь на переменную out , она будет работать, но когда я запишу в meshColor вместо gl_FragData[0] Я не вижу ничего отображенного на экране и ошибки GL.

Нужно ли делать что-либо еще в шейдере или вне его в коде C ++, чтобы использовать эту переменную out?

1 Ответ

0 голосов
/ 01 ноября 2019

Я понял это. Я затенял параметр в шейдере, чтобы он не записывал в выходную переменную.

layout(location = 0) out vec4 meshColor;
...
    vec4 meshColor = texture(meshTexture, uvs);
    ...

    meshColor = vec4(diffuseColor, 0); // writing to the local instance
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...