【发布时间】:2016-07-11 04:48:28
【问题描述】:
我有一个 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 兼容性)。我还检查了所有统一输入是否相同,并且都以相同的分辨率呈现。
在着色器之外,我进行的唯一与点精灵相关的调用是glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);。在相互独立的每个平台上,我都可以很好地调整点大小。
【问题讨论】:
-
X 和 Y 各占 50%?
-
@NicolBolas 那是 50 倍,这是一个粗略的估计,表明一个比另一个大得多。因为它是一个点精灵,我会假设它总是渲染相等的 x 和 y。
-
您实际使用的是什么值?一种解释是您使用的尺寸超出了 iOS 支持的限制。
-
@RetoKoradi 输出在 10.0 到 30.0 左右。但是,如果我只是调整这些值,我就能让 iOS 精灵也渲染得很大。你知道我可以在哪里阅读有关限制的信息吗?
-
@JustinMeiners:“这是 50 倍,这是一个粗略的估计,表明一个比另一个大得多。”好的,但更准确地知道会大多少有帮助。 50x 几乎是不可能的,因为这意味着要么 OpenGL 在 500 像素左右渲染一个 10 像素的精灵,要么 ES 在 0.2 像素左右渲染一个 10 像素的精灵。
标签: opengl opengl-es opengl-es-2.0