2012-05-18 178 views
3

我正在使用绘制glDrawArrays绘制GL_LINE_STRIP并希望使它们平滑。我在这里看到几个问题,人们推荐使用glEnable(GL_LINE_SMOOTH)和glHint(GL_LINE_SMOOTH_HINT,GL_NICEST),但是当我这样做时,我得到一个错误。这里是我的代码:OpenGL ES 2.0 GLKit GL_LINE_SMOOTH错误

- (void)setupGL 
{ 
    [EAGLContext setCurrentContext:self.context]; 

    self.effect = [[[GLKBaseEffect alloc] init] autorelease]; 
    self.effect.light0.enabled = GL_FALSE; 
    self.effect.light1.enabled = GL_FALSE; 
    self.effect.light2.enabled = GL_FALSE; 
    self.effect.lightModelAmbientColor = GLKVector4Make(0.0f, 0.0f, 0.0f, 1.0f); 

    glDisable(GL_DEPTH_TEST); 
// glEnable(GL_LINE_SMOOTH); 
// glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); 
    glEnable(GL_BLEND); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

    glGenVertexArraysOES(1, &_vertexArray); 
    glBindVertexArrayOES(_vertexArray); 

    glGenBuffers(1, &_vertexBuffer); 
    glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_DYNAMIC_DRAW); 

    glEnableVertexAttribArray(GLKVertexAttribPosition); 
    glVertexAttribPointer(GLKVertexAttribPosition, VERTEX_POS_DATA_SIZE, GL_FLOAT, GL_FALSE, VERTEX_DATA_SIZE * sizeof(GLfloat), BUFFER_OFFSET(0)); 

    glEnableVertexAttribArray(GLKVertexAttribColor); 
    glVertexAttribPointer(GLKVertexAttribColor, VERTEX_COLOR_DATA_SIZE, GL_FLOAT, GL_FLOAT, VERTEX_DATA_SIZE * sizeof(GLfloat), BUFFER_OFFSET(VERTEX_POS_DATA_SIZE * sizeof(GLfloat)));  

    glLineWidth(10.0); 
} 

如果我取消注释(或两者)这些行,我会得到GL错误。有什么想法吗?

+4

我很确定'GL_LINE_SMOOTH'在iOS OpenGL ES实现中不受支持。您可能需要找到另一种方法为您的线条进行抗锯齿。 –

回答

0

我有这样的工作(好!)与ES1.1方面,即

self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1]; 

我编写新的代码,并试图骑未来的波(或至少,在现在 - 最近的过去)并跳转到ES2.0。在2.0的宇宙中,我曾在我的GLKViewController-viewDidLoad覆盖与

view.drawableMultisample = GLKViewDrawableMultisample4X; 

一套相当成功,在我的GLKView设置。因人而异。