我有一个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);
。在每个平台上彼此独立,我可以很好地调整点大小。
答案 0 :(得分:1)
关于视网膜的评论是正确的。由于2倍分辨率的视网膜屏幕,缩放倍数的组合产生了意想不到的结果。这导致点精灵在OpenGL 3上比在OpenGL ES 2.0上渲染大16倍。
当在着色器中写入原始值时,Point Sprite实际上大了2倍,填充了该区域的4倍。
要纠正缩放问题,从规范中读取它是有帮助的:
点光栅化为每个帧缓冲像素生成一个片段 其中心位于以点(xw; yw)为中心的正方形内, 边长等于当前点大小。