blob: 454e83e21e634468ca6e34172e79b12d660de39d [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;
daniel@transgaming.com0f195ad2012-10-31 19:51:59 +000026
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000027class Image
28{
29 public:
30 Image();
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000031 virtual ~Image() {};
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000032
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000033 GLsizei getWidth() const { return mWidth; }
34 GLsizei getHeight() const { return mHeight; }
35 GLenum getInternalFormat() const { return mInternalFormat; }
36 GLenum getActualFormat() const { return mActualFormat; }
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000037
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000038 void markDirty() {mDirty = true;}
39 void markClean() {mDirty = false;}
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000040 virtual bool isDirty() const = 0;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000041
daniel@transgaming.com87705f82012-12-20 21:10:45 +000042 virtual void setManagedSurface(TextureStorageInterface2D *storage, int level) {};
43 virtual void setManagedSurface(TextureStorageInterfaceCube *storage, int face, int level) {};
44 virtual bool updateSurface(TextureStorageInterface2D *storage, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height) = 0;
45 virtual bool updateSurface(TextureStorageInterfaceCube *storage, int face, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height) = 0;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000046
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000047 virtual bool redefine(Renderer *renderer, GLint internalformat, GLsizei width, GLsizei height, bool forceRelease) = 0;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000048
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000049 virtual bool isRenderableFormat() const = 0;
50
51 virtual void loadData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
52 GLint unpackAlignment, const void *input) = 0;
53 virtual void loadCompressedData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
54 const void *input) = 0;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000055
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000056 virtual void copy(GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source) = 0;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000057
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +000058 static void loadAlphaDataToBGRA(GLsizei width, GLsizei height,
59 int inputPitch, const void *input, size_t outputPitch, void *output);
daniel@transgaming.com005979d2012-12-20 21:11:29 +000060 static void loadAlphaDataToNative(GLsizei width, GLsizei height,
61 int inputPitch, const void *input, size_t outputPitch, void *output);
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +000062 static void loadAlphaDataToBGRASSE2(GLsizei width, GLsizei height,
63 int inputPitch, const void *input, size_t outputPitch, void *output);
64 static void loadAlphaFloatDataToRGBA(GLsizei width, GLsizei height,
65 int inputPitch, const void *input, size_t outputPitch, void *output);
66 static void loadAlphaHalfFloatDataToRGBA(GLsizei width, GLsizei height,
67 int inputPitch, const void *input, size_t outputPitch, void *output);
68 static void loadLuminanceDataToNativeOrBGRA(GLsizei width, GLsizei height,
69 int inputPitch, const void *input, size_t outputPitch, void *output, bool native);
70 static void loadLuminanceFloatDataToRGBA(GLsizei width, GLsizei height,
71 int inputPitch, const void *input, size_t outputPitch, void *output);
daniel@transgaming.com005979d2012-12-20 21:11:29 +000072 static void loadLuminanceFloatDataToRGB(GLsizei width, GLsizei height,
73 int inputPitch, const void *input, size_t outputPitch, void *output);
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +000074 static void loadLuminanceHalfFloatDataToRGBA(GLsizei width, GLsizei height,
75 int inputPitch, const void *input, size_t outputPitch, void *output);
76 static void loadLuminanceAlphaDataToNativeOrBGRA(GLsizei width, GLsizei height,
77 int inputPitch, const void *input, size_t outputPitch, void *output, bool native);
78 static void loadLuminanceAlphaFloatDataToRGBA(GLsizei width, GLsizei height,
79 int inputPitch, const void *input, size_t outputPitch, void *output);
80 static void loadLuminanceAlphaHalfFloatDataToRGBA(GLsizei width, GLsizei height,
81 int inputPitch, const void *input, size_t outputPitch, void *output);
82 static void loadRGBUByteDataToBGRX(GLsizei width, GLsizei height,
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000083 int inputPitch, const void *input, size_t outputPitch, void *output);
daniel@transgaming.com005979d2012-12-20 21:11:29 +000084 static void loadRGBUByteDataToRGBA(GLsizei width, GLsizei height,
85 int inputPitch, const void *input, size_t outputPitch, void *output);
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +000086 static void loadRGB565DataToBGRA(GLsizei width, GLsizei height,
daniel@transgaming.com4ba24062012-12-20 20:54:24 +000087 int inputPitch, const void *input, size_t outputPitch, void *output);
daniel@transgaming.com005979d2012-12-20 21:11:29 +000088 static void loadRGB565DataToRGBA(GLsizei width, GLsizei height,
89 int inputPitch, const void *input, size_t outputPitch, void *output);
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +000090 static void loadRGBFloatDataToRGBA(GLsizei width, GLsizei height,
91 int inputPitch, const void *input, size_t outputPitch, void *output);
daniel@transgaming.com005979d2012-12-20 21:11:29 +000092 static void loadRGBFloatDataToNative(GLsizei width, GLsizei height,
93 int inputPitch, const void *input, size_t outputPitch, void *output);
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +000094 static void loadRGBHalfFloatDataToRGBA(GLsizei width, GLsizei height,
95 int inputPitch, const void *input, size_t outputPitch, void *output);
96 static void loadRGBAUByteDataToBGRASSE2(GLsizei width, GLsizei height,
97 int inputPitch, const void *input, size_t outputPitch, void *output);
98 static void loadRGBAUByteDataToBGRA(GLsizei width, GLsizei height,
99 int inputPitch, const void *input, size_t outputPitch, void *output);
daniel@transgaming.com005979d2012-12-20 21:11:29 +0000100 static void loadRGBAUByteDataToNative(GLsizei width, GLsizei height,
101 int inputPitch, const void *input, size_t outputPitch, void *output);
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +0000102 static void loadRGBA4444DataToBGRA(GLsizei width, GLsizei height,
103 int inputPitch, const void *input, size_t outputPitch, void *output);
daniel@transgaming.com005979d2012-12-20 21:11:29 +0000104 static void loadRGBA4444DataToRGBA(GLsizei width, GLsizei height,
105 int inputPitch, const void *input, size_t outputPitch, void *output);
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +0000106 static void loadRGBA5551DataToBGRA(GLsizei width, GLsizei height,
107 int inputPitch, const void *input, size_t outputPitch, void *output);
daniel@transgaming.com005979d2012-12-20 21:11:29 +0000108 static void loadRGBA5551DataToRGBA(GLsizei width, GLsizei height,
109 int inputPitch, const void *input, size_t outputPitch, void *output);
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +0000110 static void loadRGBAFloatDataToRGBA(GLsizei width, GLsizei height,
111 int inputPitch, const void *input, size_t outputPitch, void *output);
112 static void loadRGBAHalfFloatDataToRGBA(GLsizei width, GLsizei height,
113 int inputPitch, const void *input, size_t outputPitch, void *output);
114 static void loadBGRADataToBGRA(GLsizei width, GLsizei height,
115 int inputPitch, const void *input, size_t outputPitch, void *output);
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000116
daniel@transgaming.com4ba24062012-12-20 20:54:24 +0000117 protected:
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000118 GLsizei mWidth;
119 GLsizei mHeight;
120 GLint mInternalFormat;
daniel@transgaming.com4ba24062012-12-20 20:54:24 +0000121 GLenum mActualFormat;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000122
123 bool mDirty;
124
daniel@transgaming.com4ba24062012-12-20 20:54:24 +0000125 private:
126 DISALLOW_COPY_AND_ASSIGN(Image);
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000127};
daniel@transgaming.com4ba24062012-12-20 20:54:24 +0000128
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000129}
130
daniel@transgaming.com4ba24062012-12-20 20:54:24 +0000131#endif // LIBGLESV2_RENDERER_IMAGE_H_