blob: e609c2a4cad9f29263dc8fddba068307e3c40066 [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
Brandon Jones6b19b002014-07-16 14:32:05 -070034class TextureImpl
Brandon Jonesf47bebc2014-07-09 14:28:42 -070035{
36 public:
Brandon Jonesf47bebc2014-07-09 14:28:42 -070037 // TODO: If this methods could go away that would be ideal;
38 // TextureStorage should only be necessary for the D3D backend, and as such
39 // higher level code should not rely on it.
40 virtual TextureStorageInterface *getNativeTexture() = 0;
41
Brandon Jonesf47bebc2014-07-09 14:28:42 -070042 virtual void setUsage(GLenum usage) = 0;
Brandon Jonesf47bebc2014-07-09 14:28:42 -070043
44 virtual bool isSamplerComplete(const gl::SamplerState &samplerState) const = 0;
Brandon Jones6b19b002014-07-16 14:32:05 -070045
46 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;
47
48 virtual void generateMipmaps() = 0;
49};
50
51class Texture2DImpl : public TextureImpl
52{
53 public:
54 virtual ~Texture2DImpl() {}
55
56 virtual Image *getImage(int level) const = 0;
57
Brandon Jonesf47bebc2014-07-09 14:28:42 -070058 virtual void bindTexImage(egl::Surface *surface) = 0;
59 virtual void releaseTexImage() = 0;
60
61 virtual void setImage(GLint level, GLsizei width, GLsizei height, GLenum internalFormat, GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels) = 0;
62 virtual void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels) = 0;
63 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;
64 virtual void subImageCompressed(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels) = 0;
65 virtual void copyImage(GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source) = 0;
Brandon Jonesf47bebc2014-07-09 14:28:42 -070066 virtual void storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) = 0;
Brandon Jonesf47bebc2014-07-09 14:28:42 -070067
68 virtual unsigned int getRenderTargetSerial(GLint level) = 0;
69
70 virtual RenderTarget *getRenderTarget(GLint level) = 0;
71 virtual RenderTarget *getDepthSencil(GLint level) = 0;
72
73 virtual void redefineImage(GLint level, GLenum internalformat, GLsizei width, GLsizei height) = 0;
74};
75
Brandon Jones6b19b002014-07-16 14:32:05 -070076class TextureCubeImpl : public TextureImpl
Brandon Jones0511e802014-07-14 16:27:26 -070077{
78 public:
79 virtual ~TextureCubeImpl() {}
80
Brandon Jones0511e802014-07-14 16:27:26 -070081 virtual Image *getImage(GLenum target, int level) const = 0;
82
Brandon Jones0511e802014-07-14 16:27:26 -070083 virtual bool isCubeComplete() const = 0;
84
85 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;
86 virtual void setCompressedImage(GLenum target, GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels) = 0;
87 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;
88 virtual void subImageCompressed(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels) = 0;
89 virtual void copyImage(GLenum target, GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source) = 0;
Brandon Jones0511e802014-07-14 16:27:26 -070090 virtual void storage(GLsizei levels, GLenum internalformat, GLsizei size) = 0;
Brandon Jones0511e802014-07-14 16:27:26 -070091
92 virtual unsigned int getRenderTargetSerial(GLenum target, GLint level) = 0;
93
94 virtual RenderTarget *getRenderTarget(GLenum target, GLint level) = 0;
95 virtual RenderTarget *getDepthStencil(GLenum target, GLint level) = 0;
96};
97
Brandon Jones6b19b002014-07-16 14:32:05 -070098class Texture3DImpl : public TextureImpl
Brandon Jones78b1acd2014-07-15 15:33:07 -070099{
100 public:
101 virtual ~Texture3DImpl() {}
102
Brandon Jones78b1acd2014-07-15 15:33:07 -0700103 virtual Image *getImage(int level) const = 0;
104
Brandon Jones78b1acd2014-07-15 15:33:07 -0700105 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;
106 virtual void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize, const void *pixels) = 0;
107 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;
108 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;
Brandon Jones78b1acd2014-07-15 15:33:07 -0700109 virtual void storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) = 0;
Brandon Jones78b1acd2014-07-15 15:33:07 -0700110
111 virtual unsigned int getRenderTargetSerial(GLint level, GLint layer) = 0;
112
Brandon Jones78b1acd2014-07-15 15:33:07 -0700113 virtual RenderTarget *getRenderTarget(GLint level, GLint layer) = 0;
114 virtual RenderTarget *getDepthStencil(GLint level, GLint layer) = 0;
115};
116
Brandon Jones6b19b002014-07-16 14:32:05 -0700117class Texture2DArrayImpl : public TextureImpl
Brandon Jones142ec422014-07-16 10:31:30 -0700118{
119 public:
120 virtual ~Texture2DArrayImpl() {}
121
Brandon Jones142ec422014-07-16 10:31:30 -0700122 virtual Image *getImage(int level, int layer) const = 0;
123 virtual GLsizei getLayerCount(int level) const = 0;
124
Brandon Jones142ec422014-07-16 10:31:30 -0700125 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;
126 virtual void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize, const void *pixels) = 0;
127 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;
128 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;
Brandon Jones142ec422014-07-16 10:31:30 -0700129 virtual void storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) = 0;
Brandon Jones142ec422014-07-16 10:31:30 -0700130
131 virtual unsigned int getRenderTargetSerial(GLint level, GLint layer) = 0;
132
133 virtual RenderTarget *getRenderTarget(GLint level, GLint layer) = 0;
134 virtual RenderTarget *getDepthStencil(GLint level, GLint layer) = 0;
135};
136
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700137}
138
139#endif // LIBGLESV2_RENDERER_TEXTUREIMPL_H_