OpenGL ES glFlush 函数

ChatGPT 3.5 国内中文镜像站免费使用啦

零基础 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. 1.该函数会强制执行所有缓存的 OpenGL 命令,并将它们提交到 GPU 进行处理,同时清空缓存。
  2. 2.在大多数情况下,应该避免频繁地调用此函数。因为这样做可能会导致性能问题。
  3. 3.glFlush 是异步函数,它只是将缓冲区中的命令提交给OpenGL ES驱动程序,并立即返回。而实际上这些命令可能还没有被执行,因此在调用 glFlush 后不能保证绘制结果已经显示到屏幕上。
  4. 4.在使用双缓冲技术时,需要先调用 glFlush 函数将命令提交到 GPU,再调用 eglSwapBuffers 函数交换渲染缓冲区,才能显示渲染结果。
  5. 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 图像白平衡色温:源码下载

IOS – OpenGL ES 调节图像白平衡/色温 GPUImageWhiteBalanceFilter

2.Windows OpenGL ES 版本

Windows OpenGL ES 图像白平衡色温:源码下载

OpenGL 图像白平衡色温


3.Windows OpenGL 版本

Windows OpenGL 图像白平衡色温:源码下载

OpenGL 图像白平衡色温

ChatGPT 3.5 国内中文镜像站免费使用啦
文章版权声明 1、本网站名称:猿说编程
2、本站永久网址:https://www.codersrc.com
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容