У нас есть приложение, в котором есть окно с горизонтальной панелью инструментов вверху. Дескриптор уровня окна, который мы передаем Vulkan для создания поверхности, в конечном итоге включает область за панелью инструментов, т. е. Vulkan совершенно не знает о панели инструментов, а поверхность включает пространство «за» ней.
Мой вопрос: может ли поверхность представлять только часть этого окна? Нам, очевидно, не нужно обрабатывать данные для пикселей, которые находятся за панелью инструментов, и поэтому мы хотим избежать создания буфера кадра, буфера глубины и т. д. больше, чем необходимо.
Я полностью понимаю, что могу выполнить это визуально, используя окно просмотра, которое, например. имеет смещение источника и компенсацию высоты, однако, насколько я понимаю, буфер кадра на самом деле все еще содержит информацию о пикселях полного размера поверхности (например, 800x600 для окна клиентской области 800x600), даже если я отображаю только часть этого окна . Затем буфер кадра "сопоставляется" и, следовательно, сжимается в области окна просмотра.
Все это заставило меня задаться вопросом, какова цель области просмотра. Если он просто определяет сопоставление вашего буфера изображения с областью на поверхности, не будет ли это очень неэффективным, если ваш фреймбуфер содержит значительно больше пикселей, чем область, на которую он сопоставляется? Разве не имеет смысла разделять части вашего приложения, например, разные окна HWND ПЕРВЫМИ, а затем создавать разные поверхности?
Как избежать рендеринга в области, превышающей необходимую?
Дубликат coderhelper.com/questions/68536118/…. Я не совсем понимаю вопрос. Практически определение «окна» в большинстве оконных систем - это атомарная неделимая часть. У вас не может быть поверхности для части окна, потому что «поверхность» — это «окно». Просто другое название одного и того же. Если вы хотите разделить его, то почему бы просто не сделать два окна?
@krOoze, вы правы - я действительно неправильно понял несколько вещей, которые теперь мне яснее. Спасибо за помощь!