public virtual bool IsShadersInstancedVersionExists(string shaderName, string extensionCode = null) { if (!string.IsNullOrEmpty(extensionCode)) { GPUInstancerShaderBindingsExtension extension = GetExtension(extensionCode); if (extension != null) { return(extension.IsShadersInstancedVersionExists(shaderInstances, shaderName)); } return(false); } if (_standardUnityShaders.Contains(shaderName) || _standardUnityShadersGPUI.Contains(shaderName) || _extraGPUIShaders.Contains(shaderName)) { return(true); } foreach (ShaderInstance si in shaderInstances) { if (si.name.Equals(shaderName) && string.IsNullOrEmpty(si.extensionCode)) { return(true); } } return(false); }
public virtual Shader GetInstancedShader(string shaderName, string extensionCode = null) { if (!string.IsNullOrEmpty(extensionCode)) { GPUInstancerShaderBindingsExtension extension = GetExtension(extensionCode); if (extension != null) { return(extension.GetInstancedShader(shaderInstances, shaderName)); } return(null); } if (string.IsNullOrEmpty(shaderName)) { return(null); } if (shaderInstances == null) { shaderInstances = new List <ShaderInstance>(); } foreach (ShaderInstance si in shaderInstances) { if (si.name.Equals(shaderName) && string.IsNullOrEmpty(si.extensionCode)) { return(si.instancedShader); } } if (_standardUnityShaders.Contains(shaderName)) { return(Shader.Find(_standardUnityShadersGPUI[_standardUnityShaders.IndexOf(shaderName)])); } if (_standardUnityShadersGPUI.Contains(shaderName)) { return(Shader.Find(shaderName)); } if (_extraGPUIShaders.Contains(shaderName)) { return(Shader.Find(shaderName)); } if (!shaderName.Equals(GPUInstancerConstants.SHADER_UNITY_STANDARD)) { if (Application.isPlaying) { Debug.LogWarning("Can not find instanced shader for : " + shaderName + ". Using Standard shader instead."); } return(GetInstancedShader(GPUInstancerConstants.SHADER_UNITY_STANDARD)); } Debug.LogWarning("Can not find instanced shader for : " + shaderName); return(null); }
public virtual void AddExtension(GPUInstancerShaderBindingsExtension extension) { if (shaderBindingsExtensions == null) { shaderBindingsExtensions = new List <GPUInstancerShaderBindingsExtension>(); } if (!shaderBindingsExtensions.Exists(ex => ex.GetExtensionCode().Equals(extension.GetExtensionCode()))) { shaderBindingsExtensions.Add(extension); } }
public virtual Material GetInstancedMaterial(Material originalMaterial, string extensionCode = null) { if (!string.IsNullOrEmpty(extensionCode)) { GPUInstancerShaderBindingsExtension extension = GetExtension(extensionCode); if (extension != null) { return(extension.GetInstancedMaterial(shaderInstances, originalMaterial)); } return(null); } if (originalMaterial == null || originalMaterial.shader == null) { Debug.LogWarning("One of the GPU Instancer prototypes is missing material reference! Check the Material references in MeshRenderer."); return(new Material(GetInstancedShader(GPUInstancerConstants.SHADER_UNITY_STANDARD))); } Material instancedMaterial = new Material(GetInstancedShader(originalMaterial.shader.name)); instancedMaterial.CopyPropertiesFromMaterial(originalMaterial); instancedMaterial.name = originalMaterial.name + "_GPUI"; return(instancedMaterial); }