IOS:OpenGL Triangle没有出现

时间:2013-05-29 22:01:30

标签: ios opengl-es

我有一个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;
}

打印出着色器失败(type = GL_VERTEX_SHADER)

我评论了这一点,我仍然得到相同的回复,只有其他一切似乎编译好......

更新

我也看到以下警告,我不认为它是相关的,因为编译检查通过了......

  

/Users/me/Development/test3/test3/game-gl.c:97:46:将'GLbyte [148]'传递给'const char *'类型的参数将指针转换为具有不同符号的整数类型< / p>

但正如我所说,这项检查似乎已经过去了......

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);
}

2 个答案:

答案 0 :(得分:0)

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

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

此外,请确保您没有剔除顺时针方向的脸(CCW代替)......如果您启用了脸部剔除,那么。

答案 1 :(得分:0)

对于GLKViewController,您显然必须在获取程序之前设置上下文。添加这一行...

[EAGLContext setCurrentContext:self.context];

在初始化GL之前使其工作。