GPU如何渲染到正确的窗口?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GPU如何渲染到正确的窗口?相关的知识,希望对你有一定的参考价值。

我不理解opengl窗口的渲染。所以我想让我的显卡在屏幕上绘制一个场景。我的opengl窗口位于位置,例如50,50,100,100(x,y,宽度,高度)。 GPU知道在这个位置绘制场景。这称为视口,GPU以矩阵的形式获取此视口信息。

将我的opengl窗口从位置50,50,100,100移动到位置150,150,100,100时会发生什么情况。如何在渲染场景时获取此新视口信息(可能它现在处于片段着色器阶段)。它将在50,50,100,100处绘制错误的像素。请解释。

答案

我的opengl窗口位于位置,例如50,50,100,100(x,y,宽度,高度)。 GPU知道在这个位置绘制场景。

可以?您正在假设渲染系统,操作系统和GPU的内部特性。

在许多基于合成的渲染系统中,执行OpenGL命令时生成的渲染操作会渲染到一块内存,一些图像数据。当您执行swap-buffers调用时,该图像将被复制到您看到的实际屏幕区域。因此,当您移动窗口时,所发生的一切就是您渲染的图像被复制到另一个位置。虽然副本确实是由GPU执行的,但是您直接引起的渲染操作并不知道它们的结果最终会在哪个位置结束。

即使在渲染系统中你直接渲染显示内存,也就是说你可以设置为“视口”的东西不受内部OpenGL驱动程序的操纵?当您将窗口从一个位置移动到另一个位置时,驱动程序可以简单地偏移您的视口设置,并且您将更加明智。

基本上,有很多方法可以实现,选择哪种方式完全取决于OpenGL实现(以及助理OS /渲染系统)如何选择处理屏幕位置。

另一答案

我不知道图形堆栈的整个内部结构,但是当你请求一个视口时,你会从像x服务器或wayland这样的display server获得一个像素缓冲区。 GPU进行计算以用颜色填充帧缓冲区。然后显示服务器将帧缓冲区抛出到窗口。这太简单了,我有一些细节错了。在linux上,有一个复杂的事件管道从现有的用户空间发生,进入内核最终在屏幕上看到你的帧缓冲区。

以上是关于GPU如何渲染到正确的窗口?的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot:thymeleaf 没有正确渲染片段

将 Uniform 数据正确发送到 GPU

如何正确地将多个片段添加到片段过渡?

深入浅出计算机组成原理:GPU(下)-为什么深度学习需要使用GPU?(第31讲)

GPU渲染流程

正在渲染opengl的随机屏幕片段-这表明啥错误?