我正在努力开发一款仅使用程序生成的线条绘制的新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,它就不会画任何东西。
可能会发生什么?
答案 0 :(得分:1)
当您在ES2或ES3中使用GL_POINTS
进行绘制时,您需要在顶点着色器中指定gl_PointSize
,否则您将获得未定义的行为(最好在设备上渲染丑陋,崩溃就是你最坏的情况)。顶点着色器GLKBaseEffect
使用不gl_PointSize
,因此您无法将其与GL_POINTS
一起使用。您需要实现自己的着色器。 (要获得起点,请尝试创建新Xcode项目时获得的“OpenGL Game”模板中的模板,或使用Xcode Frame Debugger查看GLKBaseEffect
生成的GLSL。)
GL_LINES
设置适当的宽度, glLineWidth()
就可以正常工作。