예제 #1
0
        public void Draw()
        {
            // it is example with using a second FBO
            // gen FBO
            GenTexturedFBO();
            // set scene viewport according to items size
            GL.Viewport(0, 0, GetWidth(), GetHeight());
            // crear color and depth bits
            GL.Clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

            ///////////////
            // draw cube with light
            GL.UseProgram(_shaderCommon);
            UniformSender.SendColorAsUniformVariable(_shaderCommon, Color.White, "lightColor");
            UniformSender.SendVec3AsUniformVariable(_shaderCommon, new float[] { 1.2f, 1.0f, 2.0f }, "lightPos");
            UniformSender.SendMVPAsUniformVariable(_shaderCommon, _model, _view, _projection);
            BindCubeBuffer();
            UniformSender.SendColorAsUniformVariable(_shaderCommon, _color, "objectColor");
            GL.DrawArrays(GL_TRIANGLES, 0, _VBOlenght);

            // optionally: draw edges
            UniformSender.SendColorAsUniformVariable(_shaderCommon, Color.Black, "objectColor");
            GL.DrawArrays(GL_LINE_STRIP, 0, _VBOlenght);

            // using light of lamp
            GL.UseProgram(_shaderLamp);
            BindLampBuffer();
            GL.DrawArrays(GL_TRIANGLES, 0, _VBOlenght);
            /////////////////

            // unbind second FBO and restore viewport to current window
            UnbindFBO();
            RenderService.SetGLLayerViewport(GetHandler(), this);

            // draw FBO texture
            GL.UseProgram(_shaderTexture);
            GenTextureBuffers();
            BindTexture();

            UniformSender.SendUniformSample2D(_shaderTexture, "tex");
            GL.DrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, IntPtr.Zero);

            // delete resources
            GL.DeleteFramebuffersEXT(1, _FBO);
            GL.DeleteRenderbuffersEXT(1, _depthrenderbuffer);
            GL.DeleteTextures(1, _texture);
            GL.DeleteBuffers(2, _buffers);
            GL.DisableVertexAttribArray(0);
            GL.DisableVertexAttribArray(1);
        }