Ejemplo n.º 1
0
 public LayerManager(int max)
 {
     MaxLayers = max;
     textures = new LookupStrInt(max);
     widths = new LookupStrInt(max);
     heights = new LookupStrInt(max);
     _layer = new Layer();
     _layer.set(0,0,0);
 }
Ejemplo n.º 2
0
 public Layer GenFBOTexture(int w = -1, int h = -1)
 {
     if (w == -1) w = width;
     if (h == -1) h = height;
     int tex;
     GL.GenTextures(1, out tex);
     GL.BindTexture(TextureTarget.Texture2D, tex);
     GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, w, h, 0, PixelFormat.Rgba, PixelType.UnsignedByte, IntPtr.Zero);
     GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest);
     GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMagFilter.Nearest);
     Debug.PrintEngine("Generated FBO Texture: " + tex + " (" + w + " , " + h + ")");
     Layer returner = new Layer();
     returner.set(tex, w, h);
     return returner;
 }
Ejemplo n.º 3
0
 public void AddLayer(string name, Layer layer)
 {
     textures.AddEntry(name, layer.t);
     widths.AddEntry(name, layer.w);
     heights.AddEntry(name, layer.h);
 }
Ejemplo n.º 4
0
        //ok
        public void Render_SceneToLayer(Layer layer, bool usecam = true)
        {
            core.SetData();
            fbo.Use(layer.t);

            if (usecam)
            {
                shader_plain.SetVariable("cam_pos", game.camera.GetXPixels(), game.camera.GetYPixels(), game.camera.GetZoomX(), game.camera.GetZoomY());
            }
            else
            {
                shader_plain.SetVariable("cam_pos", 0, 0, 1, 1);
            }
            shader_plain.SetVariable("screen_size_half", width / 2, height / 2);
            GL.Viewport(0, 0, layer.w, layer.h);

            Shader.Bind(shader_plain);

            GL.BindTexture(TextureTarget.Texture2D, texture);
            GL.Clear(ClearBufferMask.ColorBufferBit);
            core.Render();

            fbo.DeUse();
            GL.Viewport(0, 0, width, height);
        }
Ejemplo n.º 5
0
        //ok
        public void Render_MergeLayers(Layer[] scene_layer, Layer[] effect_layer)
        {
            core.ClearData();
            core.AddSprite(0, 0, width, height);
            core.SetData();

            shader_merge.SetVariable("cam_pos", 1, 1, 1, 1);
            shader_merge.SetVariable("screen_size_half", width / 2, height / 2);

            Shader.Bind(shader_merge);

            GL.BlendFunc(BlendingFactorSrc.One, BlendingFactorDest.OneMinusSrcAlpha);

            for(int i = 0; i < scene_layer.Length; i++)
            {
                BindTexture(scene_layer[i].t);
                core.Render();
            }

            core.ClearData();
            core.AddSprite(0, 0, width, height);
            core.SetData();

            shader_merge_effect.SetVariable("brightness", 1f);
            shader_merge_effect.SetVariable("screen_size_half", width / 2, height / 2);
            shader_merge_effect.SetVariable("cam_pos", 0, 0, 1, 1);
            Shader.Bind(shader_merge_effect);

            GL.BlendEquationSeparate(BlendEquationMode.FuncAdd, BlendEquationMode.FuncAdd);
            GL.BlendFuncSeparate(BlendingFactorSrc.DstColor, BlendingFactorDest.Zero, BlendingFactorSrc.DstAlpha, BlendingFactorDest.Zero);

            for (int i = 0; i < effect_layer.Length; i++)
            {
                BindTexture(effect_layer[i].t);
                core.Render();
            }
        }
Ejemplo n.º 6
0
        //ok
        public void RenderLayer(Layer layer)
        {
            core.ClearData();
            core.AddSprite(0, 0, width, height);
            core.SetData();

            shader_merge.SetVariable("cam_pos", 1, 1, 1, 1);
            shader_merge.SetVariable("screen_size_half", width / 2, height / 2);

            Shader.Bind(shader_merge);

            GL.BlendFunc(BlendingFactorSrc.One, BlendingFactorDest.OneMinusSrcAlpha);

            BindTexture(layer.t);
            core.Render();
            core.ClearData();
        }