OpenGL必须在Windows上使用Winapi绘制图形吗?

时间:2018-11-12 00:24:53

标签: opengl graphics

我知道在Linux中,opengl可以直接处理视频内存。 Windows是否正确? 我不是在谈论opengl和窗口管理器的交互。我说的是绘制图元,图像等。

也就是说,问题是opengl是使用winapi函数绘制形状还是直接实现thats函数,直接与内存一起工作。

如果它可以绕过winapi,那么我如何编写类似的本机代码在Windows窗口中绘制像素? (没有winapi或外壳)

1 个答案:

答案 0 :(得分:2)

我不确定你说的是什么意思

  

我知道在Linux中,opengl可以直接处理视频内存。

OpenGL在Linux上的工作方式与Windows上的工作方式没有根本区别。在Windows和Linux上,OpenGL的实现通常都是由可安装客户端驱动程序(ICD)提供的。 ICD通过display driver interface而非常规Windows API与操作系统进行交互。虽然有用于OpenGL的软件实现/仿真层(默认情况下Windows包括一个),但ICD通常由图形卡的供应商提供。使用OpenGL时,操作系统将仅加载ICD,并且您的OpenGL API调用基本上将直接进入ICD,然后由ICD执行实际的绘制。通常,这将涉及通过专有协议与图形卡对话。

如果您想在软件中做一些简单的3D图形以了解其工作原理,我建议您只使用Windows API或您愿意在屏幕上绘制像素的任何其他图形,然后开始进行一些简单的三角形栅格化。当然,可以编写自己的OpenGL软件实现,但是就必须实现的功能量而言,这很可能会造成严重的后果。尽管当目标是要了解3D图形的基本原理时,这样的软件渲染项目可能是不错的做法,但不要期望结果在性能方面具有竞争力。无论您做什么,CPU软件实现都无法达到人们通常期望在现代设备上实现真实应用程序的性能水平。要到达那里,您必须利用GPU可以提供的硬件加速。但是,编写自己的使用GPU进行硬件加速的OpenGL实现是一项艰巨的任务。如果您真的想了解更多信息,可以查看适用于所有主要供应商(AMDIntelNVIDIA)的GPU的开源驱动程序。