glFlush和glFinish区别
来源:互联网 发布:php ecshop二次开发 编辑:程序博客网 时间:2024/05/17 05:50
OpenGL里会要用到的两个重要函数。glFlush和glFinish。
glFlush:将GL命令队列中的命令发送给显卡并清空命令队列,发送完立即返回;
glFinish:将GL命令队列中的命令发送给显卡并清空命令队列,显卡完成这些命令(也就是画完了)后返回。
因此,在绘图命令比较冗长的情况下,可以分段调用glFlush以清空命令队列并让显卡开始先执行这些命令,最后调用glFinish来同步。举个例子:我的渲染器一共有9种shader,渲染时从shader0一直渲染到shader8,以前是在所有shader渲染完成后才调用glFinish(注意:这里如果把glFinish换成glFlush,那么调用wglSwapBuffer的时候在不同的平台上会产生不同的结果,具体结果我也不清楚,个人感觉好像没什么问题,但是游戏的时钟系统会被扰乱——最明显的就是帧速算错),那么CPU就要等GPU绘图,浪费了大把大把的时间;现在改成每个shader完成后调用一次glFlush,强制GPU开始执行命令队列中的GL命令,最后调用glFinish等待GPU完成当前帧渲染,然后调用wglSwapBuffer调换前后缓存。
这里就会发现这样一件事情:无论如何,都要等glFinish返回了,如果GPU绘制需要比较多的时间,那么CPU在这里等待的时间就比较可观了,如何提高CPU效率呢?个人认为有两个办法:
1、使用多线程。将更新和渲染作为线程A,辅助性计算如AI策略、**图生成作为线程B。那么当线程A因为glFinish阻塞时,线程B便可以利用CPU进行计算。
2、使用CPU时间预算方法。即先给出一帧所需要的时间预算,在调用glFinish之前判断是否还有多的时间预算,若有多,则先作辅助计算,完成或超过预算时间后才调用glFinish(若此时GPU已经完成命令,就不需要等待了)
- glFlush和glFinish区别
- glFlush和glFinish区别
- glFlush和glFinish区别
- glFlush()和glFinish()glutSwapBuffers()区别
- glFinish和glFlush的区别帧率
- glFlush()与glFinish()区别
- 【OpenGL】gLFlush()和gLFinish()
- glFlush() 和 glFinish()
- glFinish()和glFlush()函数详解
- glFlush,glFinish和SwapBuffers用法
- glFinish()和glFlush()函数详解
- glFinish()和glFlush()函数详解
- glFlush,glFinish和SwapBuffers用法
- glFlush,glFinish和SwapBuffers用法
- glFinish()和glFlush()函数详解
- OpenGL函数glfinish()与glflush()的区别
- glFlush和glFinish以及SwapBuffer的用法
- glFlush和glFinish以及SwapBuffer的用法
- 【长文干货】浅析分布式系统
- ASP.NET Core 之 Identity 入门(一)
- .NET Core开发:项目实践
- RabbitMQ消息队列应用
- 体验Rabbitmq强大的【优先级队列】之轻松面对现实业务场景
- glFlush和glFinish区别
- 用Middleware给ASP.NET Core Web API添加自己的授权验证
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
- [公测]微信小程序设计指南文档
- 阅读《A Survey of Monocular Simultaneous Localization and Mapping》
- .NET Core 使用 grpc 实现微服务
- 使用 dotnet watch 开发 ASP.NET Core 应用程序
- Debugging into .NET Core源代码的两种方式
- Google发布用于Google Cloud的.Net API