【发布时间】:2019-04-04 11:37:07
【问题描述】:
我正在研究大量利用 OpenGL 的渲染代码,这些代码将 COLORREF 转换为 float[3] 或 float[4],例如。 rgb[0] = ((float)GetRValue(col)) / 255.0f; 这给我敲响了性能警钟。 255.0f 显然可以是一个 int 但为什么不使用更快的除以 256 呢?
我们的首席图形程序员对这个建议表示反对,因为red = 255 除了 1.0f 之外的任何东西都是“道德错误的”,但是稍微降低浮点值的实际后果是什么?有什么可辨别的吗?
【问题讨论】:
-
"255.0f 显然可以是一个 int" 不,除非您想将所有值转换为 0,除了 255。"为什么不使用更快的除以 256?您需要在这里进行浮点除法,那么为什么您期望 256 更快?最后,你认为在使用 OpenGL 渲染 3D 场景时,颜色 int=>float 转换是一个瓶颈吗?
-
float/int 是 float 所以 100.0f/256 = .3906f ,而不是 0。我希望 float/256 比 float/255 快,因为优化器可以发现指数减少除法。
-
“瓶颈”很难定义,但由于这段代码是单线程的并且在 CPU 上,所以在毫无意义的精确数学上浪费时间似乎,嗯,毫无意义。
标签: opengl