OpenGL がその関数で double ではなく float を使用する理由が不思議です。double は float よりもはるかに正確なはずです。
2 に答える
以前は、多くの OpenGL 関数にdouble
バリアントがありました。glMultMatrix
たとえば、hasf
とd
バリエーションです。これらのほとんどはもう存在しませんが、float
vs . とは関係ありませんdouble
。コアGL 3.1以降ではなくなりましたglMultMatrixd
。 glMultMatrixf
コア OpenGLには、double
バリアントを持つ関数がまだあります。glDepthRange
がかかりdouble
ますが、float
バージョンがあります (主に GL ES との互換性のために導入されています)。のように、バリアントを持たない関数がいくつかあります。double
glBlendColor
場合によっては、OpenGL に一貫性がないことがあります。また、ユーザーに嘘をつかないという合理的な原則に従っているだけの場合もあります。
取るglBlendColor
。倍精度値を渡すことができれば、倍精度の精度で浮動小数点ブレンディングが行われたことを意味します。(存在するハードウェアでは) 確実にそうではないため、その精度を提供する API を提供することは、ユーザーにとって暗黙の嘘です。高精度の値を低精度の操作に使用しています。同じ論理がglDepthRange
(倍精度の深度バッファーは使用できません) にも当てはまりますが、それでもdoubles
. 繰り返しますが、矛盾です。
関数のglUniform*
スイートは、より良い例です。これらは、現在のプログラム オブジェクトに状態を設定します。GL 4.0 までは、double
バージョンは存在しませんでした。なんで?それは嘘だったでしょうから。4.0 より前の GLSL では、 を宣言することはできませんでした。これは、4.0 より前のハードウェアが を実装できdouble
なかったという単純明快な理由からです。ハードウェアが処理できない場合、ユーザーが を作成できるようにしても意味がありません。double
ほとんどの場合、精度は必要なく、double はサイズが 2 倍になるためです。