use*_*455 -2 api directx graphics winapi gdi
我是编程新手.我知道C/C++和Win32的基础知识.我现在正在尝试做图形,但我想要最快的连接到屏幕.我意识到大多数人都会使用Opengl或DirectX.但是,我不想要开销.我想从头开始控制像素数据.我知道GDI位图,但我不确定这是否是对数据的最佳访问.我知道我必须通过窗口进行交谈,这就是麻烦.Opengl和DirectX是否可以编译到GDI级别,或者他们是否采用特殊方式,绕过或使用类似的代码?请不要问我为什么要这样做.也许解释如何做到这一点可能会有所帮助.就像windows结合所有窗口来创建最终图像一样.
对像素数据的最直接访问是通过着色器,OpenGL和Direct3D都支持着色器.它们是交叉编译的,直接在视频卡上运行.他们不使用OpenGL,他们没有OpenGL开销.OpenGL只是用来将它们放到显卡自己的处理器中.
您在CPU上执行的任何操作都必须首先通过总线(通常是PCI-express)复制到视频卡.GDI实际上是从图形内存中删除了许多级别.
OpenGL,Direct3D,Direct2D,GDI和GDI +都是抽象层.GPU供应商编写一个接受这些标准命令功能的驱动程序,以卡特定格式重新编码数据,然后将其发送到卡.通常,OpenGL和Direct3D是最优化的,并且还需要最少量的重新编码.
Windows如何结合各种屏幕窗口来创建全屏图像在很大程度上取决于您所谈论的Windows版本.DWM改变了一切.由于DWM是在Vista中引入的,程序会渲染到GPU内存的个人区域,然后窗口管理器使用视频卡的纹理查找单元将每个程序的各个区域有效地分层到屏幕主缓冲区上.当程序(通常是游戏)请求全屏独占访问时,将跳过此步骤,并且驱动程序会使该应用程序的渲染命令直接影响主屏幕缓冲区.
假设CPU正在生成需要显示的数据,最快速且最有效的方法可能是将数据块复制到顶点缓冲区对象中,并使用OpenGL命令将其光栅化为线或多边形或其他任何(或者Direct3D等价物).如果您以前认为GDI是低级别界面,那么您需要先阅读一些内容才能完成这项工作.但它比纯GDI快几个数量级.事实上,新架构的速度要快得多,因为GDI(和WPF)是建立在Direct2D和/或Direct3D之上的.
归档时间: |
|
查看次数: |
2593 次 |
最近记录: |