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