diff options
| -rw-r--r-- | indra/newview/pipeline.cpp | 53 | ||||
| -rw-r--r-- | indra/newview/pipeline.h | 22 | 
2 files changed, 68 insertions, 7 deletions
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 93ab8669b2..84fc6a12ec 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -5468,7 +5468,7 @@ void LLPipeline::addToQuickLookup( LLDrawPool* new_poolp )  		}  		else  		{ -			mAlphaPool = new_poolp; +			mAlphaPool = (LLDrawPoolAlpha*) new_poolp;  		}  		break; @@ -6976,6 +6976,17 @@ void LLPipeline::renderObjects(U32 type, U32 mask, BOOL texture, BOOL batch_text  	gGLLastMatrix = NULL;		  } +void LLPipeline::renderMaskedObjects(U32 type, U32 mask, BOOL texture, BOOL batch_texture) +{ +	assertInitialized(); +	gGL.loadMatrix(gGLModelView); +	gGLLastMatrix = NULL; +	mAlphaPool->pushMaskBatches(type, mask, texture, batch_texture); +	gGL.loadMatrix(gGLModelView); +	gGLLastMatrix = NULL;		 +} + +  void apply_cube_face_rotation(U32 face)  {  	switch (face) @@ -8984,7 +8995,15 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera  		LLRenderPass::PASS_FULLBRIGHT,   		LLRenderPass::PASS_SHINY,   		LLRenderPass::PASS_BUMP,  -		LLRenderPass::PASS_FULLBRIGHT_SHINY  +		LLRenderPass::PASS_FULLBRIGHT_SHINY , +		LLRenderPass::PASS_MATERIAL, +		LLRenderPass::PASS_MATERIAL_ALPHA_EMISSIVE, +		LLRenderPass::PASS_SPECMAP, +		LLRenderPass::PASS_SPECMAP_EMISSIVE, +		LLRenderPass::PASS_NORMMAP, +		LLRenderPass::PASS_NORMMAP_EMISSIVE, +		LLRenderPass::PASS_NORMSPEC, +		LLRenderPass::PASS_NORMSPEC_EMISSIVE,  	};  	LLGLEnable cull(GL_CULL_FACE); @@ -9055,7 +9074,6 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera  	{  		LLFastTimer ftm(FTM_SHADOW_ALPHA);  		gDeferredShadowAlphaMaskProgram.bind(); -		gDeferredShadowAlphaMaskProgram.setMinimumAlpha(0.598f);  		gDeferredShadowAlphaMaskProgram.uniform1f(LLShaderMgr::DEFERRED_SHADOW_TARGET_WIDTH, (float)target_width);  		U32 mask =	LLVertexBuffer::MAP_VERTEX |  @@ -9063,10 +9081,19 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera  					LLVertexBuffer::MAP_COLOR |   					LLVertexBuffer::MAP_TEXTURE_INDEX; -		renderObjects(LLRenderPass::PASS_ALPHA_MASK, mask, TRUE, TRUE); -		renderObjects(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, mask, TRUE, TRUE); +		renderMaskedObjects(LLRenderPass::PASS_ALPHA_MASK, mask, TRUE, TRUE); +		renderMaskedObjects(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, mask, TRUE, TRUE); +		gDeferredShadowAlphaMaskProgram.setMinimumAlpha(0.598f);  		renderObjects(LLRenderPass::PASS_ALPHA, mask, TRUE, TRUE); + +		mask = mask & ~LLVertexBuffer::MAP_TEXTURE_INDEX; +  		gDeferredTreeShadowProgram.bind(); +		renderMaskedObjects(LLRenderPass::PASS_NORMSPEC_MASK, mask); +		renderMaskedObjects(LLRenderPass::PASS_MATERIAL_ALPHA_MASK, mask); +		renderMaskedObjects(LLRenderPass::PASS_SPECMAP_MASK, mask); +		renderMaskedObjects(LLRenderPass::PASS_NORMMAP_MASK, mask); +		  		gDeferredTreeShadowProgram.setMinimumAlpha(0.598f);  		renderObjects(LLRenderPass::PASS_GRASS, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, TRUE);  	} @@ -9400,6 +9427,22 @@ void LLPipeline::generateSunShadow(LLCamera& camera)  					LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT,  					LLPipeline::RENDER_TYPE_PASS_SHINY,  					LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_SHINY, +					LLPipeline::RENDER_TYPE_PASS_MATERIAL, +					LLPipeline::RENDER_TYPE_PASS_MATERIAL_ALPHA, +					LLPipeline::RENDER_TYPE_PASS_MATERIAL_ALPHA_MASK, +					LLPipeline::RENDER_TYPE_PASS_MATERIAL_ALPHA_EMISSIVE, +					LLPipeline::RENDER_TYPE_PASS_SPECMAP, +					LLPipeline::RENDER_TYPE_PASS_SPECMAP_BLEND, +					LLPipeline::RENDER_TYPE_PASS_SPECMAP_MASK, +					LLPipeline::RENDER_TYPE_PASS_SPECMAP_EMISSIVE, +					LLPipeline::RENDER_TYPE_PASS_NORMMAP, +					LLPipeline::RENDER_TYPE_PASS_NORMMAP_BLEND, +					LLPipeline::RENDER_TYPE_PASS_NORMMAP_MASK, +					LLPipeline::RENDER_TYPE_PASS_NORMMAP_EMISSIVE, +					LLPipeline::RENDER_TYPE_PASS_NORMSPEC, +					LLPipeline::RENDER_TYPE_PASS_NORMSPEC_BLEND, +					LLPipeline::RENDER_TYPE_PASS_NORMSPEC_MASK, +					LLPipeline::RENDER_TYPE_PASS_NORMSPEC_EMISSIVE,  					END_RENDER_TYPES);  	gGL.setColorMask(false, false); diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index fd4813e415..1fb746ae56 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -59,6 +59,7 @@ class LLCullResult;  class LLVOAvatar;  class LLGLSLShader;  class LLCurlRequest; +class LLDrawPoolAlpha;  class LLMeshResponder; @@ -257,6 +258,8 @@ public:  	void forAllVisibleDrawables(void (*func)(LLDrawable*));  	void renderObjects(U32 type, U32 mask, BOOL texture = TRUE, BOOL batch_texture = FALSE); +	void renderMaskedObjects(U32 type, U32 mask, BOOL texture = TRUE, BOOL batch_texture = FALSE); +  	void renderGroups(LLRenderPass* pass, U32 type, U32 mask, BOOL texture);  	void grabReferences(LLCullResult& result); @@ -437,11 +440,26 @@ public:  		RENDER_TYPE_PASS_SHINY					= LLRenderPass::PASS_SHINY,  		RENDER_TYPE_PASS_BUMP					= LLRenderPass::PASS_BUMP,  		RENDER_TYPE_PASS_POST_BUMP				= LLRenderPass::PASS_POST_BUMP, -		RENDER_TYPE_PASS_MATERIAL				= LLRenderPass::PASS_MATERIAL,  		RENDER_TYPE_PASS_GLOW					= LLRenderPass::PASS_GLOW,  		RENDER_TYPE_PASS_ALPHA					= LLRenderPass::PASS_ALPHA,  		RENDER_TYPE_PASS_ALPHA_MASK				= LLRenderPass::PASS_ALPHA_MASK,  		RENDER_TYPE_PASS_FULLBRIGHT_ALPHA_MASK	= LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, +		RENDER_TYPE_PASS_MATERIAL				= LLRenderPass::PASS_MATERIAL, +		RENDER_TYPE_PASS_MATERIAL_ALPHA			= LLRenderPass::PASS_MATERIAL_ALPHA, +		RENDER_TYPE_PASS_MATERIAL_ALPHA_MASK	= LLRenderPass::PASS_MATERIAL_ALPHA_MASK, +		RENDER_TYPE_PASS_MATERIAL_ALPHA_EMISSIVE= LLRenderPass::PASS_MATERIAL_ALPHA_EMISSIVE, +		RENDER_TYPE_PASS_SPECMAP				= LLRenderPass::PASS_SPECMAP, +		RENDER_TYPE_PASS_SPECMAP_BLEND			= LLRenderPass::PASS_SPECMAP_BLEND, +		RENDER_TYPE_PASS_SPECMAP_MASK			= LLRenderPass::PASS_SPECMAP_MASK, +		RENDER_TYPE_PASS_SPECMAP_EMISSIVE		= LLRenderPass::PASS_SPECMAP_EMISSIVE, +		RENDER_TYPE_PASS_NORMMAP				= LLRenderPass::PASS_NORMMAP, +		RENDER_TYPE_PASS_NORMMAP_BLEND			= LLRenderPass::PASS_NORMMAP_BLEND, +		RENDER_TYPE_PASS_NORMMAP_MASK			= LLRenderPass::PASS_NORMMAP_MASK, +		RENDER_TYPE_PASS_NORMMAP_EMISSIVE		= LLRenderPass::PASS_NORMMAP_EMISSIVE, +		RENDER_TYPE_PASS_NORMSPEC				= LLRenderPass::PASS_NORMSPEC, +		RENDER_TYPE_PASS_NORMSPEC_BLEND			= LLRenderPass::PASS_NORMSPEC_BLEND, +		RENDER_TYPE_PASS_NORMSPEC_MASK			= LLRenderPass::PASS_NORMSPEC_MASK, +		RENDER_TYPE_PASS_NORMSPEC_EMISSIVE		= LLRenderPass::PASS_NORMSPEC_EMISSIVE,  		// Following are object types (only used in drawable mRenderType)  		RENDER_TYPE_HUD = LLRenderPass::NUM_RENDER_TYPES,  		RENDER_TYPE_VOLUME, @@ -768,7 +786,7 @@ protected:  	// For quick-lookups into mPools (mapped by texture pointer)  	std::map<uintptr_t, LLDrawPool*>	mTerrainPools;  	std::map<uintptr_t, LLDrawPool*>	mTreePools; -	LLDrawPool*					mAlphaPool; +	LLDrawPoolAlpha*			mAlphaPool;  	LLDrawPool*					mSkyPool;  	LLDrawPool*					mTerrainPool;  	LLDrawPool*					mWaterPool;  | 
