microwerx icon

getting active uniforms

microwerx | PRO | 12/31/17 12:33:08 AM UTC | 0 ⭐ | 689 👁️ | Never ⏰ | []
C++ |

5.95 KB

|

None

|

0 👍

/

0 👎

    void __ShaderProgramLocations::GetMaterialProgramLocations(SimpleProgram &program)
    {
        locations.clear();
        locations["Ka"] = Ka = program.GetUniformLocation("Ka");
        locations["Kd"] = Kd = program.GetUniformLocation("Kd");
        locations["Ks"] = Ks = program.GetUniformLocation("Ks");
        locations["Ke"] = Ke = program.GetUniformLocation("Ke");
        locations["Tr"] = Tr = program.GetUniformLocation("Tr");
        locations["Tf"] = Tf = program.GetUniformLocation("Tf");
        locations["Ns"] = Ns = program.GetUniformLocation("Ns");
        locations["Ni"] = Ni = program.GetUniformLocation("Ni");
 
        locations["PBk"] = PBk = program.GetUniformLocation("PBk");
        locations["PBm"] = PBm = program.GetUniformLocation("PBm");
        locations["PBKdm"] = PBKdm = program.GetUniformLocation("PBKdm");
        locations["PBKsm"] = PBKsm = program.GetUniformLocation("PBKsm");
        locations["PBior"] = PBior = program.GetUniformLocation("PBior");
        locations["PBGGXgamma"] = PBGGXgamma = program.GetUniformLocation("PBGGXgamma");
        locations["PBmap"] = PBmap = program.GetUniformLocation("PBmap");
        /// 
        locations["map_Ka"] = map_Ka = program.GetUniformLocation("map_Ka");
        locations["map_Kd"] = map_Kd = program.GetUniformLocation("map_Kd");
        locations["map_Ks"] = map_Ks = program.GetUniformLocation("map_Ks");
        locations["map_Ke"] = map_Ke = program.GetUniformLocation("map_Ke");
        locations["map_Tr"] = map_Tr = program.GetUniformLocation("map_Tr");
        locations["map_Tf"] = map_Tf = program.GetUniformLocation("map_Tf");
        locations["map_Ni"] = map_Ni = program.GetUniformLocation("map_Ni");
        locations["map_Ns"] = map_Ns = program.GetUniformLocation("map_Ns");
        locations["map_bump"] = map_bump = program.GetUniformLocation("map_bump");
        locations["map_normal"] = map_normal = program.GetUniformLocation("map_normal");
        locations["map_Ka_mix"] = map_Ka_mix = program.GetUniformLocation("map_Ka_mix");
        locations["map_Kd_mix"] = map_Kd_mix = program.GetUniformLocation("map_Kd_mix");
        locations["map_Ks_mix"] = map_Ks_mix = program.GetUniformLocation("map_Ks_mix");
        locations["map_Ke_mix"] = map_Ke_mix = program.GetUniformLocation("map_Ke_mix");
        locations["map_Tf_mix"] = map_Tf_mix = program.GetUniformLocation("map_Tf_mix");
        locations["map_Tr_mix"] = map_Tr_mix = program.GetUniformLocation("map_Tr_mix");
        locations["map_Ni_mix"] = map_Ni_mix = program.GetUniformLocation("map_Ni_mix");
        locations["map_Ns_mix"] = map_Ns_mix = program.GetUniformLocation("map_Ns_mix");
        locations["map_bump_mix"] = map_bump_mix = program.GetUniformLocation("map_bump_mix");
        locations["map_normal_mix"] = map_normal_mix = program.GetUniformLocation("map_normal_mix");
 
        locations["Spheres"] = sphere_array = program.GetUniformLocation("Spheres[0]");
        locations["SpheresCount"] = sphere_count = program.GetUniformLocation("SpheresCount");
        locations["SpheresKe"] = sphere_Ke = program.GetUniformLocation("SpheresKe[0]");
 
        for (int i = 0; i < 16; i++)
        {
            char name[64];
            sprintf_s(name, "SphlLights[%d].Enabled", i);  locations[name] = sphl_lights_enabled[i] = program.GetUniformLocation(name);
            sprintf_s(name, "SphlLights[%d].E0", i);       locations[name] = sphl_lights_E0[i] = program.GetUniformLocation(name);
            sprintf_s(name, "SphlLights[%d].Position", i); locations[name] = sphl_lights_position[i] = program.GetUniformLocation(name);
            sprintf_s(name, "SphlLights[%d].LightProbeCubeMap", i); locations[name] = sphl_lights_lightProbeCubeMap[i] = program.GetUniformLocation(name);
            sprintf_s(name, "SphlLights[%d].EnvironmentCubeMap", i); locations[name] = sphl_lights_environmentCubeMap[i] = program.GetUniformLocation(name);
            sprintf_s(name, "SphlLights[%d].DepthShadowCubeMap", i); locations[name] = sphl_lights_depthShadowCubeMap[i] = program.GetUniformLocation(name);
            sprintf_s(name, "SphlLights[%d].DepthShadowZFar", i); locations[name] = sphl_lights_depthShadowZFar[i] = program.GetUniformLocation(name);
            for (int j = 0; j < 9; j++)
            {
                sphl_lights_sph[i][j] = -1;
                sprintf_s(name, "SphlLights[%d].sph[%d]", i, j); locations[name] = sphl_lights_sph[i][j] = program.GetUniformLocation(name);
            }
        }
 
        locations["ToneMapScale"] = toneMapScale = program.GetUniformLocation("ToneMapScale");
        locations["ToneMapExposure"] = toneMapExposure = program.GetUniformLocation("ToneMapExposure");
        locations["ToneMapGamma"] = toneMapGamma = program.GetUniformLocation("ToneMapGamma");
        locations["SunDirTo"] = sunDirTo = program.GetUniformLocation("SunDirTo");
        locations["SunColor"] = sunColor = program.GetUniformLocation("SunColor");
        locations["SunSize"] = sunSize = program.GetUniformLocation("SunSize");
        locations["SunShadowMap"] = sunShadowMap = program.GetUniformLocation("SunShadowMap");
        locations["SunColorMap"] = sunColorMap = program.GetUniformLocation("SunColorMap");
        locations["SunShadowMatrix"] = sunShadowMatrix = program.GetUniformLocation("SunShadowMatrix");
        locations["SunE0"] = sunE0 = program.GetUniformLocation("SunE0");
        locations["GroundE0"] = groundE0 = program.GetUniformLocation("GroundE0");
    
        locations["EnviroCubeMap"] = enviroCubeMap = program.GetUniformLocation("EnviroCubeMap");
        locations["EnviroCubeMapAmount"] = enviroCubeMapAmount = program.GetUniformLocation("EnviroCubeMapAmount");
 
        locations["PBSkyCubeMap"] = pbskyCubeMap = program.GetUniformLocation("PBSkyCubeMap");
 
        locations["ShaderDebugChoice"] = shaderDebugChoice = program.GetUniformLocation("ShaderDebugChoice");
        locations["ShaderDebugLight"] = shaderDebugLight = program.GetUniformLocation("ShaderDebugLight");
        locations["ShaderDebugSphl"] = shaderDebugSphl = program.GetUniformLocation("ShaderDebugSphl");
 
        // Do the new way by finding out what uniforms the program actually has, or is looking for...
        newLocationList.Clear();
 
        for (auto uniform : program.activeUniforms)
        {
            // uniform.first is the name of the uniform...
            // uniform.second has the details...
    
            newLocationList[uniform.first] = MakeSharedIntProperty(uniform.second.index);
        }
    }

Comments