Beispiel #1
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();
        }
    }
}
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();
        }
    }
}
Beispiel #3
0
void LLDrawPoolTerrain::render(S32 pass)
{
	LLFastTimer t(LLFastTimer::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(LLViewerImage::BOOST_TERRAIN);
		compp->mDetailTextures[i]->addTextureStats(1024.f*1024.f); // assume large pixel area
	}

	if (!gGLManager.mHasMultitexture)
	{
		// No mulititexture, 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 > 0)
	{
		gPipeline.enableLightsDynamic(1.f);
		renderFull4TUShader();
	}
	else
	{
		gPipeline.enableLightsStatic(1.f);
		switch (sDetailMode)
		{
		  case 0:
			renderSimple();
			break;
		  default:
			if (gGLManager.mNumTextureUnits < 4)
			{
				renderFull2TU();
			}
			else
			{
				renderFull4TU();
			}
			break;
		}
	}

	// Special-case for land ownership feedback
	if (gSavedSettings.getBOOL("ShowParcelOwners"))
	{
		gPipeline.disableLights();
		if ((mVertexShaderLevel > 0))
		{
			gHighlightProgram.bind();
			gHighlightProgram.vertexAttrib4f(LLShaderMgr::MATERIAL_COLOR,1,1,1,1);
			renderOwnership();
			gTerrainProgram.bind();
		}
		else
		{
			renderOwnership();
		}
	}
}