blob: 73e4e843d7d49710bdc1a5fa749ad435711d2142 [file] [log] [blame]
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +00001//
2// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
daniel@transgaming.com4ba24062012-12-20 20:54:24 +00007// Image.h: Defines the rx::Image class, an abstract base class for the
8// renderer-specific classes which will define the interface to the underlying
9// surfaces or resources.
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000010
11#ifndef LIBGLESV2_RENDERER_IMAGE_H_
12#define LIBGLESV2_RENDERER_IMAGE_H_
13
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000014#include "common/debug.h"
15
daniel@transgaming.com31b13e12012-11-28 19:34:30 +000016namespace gl
17{
18class Framebuffer;
19}
20
daniel@transgaming.coma9571682012-11-28 19:33:08 +000021namespace rx
22{
daniel@transgaming.comc5c806d2012-12-20 20:52:53 +000023class Renderer;
daniel@transgaming.com87705f82012-12-20 21:10:45 +000024class TextureStorageInterface2D;
25class TextureStorageInterfaceCube;
shannon.woods%transgaming.com@gtempaccount.com2058d642013-04-13 03:42:50 +000026class TextureStorageInterface3D;
shannon.woods%transgaming.com@gtempaccount.com6c86bd52013-04-13 03:45:45 +000027class TextureStorageInterface2DArray;
daniel@transgaming.com0f195ad2012-10-31 19:51:59 +000028
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000029class Image
30{
31 public:
32 Image();
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000033 virtual ~Image() {};
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000034
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000035 GLsizei getWidth() const { return mWidth; }
36 GLsizei getHeight() const { return mHeight; }
shannon.woods%transgaming.com@gtempaccount.com4760c562013-04-13 03:42:30 +000037 GLsizei getDepth() const { return mDepth; }
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000038 GLenum getInternalFormat() const { return mInternalFormat; }
39 GLenum getActualFormat() const { return mActualFormat; }
shannon.woods%transgaming.com@gtempaccount.com56074f32013-04-13 03:45:30 +000040 GLenum getTarget() const { return mTarget; }
shannonwoods@chromium.org803be0a2013-05-30 00:08:59 +000041 bool isRenderableFormat() const { return mRenderable; }
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000042
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000043 void markDirty() {mDirty = true;}
44 void markClean() {mDirty = false;}
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000045 virtual bool isDirty() const = 0;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000046
daniel@transgaming.com87705f82012-12-20 21:10:45 +000047 virtual void setManagedSurface(TextureStorageInterface2D *storage, int level) {};
48 virtual void setManagedSurface(TextureStorageInterfaceCube *storage, int face, int level) {};
shannon.woods%transgaming.com@gtempaccount.com2058d642013-04-13 03:42:50 +000049 virtual void setManagedSurface(TextureStorageInterface3D *storage, int level) {};
shannon.woods%transgaming.com@gtempaccount.com6c86bd52013-04-13 03:45:45 +000050 virtual void setManagedSurface(TextureStorageInterface2DArray *storage, int layer, int level) {};
Jamie Madill169d1112013-10-24 17:49:37 -040051 virtual bool copyToStorage(TextureStorageInterface2D *storage, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height) = 0;
52 virtual bool copyToStorage(TextureStorageInterfaceCube *storage, int face, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height) = 0;
53 virtual bool copyToStorage(TextureStorageInterface3D *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth) = 0;
54 virtual bool copyToStorage(TextureStorageInterface2DArray *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height) = 0;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000055
Geoff Lang005df412013-10-16 14:12:50 -040056 virtual bool redefine(Renderer *renderer, GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, bool forceRelease) = 0;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000057
shannon.woods%transgaming.com@gtempaccount.com4760c562013-04-13 03:42:30 +000058 virtual void loadData(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
shannonwoods@chromium.org557aab02013-05-30 00:08:27 +000059 GLint unpackAlignment, GLenum type, const void *input) = 0;
shannon.woods%transgaming.com@gtempaccount.com4760c562013-04-13 03:42:30 +000060 virtual void loadCompressedData(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000061 const void *input) = 0;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000062
shannon.woods%transgaming.com@gtempaccount.come5dcce72013-04-13 03:44:33 +000063 virtual void copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source) = 0;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000064
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000065 protected:
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000066 GLsizei mWidth;
67 GLsizei mHeight;
shannon.woods%transgaming.com@gtempaccount.com4760c562013-04-13 03:42:30 +000068 GLsizei mDepth;
Geoff Lang005df412013-10-16 14:12:50 -040069 GLenum mInternalFormat;
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000070 GLenum mActualFormat;
shannonwoods@chromium.org803be0a2013-05-30 00:08:59 +000071 bool mRenderable;
shannon.woods%transgaming.com@gtempaccount.com56074f32013-04-13 03:45:30 +000072 GLenum mTarget;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000073
74 bool mDirty;
75
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000076 private:
77 DISALLOW_COPY_AND_ASSIGN(Image);
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000078};
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000079
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000080}
81
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000082#endif // LIBGLESV2_RENDERER_IMAGE_H_