部分重绘到FBO的OpenGL
创始人
2024-12-24 10:30:09
0

以下是一个使用OpenGL将部分重绘到FBO的代码示例:

#include 
#include 
#include 

const GLuint WIDTH = 800, HEIGHT = 600;

void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
    glViewport(0, 0, width, height);
}

void processInput(GLFWwindow *window)
{
    if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
        glfwSetWindowShouldClose(window, true);
}

int main()
{
    // 初始化 GLFW
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    // 创建窗口对象
    GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "Partial Redraw to FBO", nullptr, nullptr);
    if (window == nullptr)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

    // 初始化 GLEW
    if (glewInit() != GLEW_OK)
    {
        std::cout << "Failed to initialize GLEW" << std::endl;
        return -1;
    }

    // 设置顶点数据和缓冲区
    float vertices[] = {
        -0.5f, -0.5f, 0.0f,
         0.5f, -0.5f, 0.0f,
         0.0f,  0.5f, 0.0f
    };

    GLuint VAO, VBO;
    glGenVertexArrays(1, &VAO);
    glGenBuffers(1, &VBO);

    glBindVertexArray(VAO);

    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
    glEnableVertexAttribArray(0);

    glBindBuffer(GL_ARRAY_BUFFER, 0);
    glBindVertexArray(0);

    // 创建帧缓冲对象(FBO)
    GLuint fbo;
    glGenFramebuffers(1, &fbo);
    glBindFramebuffer(GL_FRAMEBUFFER, fbo);

    // 创建颜色附件纹理
    GLuint colorAttachment;
    glGenTextures(1, &colorAttachment);
    glBindTexture(GL_TEXTURE_2D, colorAttachment);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, WIDTH, HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, nullptr);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, colorAttachment, 0);

    // 创建深度附件缓冲区
    GLuint depthAttachment;
    glGenRenderbuffers(1, &depthAttachment);
    glBindRenderbuffer(GL_RENDERBUFFER, depthAttachment);
    glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, WIDTH, HEIGHT);
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthAttachment);

    if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
    {
        std::cout << "Framebuffer is not complete!" << std::endl;
        return -1;
    }

    glBindFramebuffer(GL_FRAMEBUFFER, 0);

    // 主循环
    while (!glfwWindowShouldClose(window))
    {
        processInput(window);

        // 渲染到FBO
        glBindFramebuffer(GL_FRAMEBUFFER, fbo);
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glBindVertexArray(VAO);
        glDrawArrays(GL_TRIANGLES, 0, 3);

        // 将FBO的颜色附件纹理绘制到屏幕上
        glBindFramebuffer(GL_FRAMEBUFFER, 0);
        glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);
        glUseProgram(shaderProgram);
        glBindVertexArray(VAO);
        glDrawArrays(GL_TRIANGLES, 0, 3);

        // 交换缓冲并检

相关内容

热门资讯

来一盘!哈糖大菠萝可以弄的,广... 来一盘!哈糖大菠萝可以弄的,广东雀神辅助插件如何下载,胡乐白银麻将系统规律(有挂脚本);一、胡乐白银...
每日必备!菠萝德州辅助神器,广... 每日必备!菠萝德州辅助神器,广东雀神智能辅助插件,先锋大厅有挂吗(有挂解说)1、下载好菠萝德州辅助神...
热点推荐!wpk这个软件真实,... 热点推荐!wpk这个软件真实,雀神麻将辅牌器购买,微信小程序财神十三张能开挂吗(有挂方法)1.微信小...
推荐一款!we poke有挂,... 推荐一款!we poke有挂,雀神广东手机麻将玩法怎么设置,掌中宝辅助(有挂揭秘)1、推荐一款!we...
今日百科!智星德州安卓版下载方... 今日百科!智星德州安卓版下载方法,七彩云南全民雀神外挂,福麻圈app外 挂(有挂黑科技)该软件可以轻...
最新技巧!wepoke辅助,雀... 最新技巧!wepoke辅助,雀神小程序辅助在哪下载,中至吉安麻将有挂吗(有挂细节);小薇(透视辅助)...
重大通报!德州wepower透... 重大通报!德州wepower透视辅助,微信雀神麻雀辅助,边锋斗地主有挂怎么看出来(有挂教程)1、玩家...
科技通报!云扑克内置辅助器,微... 科技通报!云扑克内置辅助器,微信小程序雀神麻雀有挂吗怎么弄的,老胡麻将有挂吗(有挂规律);1、打开软...
玩家科普!wpk德州ai,广东... 玩家科普!wpk德州ai,广东雀神麻将插件ios,天天休闲有辅助吗(有挂脚本)1、很好的工具软件,可...
查到实测!wpk发牌算法,雀神... 查到实测!wpk发牌算法,雀神有辅助挂是真的吗,微乐红十有挂吗(有挂工具)1)微乐红十有挂吗辅助挂:...