Точность OpenGL с плавающей точкой - PullRequest
3 голосов
/ 14 января 2020

Я работаю над проектом по переходу с устаревшего / непосредственного OpenGL на современный OpenGL (основной профиль). В прежней реализации OpenGL мы использовали двойную точность, т.е. мы использовали GL_DOUBLE в glVertexPointer и использовали glLoadMatrixd, et c. Однако в современном OpenGL только OpenGL / GLSL 4.0+ поддерживает двойную точность.

Как старый OpenGL поддерживает двойную точность, а новый OpenGL - нет? Как унаследованный OpenGL поддерживает двойную точность, в то время как большинство видеокарт даже не поддерживает двойную точность?

Я не смог найти никакой информации в inte rnet или некоторые ответы были слишком стары.

Поддерживают ли современные видеокарты двойную точность? Должен ли я использовать OpenGL 4.0?

1 Ответ

7 голосов
/ 14 января 2020

Как старый OpenGL поддерживает двойную точность, а новый OpenGL - нет? Как унаследованный OpenGL поддерживает двойную точность, в то время как большинство видеокарт даже не поддерживает двойную точность?

Это не то, что вы думаете, что делает. То, что вы можете использовать double как атрибуты вершин, не означает (и никогда не делал), что реализация GL будет выполнять вычисления с такой точностью - GPU никогда не делали этого. Данные конвертируются с одинарной точностью в любом случае. То же самое для матриц - матрицы, которые были отправлены в GPU, никогда не имели двойной точности в устаревшем GL, независимо от того, использовали ли вы суффикс d или f при указании данных на стороне ЦП.

Просто с более новые графические процессоры, двойная точность стали доступны в ядрах шейдеров, и современный GL 4.x позволяет вам использовать это впервые .

Также обратите внимание, что многие из реальных потребителей У GPU есть какой-то безумно низкий двойной коэффициент точности, например, 1/32 от производительности FP32, поэтому лучше подумайте дважды, прежде чем использовать это. Для графики вам это редко понадобится. И тот факт, что ваш предыдущий код работал с устаревшим GL, доказал, что вам не нужна точность.

...