GPU与软件渲染

时间:2011-01-06 00:32:14

标签: rendering gpu

据我所知,GPU渲染图像并确定要在监视器上显示的像素值是作业。如果我有一台连接到GPU的显示器,我想试用一个软件渲染器,

如何在GPU和软件渲染器之间划分工作?我问这个是因为我的显示器仍然连接到GPU,因此GPU必须传输由软件渲染器计算的像素值。但这就是GPU的全部功能吗?是否有一种特定的方式告诉GPU“只将这些值传递给监视器”。

我是新手,但我想知道细节。

4 个答案:

答案 0 :(得分:2)

我相信你有一些困惑的概念。 GPU(图形处理单元)就像CPU一样。如果您正在构建软件渲染器,您仍将与图形卡连接以设置分辨率并在屏幕上绘制/位blit像素。

这是硬件和软件渲染之间的高级别差异。由于存在顶点/像素着色器等,我过度简化了这一点.GPU也可以为程序执行数学运算,只需看看OpenCL。

<强>软件

我想画一个三角形。考虑到它的三个要点,我需要弄清楚边缘的斜率以及填充在屏幕上的x,y坐标。这将涉及一个循环遍历三角形的每个像素并将其绘制到屏幕上。

<强>硬件

我想画一个三角形。将3个坐标发送到GPU并告诉它绘制它。 GPU确定要填充的像素等等。

请理解这是过分简化过程。

答案 1 :(得分:2)

GPU或多或少是一种硬件设备,与CPU相比,它可以很好地完成某些类型的矢量数学运算。 GPU在功能方面比CPU更受限制,但它可以快速完成它的工作。

除非您使用DirectX或OpenGL,否则您最有可能正在进行软件渲染。如果您使用的是DirectX或OpenGL,那么您可能正在使用硬件渲染(尽管两者都有纯软件实现)。

硬件和软件渲染最终都输出到可寻址存储器,称为framebuffer(它将输出位图保存到屏幕上),唯一的区别是设置该存储器的硬件​​(例如CPU)或GPU)。

framebuffer 中寻址的物理内存通常是GPU的一部分(我不确定它是否真的必须在GPU上,欢迎输入)。

答案 2 :(得分:0)

这取决于你正在做什么级别的“软件渲染”。除非您正在编写自己的窗口系统,否则操作系统仍将使用GPU来帮助它浏览所有窗口。

如果你想编写软件渲染器,实现它的最简单方法是将渲染渲染到内存中的位图,然后调用操作系统说“哦,嘿,你能不能将这个图像绘制到屏幕给我?“。

答案 3 :(得分:0)

在较旧的Windows和DirectX版本中,您可以调用DirectDraw表面的Lock()方法来获取临时指向帧缓冲的指针,您可以像访问RAM中的任何其他位图一样访问几乎。同样可以在DOS中通过VESA驱动程序/其他API,通过Pocket PC / Windows mobile上的GX驱动程序完成。不确定其他操作系统。

帧缓冲区是存储器中的一个区域,由显示硬件直接传输到输出设备。通常它在视频卡上,但可以映射到应用程序的地址空间,并像普通RAM一样直接访问。但是,显然,读/写速度是不同的。读取速度通常非常低,写入速度非常好,但前提是您只需存储连续,对齐的32/64/128位字。通常最好将所有内容渲染到RAM中的屏幕外缓冲区中,然后将其内容存储到帧缓冲区中。有些显卡支持从RAM表面到帧缓冲区的硬件独立于CPU的blitting,但它可能有些错误和/或很慢。

相关问题