2013-05-29 58 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