零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础
零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效
零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 转场
零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 函数
零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES GPUImage 使用
零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES GLSL 编程
一.glFlush 函数简介
glFlush 函数是 OpenGL ES 中的一个函数,用于将缓存中的绘制命令立即执行。它会强制 OpenGL ES 驱动程序将所有已经提交但尚未执行的绘图操作立即执行,以确保在屏幕上显示最新的渲染结果。 函数声明:
/*******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:OpenGL ES glFlush 函数
//@Time:2023/03/11 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/*******************************************************************************************/
/*
*描述:用于将缓存中的绘制命令立即执行
*
*返回值:无
*/
void glFlush(void);
二.glFlush 函数注意事项
- 1.该函数会强制执行所有缓存的 OpenGL 命令,并将它们提交到 GPU 进行处理,同时清空缓存。
- 2.在大多数情况下,应该避免频繁地调用此函数。因为这样做可能会导致性能问题。
- 3.glFlush 是异步函数,它只是将缓冲区中的命令提交给OpenGL ES驱动程序,并立即返回。而实际上这些命令可能还没有被执行,因此在调用 glFlush 后不能保证绘制结果已经显示到屏幕上。
- 4.在使用双缓冲技术时,需要先调用 glFlush 函数将命令提交到 GPU,再调用 eglSwapBuffers 函数交换渲染缓冲区,才能显示渲染结果。
- 5.在某些情况下,可以使用 glFinish 函数替代 glFlush 函数,glFinish 函数会等待所有 OpenGL 命令执行完毕后才返回。
三.glFlush 函数完整案例代码
下面是一个完整的使用 glFlush 函数的案例代码:
/*******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:OpenGL ES glFlush 函数
//@Time:2023/03/11 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/*******************************************************************************************/
#include <GLES3/gl3.h>
#include <EGL/egl.h>
#include <EGL/eglext.h>
EGLDisplay display;
EGLSurface surface;
EGLContext context;
void drawScene()
{
// 渲染OpenGL场景
}
int main(int argc, char** argv)
{
// 初始化EGL和OpenGL ES上下文
display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
eglInitialize(display, 0, 0);
EGLint configAttribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RED_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_BLUE_SIZE, 8,
EGL_ALPHA_SIZE, 8,
EGL_DEPTH_SIZE, 16,
EGL_NONE
};
EGLint numConfigs;
EGLConfig config;
eglChooseConfig(display, configAttribs, &config, 1, &numConfigs);
EGLint surfaceAttribs[] = {
EGL_RENDER_BUFFER, EGL_BACK_BUFFER,
EGL_NONE
};
surface = eglCreateWindowSurface(display, config, win, surfaceAttribs);
EGLint contextAttribs[] = {
EGL_CONTEXT_CLIENT_VERSION, 3,
EGL_NONE
};
context = eglCreateContext(display, config, EGL_NO_CONTEXT, contextAttribs);
if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE) {
printf("Failed to make current\n");
return -1;
}
// 渲染OpenGL场景
drawScene();
// 刷新OpenGL缓存,提交命令到GPU
glFlush();
// 交换渲染缓冲区,显示渲染结果
eglSwapBuffers(display, surface);
// 释放资源
eglDestroyContext(display, context);
eglDestroySurface(display, surface);
eglTerminate(display);
return 0;
}
四.glFlush 函数使用案例
1.IOS Object-C 版本
IOS Object-C 图像白平衡色温:源码下载
2.Windows OpenGL ES 版本
Windows OpenGL ES 图像白平衡色温:源码下载
3.Windows OpenGL 版本
Windows OpenGL 图像白平衡色温:源码下载
ChatGPT 3.5 国内中文镜像站免费使用啦
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容