Чи корисно використовувати всі наявні одиниці текстури?


9

При застосуванні декількох текстур до сітки, як-от для купірування карти, я зазвичай прив'язую текстури до перших декількох фіксованих одиниць текстури, наприклад: дифузний = одиниця 0, удар = одиниця 1, окуляр = одиниця 2, потім продовжую повторно використовувати їх для кожного різні сітки з різними текстурами. Але я завжди цікавився, чому glActiveTextureпідтримує стільки одиниць текстури (у попередньому посиланні написано щонайменше 80).

Тому мені спало на думку, що один із можливих способів управління текстурами - прив’язати різні текстури до кожної наявної одиниці та залишити їх увімкненими, лише оновивши єдиний індекс вибірки. Це повинно покращити рендерінг за рахунок зменшення кількості перемикань текстур. Якщо у вас менше текстур, ніж максимальна одиниця текстури, вам ніколи не потрібно буде відкручувати текстуру.

Чи є ця стандартна практика для програм OpenGL в режимі реального часу (я вважаю, що це стосується і D3D)? Чи є якісь очевидні наслідки для продуктивності цього підходу? Можливо, пам'ять накладні?

Відповіді:


11

Сучасна апаратура насправді не має поняття точок зв’язування текстур, як це відкриває OpenGL. Швидше за все, блок шейдерів використовує дескриптор (який є лише якихось жировим покажчиком), який потенційно може вирішувати будь-яку текстуру, якщо він знаходиться у відеопам'яті. Саме це робить можливими такі речі, як невмілі текстури . Таким чином, велика кількість "текстурних одиниць", доступних у поточних реалізаціях, просто намагається розгорнути цю невідповідну частину API.

Однак, рекомендований спосіб реалізації того, що ви намагаєтеся зробити (уникаючи повторного зв’язування текстур), - це використовувати масиви текстур , які дозволяють динамічно індексувати набір текстур у шейдері, якщо всі вони мають однаковий формат і розмір. Ця презентація містить більше подробиць про ці та інші методи зменшення накладних витрат драйверів при візуалізації за допомогою сучасного OpenGL: наближення до нуля драйвера накладних витрат


Я дивився цю презентацію раніше, це дуже добре. Я не знав про те, що ви згадуєте в першому абзаці, тому дякую за цю інформацію!
гламперт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.