blob: 35c916602335545c7fc3b9f10ef86dcd71d97e7c [file] [log] [blame]
Brandon Jonesf47bebc2014-07-09 14:28:42 -07001//
2// Copyright 2014 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// TextureImpl.h: Defines the abstract rx::TextureImpl classes.
8
9#ifndef LIBGLESV2_RENDERER_TEXTUREIMPL_H_
10#define LIBGLESV2_RENDERER_TEXTUREIMPL_H_
11
12#include "common/angleutils.h"
13
Brandon Jones0511e802014-07-14 16:27:26 -070014namespace egl
15{
16class Surface;
17}
18
Brandon Jonesf47bebc2014-07-09 14:28:42 -070019namespace gl
20{
21class Framebuffer;
Brandon Jones0511e802014-07-14 16:27:26 -070022struct PixelUnpackState;
Brandon Jonesf47bebc2014-07-09 14:28:42 -070023struct SamplerState;
24}
25
26namespace rx
27{
28
29class Image;
30class RenderTarget;
31class Renderer;
32class TextureStorageInterface;
Brandon Jonesf47bebc2014-07-09 14:28:42 -070033
34class Texture2DImpl
35{
36 public:
37 virtual ~Texture2DImpl() {}
38
39 // TODO: If this methods could go away that would be ideal;
40 // TextureStorage should only be necessary for the D3D backend, and as such
41 // higher level code should not rely on it.
42 virtual TextureStorageInterface *getNativeTexture() = 0;
43
44 virtual Image *getImage(int level) const = 0;
45
46 virtual void setUsage(GLenum usage) = 0;
47 virtual bool hasDirtyImages() const = 0;
48 virtual void resetDirty() = 0;
49
50 virtual bool isSamplerComplete(const gl::SamplerState &samplerState) const = 0;
51 virtual void bindTexImage(egl::Surface *surface) = 0;
52 virtual void releaseTexImage() = 0;
53
54 virtual void setImage(GLint level, GLsizei width, GLsizei height, GLenum internalFormat, GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels) = 0;
55 virtual void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels) = 0;
56 virtual void subImage(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels) = 0;
57 virtual void subImageCompressed(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels) = 0;
58 virtual void copyImage(GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source) = 0;
59 virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source) = 0;
60 virtual void storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) = 0;
61 virtual void generateMipmaps() = 0;
62
63 virtual unsigned int getRenderTargetSerial(GLint level) = 0;
64
65 virtual RenderTarget *getRenderTarget(GLint level) = 0;
66 virtual RenderTarget *getDepthSencil(GLint level) = 0;
67
68 virtual void redefineImage(GLint level, GLenum internalformat, GLsizei width, GLsizei height) = 0;
69};
70
Brandon Jones0511e802014-07-14 16:27:26 -070071class TextureCubeImpl
72{
73 public:
74 virtual ~TextureCubeImpl() {}
75
76 virtual TextureStorageInterface *getNativeTexture() = 0;
77
78 virtual Image *getImage(GLenum target, int level) const = 0;
79
80 virtual void setUsage(GLenum usage) = 0;
81 virtual bool hasDirtyImages() const = 0;
82 virtual void resetDirty() = 0;
83
84 virtual bool isSamplerComplete(const gl::SamplerState &samplerState) const = 0;
85 virtual bool isCubeComplete() const = 0;
86
87 virtual void setImage(int faceIndex, GLint level, GLsizei width, GLsizei height, GLenum internalFormat, GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels) = 0;
88 virtual void setCompressedImage(GLenum target, GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels) = 0;
89 virtual void subImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels) = 0;
90 virtual void subImageCompressed(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels) = 0;
91 virtual void copyImage(GLenum target, GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source) = 0;
92 virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source) = 0;
93 virtual void storage(GLsizei levels, GLenum internalformat, GLsizei size) = 0;
94 virtual void generateMipmaps() = 0;
95
96 virtual unsigned int getRenderTargetSerial(GLenum target, GLint level) = 0;
97
98 virtual RenderTarget *getRenderTarget(GLenum target, GLint level) = 0;
99 virtual RenderTarget *getDepthStencil(GLenum target, GLint level) = 0;
100};
101
Brandon Jones78b1acd2014-07-15 15:33:07 -0700102class Texture3DImpl
103{
104 public:
105 virtual ~Texture3DImpl() {}
106
107 virtual TextureStorageInterface *getNativeTexture() = 0;
108
109 virtual Image *getImage(int level) const = 0;
110
111 virtual void setUsage(GLenum usage) = 0;
112 virtual bool hasDirtyImages() const = 0;
113 virtual void resetDirty() = 0;
114
115 virtual bool isSamplerComplete(const gl::SamplerState &samplerState) const = 0;
116 virtual bool isMipmapComplete() const = 0;
117
118 virtual void setImage(GLint level, GLsizei width, GLsizei height, GLsizei depth, GLenum internalFormat, GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels) = 0;
119 virtual void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize, const void *pixels) = 0;
120 virtual void subImage(GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels) = 0;
121 virtual void subImageCompressed(GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *pixels) = 0;
122 virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source) = 0;
123 virtual void storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) = 0;
124 virtual void generateMipmaps() = 0;
125
126 virtual unsigned int getRenderTargetSerial(GLint level, GLint layer) = 0;
127
128 virtual RenderTarget *getRenderTarget(GLint level) = 0;
129 virtual RenderTarget *getRenderTarget(GLint level, GLint layer) = 0;
130 virtual RenderTarget *getDepthStencil(GLint level, GLint layer) = 0;
131};
132
Brandon Jones142ec422014-07-16 10:31:30 -0700133class Texture2DArrayImpl
134{
135 public:
136 virtual ~Texture2DArrayImpl() {}
137
138 virtual TextureStorageInterface *getNativeTexture() = 0;
139
140 virtual Image *getImage(int level, int layer) const = 0;
141 virtual GLsizei getLayerCount(int level) const = 0;
142
143 virtual void setUsage(GLenum usage) = 0;
144 virtual bool hasDirtyImages() const = 0;
145 virtual void resetDirty() = 0;
146
147 virtual bool isSamplerComplete(const gl::SamplerState &samplerState) const = 0;
148 virtual bool isMipmapComplete() const = 0;
149
150 virtual void setImage(GLint level, GLsizei width, GLsizei height, GLsizei depth, GLenum internalFormat, GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels) = 0;
151 virtual void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize, const void *pixels) = 0;
152 virtual void subImage(GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels) = 0;
153 virtual void subImageCompressed(GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *pixels) = 0;
154 virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source) = 0;
155 virtual void storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) = 0;
156 virtual void generateMipmaps() = 0;
157
158 virtual unsigned int getRenderTargetSerial(GLint level, GLint layer) = 0;
159
160 virtual RenderTarget *getRenderTarget(GLint level, GLint layer) = 0;
161 virtual RenderTarget *getDepthStencil(GLint level, GLint layer) = 0;
162};
163
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700164}
165
166#endif // LIBGLESV2_RENDERER_TEXTUREIMPL_H_