【发布时间】:2021-08-13 06:03:12
【问题描述】:
我们有一个应用程序,它有一个顶部带有水平工具栏的窗口。我们传递给 Vulkan 以创建表面的窗口级句柄最终包括工具栏后面的区域,即 Vulkan 完全不知道工具栏,表面包括它“后面”的空间。
我的问题是,一个表面可以只代表这个窗口的一部分吗?我们显然不需要为工具栏后面的像素处理数据,因此希望避免创建比必要更大的帧缓冲区、深度缓冲区等。
我完全理解我可以使用视口直观地完成此操作,例如具有原点偏移和高度补偿,但据我了解,帧缓冲区实际上仍然包含像素的信息,即表面全尺寸(例如 800x600 用于 800x600 客户区域窗口),即使我只渲染到该窗口的一部分.然后帧缓冲区被“映射”,因此被压缩到视口区域。
所有这些都让我想知道视口的用途是什么。如果它只是定义了从图像缓冲区到表面区域的映射,那么如果帧缓冲区包含的像素比它被映射到的区域多得多,那不是非常低效吗?在您的应用程序中使用例如部分部分是否没有意义?不同的windows HWNDs FIRST,然后再创建不同的表面?
如何避免渲染到超出必要的区域?
【问题讨论】:
-
stackoverflow.com/questions/68536118/… 的副本。我不完全理解这个问题。大多数窗口系统中“窗口”的定义几乎是原子不可分割的部分。你不能有一个窗口的一部分的表面,因为“表面”是“窗口”。只是同一事物的不同名称。如果你想拆分它,那为什么不干脆做两个窗口呢?
-
@krOoze 你是对的 - 我确实误解了一些现在对我来说更清楚的事情。感谢您的帮助!