2
我已經劃分了CCNode,並希望在每次繪製調用時閃存存儲在成員GLubyte *緩衝區中的圖像。這導致繪製黑色正方形,並且兄弟CCLabel節點現在也完全是黑色的。繼承CCNode,使用glTexImage2D blitzing圖像
因此,有兩個問題:
- 爲什麼不是方形白色的?我將緩衝區memset到0xffffffff。
- 我的OpenGL調用在繪製方法中一定有問題,因爲它會影響另一個節點的繪製。任何人都可以說什麼?
數據初始化:
exponent = e;
width = 1 << exponent;
height = 1 << exponent;
imageData = (GLubyte *) calloc(width * height * 4, sizeof(GLubyte));
memset(imageData, 0xff, 4 * width * height * sizeof(GLubyte));
抽獎方法:
- (void) draw
{
float w = 100.0f;
GLfloat vertices[] = {
0.0f, 0.0f, 0.0f,
w, 0.0f, 0.0f,
0.0f, w, 0.0f,
w, w, 0.0f
};
const GLshort texture_coordinates[] = {
0, 0,
1, 0,
0, 1,
1, 1,
};
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, width, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glTexCoordPointer(2, GL_SHORT, 0, texture_coordinates);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}
我用glDisableClientState/glEnableClientState(GL_COLOR_ARRAY)解決了色塊的問題;圍繞着繪製的代碼。這是有道理的,因爲每個繪圖調用默認啓用[GL_TEXTURE_2D GL_VERTEX_ARRAY GL_COLOR_ARRAY GL_TEXTURE_COORD_ARRAY],而那些我不需要GL_COLOR_ARRAY。但是,siblin CCLabel節點仍然呈現爲黑色。 – james 2010-10-02 12:49:06
通常,繪製一件東西會影響稍後繪製的東西,這是因爲您沒有重置某個已更改的狀態。我在上面的代碼中沒有看到任何明顯的東西,所以它可能在代碼中的其他地方。你如何畫標籤?另外,這裏有一個有趣的事實 - 這個詞是「blit」而不是「閃電戰」。它是[「Block Image Transfer」](http://en.wikipedia.org/wiki/Bit_blit)的縮寫。 – user1118321 2012-01-02 17:18:33