我一直在使用SDL来渲染C。但是这些程序如何做到?很好,我可以使用SDL。但是我想知道SDL在做什么,所以我不喜欢一个无知的傻瓜。我是唯一一个因现代计算机上不透明糖霜而沮丧的唯一一个吗?
关于在其他操作系统上如何完成此操作的简短解释也很有趣,但我最关注Windows。
编辑:由于这个问题似乎不清楚,所以这正是我想要的:我想知道Windows上的像素级图形操作(Pixel在屏幕像素上绘制)如何工作。像SDL这样的库对操作系统有什么作用,以实现这一目标。我可以使用SDL通过像素来操纵屏幕像素,那么SDL中会发生什么魔术来让我这样做?
Windows具有许多图形API。有些是在其他层上建造的层(例如,GDI 在GDI顶部),而另一些则是完全独立的堆栈(例如Direct3D家族)。
在诸如GDI之类的API中,有一些功能,例如setpixel,可以使您在屏幕上(或在您可以访问的屏幕区域内)更改单个像素的值。但是使用setpixel设置大量像素通常很慢。
如果要构建一个逼真的渲染器,例如射线示踪剂,那么您可能会在内存中构建一个位图(像素像素),并使用像Bitblt这样的API,该API一次将整个位图发送到屏幕上。这要快得多。
,但它可能还不够快,可以呈现视频之类的东西。将所有数据从系统存储器转移到视频卡内存需要时间。对于视频,通常使用一个更接近低级图形驱动程序和硬件的图形堆栈。如果图形卡可以直接进行视频减压,那么将压缩视频流发送到卡将比将解剖学数据从系统内存发送到视频卡要高得多,这通常是限制因素。
。,但从概念上讲,这是同一回事:您正在操纵一个位图(或纹理,表面或栅格或...),但是该位图生存在图形内存中,并且您正在向GPU发出命令以设置像素像素一样,然后在屏幕的某些部分显示该位图(通常具有某种转换)。
现代图形处理器实际上运行了很少的程序 - 称为着色器 - (除其他外)可以进行计算以确定像素值。GPU被优化以执行这些类型的计算,并且可以并行进行许多计算。但最终,它归结为将像素值纳入视频内存中的某种位图。