2012-01-12 4 views
2

Im пытаясь понять, как пиксельный шейдер вызывается во время мультитекстурированного рендеринга, Ive тщательно прочитать спецификации, но я немного запутался ..Multisampling и фрагмент шейдеров GLSL 330

я настроить мультитекстурированного FBO с цветом и а глубина/трафарет renderbuffers .. штраф настройка

Я простой 1-линия Vertex Shader только для преобразования и еще одна линия фрагмент шейдера, который просто возвращает черный цвет .. и его тонкая

рисую линию - линия отображается сглаженной .. штраф

теперь, если в фрагментаторе шейдера вместо того, чтобы тупо возвращать черный цвет, я texelFetch из многосэмплированной текстуры, всегда читаю номер образца 0 (т. Е. Черный). Я получаю зубчатую линию.

Что такое разница между простым myoutcolor=vec4(0.0) и myoutcolor=texelFetch(mysampler2DMS,...,0)?

состояние функции, что фрагмент шейдер выполняется на образце уровне, только если он использует статический gl_SampleID, gl_Samplemask[] или имеет «образец» отборочные хранения .. (во всех этих случаях это означает GLSL #version 400 или выше), в противном случае он запускается на уровне фрагмента.

но как это может быть? в приведенном выше примере я получил сглаженную линию, даже если я всегда возвращал один и тот же цвет, поэтому я старался, чтобы шейдер фрагмента был ВСЕГДА выполнялся на уровне образца в мультисэмплинном фреймбуфере. С другой стороны, если бы это было не так, я должны получать гладкие результаты, даже если возвращать всегда один и тот же образец из текстуры MS.

Может ли кто-нибудь помочь мне понять это?

PS: В настоящее время я использую #version 330, но я обнаружил, что для каждого оператора мультисэмплирования Id необходимо правильно обрабатывать MS (gl_SampleID, gl_Samplemask[], sample ..) поддерживается только в GLSL 400 или выше .. так, whats именно поддержка GLSL 330 предлагает правильную обработку мультисэмплинга? как я могу обрабатывать текстуры MS в GLSL 330?

+0

Какая видеокарта и версия драйвера вы используете? –

+0

GT330M на OpenSUSE x64 12.1, драйвер 290.x – user815129

+0

водитель (только что проверено) 290.10, вы подозреваете, что проблема с драйвером? Думаю, я все равно должен получить сглаженные результаты, согласны ли вы? – user815129

ответ

1

в приведенном выше примере, я получил сглаженную линию, даже если я всегда возвращался один и тот же цвет

Потому что это то, что мультисэмплинг является.

Мультисэмплинг - это вызов FS за один пиксель и распределение этого значения по выборкам в пределах той области пикселя, которую покрывает примитив. Поэтому, если FS выполняется для пикселя на краю примитива, тогда результат будет распределен только по некоторым образцам этого пикселя.