- opengl/
- Opengl 如何使用C或C+与图形卡进行接口+;?
Opengl 如何使用C或C+与图形卡进行接口+;?
Opengl 如何使用C或C+与图形卡进行接口+;?,opengl,graphics,Opengl,Graphics,库如OpenGL访问图形卡并可以生成图形程序,这些库是如何使用C++实现的。那么这些库是如何用C编写的呢?同样的问题也适用于声音
C/C++语言的其他功能(如图形、声音、internet访问)是否用低级语言编写,然后使用库提供给C/C++
我会感谢任何能纠正我的概念的总结,或任何在网络或书籍上的建议阅读 OpenGL并不是一个真正的库。这是一个规范。系统上的opengl32.dll或libGL.dll只是非常薄的层,可以与GPU驱动程序通信
根据我所听到的,C和C++不提供语言中的图形特征,并且
库如OpenGL访问图形卡并可以生成图形程序,这些库是如何使用C++实现的。那么这些库是如何用C编写的呢?同样的问题也适用于声音
C/C++语言的其他功能(如图形、声音、internet访问)是否用低级语言编写,然后使用库提供给C/C++
我会感谢任何能纠正我的概念的总结,或任何在网络或书籍上的建议阅读 OpenGL并不是一个真正的库。这是一个规范。系统上的opengl32.dll或libGL.dll只是非常薄的层,可以与GPU驱动程序通信
根据我所听到的,C和C++不提供语言中的图形特征,并且需要图形库。那么这些库是如何用c编写的呢
操作系统提供与硬件对话的功能。驱动程序使用这些设施来驱动(因此得名)硬件。例如,写入序列a、B、C、D可能会使某些特定的GPU向帧缓冲区绘制一个三角形
我已经在这里解释了这些事情(我在这里逐字引用):
这个问题几乎是不可能回答的,因为OpenGL本身
只是一个前端API,只要实现遵循
规范和结果符合这一点,它可以做任何事情
你喜欢的方式
问题可能是:OpenGL驱动程序如何在
最低级别。现在,作为一个整体,一般来说,这是不可能回答的
驱动程序与某个硬件紧密相连,这可能再次发生
不管开发人员如何设计它
因此,问题应该是:“它的平均落后程度如何
OpenGL和图形系统的场景。让我们看看这个
自下而上:
在最底层有一些图形设备。现在,这些GPU提供了一组寄存器来控制它们的操作
(哪个寄存器完全取决于设备)有一些程序内存
对于着色器,输入数据(顶点、纹理等)的大容量内存和
到系统其余部分的I/O通道,通过该通道接收/发送数据
数据和命令流
图形驱动程序跟踪GPU状态以及使用GPU的所有资源应用程序。也是
负责转换或任何其他处理发送的数据
应用程序(将纹理转换为
GPU,在GPU的机器代码中编译着色器)。而且
为应用程序提供一些抽象的、依赖于驱动程序的接口
节目
然后是依赖于驱动程序的OpenGL客户端库/驱动程序。在Windows上,通过代理在Unix上通过opengl32.dll加载此文件
该系统位于两个位置:*X11 GLX模块和驱动程序
依赖GLX驱动程序*和/usr/lib/libGL.so可能包含一些驱动程序
直接渲染的相关内容
在MacOS X上,这恰好是“OpenGL框架”
正是这一部分将OpenGL调用转换为调用
到驱动程序部分中描述的驱动程序特定功能
在第(2)段中
最后,在Windows和Unix/usr/lib/libGL.so上实现了实际的OpenGL API库opengl32.dll;这主要是传递命令
要正确使用OpenGL实现
无法概括实际沟通的方式:
在Unix中,34连接可以通过套接字进行(是的,它是
可以,如果您愿意,也可以通过网络)或通过共享
记忆。在Windows中,接口库和驱动程序客户端是
两者都加载到进程地址空间中,所以没有那么多
通信,但简单的函数调用和变量/指针传递。
在MacOS X中,这类似于Windows,只是没有分隔
在OpenGL接口和驱动程序客户端之间(这就是为什么
MacOSX跟不上OpenGL的新版本,总是很慢
需要完整的操作系统升级才能提供新的
框架)
32之间的通信可通过ioctl、读/写或
通过将一些内存映射到进程地址空间并配置
当内存发生变化时,MMU将触发一些驱动程序代码
完成了。这在任何操作系统上都非常相似,因为
始终必须跨越内核/用户区的边界:最终你要
通过一些系统调用
系统和GPU之间的通信通过外围总线进行
以及它定义的访问方法,比如PCI、AGP、PCI-E等,它们都可以工作
通过端口I/O、内存映射I/O、DMA、IRQ
更新
答案是,如何从C程序(比如用C编写的OS内核和/或驱动程序)接口实际硬件:
C标准本身将地址视为纯粹抽象的东西。您可以将指针强制转换为uintptr\t,但只有在强制转换回指针时,您获得的数值才需要遵循指针算术。否则,该值可能与地址空间无关。实现对C的硬件访问的唯一安全方法是按照所用C实现和系统的ABI在汇编中编写最低级别的内容
所有合适的操作系统都是这样做的。在C语言中,从不将地址转换为指针!操作系统在汇编程序中实现了这一点,与系统的C编译器相匹配。在汇编中编写的代码作为可在C中调用的函数导出。内核将这些函数提供给GPU驱动程序。因此,链条是:
应用程序→ [OpenGL API层→ 供应商OpenGL i
- Graphics 如何产生Photoshop笔划效果?
graphics
- Graphics 黑莓中的双缓冲?
graphicsblackberry
- Graphics 如何在Flex MXML文件中绘制圆?
graphicsgeometry
- Graphics 三维网格连接
graphicsalgorithm3d
- Graphics 使用Mathematica中的操纵显示或隐藏组件
graphicswolfram-mathematica
- Graphics Mathematica中使用图形的条件着色
请考虑:
dalist = {{1, 1, 1}, {2, 2, 2}, {3, 3, 3}, {4, 4, 4}, {5, 5, 5},
{1, 2, 1}, {2, 3, 1}, {3, 4, 1}, {4, 5, 1}, {5, 6, 1}}
graphicswolfram-mathematica
- x86汇编程序在VirtualBox(XGA Graphics-VBE)下运行不佳
graphicsassemblyx86
- Graphics 如何提高边缘检测算法的精度?
graphicsopencv
- Graphics 深度缓冲区和Z轴
graphicsopengl-es3d
- Graphics 依赖树视图
graphicsdependencies
- Graphics LWJGL开始在显示器上运行低FPS
graphics
- Graphics opengl和xwindows系统的区别是什么?
graphics
- Graphics 关于仿射变换(翻译)
graphicsgeometry
- Graphics 如何计算GIMP中的平均颜色?
graphics
- Graphics 使用Open GL ES 2.0创建屏幕外表面
graphicsopengl-es
- Graphics directx局部空间坐标浮动精度
graphicsdirectx
- Graphics 如何访问金属中传入的碎片着色器数据?
graphics
- Graphics 如何在Vulkan中获得下一个子过程的渲染结果?
graphics3d
- Graphics OpenSceneGraph:Don';t在绘制半透明对象时更新z缓冲区
问题:
graphics
- Graphics 在love2d程序中绘制直线
graphicslua