示例#1
0
        public override void Init()
        {
            //init FBO
            shadowMapFBO = GL.GenFramebuffer();
            GL.BindFramebuffer(FramebufferTarget.Framebuffer, shadowMapFBO);

            //init shadowmap
            shadowMap = GL.GenTexture();
            GL.BindTexture(TextureTarget.Texture2D, shadowMap);
            GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.DepthComponent, shadowMapRes, shadowMapRes, 0, PixelFormat.DepthComponent, PixelType.Float, IntPtr.Zero);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest);
            GL.BindTexture(TextureTarget.Texture2D, 0);

            //bind texture to framebuffer
            GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.DepthAttachment, TextureTarget.Texture2D, shadowMap, 0);

            GL.DrawBuffer(DrawBufferMode.None);
            GL.ReadBuffer(ReadBufferMode.None);

            GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0);

            //init post processor
            postProcessor = new PostProcessor();

            GL.DepthFunc(DepthFunction.Lequal);

            Logger.Log("Renderer initialized.", true);
        }
示例#2
0
        public override void Init()
        {
            shadowMapFramebuffer = new Framebuffer("shadowmap-fbo", shadowMapRes, shadowMapRes, new Attachment[]
            {
                new Attachment
                {
                    Draw = false,
                    PixelInternalFormat   = PixelInternalFormat.DepthComponent,
                    PixelFormat           = PixelFormat.DepthComponent,
                    PixelType             = PixelType.Float,
                    FramebufferAttachment = FramebufferAttachment.DepthAttachment,
                    TextureParamsInt      = new TextureParamInt[]
                    {
                        new TextureParamInt {
                            ParamName = TextureParameterName.TextureMinFilter, Param = (int)TextureMinFilter.Nearest
                        },
                        new TextureParamInt {
                            ParamName = TextureParameterName.TextureMagFilter, Param = (int)TextureMagFilter.Nearest
                        },
                        new TextureParamInt {
                            ParamName = TextureParameterName.TextureWrapS, Param = (int)TextureWrapMode.ClampToBorder
                        },
                        new TextureParamInt {
                            ParamName = TextureParameterName.TextureWrapT, Param = (int)TextureWrapMode.ClampToBorder
                        }
                    },
                    TextureParamsFloatArr = new TextureParamFloatArr[]
                    {
                        new TextureParamFloatArr {
                            ParamName = TextureParameterName.TextureBorderColor, Params = new float[] { 1.0f, 1.0f, 1.0f, 1.0f }
                        }
                    }
                }
            });

            string postProcessPath = Path.Combine(AppContext.BaseDirectory, "EngineAssets/Shaders/PostProcess");

            postProcessor = new PostProcessor();
            postProcessor.Shaders.AddRange(new Shader[] {
                Shader.FromSourceFile("post-process",
                                      Path.Combine(postProcessPath, "post-process.vert"),
                                      Path.Combine(postProcessPath, "empty.frag"))
            });

            Logger.Log("Renderer initialized.", true);
        }