GLKit不绘制GL_POINTS或GL_LINES

时间:2013-10-27 05:22:43

标签: ios opengl-es-2.0 glkit

我正在努力开发一款仅使用程序生成的线条绘制的新iOS游戏。一切都运作良好,除了一些奇怪的打嗝与绘制一些原语。

我正处于需要实现文本的位置,并且字符被设置为数组中的一系列点。当我去画点(这是CGPoints)时,一些绘图模式很有趣。

    effect.transform.modelviewMatrix = matrix;
[effect prepareToDraw];
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, 0, 0, &points);
glDrawArrays(GL_POINTS, 0, ccc);

我使用此代码从数组中绘制,当模式设置为GL_LINE_LOOP或GL_LINE_STRIP时,一切正常。但是,如果我将其设置为GL_POINTS,我会收到gpus_ReturnGuiltyForHardwareRestert错误。如果我尝试GL_LINES,它就不会画任何东西。

可能会发生什么?

1 个答案:

答案 0 :(得分:1)

当您在ES2或ES3中使用GL_POINTS进行绘制时,您需要在顶点着色器中指定gl_PointSize,否则您将获得未定义的行为(最好在设备上渲染丑陋,崩溃就是你最坏的情况)。顶点着色器GLKBaseEffect使用不gl_PointSize,因此您无法将其与GL_POINTS一起使用。您需要实现自己的着色器。 (要获得起点,请尝试创建新Xcode项目时获得的“OpenGL Game”模板中的模板,或使用Xcode Frame Debugger查看GLKBaseEffect生成的GLSL。)

只要您在客户端代码中使用GL_LINES设置适当的宽度,

glLineWidth()就可以正常工作。