2013-05-29 23 views
0

我有了一个实现如下一个GLKViewController ...IOS:OpenGL的三角形没有显示出来

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

游戏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)

我评论了这一点,我仍然得到同样的回应,只一切似乎编译好的...

UPDATE

我也看到了FOL降低警告,我不认为这是相关的,因为编译检查通过但是...

/Users/me/Development/test3/test3/game-gl.c:97:46:传递' GLbyte [148]”以类型的参数'为const char *指针之间进行转换为整数类型用不同的符号

但正如我所说的这个检查似传...

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

UPDATE AGAIN

好了,现在我们得到了一些地方...

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

哪里是你的shader代码?你正在创建片段着色器吗?创建一个程序?链接?如果那不是编译,那这就是你的第一个问题。但是你可以从gl得到有用的错误消息,这将有助于你。

除此之外,您应该在分配数据之前启用属性指针。

此外,请确保你没有顺时针脸(CCW代替)...如果你有脸部剔除启用是。

+0

我通过着色器代码假设你指的是我的着色器加载的位置。我正在将它们加载到C文件中,我非常肯定着色器正在编译,我只是简单地介绍一些让我相信可能会发生的事情,但事实证明它们没有什么区别(编译后另一个检查通过了)。您可以在我发布的代码中看到启用的属性指针。我在初始化代码中绑定了属性。这是一个简单的测试应用程序,所以我不相信我已经设置了扑杀。 – Jackie