我想知道OpenGL的主界面。简单地说,OpenGL DLL如何调用图形函数? C ++中是否有一些隐藏的隐藏渲染代码?如果它可以从DLL调用GPU,那么它应该可以在任何C ++程序中使用。如果是这样,我可以为我的程序制作一些自己的API吗?或者是什么?我希望有人在这里知道。有人可以对这个问题有所了解吗?提前谢谢!
答案 0 :(得分:2)
OpenGL DLL与任何其他应用程序模块一样与Ring 0进行通信,使用DeviceIoControl
之类的调用。传递给这些调用的数据的确切详细信息未公开记录,并且不太可能发生变化。 GPU制造商只是不愿意无所谓地分享这些信息。虽然您可能可以创建自己的API,但与驱动程序通信的详细信息并不是随时可用的。
答案 1 :(得分:2)
首先:现代OpenGL不是一个库,在Windows上,DLL不包含与硬件对话的OpenGL实现。 opengl32.dll仅作为占位符,驱动程序将其低级函数(称为ICD)挂钩到其中。
答案 2 :(得分:1)
一般而言,答案是“是”,但要使其可行,必须有点“硬件依赖”
你所谓的“图形功能”(你认为是OGL所基于的)在最底层取决于硬件结构图像帧与处理器通信的方式。
有些硬件只是一个平面帧缓冲区和硬件,能够自行管理矢量场景的光栅化过程。
操作系统API是平面2d矢量和成像支持(如GDI)甚至是三维建模系统(如direc3d)。
OGL只是一个API:它定义了一组一致的函数原型来完成任务(描述一个3D场景)。 renderimg过程在DLLS中实现,根据它们必须使用的系统的性质而不同。
其中一些只是在自己的缓冲区上运行,这些缓冲区将位图的原始数据视为通过OS本机api在屏幕上显示(参见BitBlit),其他一些将OGL调用转换为特定的调用操作代码到硬件设备的特定io端口。
由于OGL的普及,也有制造商正在标准化库和设备之间的“语言”。所以事情并不像看起来那么“线性”......
答案 3 :(得分:0)
直接写入硬件寄存器是在引入OpenGL和其他标准化图形API之前完成图形编程的方式。
一般来说,写作是一场噩梦,几乎无法调试。出于某种原因发明了更高级别的API。
这些天最接近硬件的是控制台,在那里你的访问权限仍然比在PC上低得多,但即使是访问也被抽象出来,比过去更多。
如果你真的想这样做,你可以,但如果你还没有编写自己的操作系统,你基本上会编写自己的驱动程序,而且你不会在现代GPU上找到很多公开的文档。