【发布时间】:2010-03-14 00:51:04
【问题描述】:
我有一个简单的 iPhone 应用程序,它使用 OpenGL ES (v1) 根据用户的触摸画一条线。在 XCode Simulator 中,代码运行良好。但是,当我将应用程序安装到 iPod 或 iPhone 上时,OpenGL ES 视图在绘制线条时会“闪烁”。如果我禁用线图,闪光灯就会消失。通过“闪光”,我的意思是背景图像(这是一个 OpenGL 纹理)会瞬间消失,然后重新出现。看起来好像整个场景都被完全擦除和重绘了。
处理画线的代码如下:
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 中)。但是,闪光灯使它无法使用。
有人对如何防止“闪光”有想法吗?
【问题讨论】:
标签: iphone cocoa-touch opengl-es