private void compileMaterialShader() { Dictionary <int, GLSLShaderConfig> shaderDict; Dictionary <int, List <GLMeshVao> > meshList; List <string> includes = new List <string>(); List <string> defines = new List <string>(); //Save shader to resource Manager //Check for explicit materials if (Name == "collisionMat" || Name == "jointMat" || Name == "crossMat") { shaderDict = Common.RenderState.activeResMgr.GLDefaultShaderMap; meshList = Common.RenderState.activeResMgr.defaultMeshShaderMap; defines.Add("_D_DEFERRED_RENDERING"); } else if (MaterialFlags.Contains("_F51_DECAL_DIFFUSE") || MaterialFlags.Contains("_F52_DECAL_NORMAL")) { shaderDict = Common.RenderState.activeResMgr.GLDeferredShaderMapDecal; meshList = Common.RenderState.activeResMgr.decalMeshShaderMap; defines.Add("_D_DEFERRED_RENDERING"); } else if (MaterialFlags.Contains("_F09_TRANSPARENT") || MaterialFlags.Contains("_F22_TRANSPARENT_SCALAR") || MaterialFlags.Contains("_F11_ALPHACUTOUT")) { shaderDict = Common.RenderState.activeResMgr.GLForwardShaderMapTransparent; meshList = Common.RenderState.activeResMgr.transparentMeshShaderMap; } else if (MaterialFlags.Contains("_F07_UNLIT")) { shaderDict = Common.RenderState.activeResMgr.GLDeferredUNLITShaderMap; meshList = Common.RenderState.activeResMgr.opaqueMeshShaderMap; defines.Add("_D_DEFERRED_RENDERING"); } else { shaderDict = Common.RenderState.activeResMgr.GLDeferredLITShaderMap; meshList = Common.RenderState.activeResMgr.opaqueMeshShaderMap; defines.Add("_D_DEFERRED_RENDERING"); } for (int i = 0; i < MaterialFlags.Count; i++) { if (supported_flags.Contains(MaterialFlags[i])) { includes.Add(MaterialFlags[i]); } } GLSLShaderConfig shader = GLShaderHelper.compileShader("Shaders/Simple_VS.glsl", "Shaders/Simple_FS.glsl", null, null, null, defines, includes, SHADER_TYPE.MATERIAL_SHADER, ref Common.RenderState.shaderCompilationLog); //Attach UBO binding Points GLShaderHelper.attachUBOToShaderBindingPoint(shader, "_COMMON_PER_FRAME", 0); GLShaderHelper.attachSSBOToShaderBindingPoint(shader, "_COMMON_PER_MESH", 1); //Save shader to the resource Manager shaderDict[shader.shaderHash] = shader; meshList[shader.shaderHash] = new List <GLMeshVao>(); //Init list }