2013-05-29 4 views
0

У меня есть GLKViewController, который имеет реализацию, как следует ...IOS: OpenGL треугольник не отображается

#import "game-gl.h" 
.... 
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect 
{ 
    renderFrameLine(); 
} 

игра-gl.c (я начал с с = .5)

void renderFrameLine() { 
    printf("Inside Render Line \n"); 
    if(f>1.0f){ 
     f = 0.0f; 
    } 
    else{ 
     f = f+.01; 
    } 
    glClearColor(f, 0.65f, f, 1.0f); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    if(s >2.0f){ 
     s = -2.0f; 
    } 
    else{ 
     s = s + 0.10f; 
    } 
GLfloat vVertices[] = { s, s, 0.0f, s, -s, 0.0f, -s, s, 
    0.0f}; 
GLfloat colors[] = { 
    1.0f, 0.0f, 0.0f, 1.0f, 
    1.0f, 0.0f, 0.0f, 1.0f, 
    1.0f, 0.0f, 0.0f, 1.0f, 
    1.0f, 0.0f, 0.0f, 1.0f}; 
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vVertices); 
glEnableVertexAttribArray(0); 
glDrawArrays(GL_TRIANGLES, 0, 4); 
} 

Когда я запускаю приложение, фон меняет цвет, но Треугольник никогда не появляется. Любая идея, что я делаю неправильно?

Проблема, как представляется, с шейдерами не компиляции ...

shader = glCreateShader(type); 
if (shader == 0){ 
#ifdef __APPLE__ 
    printf("Shader Failed %d\n", type); 
#endif 
    return 0; 
} 

Отпечатки, что шейдер не удалось (тип = GL_VERTEX_SHADER)

Я заметил это, и я все еще получаю тот же ответ, только все остальное кажется компилировать нормально ...

UPDATE

Я также вижу ВОЛП предупреждение мычание, я не думаю, что это связано, так как проверки компиляции перевалов, но ....

/Users/me/Development/test3/test3/game-gl.c:97:46: Передача " GLbyte [148] для параметра типа „сопзЬ символ *“ преобразует между указателями на целое число типов с различным знаком

Но, как я сказал, что это проверка, кажется, проходит ...

glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled); 
if (!compiled) { 

UPDATE СНОВА

Хорошо, теперь мы получаем некоторые где ...

programObject = glCreateProgram(); 
if(programObject == 0){ 
    printf("Invalid program returned \n"); 
} 

отпечатки, что программа недействительна?!?!?!?

И снова

Так что я изменил, чтобы попытаться захватить программу в файле .m, но он по-прежнему 0.

if(_program == 0){ 
    NSLog(@"Still can not create program"); 
} 
else{ 
    resizeViewport(screenWidth, screenHeight); 
    InitializeOpenGL(0, 0, _program); 
} 

ответ

0

Для GLKViewController вы, видимо, должны установить контекст перед тем, как получить программу. Добавление этой строки ...

[EAGLContext setCurrentContext:self.context]; 

перед инициализацией GL заставило его работать.

0

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

Кроме того, перед назначением данных вы должны включить указатель атрибута.

Кроме того, убедитесь, что вы не отбраковываете грани по часовой стрелке (вместо CCW) ... Если у вас включена функция отбрасывания лица.

+0

Я предполагаю, что по шейдерному коду вы имеете в виду, где загружаются мои шейдеры. Я загружаю их в файл C, я уверен, что шейдеры компилируются, я просто что-то скажу, что заставило меня поверить, что это может произойти, но оказалось, что это не имеет значения (другая проверка проходит после компиляции). Вы можете видеть, что указатель атрибута включен в опубликованном мной коде. Я привязал атрибут в коде инициализации. Это простое тестовое приложение, поэтому я не верю, что настроил отбраковку. – Jackie

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