示例#1
0
 public SpriteSetConverter(ISurfaceShader shaderProgram, SurfaceSetting[] surfaceSettings,
                           Func <IndexedSurface <TVertexData>, UVQuadGeometry <TVertexData> > geometryMaker, Func <string, Texture> textureProvider = null)
 {
     this.shaderProgram   = shaderProgram;
     this.surfaceSettings = surfaceSettings;
     this.geometryMaker   = geometryMaker;
     this.textureProvider = textureProvider ?? (s => new Texture(s));
 }
示例#2
0
        public static SurfaceWrapper <T> WithShader <T>(this T surface, ISurfaceShader shader)
            where T : Surface
        {
            if (shader == null)
            {
                throw new Exception("Shader not found");
            }

            shader.UseOnSurface(surface);
            return(new SurfaceWrapper <T>(surface));
        }
示例#3
0
        public ShaderManager()
        {
            var loader = ShaderFileLoader.CreateDefault("data/shaders");
            var man    = new amulware.Graphics.ShaderManagement.ShaderManager();

            man.Add(loader.Load(""));

            this.Primitives = man.MakeShaderProgram("primitives");

            this.UVColor = man.MakeShaderProgram("uvcolor");
        }
示例#4
0
 public SpriteSet(ISurfaceShader shaderProgram, SurfaceSetting[] surfaceSettings)
 {
     this.sprites = new Dictionary <string, Sprite <TVertexData> >();
     this.surface = new IndexedSurface <TVertexData>();
     if (surfaceSettings != null)
     {
         this.surface.AddSettings(surfaceSettings);
     }
     if (shaderProgram != null)
     {
         shaderProgram.UseOnSurface(this.surface);
     }
 }
示例#5
0
        private void initialise()
        {
            this.UVColor  = GraphicsHelper.LoadShaderProgram("data/shaders/uvcolor");
            this.Sprite3D = GraphicsHelper.LoadShaderProgram("data/shaders/simple_sprite");

            this.Wall = GraphicsHelper.LoadShaderProgram("data/shaders/wall");

            this.DebugDeferred = GraphicsHelper.LoadShaderProgram("data/shaders/post.vs", "data/shaders/post/debugDeferred.fs");

            this.PointLights  = GraphicsHelper.LoadShaderProgram("data/shaders/deferred/pointlight");
            this.AmbientLight = GraphicsHelper.LoadShaderProgram("data/shaders/deferred/ambient");

            this.PostCopy = GraphicsHelper.LoadShaderProgram("data/shaders/post.vs", "data/shaders/post/copy.fs");

            this.Overlay = GraphicsHelper.LoadShaderProgram("data/shaders/post.vs", "data/shaders/post/overlayFade.fs");
        }
示例#6
0
        static public SpriteSet <TVertexData> FromJsonFile(
            string filename, Func <IndexedSurface <TVertexData>, UVQuadGeometry <TVertexData> > geometryMaker,
            ISurfaceShader shaderProgram           = null, SurfaceSetting[] surfaceSettings = null,
            Func <string, Texture> textureProvider = null, bool texturesRelativeToJson      = false)
        {
            if (textureProvider == null)
            {
                textureProvider = file => new Texture(file);
            }

            if (texturesRelativeToJson)
            {
                string path         = Path.GetDirectoryName(filename) ?? "";
                var    providerCopy = textureProvider;
                textureProvider = file => providerCopy(Path.Combine(path, file));
            }

            return(SpriteSet <TVertexData> .FromJsonTextReader(File.OpenText(filename), geometryMaker, shaderProgram,
                                                               surfaceSettings, textureProvider));
        }
示例#7
0
        static public SpriteSet <TVertexData> FromJsonTextReader(
            TextReader textReader, Func <IndexedSurface <TVertexData>, UVQuadGeometry <TVertexData> > geometryMaker,
            ISurfaceShader shaderProgram           = null, SurfaceSetting[] surfaceSettings = null,
            Func <string, Texture> textureProvider = null)
        {
            if (textureProvider == null)
            {
                textureProvider = file => new Texture(file);
            }

            var serialiser = new JsonSerializer().ConfigureForGraphics();

            serialiser.Converters.Add(
                new SpriteSetConverter <TVertexData>(shaderProgram, surfaceSettings, geometryMaker, textureProvider)
                );

            var set = serialiser.Deserialize <SpriteSet <TVertexData> >(new JsonTextReader(textReader));

            return(set);
        }
示例#8
0
        public static SpriteSet <TVertexData> Copy <TVertexDataIn>
            (SpriteSet <TVertexDataIn> template, Func <IndexedSurface <TVertexData>, UVQuadGeometry <TVertexData> > geometryMaker,
            ISurfaceShader shaderProgram = null, SurfaceSetting[] surfaceSettings = null, bool keepTextureUniforms = true)
            where TVertexDataIn : struct, IVertexData
        {
            var set = new SpriteSet <TVertexData>(shaderProgram, surfaceSettings);

            foreach (var item in template.sprites)
            {
                set.sprites.Add(item.Key, Sprite <TVertexData>
                                .Copy(item.Value, geometryMaker(set.surface)));
            }

            if (keepTextureUniforms)
            {
                set.surface.AddSettings(template.surface.Settings.Where(setting => setting is TextureUniform));
            }

            return(set);
        }
        public Layer(ISurfaceShader shader, ISurfaceShader wispShader, CrepuscularRayGeometry rayGeo, string filename, float brightness, int wisps)
        {
            this.rayGeo = rayGeo;
            var texture = new Texture("gfx/" + filename + ".png", true);

            this.surface = new PostProcessSurface();
            this.surface.AddSettings(
                new TextureUniform("diffuseTexture", texture),
                new ColorUniform("color", Color.GrayScale((byte)(255 * brightness)))
                );
            shader.UseOnSurface(this.surface);

            this.wispSurface = new IndexedSurface<UVColorVertexData>();
            wispShader.UseOnSurface(this.wispSurface);

            this.wispGeo = new Sprite2DGeometry(this.wispSurface)
            {
                Color = Color.White.WithAlpha()
            };

            this.wisps = Enumerable.Range(0, wisps)
                .Select(i => new Wisp()).ToList();
        }