OpenGL ES 2.0 GLKit GL_LINE_SMOOTH 错误

3

我正在使用glDrawArrays绘制GL_LINE_STRIP,并希望使它们更加平滑。我看到有些问题的答案中,人们建议使用glEnable(GL_LINE_SMOOTH)和glHint(GL_LINE_SMOOTH_HINT, GL_NICEST),但是当我这样做时,会出现错误。以下是我的代码:

- (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
我很确定iOS的OpenGL ES实现不支持GL_LINE_SMOOTH。你可能需要另寻他法来对你的线条进行抗锯齿处理。 - Brad Larson
1个回答

0

我已经在ES1.1上实现了这个功能(非常好!)。

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

我正在编写新的代码,试图跟随未来(或者至少是最近的过去)的潮流,并升级到ES2.0。在2.0的世界中,我的成果还算不错。

view.drawableMultisample = GLKViewDrawableMultisample4X;

在我的GLKViewController-viewDidLoad覆盖中设置,在我的GLKView上设置。结果可能因人而异。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接