blob: 8179e7ef0b1b356262bded3486a44121f5fa5302 [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;
daniel@transgaming.com0f195ad2012-10-31 19:51:59 +000027
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000028class Image
29{
30 public:
31 Image();
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000032 virtual ~Image() {};
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000033
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000034 GLsizei getWidth() const { return mWidth; }
35 GLsizei getHeight() const { return mHeight; }
shannon.woods%transgaming.com@gtempaccount.com4760c562013-04-13 03:42:30 +000036 GLsizei getDepth() const { return mDepth; }
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000037 GLenum getInternalFormat() const { return mInternalFormat; }
38 GLenum getActualFormat() const { return mActualFormat; }
shannon.woods%transgaming.com@gtempaccount.com56074f32013-04-13 03:45:30 +000039 GLenum getTarget() const { return mTarget; }
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000040
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000041 void markDirty() {mDirty = true;}
42 void markClean() {mDirty = false;}
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000043 virtual bool isDirty() const = 0;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000044
daniel@transgaming.com87705f82012-12-20 21:10:45 +000045 virtual void setManagedSurface(TextureStorageInterface2D *storage, int level) {};
46 virtual void setManagedSurface(TextureStorageInterfaceCube *storage, int face, int level) {};
shannon.woods%transgaming.com@gtempaccount.com2058d642013-04-13 03:42:50 +000047 virtual void setManagedSurface(TextureStorageInterface3D *storage, int level) {};
daniel@transgaming.com87705f82012-12-20 21:10:45 +000048 virtual bool updateSurface(TextureStorageInterface2D *storage, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height) = 0;
49 virtual bool updateSurface(TextureStorageInterfaceCube *storage, int face, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height) = 0;
shannon.woods%transgaming.com@gtempaccount.com2058d642013-04-13 03:42:50 +000050 virtual bool updateSurface(TextureStorageInterface3D *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth) = 0;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000051
shannon.woods%transgaming.com@gtempaccount.com56074f32013-04-13 03:45:30 +000052 virtual bool redefine(Renderer *renderer, GLenum target, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, bool forceRelease) = 0;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000053
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000054 virtual bool isRenderableFormat() const = 0;
55
shannon.woods%transgaming.com@gtempaccount.com4760c562013-04-13 03:42:30 +000056 virtual void loadData(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
57 GLint unpackAlignment, const void *input) = 0;
58 virtual void loadCompressedData(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000059 const void *input) = 0;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000060
shannon.woods%transgaming.com@gtempaccount.come5dcce72013-04-13 03:44:33 +000061 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 +000062
shannon.woods%transgaming.com@gtempaccount.com4760c562013-04-13 03:42:30 +000063 static void loadAlphaDataToBGRA(GLsizei width, GLsizei height, GLsizei depth,
64 int inputRowPitch, int inputDepthPitch, const void *input,
65 size_t outputRowPitch, size_t outputDepthPitch, void *output);
66 static void loadAlphaDataToNative(GLsizei width, GLsizei height, GLsizei depth,
67 int inputRowPitch, int inputDepthPitch, const void *input,
68 size_t outRowputPitch, size_t outputDepthPitch, void *output);
69 static void loadAlphaDataToBGRASSE2(GLsizei width, GLsizei height, GLsizei depth,
70 int inputRowPitch, int inputDepthPitch, const void *input,
71 size_t outputRowPitch, size_t outputDepthPitch, void *output);
72 static void loadAlphaFloatDataToRGBA(GLsizei width, GLsizei height, GLsizei depth,
73 int inputRowPitch, int inputDepthPitch, const void *input,
74 size_t outputRowPitch, size_t outputDepthPitch, void *output);
75 static void loadAlphaHalfFloatDataToRGBA(GLsizei width, GLsizei height, GLsizei depth,
76 int inputRowPitch, int inputDepthPitch, const void *input,
77 size_t outputRowPitch, size_t outputDepthPitch, void *output);
78 static void loadLuminanceDataToNativeOrBGRA(GLsizei width, GLsizei height, GLsizei depth,
79 int inputRowPitch, int inputDepthPitch, const void *input,
80 size_t outputRowPitch, size_t outputDepthPitch, void *output,
81 bool native);
82 static void loadLuminanceFloatDataToRGBA(GLsizei width, GLsizei height, GLsizei depth,
83 int inputRowPitch, int inputDepthPitch, const void *input,
84 size_t outputRowPitch, size_t outputDepthPitch, void *output);
85 static void loadLuminanceFloatDataToRGB(GLsizei width, GLsizei height, GLsizei depth,
86 int inputRowPitch, int inputDepthPitch, const void *input,
87 size_t outputRowPitch, size_t outputDepthPitch, void *output);
88 static void loadLuminanceHalfFloatDataToRGBA(GLsizei width, GLsizei height, GLsizei depth,
89 int inputRowPitch, int inputDepthPitch, const void *input,
90 size_t outputRowPitch, size_t outputDepthPitch, void *output);
91 static void loadLuminanceAlphaDataToNativeOrBGRA(GLsizei width, GLsizei height, GLsizei depth,
92 int inputRowPitch, int inputDepthPitch, const void *input,
93 size_t outputRowPitch, size_t outputDepthPitch, void *output,
94 bool native);
95 static void loadLuminanceAlphaFloatDataToRGBA(GLsizei width, GLsizei height, GLsizei depth,
96 int inputRowPitch, int inputDepthPitch, const void *input,
97 size_t outputRowPitch, size_t outputDepthPitch, void *output);
98 static void loadLuminanceAlphaHalfFloatDataToRGBA(GLsizei width, GLsizei height, GLsizei depth,
99 int inputRowPitch, int inputDepthPitch, const void *input,
100 size_t outputRowPitch, size_t outputDepthPitch, void *output);
101 static void loadRGBUByteDataToBGRX(GLsizei width, GLsizei height, GLsizei depth,
102 int inputRowPitch, int inputDepthPitch, const void *input,
103 size_t outputRowPitch, size_t outputDepthPitch, void *output);
104 static void loadRGBUByteDataToRGBA(GLsizei width, GLsizei height, GLsizei depth,
105 int inputRowPitch, int inputDepthPitch, const void *input,
106 size_t outputRowPitch, size_t outputDepthPitch, void *output);
107 static void loadRGB565DataToBGRA(GLsizei width, GLsizei height, GLsizei depth,
108 int inputRowPitch, int inputDepthPitch, const void *input,
109 size_t outputRowPitch, size_t outputDepthPitch, void *output);
110 static void loadRGB565DataToRGBA(GLsizei width, GLsizei height, GLsizei depth,
111 int inputRowPitch, int inputDepthPitch, const void *input,
112 size_t outputRowPitch, size_t outputDepthPitch, void *output);
113 static void loadRGBFloatDataToRGBA(GLsizei width, GLsizei height, GLsizei depth,
114 int inputRowPitch, int inputDepthPitch, const void *input,
115 size_t outputRowPitch, size_t outputDepthPitch, void *output);
116 static void loadRGBFloatDataToNative(GLsizei width, GLsizei height, GLsizei depth,
117 int inputRowPitch, int inputDepthPitch, const void *input,
118 size_t outputRowPitch, size_t outputDepthPitch, void *output);
119 static void loadRGBHalfFloatDataToRGBA(GLsizei width, GLsizei height, GLsizei depth,
120 int inputRowPitch, int inputDepthPitch, const void *input,
121 size_t outputRowPitch, size_t outputDepthPitch, void *output);
122 static void loadRGBAUByteDataToBGRASSE2(GLsizei width, GLsizei height, GLsizei depth,
123 int inputRowPitch, int inputDepthPitch, const void *input,
124 size_t outputRowPitch, size_t outputDepthPitch, void *output);
125 static void loadRGBAUByteDataToBGRA(GLsizei width, GLsizei height, GLsizei depth,
126 int inputRowPitch, int inputDepthPitch, const void *input,
127 size_t outputRowPitch, size_t outputDepthPitch, void *output);
128 static void loadRGBAUByteDataToNative(GLsizei width, GLsizei height, GLsizei depth,
129 int inputRowPitch, int inputDepthPitch, const void *input,
130 size_t outputRowPitch, size_t outputDepthPitch, void *output);
131 static void loadRGBA4444DataToBGRA(GLsizei width, GLsizei height, GLsizei depth,
132 int inputRowPitch, int inputDepthPitch, const void *input,
133 size_t outputRowPitch, size_t outputDepthPitch, void *output);
134 static void loadRGBA4444DataToRGBA(GLsizei width, GLsizei height, GLsizei depth,
135 int inputRowPitch, int inputDepthPitch, const void *input,
136 size_t outputRowPitch, size_t outputDepthPitch, void *output);
137 static void loadRGBA5551DataToBGRA(GLsizei width, GLsizei height, GLsizei depth,
138 int inputRowPitch, int inputDepthPitch, const void *input,
139 size_t outputRowPitch, size_t outputDepthPitch, void *output);
140 static void loadRGBA5551DataToRGBA(GLsizei width, GLsizei height, GLsizei depth,
141 int inputRowPitch, int inputDepthPitch, const void *input,
142 size_t outputRowPitch, size_t outputDepthPitch, void *output);
143 static void loadRGBAFloatDataToRGBA(GLsizei width, GLsizei height, GLsizei depth,
144 int inputRowPitch, int inputDepthPitch, const void *input,
145 size_t outputRowPitch, size_t outputDepthPitch, void *output);
146 static void loadRGBAHalfFloatDataToRGBA(GLsizei width, GLsizei height, GLsizei depth,
147 int inputRowPitch, int inputDepthPitch, const void *input,
148 size_t outputRowPitch, size_t outputDepthPitch, void *output);
149 static void loadBGRADataToBGRA(GLsizei width, GLsizei height, GLsizei depth,
150 int inputRowPitch, int inputDepthPitch, const void *input,
151 size_t outputRowPitch, size_t outputDepthPitch, void *output);
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000152
daniel@transgaming.com4ba24062012-12-20 20:54:24 +0000153 protected:
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000154 GLsizei mWidth;
155 GLsizei mHeight;
shannon.woods%transgaming.com@gtempaccount.com4760c562013-04-13 03:42:30 +0000156 GLsizei mDepth;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000157 GLint mInternalFormat;
daniel@transgaming.com4ba24062012-12-20 20:54:24 +0000158 GLenum mActualFormat;
shannon.woods%transgaming.com@gtempaccount.com56074f32013-04-13 03:45:30 +0000159 GLenum mTarget;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000160
161 bool mDirty;
162
daniel@transgaming.com4ba24062012-12-20 20:54:24 +0000163 private:
164 DISALLOW_COPY_AND_ASSIGN(Image);
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000165};
daniel@transgaming.com4ba24062012-12-20 20:54:24 +0000166
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000167}
168
daniel@transgaming.com4ba24062012-12-20 20:54:24 +0000169#endif // LIBGLESV2_RENDERER_IMAGE_H_