В OpenGL при выборке текстуры какая точность или формат используются для местоположения?
Чтобы уточнить: при выборке с помощью texture(sampler, vTextureCoordinates) в шейдере, например. precision highp float, вводятся два значения float32+. Однако используется ли эта точность для выборки текстуры или она будет ухудшаться (например, «привязана к фиксированной точке», как в d3d)?
Хотя меня в первую очередь интересует WebGL2, было бы интересно узнать и о других версиях OpenGL.
Мое текущее предположение состоит в том, что оно будет усечено до 16-битного нормализованного целого числа без знака, но я не уверен. Может быть, оно тоже не указано, в таком случае на что можно положиться?
Это связано с моим вопросом о неточности координат текстуры. Теперь, когда у меня есть несколько намеков на то, что эта деградация действительно может иметь место, я могу спросить о конкретной части. Если бы точность выборки действительно была 16-разрядным нормализованным целым числом, я мог бы закрыть и его.





Это функция аппаратного обеспечения, а не графического API, управляющего этим оборудованием. Таким образом, не имеет значения, используете ли вы D3D, WebGL, Vulkan или что-то еще, точность выборки координат текстуры зависит от оборудования, на котором вы работаете.
Большинство API на самом деле не говорят вам, какова эта точность. Как правило, они требуют некоторой минимальной точности, но аппаратное обеспечение может различаться.
Vulkan фактически позволяет реализациям сообщать вам точность подтекселей. Минимальное требование — 4 бита точности субтекселя (16 значений). База данных оборудования Vulkan показывает, что оборудование варьируется от 4 до 8, причем 8 встречается в 10 раз чаще, чем 4.
Спасибо! Для меня также было важно отметить, что сначала обычно выполняется масштабирование, затем преобразование в фиксированную точку, и обычно это что-то вроде фиксированной точки 16,8, а не диапазон [0, 1] (последнее в ретроспективе также будет довольно неудобно, но я нашел только страницу для нормализованных целых чисел). Некоторое время я задавался вопросом, почему точность и размер текстуры не коррелируют.
DirectX 11 требует 8-битной точности субтекселей, поэтому, даже если OpenGL не требует этого, большинство аппаратных реализаций, вероятно, захотят соответствовать требованиям кросс-API. (См. learn.microsoft.com/en-us/windows/win32/direct3d11/… )