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 国内中文镜像站免费使用啦
© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容