2013-03-07 2 views
0

В чем разница между инвариантностью и смещением многоугольника в OpenGL. Я смущаюсь с обоими. Поскольку оба они связаны с проблемами с низкой прецессией.В чем разница между инвариантностью и смещением многоугольника в OpenGL

+1

Что вы подразумеваете под «инвариантностью»? Инвариантность не имеет ничего общего с точностью. –

+0

Большое спасибо за повтор @NicolBolas У нас есть ключевое слово инвариант в opengl es 2.0. Он используется для поддержания той же прецессии вывода из вершинных шейдеров (переменная переменная) при повторном вызове. – Megharaj

ответ

2

От GLES 2.0 спецификации:

[...] дисперсия относится к возможности получения различных значений из того же выражения в различных шейдеров. Например, скажем, два вершинных шейдера каждого набора gl_Position с тем же выражением в шейдерах , а входные значения в этом выражении совпадают, когда оба шейдера запускаются.

Возможно, из-за независимой компиляции двух шейдеров значения, назначенные gl_Position, не совпадают, если запускаются два шейдера. В этом примере это может вызвать проблемы с выравниванием геометрии в многопроходном алгоритме. В общем случае допускается такая дисперсия между шейдерами. Чтобы предотвратить дисперсию, переменные можно объявить инвариантными либо индивидуально, либо с помощью глобальной настройки .

Другими словами, инвариант является механизм, созданный GLES для вас (программист), чтобы сообщить реализации, что, когда определенный код шейдера компилируется, графический код, генерируемый должен быть одинаковым каждый раз.

Полигон смещен, ummm, полностью не связан. Я отсылаю вас к официальному FAQ https://www.opengl.org/archives/resources/faq/technical/polygonoffset.htm

Смежные вопросы