Сохранённый режим (Vk]jgu~uudw jy'nb)
Сохранённый режим в компьютерной графике — это основной шаблон проектирования API в графических библиотеках[1], в котором:
- графическая библиотека[англ.] вместо клиента, сохраняет сцену (полную объектную модель[англ.]* примитивов рендеринга[англ.]) для рендеринга, и
- клиентские вызовы графической библиотеки напрямую не вызывают рендеринг, а используют обширную косвенную ссылку на ресурсы, управляемые — и поэтому сохранённые — графической библиотекой[2]. Это не исключает использования двойной буферизации[3].
Альтернативный подход — это немедленный режим[англ.]. Исторически сложилось так, что сохранённый режим был доминирующим стилем в в библиотеках с графическим интерфейсом[4], однако оба могут сосуществовать в одной библиотеке и на практике не обязательно исключают друг друга.
Обзор
[править | править код]В сохранённом режиме клиентские вызовы напрямую не вызывают фактический рендеринг, но вместо этого обновляют абстрактную внутреннюю модель (обычно список объектов), которая поддерживается в пространстве данных библиотеки. Это позволяет библиотеке оптимизировать процесс фактического рендеринга наряду с обработкой связанных объектов[2].
Некоторые методы оптимизации рендеринга включают в себя:
- управление двойной буферизацией[5][6]
- обработка скрытых поверхностей[англ.] с помощью отбраковки обратной поверхности[англ.][7]/отбраковки окклюзии (Z-буферизации)[8]
- передача из приложения в библиотеку только тех данных, которые изменились от одного кадра к другому.
Примером сосуществования сохранённого режима с немедленным режимом в одной и той же библиотеке является OpenGL[9]. OpenGL имеет функции немедленного режима, которые могут использовать ранее определённые серверные объекты (текстуры, вершинные и индексные буферы, шейдеры и т. д.) без повторной отправки неизмененных данных[10][11].
Примерами систем рендеринга в сохранённом режиме являются Windows Presentation Foundation[2], SceneKit[англ.] на macOS[12], и PHIGS[англ.].
См. также
[править | править код]Примечания
[править | править код]- ↑ Jin, Zhefan. Retained-Mode Parallel Graphics Rendering for Cooperative Design Environments // 2006 10th International Conference on Computer Supported Cooperative Work in Design : [англ.]. — May 2006. — P. 1–6. — ISBN 1-4244-0164-X. — doi:10.1109/CSCWD.2006.253142.
- ↑ 1 2 3 Quinn Radich. Retained Mode Versus Immediate Mode (англ.). Win32 apps. Microsoft (30 мая 2018). Дата обращения: 21 декабря 2019.
- ↑ stevewhims Predication queries - Win32 apps (англ.). learn.microsoft.com. Дата обращения: 9 декабря 2022.
- ↑ Feldmeier, Alex GUI Programming (англ.). UWP Computer Science and Software Engineering Technical Report (12 октября 2013). — «Retained mode has been the standard for years. Just about every GUI is in retained mode.» Дата обращения: 22 декабря 2019.
- ↑ OpenGL double buffering (англ.). Дата обращения: 7 мая 2020.
- ↑ DirectX double buffering (англ.). Дата обращения: 7 мая 2020.
- ↑ OpenGL face culling (англ.). Дата обращения: 7 мая 2020.
- ↑ DirectX occlusion culling (англ.). Дата обращения: 7 мая 2020.
- ↑ OpenGL (англ.). Дата обращения: 4 мая 2020.
- ↑ OpenGL Driver Support (англ.). NVIDIA Developer (19 августа 2013). Дата обращения: 21 августа 2020.
- ↑ OpenGL - The Industry's Foundation for High Performance Graphics (англ.). The Khronos Group (19 июля 2011). Дата обращения: 21 августа 2020.
- ↑ Weiher, Marcel. iOS and macOS Performance Tuning: Cocoa, Cocoa Touch, Objective-C, and Swift : [англ.]. — Addison-Wesley Professional, Feb 24, 2017. — «SceneKit and SpriteKit on the other hand are retained-mode APIs». — ISBN 9780133085532.