OpenGL — Использование текстур без привязки в sampler2D отключает TextureCubeMapSeamless

#c# #opengl #opentk

Вопрос:

Я использую кубические изображения в своем рендерере, и у меня включена функция TextureCubeMapSeamless для фильтрации между 6 изображениями. Работает нормально. В настоящее время я экспериментирую с ARB_bindless_texture на sampler2D. Моя проблема в том, что, как только я использую это расширение, это может быть объявление UBO с sampler2D[] в нем или выполнение явного приведения к sampler2D, TextureCubeMapSeamless отключается, и у меня есть видимые линии между изображениями кубической карты. Теперь сама текстура без привязки работает так, как и ожидалось. Я могу читать с sampler2D, и результат такой же, как и с «нормальной» текстурой.

Мой вопрос был бы таким: Как я могу использовать ARB_bindless_texture на sampler2D и одновременно включить TextureCubeMapSeamless? Это ошибка драйвера, они кажутся мне несколько не связанными?

Комментарии:

1. Ваш вопрос не имеет смысла. Применяется бесшовное сопоставление кубов… к картам куба . Не для того, чтобы sampler2D ; кубические карты исходят от samplerCube .

2. Я знаю, что бесшовное сопоставление кубов, очевидно, применимо только к кубическим картам. Однако он отключается, как только я начинаю использовать sampler2D (не samplerCube) в качестве текстуры без привязки. Я могу выбирать как из текстур sampler2D (без привязки), так и из samplerCube (однородный). Но поскольку бесшовное сопоставление кубов отключено, я получаю эти нефильтрованные линии между изображениями моей кубической карты.

3. Если вы используете текстуры без привязки для 2D-текстур, почему бы не использовать их и для кубических изображений?

4. Потому что в документации для ARB_bindless_texture говорится: При доступе к текстурам карты куба с помощью дескрипторов текстур включение бесшовной карты куба игнорируется и рассматривается как отключенное. Я все равно попробовал, и результат был ожидаемым. Но главный вопрос в том, почему он отключается, когда я получаю доступ НЕ к кубической карте с помощью дескриптора текстуры, а к простой униформе?

Ответ №1:

Насколько я могу судить, это не предполагаемое поведение, но люди, которым нужна привязка, с меньшей вероятностью будут условно использовать привязку по сравнению с обычной uniform , основанной на бесшовном текстурировании кубической карты. Так что, скорее всего, именно поэтому появился жучок; никто его не заметил.

Тем не менее, я бы предложил переключиться на ARB/AMD_seamless_cubemap_per_texture. Это бесшовное поле кубической карты соблюдается за счет текстурирования без привязки. Версия ARB довольно широко реализована, особенно с учетом того, что вы используете bindless.

Комментарии:

1. Хм, хорошо. Не совсем уверен, как использовать одно из этих расширений, но, думаю, я это выясню. Спасибо.

2. @JulianStambuk: Вам удалось успешно использовать текстурирование без привязки. Я думаю, что вы можете справиться с одним новым перечислителем для in glTexture/SamplerParameter .

3. Оказывается, я могу с: GL.TexParameter(TextureTarget, (TextureParameterName)All.TextureCubeMapSeamless, 1);

4. @JulianStambuk: О, верно, вы используете C#. Это действительно немного усложняет ситуацию, но да, это должно сработать.