使用gl_PointSize的点精灵在OpenGL ES 2.0和OpenGL 3+中呈现不同的大小

时间:2016-07-11 04:48:28

标签: opengl opengl-es opengl-es-2.0

我有一个OpenGL程序,它在Mac OS X上使用OpenGL 3.2 Core配置文件,在iOS上使用OpenGL ES 2.0。

我的部分应用程序通过在顶点着色器中写入gl_PointSize来渲染点精灵。不幸的是,gl_PointSize在OpenGL 3中的渲染量比在OpenGL ES 2.0中大约高50倍。每个API的文档都指出gl_PointSize定义了像素数,因此我不确定为什么会出现这种情况。是否有一个默认的OpenGL参数修改了gl_PointSize的输出?还有什么可能导致尺寸的巨大差异吗?

每个平台使用完全相同的着色器(桌面具有ARB_ES2兼容性)。我还检查了所有统一输入是否相同,并且都以相同的分辨率渲染。 在着色器之外,我做的唯一与sprite相关的调用点是glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);。在每个平台上彼此独立,我可以很好地调整点大小。

1 个答案:

答案 0 :(得分:1)

关于视网膜的评论是正确的。由于2倍分辨率的视网膜屏幕,缩放倍数的组合产生了意想不到的结果。这导致点精灵在OpenGL 3上比在OpenGL ES 2.0上渲染大16倍。

当在着色器中写入原始值时,Point Sprite实际上大了2倍,填充了该区域的4倍。

要纠正缩放问题,从规范中读取它是有帮助的:

  

点光栅化为每个帧缓冲像素生成一个片段   其中心位于以点(xw; yw)为中心的正方形内,   边长等于当前点大小。