双源融混

所谓的双源融混就是片元的两个输出元,作用于同一个帧缓存。
GPU:

layout(location = 0, index = 0) out vec4 first_output;
layout(location = 0, index = 1) out vec4 second_color;

CPU:

 CHECK_GL_ERROR();
    glClear(GL_COLOR_BUFFER_BIT);
    CHECK_GL_ERROR();

    nv::matrix4f projection_matrix;
    nv::perspective(projection_matrix, 3.14f * 0.25f, m_width/(float)m_height, 0.1f, 30.0f);
    nv::matrix4f camera_matrix = projection_matrix * m_transformer->getModelViewMat();
    CHECK_GL_ERROR();
    //-------------------------
    glDisable(GL_BLEND);
   //--------------------------

    mProgram->enable();
    mProgram->setUniformMatrix4fv("uViewProjMatrix", camera_matrix._array, 1, GL_FALSE);

    mProgram->setUniform4f("vColor", 0.7, 0.3, 0.4, 0.5);

    CHECK_GL_ERROR();
    NvDrawQuadGL(mProgram->getAttribLocation("aPosition"));
    CHECK_GL_ERROR();
    //----------------------
    glEnable(GL_BLEND);
    glBlendFunc(GL_ONE, GL_SRC1_COLOR);
    //----------------------
    nv::matrix4f offset_matrix;
    offset_matrix.set_translate(nv::vec3f(1.0f,0.0f,0.0f));
    camera_matrix = projection_matrix * offset_matrix*m_transformer->getModelViewMat();
    mProgram->setUniform4f("vColor", 0.3, 0.7, 0.4, 0.5);
    mProgram->setUniformMatrix4fv("uViewProjMatrix", camera_matrix._array, 1, GL_FALSE);
    CHECK_GL_ERROR();

    NvDrawQuadGL(mProgram->getAttribLocation("aPosition"));
    CHECK_GL_ERROR();

    mProgram->disable();

设置的效果:

RGBdst=RGBdstRGBsrc1+RGBsrc0

这里写图片描述

程序验证:
这里写图片描述

扩展技巧:

过uniform 变量的形式由应用程序传递给GPU的参数。只要设置一次,那么这个变量的值的状态就由这个程序对象进行维护。直到下一次更改为止。

比如设置一个颜色变量,只需要设置一次即可,不必要每次不更改都设置其值。

源码链接:
https://t.xiaomiquan.com/M7YFEqZ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值