public override bool Equals(object obj) { H1Shader shader = obj as H1Shader; if (shader == null) { return(false); } if (this.m_Id != shader.m_Id) // comparing ids { return(false); } if (this.m_ShaderTypeRef != shader.m_ShaderTypeRef) // comparing shader type { return(false); } if (!(this.m_CompiledByteCode.SequenceEqual(shader.m_CompiledByteCode))) // comparing code bytes { return(false); } return(true); }
public H1Shader CompileShader(String debugGroupName, H1VertexFactoryType vertexFactoryType, H1ShaderType shaderType, H1ShaderCompileHelper.H1ShaderCompileInput input) { // compile the shader H1ShaderCompileHelper.H1ShaderCompileOutput shaderCompileOutput = new H1ShaderCompileHelper.H1ShaderCompileOutput(); H1ShaderCompileHelper.CompileD3D12Shader(input, shaderCompileOutput); if (!shaderCompileOutput.IsSucceed) { throw new Exception("failed to compile the shader! please check!"); } H1Shader outShader = null; if (shaderType != null) { // create shader instance outShader = shaderType.FinishCompileShader(shaderCompileOutput); if (shaderType is H1GlobalShaderType) // only for global shader, add global shaders { m_GlobalShaders.Add(outShader); } else // otherwise add local shaders { m_LocalShaders.Add(outShader); } } return(outShader); }
public H1Shader GetShader(String shaderTypeName, H1VertexFactoryType vertexFactoryType) { H1MeshMaterialShaderType shaderType = H1Global <H1ManagedRenderer> .Instance.ShaderManager.GetShaderType(shaderTypeName) as H1MeshMaterialShaderType; if (shaderType != null) { H1MeshMaterialShaderMap meshShaderMap = m_MaterialShaderMap.GetMeshShaderMap(vertexFactoryType); H1Shader shader = meshShaderMap != null ? meshShaderMap.Shaders[shaderType] : null; return(shader); } else { return(null); } }
// note that - for this 'BeginCompile' call is called by H1MaterialMap usually! public void BeginCompile(uint shaderMapId, H1MaterialResource material, H1ShaderCompileHelper.H1ShaderCompilerEnvironment materialEnvironment) { // iterating shader type var shaderTypes = H1ShaderType.GetTypeList(); foreach (var shaderType in shaderTypes) { H1MeshMaterialShaderType meshMaterialShaderType = shaderType.GetMeshMaterialShaderType(); if (meshMaterialShaderType != null && m_VertexFactoryTypeRef != null && meshMaterialShaderType.ShouldCache(material, m_VertexFactoryTypeRef) && material.ShouldCache(meshMaterialShaderType, m_VertexFactoryTypeRef) && m_VertexFactoryTypeRef.ShouldCache(material, meshMaterialShaderType)) { // compile mesh material shader type (ex. vertex shader) H1Shader shader = meshMaterialShaderType.BeginCompileShader(shaderMapId, material, materialEnvironment, m_VertexFactoryTypeRef); // add shader to shader map AddShader(meshMaterialShaderType, shader); } } }
public void AddShader(H1ShaderType shaderType, H1Shader shader) { m_Shaders.Add(shaderType, shader); }