Ejemplo n.º 1
0
void LLDrawPoolTerrain::renderDeferred(S32 pass)
{
    LLFastTimer t(FTM_RENDER_TERRAIN);
    if (mDrawFace.empty())
    {
        return;
    }
    renderFullShader();
}
Ejemplo n.º 2
0
void LLDrawPoolTerrain::render(S32 pass)
{
    LLFastTimer t(FTM_RENDER_TERRAIN);

    if (mDrawFace.empty())
    {
        return;
    }

    // Hack! Get the region that this draw pool is rendering from!
    LLViewerRegion *regionp = mDrawFace[0]->getDrawable()->getVObj()->getRegion();
    LLVLComposition *compp = regionp->getComposition();
    for (S32 i = 0; i < 4; i++)
    {
        compp->mDetailTextures[i]->setBoostLevel(LLViewerTexture::BOOST_TERRAIN);
        compp->mDetailTextures[i]->addTextureStats(1024.f*1024.f); // assume large pixel area
    }

    if (!gGLManager.mHasMultitexture)
    {
        // No multitexture, render simple land.
        renderSimple(); // Render without multitexture
        return;
    }
    // Render simplified land if video card can't do sufficient multitexturing
    if (!gGLManager.mHasARBEnvCombine || (gGLManager.mNumTextureUnits < 2))
    {
        renderSimple(); // Render without multitexture
        return;
    }

    LLGLSPipeline gls;
    LLOverrideFaceColor override(this, 1.f, 1.f, 1.f, 1.f);

    if (mVertexShaderLevel > 1 && sShader->mShaderLevel > 0)
    {
        gPipeline.enableLightsDynamic();
        renderFullShader();
    }
    else
    {
        gPipeline.enableLightsStatic();

        if (sDetailMode == 0) {
            renderSimple();
        } else if (gGLManager.mNumTextureUnits < 4) {
            renderFull2TU();
        } else {
            renderFull4TU();
        }
    }

    // Special-case for land ownership feedback
    if (gSavedSettings.getBOOL("ShowParcelOwners"))
    {
        if (mVertexShaderLevel > 1)
        {   //use fullbright shader for highlighting
            LLGLSLShader* old_shader = sShader;
            sShader->unbind();
            sShader = &gObjectFullbrightProgram;
            sShader->bind();
            renderOwnership();
            sShader = old_shader;
            sShader->bind();
        }
        else
        {
            gPipeline.disableLights();
            renderOwnership();
        }
    }
}
Ejemplo n.º 3
0
void LLDrawPoolTerrain::render(S32 pass)
{
    LLFastTimer t(FTM_RENDER_TERRAIN);

    if (mDrawFace.empty())
    {
        return;
    }

    // Hack! Get the region that this draw pool is rendering from!
    LLViewerRegion *regionp = mDrawFace[0]->getDrawable()->getVObj()->getRegion();
    LLVLComposition *compp = regionp->getComposition();
    for (S32 i = 0; i < 4; i++)
    {
        compp->mDetailTextures[i]->setBoostLevel(LLGLTexture::BOOST_TERRAIN);
        compp->mDetailTextures[i]->addTextureStats(1024.f*1024.f); // assume large pixel area
    }

    LLOverrideFaceColor override(this, 1.f, 1.f, 1.f, 1.f);

    if (!gGLManager.mHasMultitexture)
    {
        // No multitexture, render simple land.
        renderSimple(); // Render without multitexture
        return;
    }
    // Render simplified land if video card can't do sufficient multitexturing
    if (!gGLManager.mHasARBEnvCombine || (gGLManager.mNumTextureUnits < 2))
    {
        renderSimple(); // Render without multitexture
        return;
    }

    LLGLSPipeline gls;

    if (mVertexShaderLevel > 1 && sShader->mShaderLevel > 0)
    {
        gPipeline.enableLightsDynamic();

        renderFullShader();
    }
    else
    {
        gPipeline.enableLightsStatic();

        if (sDetailMode == 0)
        {
            renderSimple();
        }
        else if (gGLManager.mNumTextureUnits < 4)
        {
            renderFull2TU();
            gGL.setSceneBlendType(LLRender::BT_ALPHA);
        }
        else
        {
            renderFull4TU();
            gGL.setSceneBlendType(LLRender::BT_ALPHA);
        }
    }

    // Special-case for land ownership feedback
    static const LLCachedControl<bool> show_parcel_owners("ShowParcelOwners",false);
    if (show_parcel_owners)
    {
        if (mVertexShaderLevel > 1)
        {   //use fullbright shader for highlighting
            LLGLSLShader* old_shader = sShader;
            sShader->unbind();
            sShader = &gHighlightProgram;
            sShader->bind();
            gGL.diffuseColor4f(1,1,1,1);
            LLGLEnable polyOffset(GL_POLYGON_OFFSET_FILL);
            glPolygonOffset(-1.0f, -1.0f);
            renderOwnership();
            sShader = old_shader;
            sShader->bind();
        }
        else
        {
            gPipeline.disableLights();
            renderOwnership();
        }
    }
}