ios opengl 3.0 не компилирует версию

Я пробую opengl 3.0 в xcode 5

вот как я компилирую шейдер

*shader = glCreateShader(type);
glShaderSource(*shader, 1, &source, NULL);
glCompileShader(*shader);

это мой шейдер

#version 140
attribute vec4 position; 
attribute vec4 color;

varying vec4 colorVarying;

attribute vec2 TexCoordIn;
varying vec2 TexCoordOut;
out int rowIndex;
out int colIndex;

void main(void) { 
    colorVarying = color;
    gl_Position = position;
    TexCoordOut = TexCoordIn;
}

я пытаюсь:

glGetString(GL_SHADING_LANGUAGE_VERSION);

возвращает 235, что и ожидалось. но я получаю

ERROR: 0:1: '' :  version '140' is not supported

из журнала компиляции я пробовал много номеров версий, и только 100 сработали. тогда я получаю

Invalid qualifiers 'out' in global variable context

что не так? Я запускаю это на 64-битном симуляторе iphone 4, на моем Mac Air с графикой Intel HD Graphics 3000 384 МБ.


person tzl    schedule 12.10.2013    source источник
comment
Насколько я знаю, графический адаптер на Mac практически не играет никакой роли, поскольку Apple реализовала уровень абстракции, который эмулирует аппаратное обеспечение GL/ES устройства (чистое программное обеспечение) в симуляторе — другими словами, вызовы GL/ES не получают прямо к драйверу устройства вашего Mac.   -  person Till    schedule 12.10.2013
comment
Пробовали ли вы использовать #version 300 es и заменить attribute на in и variing на out?   -  person SurvivalMachine    schedule 12.10.2013
comment
@ Другими словами, мне нужно попробовать это на самом устройстве?   -  person tzl    schedule 12.10.2013
comment
@SurvivalMachine #version 300 дает мне синтаксическую ошибку #version и все входы и выходы выдают ту же ошибку, что и выше   -  person tzl    schedule 12.10.2013
comment
@tzi это не то, что я хотел сказать. Но в целом вам действительно следует попробовать устройство, а не симулятор, особенно когда речь идет о разработке OpenGL/ES. Я хотел сказать, что симулятор использует часть программного обеспечения, которое пытается имитировать реализацию OpenGL/ES устройства iOS. Таким образом, это не зависит от оборудования Mac.   -  person Till    schedule 12.10.2013


Ответы (1)


Я смущен тем, что вы пытаетесь сделать. Вы говорите, что хотите использовать OpenGL 3.0, но пометили вопрос для OpenGL ES 3.0. Поскольку вы говорите о симуляторе iPhone, я предполагаю, что вы хотите использовать OpenGL ES 3.0. Обратите внимание, что на мобильных устройствах Apple только iPhone 5S имеет графический процессор с поддержкой OpenGL ES 3.0. Я не знаю, насколько хорошо ES 3.0 работает в симуляторе — по крайней мере, вы должны попробовать симулятор iPhone 5S, если такая вещь доступна.

Что касается вашего шейдера, то он выглядит как веселая смесь разных языковых версий. Во-первых, для OpenGL ES 3.0 вам нужно #version 300 es. Единственная разрешенная версия в OpenGL ES — #version 100 для ES 2.0. Я не знаю, почему вы пытаетесь #version 140, так как это только для (настольного) OpenGL 3.1. Я не знаю, почему вы ожидаете и получаете 235 от GL_SHADING_LANGUAGE_VERSION? Согласно спецификации, он должен возвращать OpenGL ES GLSL ES N.M ..., где N — основной, а M — дополнительный номер версии языка.

Затем, как отмечает SurvivalMachine, вам нужно заменить varying на out, а attribute на in.

person Arttu Peltonen    schedule 19.10.2013
comment
моя вина. Я имел в виду opengl ES 3.0. и получение 235 из GL_SHADING_LANGUAGE_VERSION также вызвано ошибкой в ​​моем коде. #версия 300 es отлично скомпилирована для меня в 64-битном симуляторе iphone. Спасибо! - person tzl; 26.10.2013
comment
Согласно спецификации, он должен возвращать OpenGL ES GLSL ES N.M..., - Какая спецификация? - person tower120; 23.12.2013