我有一個簡單的iPhone應用程序,它使用OpenGL ES(v1)根據用戶的觸摸繪製一條線。在XCode模擬器中,代碼完美工作。但是,當我將應用程序安裝到iPod或iPhone上時,繪製線條時,OpenGL ES視圖會「閃爍」。如果我禁用線條繪製,則閃光燈消失。通過「閃光燈」,我的意思是背景圖像(這是一個OpenGL紋理)瞬間消失,然後再次出現。看起來好像整個場景被完全擦除和重繪。更新時出現iPod/iPhone OpenGL ES UIView閃爍
它處理線描的代碼如下:
renderLineFromPoint:(CGPoint)start toPoint:(CGPoint)end
{
static GLfloat* vertexBuffer = NULL;
static NSUInteger vertexMax = 64;
NSUInteger vertexCount = 0,
count,
i;
//Allocate vertex array buffer
if(vertexBuffer == NULL)
vertexBuffer = malloc(vertexMax * 2 * sizeof(GLfloat));
//Add points to the buffer so there are drawing points every X pixels
count = MAX(ceilf(sqrtf((end.x - start.x) * (end.x - start.x) + (end.y - start.y) * (end.y - start.y))/kBrushPixelStep), 1);
for(i = 0; i < count; ++i) {
if(vertexCount == vertexMax) {
vertexMax = 2 * vertexMax;
vertexBuffer = realloc(vertexBuffer, vertexMax * 2 * sizeof(GLfloat));
}
vertexBuffer[2 * vertexCount + 0] = start.x + (end.x - start.x) * ((GLfloat)i/(GLfloat)count);
vertexBuffer[2 * vertexCount + 1] = start.y + (end.y - start.y) * ((GLfloat)i/(GLfloat)count);
vertexCount += 1;
}
//Render the vertex array
glVertexPointer(2, GL_FLOAT, 0, vertexBuffer);
glDrawArrays(GL_POINTS, 0, vertexCount);
//Display the buffer
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
}
(該功能是基於從GLPaint樣品應用相同的名稱的功能) 對於我的壽命,我可以不知道爲什麼這會導致屏幕閃爍。該線條正確繪製(無論是在模擬器和iPod中)。但是,閃光燈使其無法使用。
任何人都有如何防止「閃光燈」的想法?
這幾乎絕對不是正確的解決方案。你只是掩蓋了這個問題。我也經歷了這一次,最初得出了同樣的結論。 – 2010-03-13 16:52:59