diff options
Diffstat (limited to 'src/mesa/main/fbobject.h')
-rw-r--r-- | src/mesa/main/fbobject.h | 141 |
1 files changed, 16 insertions, 125 deletions
diff --git a/src/mesa/main/fbobject.h b/src/mesa/main/fbobject.h index 0241da2efc8..2c86ef93726 100644 --- a/src/mesa/main/fbobject.h +++ b/src/mesa/main/fbobject.h @@ -27,137 +27,28 @@ #define FBOBJECT_H -/** - * A renderbuffer stores colors or depth values or stencil values. - * A framebuffer object will have a collection of these. - * Data are read/written to the buffer with a handful of Get/Put functions. - * - * Instances of this object are allocated with the Driver's NewRenderbuffer - * hook. Drivers will likely wrap this class inside a driver-specific - * class to simulate inheritance. - */ -struct gl_renderbuffer -{ - GLuint Name; - GLint RefCount; - GLuint Width, Height; - GLenum InternalFormat; - GLenum _BaseFormat; /* Either GL_RGB, GL_RGBA, GL_DEPTH_COMPONENT or */ - /* GL_STENCIL_INDEX. */ - - GLenum DataType; /* GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, etc */ - GLvoid *Data; - - /* Delete this renderbuffer */ - void (*Delete)(GLcontext *ctx, struct gl_renderbuffer *rb); - - /* Allocate new storage for this renderbuffer */ - GLboolean (*AllocStorage)(GLcontext *ctx, struct gl_renderbuffer *rb, - GLenum internalFormat, - GLuint width, GLuint height); - - /* Return a pointer to the element/pixel at (x,y). - * Should return NULL if the buffer memory can't be directly addressed. - */ - void *(*GetPointer)(struct gl_renderbuffer *rb, GLint x, GLint y); - - /* Get/Read a row of values. - * The values will be of format _BaseFormat and type DataType. - */ - void (*GetRow)(struct gl_renderbuffer *rb, - GLint x, GLint y, GLuint count, void *values); - - /* Get/Read values at arbitrary locations - * The values will be of format _BaseFormat and type DataType. - */ - void (*GetValues)(struct gl_renderbuffer *rb, - const GLint x[], const GLint y[], - GLuint count, void *values); - - /* Put/Write a row of values - * The values will be of format _BaseFormat and type DataType. - */ - void (*PutRow)(struct gl_renderbuffer *rb, - GLint x, GLint y, GLuint count, - const void *values, const GLubyte *maek); - - /* Put/Write values at arbitrary locations - * The values will be of format _BaseFormat and type DataType. - */ - void (*PutValues)(struct gl_renderbuffer *rb, - const GLint x[], const GLint y[], GLuint count, - const void *values, const GLubyte *mask); -}; - - -/** - * A renderbuffer attachment point points to either a texture object - * (and specifies a mipmap level, cube face or 3D texture slice) or - * points to a renderbuffer. - */ -struct gl_renderbuffer_attachment -{ - GLenum Type; /* GL_NONE or GL_TEXTURE or GL_RENDERBUFFER_EXT */ - GLboolean Complete; - - /* IF Type == GL_RENDERBUFFER_EXT: */ - struct gl_renderbuffer *Renderbuffer; - - /* IF Type == GL_TEXTURE: */ - struct gl_texture_object *Texture; - GLuint TextureLevel; - GLuint CubeMapFace; /* 0 .. 5, for cube map textures */ - GLuint Zoffset; /* for 3D textures */ -}; - - -/** - * A framebuffer object is basically a collection of rendering buffers. - * (Though, a rendering buffer might actually be a texture image.) - * All the renderbuffers/textures which we reference must have the same - * width and height (and meet a few other requirements) in order for the - * framebufffer object to be "complete". - * - * Instances of this object are allocated with the Driver's Newframebuffer - * hook. Drivers will likely wrap this class inside a driver-specific - * class to simulate inheritance. - */ -struct gl_framebuffer -{ - GLuint Name; - GLint RefCount; - - GLenum Status; /* One of the GL_FRAMEBUFFER_(IN)COMPLETE_* tokens */ - - struct gl_renderbuffer_attachment ColorAttachment[MAX_COLOR_ATTACHMENTS]; - struct gl_renderbuffer_attachment DepthAttachment; - struct gl_renderbuffer_attachment StencilAttachment; - - /* In unextended OpenGL, these vars are part of the GL_COLOR_BUFFER - * attribute group and GL_PIXEL attribute group, respectively. - */ - GLenum DrawBuffer[MAX_DRAW_BUFFERS]; - GLenum ReadBuffer; - - GLuint _Width, _Height; - - /** Delete this framebuffer */ - void (*Delete)(GLcontext *ctx, struct gl_framebuffer *fb); -}; - - -extern struct gl_framebuffer * -_mesa_new_framebuffer(GLcontext *ctx, GLuint name); +extern void +_mesa_remove_attachment(GLcontext *ctx, + struct gl_renderbuffer_attachment *att); extern void -_mesa_delete_framebuffer(GLcontext *ctx, struct gl_framebuffer *fb); +_mesa_set_texture_attachment(GLcontext *ctx, + struct gl_renderbuffer_attachment *att, + struct gl_texture_object *texObj, + GLenum texTarget, GLuint level, GLuint zoffset); -extern struct gl_renderbuffer * -_mesa_new_renderbuffer(GLcontext *ctx, GLuint name); +extern void +_mesa_set_renderbuffer_attachment(GLcontext *ctx, + struct gl_renderbuffer_attachment *att, + struct gl_renderbuffer *rb); extern void -_mesa_delete_renderbuffer(GLcontext *ctx, struct gl_renderbuffer *rb); +_mesa_framebuffer_renderbuffer(GLcontext *ctx, + struct gl_renderbuffer_attachment *att, + struct gl_renderbuffer *rb); +extern void +_mesa_test_framebuffer_completeness(GLcontext *ctx, struct gl_framebuffer *fb); extern GLboolean GLAPIENTRY _mesa_IsRenderbufferEXT(GLuint renderbuffer); |