Esempio n. 1
0
void FoveatedRenderingApp::DefaultRender(izanagi::graph::CGraphicsDevice* device)
{
    izanagi::sample::CSampleCamera& camera = GetCamera();

    device->SetTexture(0, m_Img->GetTexture(m_Idx));
    device->SetTexture(1, m_mask);

    auto shd = m_shdDrawCube.m_shd;

    device->SetShaderProgram(shd);

    auto hL2W = shd->GetHandleByName("g_mL2W");
    shd->SetMatrix(device, hL2W, m_L2W);

    auto mtxW2C = camera.GetParam().mtxW2C;

    auto hW2C = shd->GetHandleByName("g_mW2C");
    shd->SetMatrix(device, hW2C, mtxW2C);

    auto hEye = shd->GetHandleByName("g_vEye");
    shd->SetVector(device, hEye, camera.GetParam().pos);

    auto hInvScr = shd->GetHandleByName("invScreen");
    izanagi::math::CVector4 invScr(1.0f / SCREEN_WIDTH, 1.0f / SCREEN_HEIGHT, 0, 0);
    shd->SetVector(device, hInvScr, invScr);

    auto hCanFoveated = shd->GetHandleByName("canFoveated");
    shd->SetBool(device, hCanFoveated, false);

    m_Cube->Render(device);
}
Esempio n. 2
0
void UpscaleGeometryRenderingApp::renderFinalPass(izanagi::graph::CGraphicsDevice* device)
{
    device->SaveRenderState();

    device->SetRenderState(
        izanagi::graph::E_GRAPH_RS_ZENABLE,
        IZ_FALSE);
    device->SetRenderState(
        izanagi::graph::E_GRAPH_RS_ZWRITEENABLE,
        IZ_FALSE);

    auto width = device->GetBackBufferWidth();
    auto height = device->GetBackBufferHeight();

    auto* shd = m_shdFinalPass.m_program;

    device->SetShaderProgram(shd);

    auto hInvScr = shd->GetHandleByName("invScreen");
    izanagi::math::CVector4 invScr(1.0f / width, 1.0f / height, 0.0f, 1.0f);
    shd->SetVector(device, hInvScr, invScr);

    m_gbuffer.bindForFinalPass(device);

    m_screenFillPlane->Draw(device);

    device->LoadRenderState();
}
Esempio n. 3
0
void FoveatedRenderingApp::FoveatedRender(izanagi::graph::CGraphicsDevice* device)
{
    izanagi::sample::CSampleCamera& camera = GetCamera();

    device->BeginScene(
        &m_mask, 1,
        izanagi::graph::E_GRAPH_CLEAR_FLAG_ALL);
    {
        // For rendering full screen quad without vertex buffer.
        device->SetRenderState(
            izanagi::graph::E_GRAPH_RS_CULLMODE,
            izanagi::graph::E_GRAPH_CULL_NONE);

        auto shd = m_shdMakeMask.m_shd;

        device->SetShaderProgram(shd);

        auto hInvScr = shd->GetHandleByName("invScreen");
        izanagi::math::CVector4 invScr(1.0f / SCREEN_WIDTH, 1.0f / SCREEN_HEIGHT, 0, 0);
        shd->SetVector(device, hInvScr, invScr);

        auto hCenter = shd->GetHandleByName("center");
        izanagi::math::CVector4 center(SCREEN_WIDTH * 0.5f, SCREEN_HEIGHT * 0.5f, 0, 0);
        shd->SetVector(device, hCenter, center);

        CALL_GL_API(glDrawArrays(GL_TRIANGLE_STRIP, 0, 4));
    }
    device->EndScene();

    device->BeginScene(
        &m_rt, 1,
        m_depth,
        izanagi::graph::E_GRAPH_CLEAR_FLAG_ALL);
    {
        device->SetTexture(0, m_Img->GetTexture(m_Idx));
        device->SetTexture(1, m_mask);

        auto shd = m_shdDrawCube.m_shd;

        device->SetShaderProgram(shd);

        auto hL2W = shd->GetHandleByName("g_mL2W");
        shd->SetMatrix(device, hL2W, m_L2W);

        auto mtxW2C = camera.GetParam().mtxW2C;

        auto hW2C = shd->GetHandleByName("g_mW2C");
        shd->SetMatrix(device, hW2C, mtxW2C);

        auto hEye = shd->GetHandleByName("g_vEye");
        shd->SetVector(device, hEye, camera.GetParam().pos);

        auto hInvScr = shd->GetHandleByName("invScreen");
        izanagi::math::CVector4 invScr(1.0f / SCREEN_WIDTH, 1.0f / SCREEN_HEIGHT, 0, 0);
        shd->SetVector(device, hInvScr, invScr);

        auto hCanFoveated = shd->GetHandleByName("canFoveated");
        shd->SetBool(device, hCanFoveated, true);

        m_Cube->Render(device);
    }
    device->EndScene();

    device->SetRenderState(
        izanagi::graph::E_GRAPH_RS_ZWRITEENABLE,
        IZ_FALSE);
    device->SetRenderState(
        izanagi::graph::E_GRAPH_RS_ZENABLE,
        IZ_FALSE);

    {
        auto shd = m_shdFilter.m_shd;

        device->SetShaderProgram(shd);

        m_rt->SetFilter(
            izanagi::graph::E_GRAPH_TEX_FILTER_POINT,
            izanagi::graph::E_GRAPH_TEX_FILTER_POINT,
            izanagi::graph::E_GRAPH_TEX_FILTER_NONE);
        m_rt->SetAddress(
            izanagi::graph::E_GRAPH_TEX_ADDRESS_CLAMP,
            izanagi::graph::E_GRAPH_TEX_ADDRESS_CLAMP);

        device->SetTexture(0, m_rt);
        auto hTex0 = shd->GetHandleByName("s0");
        CALL_GL_API(glUniform1i(hTex0, 0));

        device->SetTexture(1, m_mask);
        auto hTex1 = shd->GetHandleByName("s1");
        CALL_GL_API(glUniform1i(hTex1, 1));

        auto hInvScr = shd->GetHandleByName("invScreen");
        izanagi::math::CVector4 invScr(1.0f / SCREEN_WIDTH, 1.0f / SCREEN_HEIGHT, 0, 0);
        shd->SetVector(device, hInvScr, invScr);

        CALL_GL_API(glDrawArrays(GL_TRIANGLE_STRIP, 0, 4));
    }
}