我正在努力开发一款仅使用程序生成的线条绘制的新 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,它不会绘制任何东西。
可能发生了什么?
最佳答案
当你在 ES2 或 ES3 中使用 GL_POINTS
绘制时,你需要在顶点着色器中指定 gl_PointSize
否则你会得到未定义的行为(充其量在设备上呈现丑陋,最坏的情况是你看到的崩溃)。 GLKBaseEffect
使用的顶点着色器不执行 gl_PointSize
,因此您不能将它与 GL_POINTS
一起使用。您需要实现自己的着色器。 (作为起点,尝试在创建新 Xcode 项目时获得的“OpenGL 游戏”模板中的模板,或使用 Xcode Frame Debugger 查看 GLKBaseEffect
生成的 GLSL。)
glLineWidth()
设置适当的宽度,GL_LINES
就应该可以正常工作。
关于ios - GLKit 不绘制 GL_POINTS 或 GL_LINES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19614939/