Ответ 1
-
Вам не нужны спецификаторы точности для констант/литералов, так как они получают время компиляции для того, что им назначено. Более того, поскольку точность
gl_FragColor
уже определена на основе глубины цели рендеринга, точность, которую вы ему назначаете, не имеет значения. -
В вершинных шейдерах по умолчанию объявляются следующие префиксы: (
4.5.3 Default Precision Qualifiers
)precision highp float; precision highp int; precision lowp sampler2D; precision lowp samplerCube;
А в флеш-шейдерах вы получаете:
precision mediump int; precision lowp sampler2D; precision lowp samplerCube;
Это означает, что если вы объявляете float в шейдере фрагментов, вы должны сказать, является ли это
lowp
илиmediump
. Исключения по умолчаниюfloat
/int
также распространяются на матрицы/векторы. -
highp
поддерживается только для систем, у которых макросGL_FRAGMENT_PRECISION_HIGH
определяется1
; в остальном вы получите ошибку компилятора. (4.5.4 Available Precision Qualifiers
) -
Правило точности в выражении состоит в том, что они автоматически передаются в тип привязки/параметра, к которому они привязаны. Таким образом, для вашей точки она будет использовать точность входных типов по умолчанию, а дополнительные
lowp
не нужны (и синтаксически неверны). Если вы хотите понизить тип до более низкой точности, единственный способ сделать это - явно назначить его более низкой точности.
Эти ответы взяты из спецификации Hronos GLSL, которую вы можете найти здесь (соответствующие разделы: 4.5.2 и 4.5.3): http://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf p >