我们有一个应用程序,它有一个窗口,在顶部有一个水平工具栏。我们传递给Vulkan以创建表面的窗口级别的句柄最终包括工具栏后面的区域,即Vulkan完全不知道工具栏,而表面包括它“后面”的空间。
我的问题是,一个表面只能代表这个窗口的一部分吗?我们显然不需要为工具栏后面的像素处理数据,因此希望避免创建过大的帧缓冲区、深度缓冲区等。
我完全理解,我可以使用视窗来实现这一点,例如,具有原点偏移和高度补偿的视窗,但是据我所知,帧缓冲区实际上仍然包含整个表面大小的像素信息(例如,800x600客户区域窗口),即使我只渲染到该窗口的一部分。然后,帧缓冲区被“映射”,并因此被挤压到视口区域。
所有这些都让我想知道视口的用途是什么。如果它只是简单地定义了从图像缓冲区到曲面中某个区域的映射,如果帧缓冲区包含的像素比要映射到的区域多得多,那么效率不是很低吗?首先使用不同的windows HWND来分割应用程序中的部分,然后再创建不同的表面,这不是很有意义吗?
如何避免渲染到不必要的区域?
发布于 2021-08-12 22:03:12
几乎每个应用程序的处理方式都是,窗口的客户区(即,不是工具栏之类的东西)是主框架窗口的子窗口。当调整框架的大小时,您可以调整客户端窗口的大小以匹配新的客户端区域(考虑到工具栏等的新大小)。
这个客户端窗口应该有一个为它创建的Vulkan表面。
https://stackoverflow.com/questions/68761401
复制相似问题