У меня есть два прохода рендеринга.На первом проходе я рендерил некоторую непрозрачную геометрию, используя FBO, в несколько текстур.
На втором проходе я снова рендерил ту же геометрию и основываясь на различных свойствах геометрии (таких как объект, нормаль и т. д.), я пишувычисленные значения цвета из прохода 1 в определенные тексели некоторых текстур с использованием imageStore () (image_load_and_store)
Однако я хочу, чтобы это происходило только для видимых фрагментов (только тех, которые соответствуют финальным фрагментам цветов прохода 1)
так что я сейчас пытаюсь взять текстуру GL_DEPTH_ATTACHMENT с прохода 1 и прикрепить ее к fbo с прохода 2 (также как GL_DEPTH_ATTACHMENT), а затем перед передачей прохода 2 установить
glClearColor(0,0,0,1);
glClear(GL_COLOR_BUFFER_BIT);
glDepthMask(false);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
...render my scene...
И яожидается, что фрагментный шейдер (который использует imageStore ()) будет выполняться только для тех фрагментов, которые были видны на этапе 1 (и поскольку это та же сцена, которую я рендерил, также на этапе 2).
Но, похоже, это не работает - скрытые фрагменты также обрабатываются и выполняют imageStore () (и поскольку они используют цвета, вычисленные в pass1 для видимых фрагментов, они делают не то, что нужно)
* 1013Есть идеи почему?imageStore или что-то еще заставляет фрагментированный шейдер выполнить?я могу это как-то контролировать?это должно что-то делать с early-z?