public void Create(int width, int height) { if (glGenFramebuffersEXT == null) { glGenFramebuffersEXT = OpenGL.GetDelegateFor <OpenGL.glGenFramebuffersEXT>(); glBindFramebufferEXT = OpenGL.GetDelegateFor <OpenGL.glBindFramebufferEXT>(); glGenRenderbuffersEXT = OpenGL.GetDelegateFor <OpenGL.glGenRenderbuffersEXT>(); glBindRenderbufferEXT = OpenGL.GetDelegateFor <OpenGL.glBindRenderbufferEXT>(); glRenderbufferStorageEXT = OpenGL.GetDelegateFor <OpenGL.glRenderbufferStorageEXT>(); glFramebufferRenderbufferEXT = OpenGL.GetDelegateFor <OpenGL.glFramebufferRenderbufferEXT>(); glDeleteRenderbuffersEXT = OpenGL.GetDelegateFor <OpenGL.glDeleteRenderbuffersEXT>(); glDeleteFramebuffersEXT = OpenGL.GetDelegateFor <OpenGL.glDeleteFramebuffersEXT>(); } // First, create the frame buffer and bind it. glGenFramebuffersEXT(1, this.framebufferId); glBindFramebufferEXT(OpenGL.GL_FRAMEBUFFER, this.framebufferId[0]); // Create the color render buffer and bind it, then allocate storage for it. glGenRenderbuffersEXT(1, this.colorRenderBufferId); glBindRenderbufferEXT(OpenGL.GL_RENDERBUFFER, this.colorRenderBufferId[0]); glRenderbufferStorageEXT(OpenGL.GL_RENDERBUFFER, OpenGL.GL_RGBA, width, height); // Create the depth render buffer and bind it, then allocate storage for it. glGenRenderbuffersEXT(1, this.depthRenderBufferId); glBindRenderbufferEXT(OpenGL.GL_RENDERBUFFER, this.depthRenderBufferId[0]); glRenderbufferStorageEXT(OpenGL.GL_RENDERBUFFER, OpenGL.GL_DEPTH_COMPONENT24, width, height); // Set the render buffer for color and depth. glFramebufferRenderbufferEXT(OpenGL.GL_FRAMEBUFFER, OpenGL.GL_COLOR_ATTACHMENT0, OpenGL.GL_RENDERBUFFER, this.colorRenderBufferId[0]); glFramebufferRenderbufferEXT(OpenGL.GL_FRAMEBUFFER, OpenGL.GL_DEPTH_ATTACHMENT, OpenGL.GL_RENDERBUFFER, this.depthRenderBufferId[0]); }
/// <summary> /// Create, update, use and delete a renderbuffer object. /// </summary> /// <param name="width"></param> /// <param name="height"></param> /// <param name="internalformat"></param> /// <param name="bufferType"></param> public Renderbuffer(int width, int height, uint internalformat, RenderbufferType bufferType) { if (glGenRenderbuffers == null) { glGenRenderbuffers = OpenGL.GetDelegateFor <OpenGL.glGenRenderbuffersEXT>(); glBindRenderbuffer = OpenGL.GetDelegateFor <OpenGL.glBindRenderbufferEXT>(); glRenderbufferStorage = OpenGL.GetDelegateFor <OpenGL.glRenderbufferStorageEXT>(); } this.Width = width; this.Height = height; this.BufferType = bufferType; glGenRenderbuffers(1, renderbuffer); glBindRenderbuffer(OpenGL.GL_RENDERBUFFER, renderbuffer[0]); glRenderbufferStorage(OpenGL.GL_RENDERBUFFER, internalformat,// TODO: add comment about OpenGL.GL_DEPTH24_STENCIL8, OpenGL.GL_RGBA, width, height); }