【发布时间】:2012-04-19 15:46:43
【问题描述】:
对于我正在开发的应用程序,我需要能够
- 画出不同宽度和颜色的线条
- 绘制纯色填充三角形
- 绘制带纹理(无 alpha)的四边形
很容易...但是...
所有坐标在像素空间中都是整数,而且非常重要:glReading all the pixel from the framebuffer 在两台不同的机器上,使用两个不同的显卡,运行两个不同的操作系统(Linux 和 freebsd), 必须产生完全相同的位序列(给定适当的常量格式转换)。
我认为使用 opengl 和硬件加速是不可能安全地实现的,因为我打赌不同的图形 卡(来自不同的供应商)可以实现不同的光栅化算法。 (OpenGl 规范对此很清楚,因为他们提出了一种算法,但他们也声明实现可能会有所不同 在某些情况下)。 此外,我真的不需要硬件加速,因为我将渲染非常低速和简单的图形。
你认为我可以通过禁用硬件加速来实现这一点吗?在linux下这种情况下会发生什么,我会默认吗 MESA 软件光栅化器?在那种情况下,我能确定它总是有效还是我遗漏了什么?
【问题讨论】:
-
我认为更好的方法是忘记光栅化的准确性并将结果句柄作为非精确(+/-几个像素)整体光栅化误差约为 0.5 像素(如果我没记错的话)所以安全考虑所有具有 2-3 像素精度的对象。 (您也可以将标记添加到关键对象...一个具有不同颜色的像素)。另一种方法是使用 GLSL(忘记 OpenGL 管道并创建自己的具有预定精度行为)
标签: opengl rasterizing mesa