Насколько мне известно, вы не можете связывать текстуры с любым из форматов глубины в качестве изображений и, следовательно, не можете записывать текстуры формата глубины в вычислительных шейдерах. См. документацию по glBindImageTexture, в ней перечислены форматы, которые должен иметь ваш формат текстуры. быть совместимым с. Форматы глубины не входят в их число, и в спецификации говорится, что форматы глубины несовместимы с обычными форматами.
Функции копирования текстур имеют те же ограничения совместимости, поэтому вы даже не можете, например, записать в обычную текстуру в вычислительном шейдере, а затем скопировать в текстуру глубины. glCopyImageSubData явно не имеет этого ограничения, но я не пробовал его, и он больше не является частью основного профиля.
Что может сработать, так это запись в обычную текстуру, затем рендеринг полноэкранного треугольника и установка для gl_FragDepth значений, считываемых из текстуры, но это дополнительный полноэкранный проход.
Я не совсем понимаю ваш второй вопрос - если ваш вычислительный шейдер изменяет буфер глубины, результат, скорее всего, будет отличаться в зависимости от того, делаете ли вы это до или после регулярного рендеринга, потому что разные части будут видны или закрыты.
Но, возможно, этот вопрос спорный, поскольку кажется, что вы вообще не можете вручную записывать в буферы глубины - что также может ответить на ваш третий вопрос - не записывая в буферы глубины, вы не можете связываться со сжатием его :)
Обратите внимание, что я не эксперт в этом, у меня была аналогичная проблема, и я сам смотрел документы / спецификации, так что все могло быть неправильно :) Пожалуйста, дайте мне знать, если вам удастся записать в буферы глубины с помощью вычислительных шейдеров!
person
karyon
schedule
24.07.2016