예제 #1
0
        public Entities(GLProgram program, SceneGraph scene)
            : base(program)
        {
            var numPointLights = 0;
            var plights        = new LightingShaders.PointLight[4];

            using (program.Scope())
            {
                foreach (var pointLight in scene.Root.Traverse().OfType <PointLight> ())
                {
                    plights[numPointLights++] = new LightingShaders.PointLight
                    {
                        position             = pointLight.Position,
                        intensity            = pointLight.Intensity,
                        linearAttenuation    = pointLight.LinearAttenuation,
                        quadraticAttenuation = pointLight.QuadraticAttenuation
                    };
                }
                pointLights &= plights;

                var samp = new Sampler2D[4];
                for (int i = 0; i < samp.Length; i++)
                {
                    samp[i] = new Sampler2D(i + 1).LinearFiltering().ClampToEdges(Axes.All);
                }
                samplers   &= samp;
                diffuseMap &= new SamplerCube(5).LinearFiltering().ClampToEdges(Axes.All);

                lighting   = new LightingUniforms(program, scene);
                transforms = new TransformUniforms(program);
                shadows    = new CascadedShadowUniforms(program,
                                                        new Sampler2DArray(0).LinearFiltering().ClampToEdges(Axes.All));
            }
        }
예제 #2
0
 public Materials(GLProgram program)
     : base(program)
 {
     using (program.Scope())
     {
         transforms  = new TransformUniforms(program);
         diffuseMap &= new Sampler2D(0).LinearFiltering();
         normalMap  &= new Sampler2D(1).LinearFiltering();
         heightMap  &= new Sampler2D(2).LinearFiltering();
     }
 }
예제 #3
0
        private Terrain(GLProgram program, SceneGraph scene, Vec3 skyCol)
            : base(program)
        {
            transforms = new TransformUniforms(program);
            lighting   = new LightingUniforms(program, scene);
            shadows    = new CascadedShadowUniforms(program,
                                                    new Sampler2DArray(0).LinearFiltering().ClampToEdges(Axes.All));

            using (program.Scope())
            {
                skyColor     &= skyCol;
                sandSampler  &= new Sampler2D(1);
                rockSampler  &= new Sampler2D(2);
                grassSampler &= new Sampler2D(3);
            }
        }
예제 #4
0
 public LightingUniforms(GLProgram program, SceneGraph scene)
     : base(program)
 {
     using (program.Scope())
     {
         var gl = scene.GlobalLighting;
         if (gl != null)
         {
             globalLighting &= new LightingShaders.GlobalLight()
             {
                 ambientLightIntensity = gl.AmbientLightIntensity,
                 maxintensity          = gl.MaxIntensity,
                 inverseGamma          = 1f / gl.GammaCorrection
             };
         }
     }
 }
예제 #5
0
 public CascadedShadowUniforms(GLProgram program, Sampler2DArray sampler) : base(program)
 {
     using (program.Scope())
         csmShadowMap &= sampler;
 }
예제 #6
0
 public ShadowUniforms(GLProgram program, Sampler2D sampler) : base(program)
 {
     using (program.Scope())
         shadowMap &= sampler;
 }
예제 #7
0
 private Skybox(GLProgram program) : base(program)
 {
     using (program.Scope())
         cubeMap &= new SamplerCube(0).LinearFiltering().ClampToEdges(Axes.All);
 }
예제 #8
0
 public TextureUniforms(GLProgram program, Sampler2D sampler) : base(program)
 {
     using (program.Scope())
         textureMap &= sampler;
 }
예제 #9
0
 public CascadedShadowUniforms(GLProgram program, Sampler2DArray sampler)
     : base(program)
 {
     using (program.Scope ())
         csmShadowMap &= sampler;
 }
예제 #10
0
 public ShadowUniforms(GLProgram program, Sampler2D sampler)
     : base(program)
 {
     using (program.Scope ())
         shadowMap &= sampler;
 }
예제 #11
0
 public Materials(GLProgram program)
     : base(program)
 {
     using (program.Scope ())
     {
         transforms = new TransformUniforms (program);
         diffuseMap &= new Sampler2D (0).LinearFiltering ().ClampToEdges (Axes.All);
         normalMap &= new Sampler2D (1).LinearFiltering ().ClampToEdges (Axes.All);
     }
 }
예제 #12
0
 public LightingUniforms(GLProgram program, SceneGraph scene)
     : base(program)
 {
     using (program.Scope ())
     {
         var gl = scene.GlobalLighting;
         if (gl != null)
         {
             globalLighting &= new LightingShaders.GlobalLight ()
             {
                 ambientLightIntensity = gl.AmbientLightIntensity,
                 maxintensity = gl.MaxIntensity,
                 inverseGamma = 1f / gl.GammaCorrection
             };
         }
     }
 }
예제 #13
0
파일: Skybox.cs 프로젝트: johtela/Compose3D
 private Skybox(GLProgram program)
     : base(program)
 {
     using (program.Scope ())
         cubeMap &= new SamplerCube (0).LinearFiltering ().ClampToEdges (Axes.All);
 }