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); }