summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libGLESv2/FramebufferAttachment.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libGLESv2/FramebufferAttachment.h')
-rw-r--r--src/3rdparty/angle/src/libGLESv2/FramebufferAttachment.h246
1 files changed, 246 insertions, 0 deletions
diff --git a/src/3rdparty/angle/src/libGLESv2/FramebufferAttachment.h b/src/3rdparty/angle/src/libGLESv2/FramebufferAttachment.h
new file mode 100644
index 0000000000..18768f9831
--- /dev/null
+++ b/src/3rdparty/angle/src/libGLESv2/FramebufferAttachment.h
@@ -0,0 +1,246 @@
+//
+// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+// FramebufferAttachment.h: Defines the wrapper class gl::FramebufferAttachment, as well as the
+// objects and related functionality. [OpenGL ES 2.0.24] section 4.4.3 page 108.
+
+#ifndef LIBGLESV2_FRAMEBUFFERATTACHMENT_H_
+#define LIBGLESV2_FRAMEBUFFERATTACHMENT_H_
+
+#include "angle_gl.h"
+
+#include "common/angleutils.h"
+#include "common/RefCountObject.h"
+
+namespace rx
+{
+class Renderer;
+class RenderTarget;
+class TextureStorage;
+}
+
+namespace gl
+{
+class Texture2D;
+class TextureCubeMap;
+class Texture3D;
+class Texture2DArray;
+class Renderbuffer;
+
+// FramebufferAttachment implements a GL framebuffer attachment.
+// Attachments are "light" containers, which store pointers to ref-counted GL objects.
+// We support GL texture (2D/3D/Cube/2D array) and renderbuffer object attachments.
+// Note: Our old naming scheme used the term "Renderbuffer" for both GL renderbuffers and for
+// framebuffer attachments, which confused their usage.
+
+class FramebufferAttachment
+{
+ public:
+ FramebufferAttachment();
+ virtual ~FramebufferAttachment();
+
+ // Helper methods
+ GLuint getRedSize() const;
+ GLuint getGreenSize() const;
+ GLuint getBlueSize() const;
+ GLuint getAlphaSize() const;
+ GLuint getDepthSize() const;
+ GLuint getStencilSize() const;
+ GLenum getComponentType() const;
+ GLenum getColorEncoding() const;
+ bool isTexture() const;
+
+ bool isTextureWithId(GLuint textureId) const { return isTexture() && id() == textureId; }
+ bool isRenderbufferWithId(GLuint renderbufferId) const { return !isTexture() && id() == renderbufferId; }
+
+ // Child class interface
+ virtual rx::RenderTarget *getRenderTarget() = 0;
+ virtual rx::RenderTarget *getDepthStencil() = 0;
+ virtual rx::TextureStorage *getTextureStorage() = 0;
+
+ virtual GLsizei getWidth() const = 0;
+ virtual GLsizei getHeight() const = 0;
+ virtual GLenum getInternalFormat() const = 0;
+ virtual GLenum getActualFormat() const = 0;
+ virtual GLsizei getSamples() const = 0;
+
+ virtual unsigned int getSerial() const = 0;
+
+ virtual GLuint id() const = 0;
+ virtual GLenum type() const = 0;
+ virtual GLint mipLevel() const = 0;
+ virtual GLint layer() const = 0;
+ virtual unsigned int getTextureSerial() const = 0;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(FramebufferAttachment);
+};
+
+class Texture2DAttachment : public FramebufferAttachment
+{
+ public:
+ Texture2DAttachment(Texture2D *texture, GLint level);
+
+ virtual ~Texture2DAttachment();
+
+ rx::RenderTarget *getRenderTarget();
+ rx::RenderTarget *getDepthStencil();
+ rx::TextureStorage *getTextureStorage();
+
+ virtual GLsizei getWidth() const;
+ virtual GLsizei getHeight() const;
+ virtual GLenum getInternalFormat() const;
+ virtual GLenum getActualFormat() const;
+ virtual GLsizei getSamples() const;
+
+ virtual unsigned int getSerial() const;
+
+ virtual GLuint id() const;
+ virtual GLenum type() const;
+ virtual GLint mipLevel() const;
+ virtual GLint layer() const;
+ virtual unsigned int getTextureSerial() const;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(Texture2DAttachment);
+
+ BindingPointer<Texture2D> mTexture2D;
+ const GLint mLevel;
+};
+
+class TextureCubeMapAttachment : public FramebufferAttachment
+{
+ public:
+ TextureCubeMapAttachment(TextureCubeMap *texture, GLenum faceTarget, GLint level);
+
+ virtual ~TextureCubeMapAttachment();
+
+ rx::RenderTarget *getRenderTarget();
+ rx::RenderTarget *getDepthStencil();
+ rx::TextureStorage *getTextureStorage();
+
+ virtual GLsizei getWidth() const;
+ virtual GLsizei getHeight() const;
+ virtual GLenum getInternalFormat() const;
+ virtual GLenum getActualFormat() const;
+ virtual GLsizei getSamples() const;
+
+ virtual unsigned int getSerial() const;
+
+ virtual GLuint id() const;
+ virtual GLenum type() const;
+ virtual GLint mipLevel() const;
+ virtual GLint layer() const;
+ virtual unsigned int getTextureSerial() const;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TextureCubeMapAttachment);
+
+ BindingPointer<TextureCubeMap> mTextureCubeMap;
+ const GLint mLevel;
+ const GLenum mFaceTarget;
+};
+
+class Texture3DAttachment : public FramebufferAttachment
+{
+ public:
+ Texture3DAttachment(Texture3D *texture, GLint level, GLint layer);
+
+ virtual ~Texture3DAttachment();
+
+ rx::RenderTarget *getRenderTarget();
+ rx::RenderTarget *getDepthStencil();
+ rx::TextureStorage *getTextureStorage();
+
+ virtual GLsizei getWidth() const;
+ virtual GLsizei getHeight() const;
+ virtual GLenum getInternalFormat() const;
+ virtual GLenum getActualFormat() const;
+ virtual GLsizei getSamples() const;
+
+ virtual unsigned int getSerial() const;
+
+ virtual GLuint id() const;
+ virtual GLenum type() const;
+ virtual GLint mipLevel() const;
+ virtual GLint layer() const;
+ virtual unsigned int getTextureSerial() const;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(Texture3DAttachment);
+
+ BindingPointer<Texture3D> mTexture3D;
+ const GLint mLevel;
+ const GLint mLayer;
+};
+
+class Texture2DArrayAttachment : public FramebufferAttachment
+{
+ public:
+ Texture2DArrayAttachment(Texture2DArray *texture, GLint level, GLint layer);
+
+ virtual ~Texture2DArrayAttachment();
+
+ rx::RenderTarget *getRenderTarget();
+ rx::RenderTarget *getDepthStencil();
+ rx::TextureStorage *getTextureStorage();
+
+ virtual GLsizei getWidth() const;
+ virtual GLsizei getHeight() const;
+ virtual GLenum getInternalFormat() const;
+ virtual GLenum getActualFormat() const;
+ virtual GLsizei getSamples() const;
+
+ virtual unsigned int getSerial() const;
+
+ virtual GLuint id() const;
+ virtual GLenum type() const;
+ virtual GLint mipLevel() const;
+ virtual GLint layer() const;
+ virtual unsigned int getTextureSerial() const;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(Texture2DArrayAttachment);
+
+ BindingPointer<Texture2DArray> mTexture2DArray;
+ const GLint mLevel;
+ const GLint mLayer;
+};
+
+class RenderbufferAttachment : public FramebufferAttachment
+{
+ public:
+ RenderbufferAttachment(Renderbuffer *renderbuffer);
+
+ virtual ~RenderbufferAttachment();
+
+ rx::RenderTarget *getRenderTarget();
+ rx::RenderTarget *getDepthStencil();
+ rx::TextureStorage *getTextureStorage();
+
+ virtual GLsizei getWidth() const;
+ virtual GLsizei getHeight() const;
+ virtual GLenum getInternalFormat() const;
+ virtual GLenum getActualFormat() const;
+ virtual GLsizei getSamples() const;
+
+ virtual unsigned int getSerial() const;
+
+ virtual GLuint id() const;
+ virtual GLenum type() const;
+ virtual GLint mipLevel() const;
+ virtual GLint layer() const;
+ virtual unsigned int getTextureSerial() const;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(RenderbufferAttachment);
+
+ BindingPointer<Renderbuffer> mRenderbuffer;
+};
+
+}
+
+#endif // LIBGLESV2_FRAMEBUFFERATTACHMENT_H_