中文第一计算机图形学社区OpenGPU 版权所有2007-2018

 找回密码
 注册

扫一扫,访问微社区

搜索
查看: 1630|回复: 2

请教CPU,OpenGL,GPU之间的协作关系

[复制链接]
发表于 2017-9-22 14:29:35 | 显示全部楼层 |阅读模式
对应用程序端来说,主要在cpu阶段执行OpenGL函数,这些具体的OpenGL操作都发生了什么?
比如glDraw系列函数,是立即告知gpu去执行相关绘制操作,还是缓存在某个地方,等到glFlush的时候才去执行?
比如绑定纹理,glBindTexture和glActiveTeture又发生了什么?
FBO帧缓存在哪里?
顶点缓存VBO又在哪里?
glBlendFunc这样的设置gl状态又发生了什么?
希望有大神来解释一下,或者提供资料查阅
发表于 2017-9-22 15:20:20 | 显示全部楼层
不要想象为每一个GL API调用之后就立刻执行,最后其实就是一个命令给驱动暂存起来,如果是glFlush,或者是之后一股脑的都执行。glDraw这些API是不会立刻执行的。立刻模式的API是原始的glBegin/glVertex/glEnd那些,但是其实这些也不会立刻执行,而是驱动那边运行期构造,效率很低。

至于glActiveTexture/glBindTexture,这个其实是来自于GL自己的API设计,也就是告诉GL Context,我将要操作第N个纹理单元了。可以理解为C模式的面向对象,全部由Handle+Method来实现。

FBO其实只是一组状态,以前没有FBO的时候,绘制都假设在一组全局独立的缓冲,比如Color、Depth等。显然有了FBO,这个地方相当于可编程化,允许用户挂一组RT,这样绘制命令的结果都作用在用户的RT上。

VBO其实就是一组缓冲,不过这个缓冲由驱动管理,这个缓存执行的时候直接给硬件读写操作。因为毕竟内存访问这个地方,CPU内存,到GPU内存,还是得多绕一层的。

这些都是标准定义,具体的实现来自于各个厂家的实现,GL只是一组上层API,不管底层,但是思路大同小异。

具体的看GL Specification。

https://www.khronos.org/registry ... l/glspec45.core.pdf

如果不具备英文能力先学英语。
 楼主| 发表于 2017-9-22 15:43:47 | 显示全部楼层
Jedimaster 发表于 2017-9-22 15:20
不要想象为每一个GL API调用之后就立刻执行,最后其实就是一个命令给驱动暂存起来,如果是glFlush,或者是 ...


先表示感谢,我再去看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|小黑屋|Archiver|手机版|中文第一计算机图形学社区OpenGPU

GMT+8, 2018-2-25 05:43 , Processed in 0.038264 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表