Я изучаю 3D-программирование с книгой Изучаю современное программирование 3D-графики , но мне не везет с шейдерами и GLES 2.0 в iOS. Я работаю с игровым шаблоном xcode 4 opengl, но с изменениями, которые имеют смысл для первого примера в книге.
Первые шейдеры в книге не будут компилироваться с множеством разных ошибок. Первый вершинный шейдер
#version 330
layout(location = 0) in vec4 position;
void main()
{
gl_Position = position;
}
Жалуется на оператор версии и отказывается использовать макет в качестве спецификатора. Мне наконец удалось получить это, чтобы построить.
attribute vec4 position;
void main()
{
gl_Position = position;
}
Опять первый фрагментный шейдер отказывается от сборки из-за версии и не разрешает вывод в глобальный сегмент
#version 330
out vec4 outputColor;
void main()
{
outputColor = vec4(1.0f, 1.0f, 1.0f, 1.0f);
}
С ошибкой
ERROR: 0:10: Invalid qualifiers 'out' in global variable context
Хорошо, мне удалось получить первый пример (простой треугольник) для работы со следующими шейдерами.
вершинный шейдер
#version 100
void main()
{
gl_FragColor = vec4(1.0,1.0,1.0,1.0);
}
фрагментный шейдер
attribute vec4 position;
void main()
{
gl_Position = position;
}
Так что это сработало, и я попробовал первый цветной пример в следующей главе.
#version 330
out vec4 outputColor;
void main() {
float lerpValue = gl_FragCoord.y / 500.0f;
outputColor = mix(vec4(1.0f, 1.0f, 1.0f, 1.0f),
vec4(0.2f, 0.2f, 0.2f, 1.0f), lerpValue);
}
Даже обходя исправленные проблемы с ранее установленной версией, нельзя использовать версию f в плавающих числах. Шейдер по-прежнему отказывается строить с этой ошибкой
ERROR: 0:13: 'float' : declaration must include a precision qualifier for type
По сути, он жалуется на поплавок.
Я пытался поискать в гугле, чтобы найти объяснение различий, но ничего из этого не пришло. Я также прочитал яблочные документы в поисках совета и не нашел помощи. Я не уверен, где еще искать или что я на самом деле делаю неправильно.