1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine.Rendering;
- namespace Obi
- {
- [ExecuteInEditMode]
- [RequireComponent (typeof(Camera))]
- public abstract class ObiBaseFluidRenderer : MonoBehaviour{
- public ObiParticleRenderer[] particleRenderers;
- public bool autoupdate = true;
- protected CommandBuffer renderFluid;
- protected Camera currentCam;
- void Awake(){
- currentCam = GetComponent<Camera>();
- }
- public void OnEnable()
- {
- GetComponent<Camera>().forceIntoRenderTexture = true;
- DestroyCommandBuffer();
- Cleanup();
- }
-
- public void OnDisable()
- {
- DestroyCommandBuffer();
- Cleanup();
- }
- protected Material CreateMaterial (Shader shader)
- {
- if (!shader || !shader.isSupported)
- return null;
- Material m = new Material (shader);
- m.hideFlags = HideFlags.HideAndDontSave;
- return m;
- }
- protected virtual void Setup(){}
- protected virtual void Cleanup(){}
- /**
- * Re-generates the CommandBuffer used for fluid rendering. Call it whenever a new ParticleRenderer is added, removed or modified.
- */
- public abstract void UpdateFluidRenderingCommandBuffer();
- private void DestroyCommandBuffer(){
- if (renderFluid != null){
- GetComponent<Camera>().RemoveCommandBuffer (CameraEvent.BeforeImageEffectsOpaque,renderFluid);
- renderFluid = null;
- }
- }
- private void OnPreRender(){
- bool act = gameObject.activeInHierarchy && enabled;
- if (!act || particleRenderers == null || particleRenderers.Length == 0)
- {
- DestroyCommandBuffer();
- Cleanup();
- return;
- }
-
- Setup();
-
- if (renderFluid == null)
- {
- renderFluid = new CommandBuffer();
- renderFluid.name = "Render fluid";
- UpdateFluidRenderingCommandBuffer();
- currentCam.AddCommandBuffer (CameraEvent.BeforeImageEffectsOpaque, renderFluid);
- }else if (autoupdate){
- UpdateFluidRenderingCommandBuffer();
- }
- }
- }
- }
|