我有一个 GLKViewController ,它的实现如下......
#import "game-gl.h"
....
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
renderFrameLine();
}
game-gl.c(我从 s = .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)
我对此进行了评论,但仍然得到相同的响应,只有其他所有内容似乎都可以编译...
更新
我还看到以下警告,我不认为它是相关的,因为编译检查通过了,但是....
/Users/me/Development/test3/test3/game-gl.c:97:46:将“GLbyte [148]”传递给“const char *”类型的参数在指向具有不同符号的整数类型的指针之间进行转换
但正如我所说,这张支票似乎通过了......
glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
if (!compiled) {
再次更新
好的,现在我们得到了一些地方......
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);
}