2014-03-31 103 views
0

轉換爲cocos2d的V3和該代碼不會產生圖紙:cocos2d的V3調用glDrawArrays沒有工作

[_shaderProgram use]; //for V2 this was [shaderProgram_ use]; 

ccGLEnableVertexAttribs(kCCVertexAttribFlag_Position | kCCVertexAttribFlag_Color); 
glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, lineVertices); 
glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_FLOAT, GL_FALSE, 0, colorVertices); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

glDrawArrays(GL_TRIANGLE_STRIP, 0, 6); 

爲什麼這個代碼不工作V3?該代碼是從CCScene的繪製方法中調用的。任何幫助非常感謝。

更新:通過此代碼之前調用ccDrawPoint發現局部的解決方法(繪製一個小的隨機點)。然後glDrawArrays繪製正確的形狀(讀取我的lineVertices數組),但忽略我的colorVertices數組。我怎樣才能讓glDrawArrays使用我的colorVertices數組? (此代碼的工作之前,我轉換爲V3)

回答

2

我已經做了一下節點GL繪圖最近,直到我挖成CCNode的繪製代碼有類似的問題。

而不是明確地呼籲shaderProgram使用,嘗試調用下面的宏:

CC_NODE_DRAW_SETUP() 

它擴大在cocos2d V3基本上如下:

ccGLEnable(_glServerState); 
[_shaderProgram use]; 
[_shaderProgram setUniformsForBuiltins]; 
+0

約翰感謝您的答覆。但是,當我按照您的建議使用宏CC_NODE_DRAW_SETUP()時,它會錯誤地顯示錯誤'沒有爲節點設置着色器程序:'你知道如何解決? –

+0

你需要做的是設置你的着色器程序 - Cocos2D有一些標準的取決於你在做什麼。當你只是設置位置和顏色,你可以使用:'self.shaderProgram = [[CCShaderCache sharedShaderCache] programForKey:kCCShader_PositionColor]' – Johan

+0

約翰感謝我的調用glDrawArrays工作。在多次調用glDrawArrays之前,我在draw方法中使用了這段代碼:self - > _ shaderProgram = [[CCShaderCache sharedShaderCache] programForKey:kCCShader_PositionColor]; CC_NODE_DRAW_SETUP(); –