Example #1
0
        public void Bind(GLShaderProgram shaderProgram)
        {
            shaderProgram.SetUniform("uMatHasDiffuse", HasDiffuseTexture);

            if (HasDiffuseTexture)
            {
                DiffuseTexture.Bind();
            }

            shaderProgram.SetUniform("uMatAmbient", Ambient);
            shaderProgram.SetUniform("uMatDiffuse", Diffuse);
            shaderProgram.SetUniform("uMatSpecular", Specular);
            shaderProgram.SetUniform("uMatEmissive", Emissive);
            shaderProgram.SetUniform("uMatHasAlphaTransparency", HasAlphaTransparency);

            if (RenderWireframe)
            {
                GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Line);
            }

            if (!EnableBackfaceCulling)
            {
                GL.Disable(EnableCap.CullFace);
            }
        }
        public void Bind()
        {
            // load shaders here when we have them

            // GL 1.X pipeline
            if (DiffuseName == string.Empty)
            {
                GL.Disable(EnableCap.Texture2D);
            }
            else
            {
                GL.Enable(EnableCap.Texture2D);

                if (DiffuseTexture == null)
                {
                    DiffuseName = string.Empty;
                    GL.Disable(EnableCap.Texture2D);
                }
                else
                {
                    DiffuseTexture.Bind();
                }
            }

            GL.Color4(DiffuseColor);
        }
Example #3
0
        private bool mDisposed; // To detect redundant calls

        protected virtual void Dispose(bool disposing)
        {
            if (!mDisposed)
            {
                if (disposing)
                {
                    DiffuseTexture?.Dispose();
                }

                mDisposed = true;
            }
        }
Example #4
0
        public override IEnumerable <Object> FetchDependencies(ISerializedFile file, bool isLog = false)
        {
            foreach (Object asset in base.FetchDependencies(file, isLog))
            {
                yield return(asset);
            }

            yield return(DiffuseTexture.FetchDependency(file, isLog, ToLogString, DiffuseTextureName));

            yield return(NormalMapTexture.FetchDependency(file, isLog, ToLogString, NormalMapTextureName));

            yield return(MaskMapTexture.FetchDependency(file, isLog, ToLogString, MaskMapTextureName));
        }
Example #5
0
        public override void Read(AssetReader reader)
        {
            base.Read(reader);

            DiffuseTexture.Read(reader);
            NormalMapTexture.Read(reader);
            MaskMapTexture.Read(reader);
            TileSize.Read(reader);
            TileOffset.Read(reader);
            Specular.Read(reader);
            Metallic    = reader.ReadSingle();
            Smoothness  = reader.ReadSingle();
            NormalScale = reader.ReadSingle();
            DiffuseRemapMin.Read(reader);
            DiffuseRemapMax.Read(reader);
            MaskMapRemapMin.Read(reader);
            MaskMapRemapMax.Read(reader);
        }
Example #6
0
        protected override YAMLMappingNode ExportYAMLRoot(IExportContainer container)
        {
            YAMLMappingNode node = base.ExportYAMLRoot(container);

            node.Add(DiffuseTextureName, DiffuseTexture.ExportYAML(container));
            node.Add(NormalMapTextureName, NormalMapTexture.ExportYAML(container));
            node.Add(MaskMapTextureName, MaskMapTexture.ExportYAML(container));
            node.Add(TileSizeName, TileSize.ExportYAML(container));
            node.Add(TileOffsetName, TileOffset.ExportYAML(container));
            node.Add(SpecularName, Specular.ExportYAML(container));
            node.Add(MetallicName, Metallic);
            node.Add(SmoothnessName, Smoothness);
            node.Add(NormalScaleName, NormalScale);
            node.Add(DiffuseRemapMinName, DiffuseRemapMin.ExportYAML(container));
            node.Add(DiffuseRemapMaxName, DiffuseRemapMax.ExportYAML(container));
            node.Add(MaskMapRemapMinName, MaskMapRemapMin.ExportYAML(container));
            node.Add(MaskMapRemapMaxName, MaskMapRemapMax.ExportYAML(container));
            return(node);
        }
Example #7
0
File: Mesh.cs Project: Sadral/TRRM
 public void Dispose()
 {
     if (IndexBuffer != null)
     {
         IndexBuffer.Dispose();
     }
     if (VertexBuffer != null)
     {
         VertexBuffer.Dispose();
     }
     if (VertexDecl != null)
     {
         VertexDecl.Dispose();
     }
     if (DiffuseTexture != null)
     {
         DiffuseTexture.Dispose();
     }
     if (NormalTexture != null)
     {
         NormalTexture.Dispose();
     }
 }
Example #8
0
        internal virtual void SyncChanges()
        {
            // if (Shader == null)
            //     Shader = new Shader("Shaders/forward.vert", "Shaders/forward.frag");
            // if (DefGeometryShader == null)
            //     DefGeometryShader = new Shader("Shaders/deferred-gbuffer.vert", "Shaders/deferred-gbuffer.frag");
            // if (ShadowShader == null)
            //     ShadowShader = new Shader("Shaders/shadow-directional.vert", "Shaders/shadow-directional.frag", "Shaders/shadow-directional.geom");
            // if (CubeShadowShader == null)
            //     CubeShadowShader = new Shader("Shaders/shadow-cube.vert", "Shaders/shadow-cube.frag", "Shaders/shadow-cube.geom");

            DiffuseTexture?.Sync();
            SpecularTexture?.Sync();

            if (RendererMaterial == null)
            {
                RendererMaterial = new RendererMaterial();

                if (Shader == null)
                {
                    Shader = new Shader("Shaders/forward.vert", "Shaders/forward.frag");
                }
                if (DefGeometryShader == null)
                {
                    DefGeometryShader = new Shader("Shaders/deferred-gbuffer.vert", "Shaders/deferred-gbuffer.frag");
                }

                if (DiffuseTexture != null || SpecularTexture != null)
                {
                    Defines.Add("USE_VERTEX_UV", "1");
                }
                if (UseVertexColor)
                {
                    Defines.Add("USE_VERTEX_COLOR", "1");
                }
                if (ReceiveShadow && Renderer.Current.UseShadows)
                {
                    Defines.Add("USE_SHADOW", "1");
                }

                RendererMaterial.Shader            = new RendererShader(Shader.VertexShaderPath, Shader.FragmentShaderPath, Shader.GeometryShaderPath, true, Defines);
                RendererMaterial.DefGeometryShader = new RendererShader(DefGeometryShader.VertexShaderPath, DefGeometryShader.FragmentShaderPath, DefGeometryShader.GeometryShaderPath, true, Defines);

                RendererMaterial.CreateShaders();
            }

            var mat = RendererMaterial;

            if (DiffuseTexture == null)
            {
                mat.DiffuseMap   = InternalTextureManager.White;
                mat.DiffuseColor = Color;
            }
            else
            {
                mat.DiffuseMap   = DiffuseTexture.RendererTexture;
                mat.DiffuseColor = Color;
            }

            if (SpecularTexture == null)
            {
                mat.SpecularMap      = InternalTextureManager.White;
                mat.SpecularStrength = SpecularStrength;
            }
            else
            {
                mat.SpecularMap      = SpecularTexture.RendererTexture;
                mat.SpecularStrength = 1.0f;
            }
            mat.CastShadow = CastShadow;

            mat.Ambient        = Ambient;
            mat.Shininess      = Shininess;
            mat.UseVertexColor = UseVertexColor;

            var pipelineType = PipelineType;

            if (pipelineType == PipelineType.Default)
            {
                if (UseTransparency || !ReceiveShadow)
                {
                    pipelineType = PipelineType.Forward;
                }
            }

            switch (pipelineType)
            {
            case PipelineType.Default:
                mat.RenderPipeline = RenderContext.Current.PrimaryRenderPipeline;
                break;

            case PipelineType.Forward:
                mat.RenderPipeline = RenderContext.Current.GetPipeline <ForwardRenderPipeline>();
                break;

            case PipelineType.Deferred:
                mat.RenderPipeline = RenderContext.Current.GetPipeline <DeferredRenderPipeline>();
                break;

            case PipelineType.Screen:
                mat.RenderPipeline = RenderContext.Current.GetPipeline <ScreenPipeline>();
                break;
            }

            foreach (var param in Parameters.Values)
            {
                if (param.HasChanges)
                {
                    param.HasChanges = false;
                    switch (param.Type)
                    {
                    case ParamterType.Bool:
                        mat.Shader.SetBool(param.Name, (bool)param.Value);
                        mat.DefGeometryShader.SetBool(param.Name, (bool)param.Value);
                        break;

                    case ParamterType.Int:
                        mat.Shader.SetInt(param.Name, (int)param.Value);
                        mat.DefGeometryShader.SetInt(param.Name, (int)param.Value);
                        break;

                    case ParamterType.Float:
                        mat.Shader.SetFloat(param.Name, (float)param.Value);
                        mat.DefGeometryShader.SetFloat(param.Name, (float)param.Value);
                        break;

                    case ParamterType.Vector2:
                        mat.Shader.SetVector2(param.Name, (Vector2)param.Value);
                        mat.DefGeometryShader.SetVector2(param.Name, (Vector2)param.Value);
                        break;

                    case ParamterType.Vector3:
                        mat.Shader.SetVector3(param.Name, (Vector3)param.Value);
                        mat.DefGeometryShader.SetVector3(param.Name, (Vector3)param.Value);
                        break;

                    case ParamterType.Vector4:
                        mat.Shader.SetVector4(param.Name, (Vector4)param.Value);
                        mat.DefGeometryShader.SetVector4(param.Name, (Vector4)param.Value);
                        break;

                    case ParamterType.Matrix4:
                        mat.Shader.SetMatrix4(param.Name, (Matrix4)param.Value);
                        mat.DefGeometryShader.SetMatrix4(param.Name, (Matrix4)param.Value);
                        break;
                    }
                }
            }
        }