X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Ffbobject.h;h=54093940733450f3fb4c1c2b88667af575ab7263;hb=54f425b5cefd1e40f315a4f8747b9a3db29ab9d4;hp=0241da2efc82bed714666011c84ea42430a3d957;hpb=2c6f911e10761c0946261d494bf149b19072821d;p=mesa.git diff --git a/src/mesa/main/fbobject.h b/src/mesa/main/fbobject.h index 0241da2efc8..54093940733 100644 --- a/src/mesa/main/fbobject.h +++ b/src/mesa/main/fbobject.h @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 7.1 * - * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -27,137 +27,45 @@ #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 */ +extern void +_mesa_init_fbobjects(GLcontext *ctx); - struct gl_renderbuffer_attachment ColorAttachment[MAX_COLOR_ATTACHMENTS]; - struct gl_renderbuffer_attachment DepthAttachment; - struct gl_renderbuffer_attachment StencilAttachment; +extern struct gl_renderbuffer * +_mesa_lookup_renderbuffer(GLcontext *ctx, GLuint id); - /* 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; +extern struct gl_framebuffer * +_mesa_lookup_framebuffer(GLcontext *ctx, GLuint id); - GLuint _Width, _Height; +extern struct gl_renderbuffer_attachment * +_mesa_get_attachment(GLcontext *ctx, struct gl_framebuffer *fb, + GLenum attachment); - /** Delete this framebuffer */ - void (*Delete)(GLcontext *ctx, struct gl_framebuffer *fb); -}; +extern void +_mesa_remove_attachment(GLcontext *ctx, + struct gl_renderbuffer_attachment *att); -extern struct gl_framebuffer * -_mesa_new_framebuffer(GLcontext *ctx, GLuint name); +extern void +_mesa_set_texture_attachment(GLcontext *ctx, + struct gl_framebuffer *fb, + struct gl_renderbuffer_attachment *att, + struct gl_texture_object *texObj, + GLenum texTarget, GLuint level, GLuint zoffset); extern void -_mesa_delete_framebuffer(GLcontext *ctx, struct gl_framebuffer *fb); +_mesa_set_renderbuffer_attachment(GLcontext *ctx, + struct gl_renderbuffer_attachment *att, + struct gl_renderbuffer *rb); -extern struct gl_renderbuffer * -_mesa_new_renderbuffer(GLcontext *ctx, GLuint name); +extern void +_mesa_framebuffer_renderbuffer(GLcontext *ctx, struct gl_framebuffer *fb, + GLenum attachment, struct gl_renderbuffer *rb); extern void -_mesa_delete_renderbuffer(GLcontext *ctx, struct gl_renderbuffer *rb); +_mesa_test_framebuffer_completeness(GLcontext *ctx, struct gl_framebuffer *fb); +extern GLenum +_mesa_base_fbo_format(GLcontext *ctx, GLenum internalFormat); extern GLboolean GLAPIENTRY _mesa_IsRenderbufferEXT(GLuint renderbuffer); @@ -175,6 +83,11 @@ extern void GLAPIENTRY _mesa_RenderbufferStorageEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +extern void GLAPIENTRY +_mesa_RenderbufferStorageMultisample(GLenum target, GLsizei samples, + GLenum internalformat, + GLsizei width, GLsizei height); + extern void GLAPIENTRY _mesa_GetRenderbufferParameterivEXT(GLenum target, GLenum pname, GLint *params); @@ -207,6 +120,10 @@ _mesa_FramebufferTexture3DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +extern void GLAPIENTRY +_mesa_FramebufferTextureLayerEXT(GLenum target, GLenum attachment, + GLuint texture, GLint level, GLint layer); + extern void GLAPIENTRY _mesa_FramebufferRenderbufferEXT(GLenum target, GLenum attachment, GLenum renderbuffertarget, @@ -220,4 +137,10 @@ extern void GLAPIENTRY _mesa_GenerateMipmapEXT(GLenum target); +extern void GLAPIENTRY +_mesa_BlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, + GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, + GLbitfield mask, GLenum filter); + + #endif /* FBOBJECT_H */