示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
 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);
     }
 }
示例#4
0
        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);
        }