Shadow problem

I want to do some special effect, eg, do some distortion on my weapon trail, the code is below:

void OnPreRender()
	{
		if( !preRT )
			preRT = new RenderTexture(Screen.width, Screen.height, 24, SystemInfo.SupportsRenderTextureFormat (RenderTextureFormat.RGB565) ? RenderTextureFormat.RGB565 : RenderTextureFormat.Default);
		if( !currRT )
			currRT = new RenderTexture(Screen.width, Screen.height, 24, SystemInfo.SupportsRenderTextureFormat (RenderTextureFormat.RGB565) ? RenderTextureFormat.RGB565 : RenderTextureFormat.Default);

		colorBuff = Graphics.activeColorBuffer;
		depthBuff = Graphics.activeDepthBuffer;
		orinalRT = RenderTexture.active;
		
		if( currRT )
		{
			//Graphics.SetRenderTarget(currRT);
			//camera.SetTargetBuffers(currRT.colorBuffer,currRT.depthBuffer);
			RenderTexture.active = currRT;
			camera.targetTexture = currRT;
		}
		
		Shader.SetGlobalTexture ( "_BgTexture", preRT );
	}

	void getBlitMaterial()
	{
		if(!blit)
			blit = new Material (Shader.Find("Hidden/Blit"));
	}


	public static void DrawQuad()
	{
		GL.Begin (GL.QUADS);		
		GL.TexCoord2( 0.0f, 0.0f ); GL.Vertex3( 0.0f, 0.0f, 0.1f );
		GL.TexCoord2( 1.0f, 0.0f ); GL.Vertex3( 1.0f, 0.0f, 0.1f );
		GL.TexCoord2( 1.0f, 1.0f ); GL.Vertex3( 1.0f, 1.0f, 0.1f );
		GL.TexCoord2( 0.0f, 1.0f ); GL.Vertex3( 0.0f, 1.0f, 0.1f );
		GL.End();
	}

	void OnPostRender()
	{
		getBlitMaterial ();

		//Graphics.SetRenderTarget (colorBuff, depthBuff);
		//camera.SetTargetBuffers (colorBuff, depthBuff);
		RenderTexture.active = orinalRT;
		camera.targetTexture = null;

		blit.SetTexture ("_MainTex", currRT);

		// Draw a quad over the whole screen with the above shader
		GL.PushMatrix ();
		GL.LoadOrtho ();

		blit.SetPass (0);
		DrawQuad();

		GL.PopMatrix ();

		RenderTexture temp = preRT;
		preRT = currRT;
		currRT = temp;

		//Graphics.Blit ( currRT, blit, 0 );
		//camera.SetTargetBuffers(colorBuff,depthBuff);
	}

If without real-time shadow, it is OK! But with shadow on, screen is black!

Any help?

This script is attached to the main camera, and when I change the code :

camera.targetTexture = null;

to :

camera.targetTexture = orinalRT;

The effect in Editor ( in PC with switch to Android platform : OPENGLES2 ) is OK!
But porting it to android device ( mali-450MP | andreno 320 ), the screen is stick to the logo screen for ever. Any ideas?

I want to know the internal rendering sequence of the U3D, I wanna konw if I can change the render target of current camera during the call of OnPreCull() | OnPreRender() | OnPostRender(). If it allow, why I can’t do it?