Beispiel #1
0
        public ShaderBlob BuildProgram(ShaderCreationArguments args)
        {
            if (BadShader == null)
            {
                BadShader = BuildProgramInternal(this.badShaderArguments);
            }

            return(BuildProgramInternal(args));
        }
Beispiel #2
0
 private IVertexArray BuildVertexArray(VertexLocations vertexLocations, ShaderCreationArguments args)
 {
     if (!args.Type.UseIndexing)
     {
         return(new VertexArray(vertexLocations, args.Type, RawVertexData.NonIndexed));
     }
     else
     {
         return(new VertexArray(vertexLocations, args.Type, RawVertexData.Indexed));
     }
 }
Beispiel #3
0
 private static void LoadAndAddToShaderStore(string fileName)
 {
     try
     {
         ShaderCreationArguments fromFileArguments = ShaderLoader.LoadFromFile(fileName);
         ShaderStore.Shaders.Push(fromFileArguments);
     }
     catch (Exception ex)
     {
         StaticLogger.Logger.ErrorFormat("Could not read {0} : {1}", fileName, ex.ToString());
     }
 }
Beispiel #4
0
        private ShaderBlob BuildProgramInternal(ShaderCreationArguments args)
        {
            try
            {
                StaticLogger.Logger.DebugFormat("Starting Creation of {0}", args.ConvenientName());

                PngTexture texture = null;

                if (args.Type.UseTexture)
                {
                    texture = new PngTexture(args.TexturePath);
                    texture.Load();
                    texture.Create();
                    GlErrorLogger.Check();

                    // Do I even need this?
                    Gl.BindTexture(TextureTarget.Texture2d, texture.TextureName);
                    GlErrorLogger.Check();
                }

                var vertexSource = VertexShaderSource.VertexSourceLookup(args.Type.VertexFormat, args.Type.VertexShaderVersion);

                var _Program = new ShaderProgram(args.FragmentShaderSource, vertexSource, args.Type.Uniforms, args.Type.VertexFormat);
                GlErrorLogger.Check();

                _Program.Link();
                GlErrorLogger.Check();

                IVertexArray _VertexArray = BuildVertexArray(_Program.VertexLocations, args);

                GlErrorLogger.Check();

                return(new ShaderBlob()
                {
                    DisplayName = args.ConvenientName(),
                    CreationArguments = args,
                    TreatAsGood = true,
                    Program = _Program,
                    VertexArray = _VertexArray,
                    TextureName = !args.Type.UseTexture ? 0 : texture.TextureName,
                });
            }
            catch (Exception e)
            {
                StaticLogger.Logger.ErrorFormat("{1} - Shader Error {0}", args.SimpleName, e.ToString());

                if (BadShader == null)
                {
                    throw new InvalidOperationException("Could not build BadShader!");
                }

                return(new ShaderBlob()
                {
                    DisplayName = args.ConvenientName(),
                    CreationArguments = BadShader.CreationArguments,
                    TreatAsGood = false,
                    ErrorMessage = e.ToString(),
                    Program = BadShader.Program,
                    VertexArray = BadShader.VertexArray
                });
            }
        }
Beispiel #5
0
 public ShaderBuilder(ShaderCreationArguments badShader)
 {
     this.badShaderArguments = badShader;
 }
Beispiel #6
0
        public static List <ShaderCreationArguments> BuildZoo()
        {
            var toReturn = new List <ShaderCreationArguments>();

            var SimplestShader_Args = new ShaderCreationArguments()
            {
                Type                 = ShaderBlobType.PlainVertexNoUniforms(),
                SimpleName           = "SimplestShader",
                FragmentShaderSource = new List <string>(BuiltInShaderSource.SimpleShader),
            };

            var SimplestShader_WithTime_Args = new ShaderCreationArguments()
            {
                Type                 = ShaderBlobType.Time(),
                SimpleName           = "SimplestShader_WithTime",
                FragmentShaderSource = new List <string>(BuiltInShaderSource.ShaderNoResolution),
            };

            var BaseShader_Args = new ShaderCreationArguments()
            {
                Type                 = ShaderBlobType.Standard(),
                SimpleName           = "BaseShader",
                FragmentShaderSource = new List <string>(BuiltInShaderSource.BaseShader),
            };

            var BaseShader2_Args = new ShaderCreationArguments()
            {
                Type                 = ShaderBlobType.Standard(),
                SimpleName           = "BaseShader2",
                FragmentShaderSource = new List <string>(BuiltInShaderSource.BaseShader2),
            };

            var BaseShaderAlternate_Args = new ShaderCreationArguments()
            {
                Type                 = ShaderBlobType.Standard(),
                SimpleName           = "BaseShaderAlternate",
                FragmentShaderSource = new List <string>(BuiltInShaderSource.BaseShaderAlternate),
            };

            var ColorNoIndex_Args = new ShaderCreationArguments()
            {
                Type                 = ShaderBlobType.Color_NoIndex(),
                SimpleName           = "Color_NoIndex",
                FragmentShaderSource = new List <string>(BuiltInShaderSource.ColorTest),
            };

            var ColorIndex_Args = new ShaderCreationArguments()
            {
                Type                 = ShaderBlobType.Color_WithIndex(),
                SimpleName           = "Color_Index",
                FragmentShaderSource = new List <string>(BuiltInShaderSource.ColorTest),
            };

            var ColorTest_Args = new ShaderCreationArguments()
            {
                Type                 = ShaderBlobType.TextureStandard(),
                SimpleName           = "TexTest",
                FragmentShaderSource = new List <string>(BuiltInShaderSource.TextureTest),
                TexturePath          = @"Z:\ShaderStore\MultiColorTest.png"
            };

            var TexTest_Args = new ShaderCreationArguments()
            {
                Type                 = ShaderBlobType.TextureStandard(),
                SimpleName           = "TexTest",
                FragmentShaderSource = new List <string>(BuiltInShaderSource.TextureTest),
                TexturePath          = @"Z:\ShaderStore\ColorTest.png"
            };

            var TexTest2_Args = new ShaderCreationArguments()
            {
                Type                 = ShaderBlobType.TextureStandard(),
                SimpleName           = "TexTest2",
                FragmentShaderSource = new List <string>(BuiltInShaderSource.TextureTest),
                TexturePath          = @"Z:\ShaderStore\ColorTest2.png"
            };

            var TexTest3_Args = new ShaderCreationArguments()
            {
                Type                 = ShaderBlobType.TextureStandard(),
                SimpleName           = "TexTest3",
                FragmentShaderSource = new List <string>(BuiltInShaderSource.TextureTest),
                TexturePath          = @"Z:\ShaderStore\ColorTest3.png"
            };

            var TexTest4_Args = new ShaderCreationArguments()
            {
                Type                 = ShaderBlobType.TextureStandard(),
                SimpleName           = "TexTest4",
                FragmentShaderSource = new List <string>(BuiltInShaderSource.TextureTest),
                TexturePath          = @"Z:\ShaderStore\ColorTest4.png"
            };

            var TexTest5_Args = new ShaderCreationArguments()
            {
                Type                 = ShaderBlobType.TextureStandard(),
                SimpleName           = "TexTest5",
                FragmentShaderSource = new List <string>(BuiltInShaderSource.TextureTest),
                TexturePath          = @"Z:\ShaderStore\ColorTest5.png"
            };

            var TexTestSkull_Args = new ShaderCreationArguments()
            {
                Type                 = ShaderBlobType.TextureStandard(),
                SimpleName           = "TexTestSkull",
                FragmentShaderSource = new List <string>(BuiltInShaderSource.TextureTest),
                TexturePath          = @"Z:\ShaderStore\Mega-Skull.png"
            };

            var TexTestSkull2_Args = new ShaderCreationArguments()
            {
                Type                 = ShaderBlobType.TextureStandard(),
                SimpleName           = "TexTestSkull2",
                FragmentShaderSource = new List <string>(BuiltInShaderSource.TextureTest),
                TexturePath          = @"Z:\ShaderStore\Mega-Skull2.png"
            };

            var TexTestSkull3_Args = new ShaderCreationArguments()
            {
                Type                 = ShaderBlobType.TextureStandard(),
                SimpleName           = "TexTestSkull2",
                FragmentShaderSource = new List <string>(BuiltInShaderSource.TextureTest),
                TexturePath          = @"Z:\ShaderStore\Mega-Skull3.png"
            };

            toReturn.Add(SimplestShader_Args);
            toReturn.Add(SimplestShader_WithTime_Args);
            toReturn.Add(BaseShader_Args);
            toReturn.Add(BaseShader2_Args);
            toReturn.Add(BaseShaderAlternate_Args);
            toReturn.Add(ColorNoIndex_Args);
            toReturn.Add(ColorIndex_Args);
            toReturn.Add(ColorTest_Args);
            toReturn.Add(TexTest_Args);
            toReturn.Add(TexTest2_Args);
            toReturn.Add(TexTest3_Args);
            toReturn.Add(TexTest4_Args);
            toReturn.Add(TexTest5_Args);
            toReturn.Add(TexTestSkull_Args);
            toReturn.Add(TexTestSkull2_Args);
            toReturn.Add(TexTestSkull3_Args);

            return(toReturn);
        }