Пример #1
0
 public int GetId(ShaderConfig cfg)
 {
     return
         (cfg.LightCount & ((1 << 5) - 1)) |
         ((cfg.LightRangeAttenuation ? 1 : 0) << 5) |
         ((cfg.DiffuseMap ? 1 : 0) << 6) |
         ((cfg.TangentSpace ? 1 : 0) << 7) |
         ((cfg.BumpMap ? 1 : 0) << 8) |
         ((cfg.SpecularMap ? 1 : 0) << 9) |
         ((cfg.EmissiveMap ? 1 : 0) << 10) |
         ((cfg.ReflectionMap ? 1 : 0) << 11) |
         ((cfg.SphereMap ? 1 : 0) << 12);
 }
Пример #2
0
 public ShaderConfig MaterialToConfig(Material m)
 {
     ShaderConfig c = new ShaderConfig();
     c.BumpMap = m.BumpMap != null;
     c.DiffuseMap = m.diffusemap != null;
     c.EmissiveMap = m.EmissiveMap != null;
     c.LightCount = 8;
     c.LightRangeAttenuation = true;
     c.ReflectionMap = m.ReflectionMap != null;
     c.SpecularMap = m.SpecularMap != null;
     c.SphereMap = m.EnvironmentMap != null;
     c.TangentSpace = m.BumpMap != null;
     return c;
 }
Пример #3
0
        public int GenerateShader(ShaderConfig cfg, out string vertexprogram, out string fragmentprogram)
        {
            Config = cfg;
            int id = GetId(cfg);

            string f = GenerateFragmentProgram();
            string v = GenerateVertexProgram();

            vertexprogram = v;
            fragmentprogram = f;

            //System.Console.WriteLine(v);
            //System.Console.WriteLine(f);

            return id;
        }
Пример #4
0
 public Shader GetShader(ShaderConfig cfg)
 {
     return Get(cfg).Shader;
 }
Пример #5
0
 public Entry Get(ShaderConfig cfg)
 {
     int id = Generator.GetId(cfg);
     if (Contains(id))
         return Shaders[id];
     else
     {
         string v, f;
         if (Generator.GenerateShader(cfg, out v, out f) != id)
             throw new Exception();
         Shader s = null;
         if (Renderer != null)
         {
             //try
             {
                 s = Renderer.CreateShader(v, f, null, 0, 0);
             }
             //catch (Exception e)
             {
                 //StreamWriter sw1=new StreamWriter("c:\\vertex.txt", false);
                 //StreamWriter sw2 = new StreamWriter("c:\\fragment.txt", false);
                 //sw1.Write(v);
                 //sw2.Write(f);
                 //sw1.Close();
                 //sw2.Close();
                 //throw e;
             }
         }
         Add(id, v, f, s);
         return Shaders[id];
     }
 }