diff options
Diffstat (limited to 'src/VBox/GuestHost/OpenGL/include/state/cr_framebuffer.h')
-rw-r--r-- | src/VBox/GuestHost/OpenGL/include/state/cr_framebuffer.h | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/src/VBox/GuestHost/OpenGL/include/state/cr_framebuffer.h b/src/VBox/GuestHost/OpenGL/include/state/cr_framebuffer.h new file mode 100644 index 00000000..13dd6e02 --- /dev/null +++ b/src/VBox/GuestHost/OpenGL/include/state/cr_framebuffer.h @@ -0,0 +1,108 @@ +/* $Id: cr_framebuffer.h $ */ + +/** @file + * VBox crOpenGL: FBO related state info + */ + +/* + * Copyright (C) 2009-2019 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ + + +#ifndef CR_STATE_FRAMEBUFFEROBJECT_H +#define CR_STATE_FRAMEBUFFEROBJECT_H + +#include "cr_hash.h" +#include "state/cr_statetypes.h" +#include "state/cr_statefuncs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define CR_MAX_COLOR_ATTACHMENTS 16 + +typedef struct { + GLenum type; /*one of GL_NONE GL_TEXTURE GL_RENDERBUFFER_EXT*/ + GLuint name; + GLint level; + GLint face; + GLint zoffset; +} CRFBOAttachmentPoint; + +typedef struct { + GLuint id, hwid; + CRFBOAttachmentPoint color[CR_MAX_COLOR_ATTACHMENTS]; + CRFBOAttachmentPoint depth; + CRFBOAttachmentPoint stencil; + GLenum readbuffer; + /*@todo: we don't support drawbufferS yet, so it's a stub*/ + GLenum drawbuffer[1]; +#ifdef IN_GUEST + GLenum status; +#endif + /* bitfield representing the object usage. 1 means the object is used by the context with the given bitid */ + CRbitvalue ctxUsage[CR_MAX_BITARRAY]; +} CRFramebufferObject; + +typedef struct { + GLuint id, hwid; + GLsizei width, height; + GLenum internalformat; + GLuint redBits, greenBits, blueBits, alphaBits, depthBits, stencilBits; + /* bitfield representing the object usage. 1 means the object is used by the context with the given bitid */ + CRbitvalue ctxUsage[CR_MAX_BITARRAY]; +} CRRenderbufferObject; + +typedef struct { + CRFramebufferObject *readFB, *drawFB; + CRRenderbufferObject *renderbuffer; +} CRFramebufferObjectState; + +DECLEXPORT(void) STATE_APIENTRY crStateFramebufferObjectInit(CRContext *ctx); +DECLEXPORT(void) STATE_APIENTRY crStateFramebufferObjectDestroy(CRContext *ctx); +DECLEXPORT(void) STATE_APIENTRY crStateFramebufferObjectSwitch(CRContext *from, CRContext *to); + +DECLEXPORT(void) STATE_APIENTRY crStateFramebufferObjectDisableHW(CRContext *ctx, GLuint idDrawFBO, GLuint idReadFBO); +DECLEXPORT(void) STATE_APIENTRY crStateFramebufferObjectReenableHW(CRContext *fromCtx, CRContext *toCtx, GLuint idDrawFBO, GLuint idReadFBO); + +DECLEXPORT(GLuint) STATE_APIENTRY crStateGetFramebufferHWID(GLuint id); +DECLEXPORT(GLuint) STATE_APIENTRY crStateGetRenderbufferHWID(GLuint id); + +DECLEXPORT(void) STATE_APIENTRY crStateBindRenderbufferEXT(GLenum target, GLuint renderbuffer); +DECLEXPORT(void) STATE_APIENTRY crStateDeleteRenderbuffersEXT(GLsizei n, const GLuint *renderbuffers); +DECLEXPORT(void) STATE_APIENTRY crStateRenderbufferStorageEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +DECLEXPORT(void) STATE_APIENTRY crStateGetRenderbufferParameterivEXT(GLenum target, GLenum pname, GLint *params); +DECLEXPORT(void) STATE_APIENTRY crStateBindFramebufferEXT(GLenum target, GLuint framebuffer); +DECLEXPORT(void) STATE_APIENTRY crStateDeleteFramebuffersEXT(GLsizei n, const GLuint *framebuffers); +DECLEXPORT(void) STATE_APIENTRY crStateFramebufferTexture1DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +DECLEXPORT(void) STATE_APIENTRY crStateFramebufferTexture2DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +DECLEXPORT(void) STATE_APIENTRY crStateFramebufferTexture3DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +DECLEXPORT(void) STATE_APIENTRY crStateFramebufferRenderbufferEXT(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +DECLEXPORT(void) STATE_APIENTRY crStateGetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, GLenum pname, GLint *params); +DECLEXPORT(void) STATE_APIENTRY crStateGenerateMipmapEXT(GLenum target); + +DECLEXPORT(GLuint) STATE_APIENTRY crStateFBOHWIDtoID(GLuint hwid); +DECLEXPORT(GLuint) STATE_APIENTRY crStateRBOHWIDtoID(GLuint hwid); + +DECLEXPORT(void) crStateRegFramebuffers(GLsizei n, GLuint *buffers); +DECLEXPORT(void) crStateRegRenderbuffers(GLsizei n, GLuint *buffers); + +#ifdef IN_GUEST +DECLEXPORT(GLenum) STATE_APIENTRY crStateCheckFramebufferStatusEXT(GLenum target); +DECLEXPORT(GLenum) STATE_APIENTRY crStateSetFramebufferStatus(GLenum target, GLenum status); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* CR_STATE_FRAMEBUFFEROBJECT_H */ |