blob: a39f6021971c7147003042520996e1385c007c52 [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
7// Image.h: Defines the gl::Image class, which acts as the interface to
8// the actual underlying surfaces of a Texture.
9
10#ifndef LIBGLESV2_RENDERER_IMAGE_H_
11#define LIBGLESV2_RENDERER_IMAGE_H_
12
13#define GL_APICALL
14#include <GLES2/gl2.h>
15#include <d3d9.h>
16
17#include "common/debug.h"
18
19namespace gl
20{
21class Image
22{
23 public:
24 Image();
25 ~Image();
26
27 static void Image::CopyLockableSurfaces(IDirect3DSurface9 *dest, IDirect3DSurface9 *source);
28
29 bool redefine(GLint internalformat, GLsizei width, GLsizei height, bool forceRelease);
30 void markDirty() {mDirty = true;}
31 void markClean() {mDirty = false;}
32
33 bool isRenderableFormat() const;
34 D3DFORMAT getD3DFormat() const;
daniel@transgaming.com20d36662012-10-31 19:51:43 +000035 GLenum getActualFormat() const;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000036
37 GLsizei getWidth() const {return mWidth;}
38 GLsizei getHeight() const {return mHeight;}
39 GLenum getInternalFormat() const {return mInternalFormat;}
40 bool isDirty() const {return mSurface && mDirty;}
41 IDirect3DSurface9 *getSurface();
42
43 void setManagedSurface(IDirect3DSurface9 *surface);
44 void updateSurface(IDirect3DSurface9 *dest, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
45
46 void loadData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
47 GLint unpackAlignment, const void *input);
48
49 void loadAlphaData(GLsizei width, GLsizei height,
50 int inputPitch, const void *input, size_t outputPitch, void *output) const;
51 void loadAlphaDataSSE2(GLsizei width, GLsizei height,
52 int inputPitch, const void *input, size_t outputPitch, void *output) const;
53 void loadAlphaFloatData(GLsizei width, GLsizei height,
54 int inputPitch, const void *input, size_t outputPitch, void *output) const;
55 void loadAlphaHalfFloatData(GLsizei width, GLsizei height,
56 int inputPitch, const void *input, size_t outputPitch, void *output) const;
57 void loadLuminanceData(GLsizei width, GLsizei height,
58 int inputPitch, const void *input, size_t outputPitch, void *output, bool native) const;
59 void loadLuminanceFloatData(GLsizei width, GLsizei height,
60 int inputPitch, const void *input, size_t outputPitch, void *output) const;
61 void loadLuminanceHalfFloatData(GLsizei width, GLsizei height,
62 int inputPitch, const void *input, size_t outputPitch, void *output) const;
63 void loadLuminanceAlphaData(GLsizei width, GLsizei height,
64 int inputPitch, const void *input, size_t outputPitch, void *output, bool native) const;
65 void loadLuminanceAlphaFloatData(GLsizei width, GLsizei height,
66 int inputPitch, const void *input, size_t outputPitch, void *output) const;
67 void loadLuminanceAlphaHalfFloatData(GLsizei width, GLsizei height,
68 int inputPitch, const void *input, size_t outputPitch, void *output) const;
69 void loadRGBUByteData(GLsizei width, GLsizei height,
70 int inputPitch, const void *input, size_t outputPitch, void *output) const;
71 void loadRGB565Data(GLsizei width, GLsizei height,
72 int inputPitch, const void *input, size_t outputPitch, void *output) const;
73 void loadRGBFloatData(GLsizei width, GLsizei height,
74 int inputPitch, const void *input, size_t outputPitch, void *output) const;
75 void loadRGBHalfFloatData(GLsizei width, GLsizei height,
76 int inputPitch, const void *input, size_t outputPitch, void *output) const;
77 void loadRGBAUByteDataSSE2(GLsizei width, GLsizei height,
78 int inputPitch, const void *input, size_t outputPitch, void *output) const;
79 void loadRGBAUByteData(GLsizei width, GLsizei height,
80 int inputPitch, const void *input, size_t outputPitch, void *output) const;
81 void loadRGBA4444Data(GLsizei width, GLsizei height,
82 int inputPitch, const void *input, size_t outputPitch, void *output) const;
83 void loadRGBA5551Data(GLsizei width, GLsizei height,
84 int inputPitch, const void *input, size_t outputPitch, void *output) const;
85 void loadRGBAFloatData(GLsizei width, GLsizei height,
86 int inputPitch, const void *input, size_t outputPitch, void *output) const;
87 void loadRGBAHalfFloatData(GLsizei width, GLsizei height,
88 int inputPitch, const void *input, size_t outputPitch, void *output) const;
89 void loadBGRAData(GLsizei width, GLsizei height,
90 int inputPitch, const void *input, size_t outputPitch, void *output) const;
91 void loadCompressedData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
92 const void *input);
93
94 void copy(GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, IDirect3DSurface9 *renderTarget);
95
96 private:
97 DISALLOW_COPY_AND_ASSIGN(Image);
98
99 void createSurface();
100
101 HRESULT lock(D3DLOCKED_RECT *lockedRect, const RECT *rect);
102 void unlock();
103
104 GLsizei mWidth;
105 GLsizei mHeight;
106 GLint mInternalFormat;
107
108 bool mDirty;
109
110 D3DPOOL mD3DPool; // can only be D3DPOOL_SYSTEMMEM or D3DPOOL_MANAGED since it needs to be lockable.
111 D3DFORMAT mD3DFormat;
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000112 GLenum mActualFormat;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000113
114 IDirect3DSurface9 *mSurface;
115};
116}
117
118#endif // LIBGLESV2_RENDERER_IMAGE_H_