Abstract the use of textures in EGL.
BUG=18110152
Change-Id: I02e85817532de599109a9e3938badc5e48bb29c0
Reviewed-on: https://swiftshader-review.googlesource.com/1261
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/GLES2/libEGL/Surface.cpp b/src/GLES2/libEGL/Surface.cpp
index c98ad27..06c84a2 100644
--- a/src/GLES2/libEGL/Surface.cpp
+++ b/src/GLES2/libEGL/Surface.cpp
@@ -17,7 +17,8 @@
#include "main.h"
#include "Display.h"
-#include "libGLESv2/Texture.h"
+#include "Texture2D.hpp"
+#include "libGLESv2/Image.hpp"
#include "libGLESv2/Device.hpp"
#include "common/debug.h"
#include "Main/FrameBuffer.hpp"
@@ -268,12 +269,12 @@
return mTextureTarget;
}
-void Surface::setBoundTexture(gl::Texture2D *texture)
+void Surface::setBoundTexture(egl::Texture2D *texture)
{
mTexture = texture;
}
-gl::Texture2D *Surface::getBoundTexture() const
+egl::Texture2D *Surface::getBoundTexture() const
{
return mTexture;
}
diff --git a/src/GLES2/libEGL/Surface.h b/src/GLES2/libEGL/Surface.h
index 695937d..d713fc3 100644
--- a/src/GLES2/libEGL/Surface.h
+++ b/src/GLES2/libEGL/Surface.h
@@ -24,13 +24,13 @@
namespace gl
{
class Image;
-class Texture2D;
}
namespace egl
{
class Display;
class Config;
+class Texture2D;
class Surface
{
@@ -60,8 +60,8 @@
virtual EGLenum getTextureTarget() const;
virtual sw::Format getInternalFormat() const;
- virtual void setBoundTexture(gl::Texture2D *texture);
- virtual gl::Texture2D *getBoundTexture() const;
+ virtual void setBoundTexture(egl::Texture2D *texture);
+ virtual egl::Texture2D *getBoundTexture() const;
bool checkForResize(); // Returns true if surface changed due to resize
@@ -73,6 +73,7 @@
gl::Image *mDepthStencil;
sw::FrameBuffer *frameBuffer;
gl::Image *backBuffer;
+ egl::Texture2D *mTexture;
bool reset(int backbufferWidth, int backbufferHeight);
@@ -95,7 +96,6 @@
// EGLenum vgAlphaFormat; // Alpha format for OpenVG
// EGLenum vgColorSpace; // Color space for OpenVG
EGLint mSwapInterval;
- gl::Texture2D *mTexture;
};
}
diff --git a/src/GLES2/libEGL/Texture2D.hpp b/src/GLES2/libEGL/Texture2D.hpp
new file mode 100644
index 0000000..0088cbc
--- /dev/null
+++ b/src/GLES2/libEGL/Texture2D.hpp
@@ -0,0 +1,13 @@
+#ifndef egl_Texture2D_hpp
+#define egl_Texture2D_hpp
+
+namespace egl
+{
+class Texture2D
+{
+public:
+ virtual void releaseTexImage() = 0;
+};
+}
+
+#endif // egl_Texture2D_hpp
diff --git a/src/GLES2/libEGL/libEGL.cpp b/src/GLES2/libEGL/libEGL.cpp
index 505be0e..f5a6105 100644
--- a/src/GLES2/libEGL/libEGL.cpp
+++ b/src/GLES2/libEGL/libEGL.cpp
@@ -14,6 +14,7 @@
#include "main.h"
#include "Display.h"
#include "Surface.h"
+#include "Texture2D.hpp"
#include "libGLESv2/Context.h"
#include "libGLESv2/Texture.h"
#include "common/debug.h"
@@ -708,7 +709,7 @@
return error(EGL_BAD_MATCH, EGL_FALSE);
}
- gl::Texture2D *texture = eglSurface->getBoundTexture();
+ egl::Texture2D *texture = eglSurface->getBoundTexture();
if(texture)
{
diff --git a/src/GLES2/libEGL/libEGL.vcxproj b/src/GLES2/libEGL/libEGL.vcxproj
index 203aea5..6c4043c 100644
--- a/src/GLES2/libEGL/libEGL.vcxproj
+++ b/src/GLES2/libEGL/libEGL.vcxproj
@@ -166,6 +166,7 @@
<ClInclude Include="main.h" />
<ClInclude Include="resource.h" />
<ClInclude Include="Surface.h" />
+ <ClInclude Include="Texture2D.hpp" />
</ItemGroup>
<ItemGroup>
<None Include="libEGL.def" />
diff --git a/src/GLES2/libEGL/libEGL.vcxproj.filters b/src/GLES2/libEGL/libEGL.vcxproj.filters
index b395738..c10e3d5 100644
--- a/src/GLES2/libEGL/libEGL.vcxproj.filters
+++ b/src/GLES2/libEGL/libEGL.vcxproj.filters
@@ -61,6 +61,9 @@
<ClInclude Include="Context.hpp">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="Texture2D.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="libEGL.rc" />
diff --git a/src/GLES2/libGLES_CM/Texture.h b/src/GLES2/libGLES_CM/Texture.h
index b37317c..73ce99e 100644
--- a/src/GLES2/libGLES_CM/Texture.h
+++ b/src/GLES2/libGLES_CM/Texture.h
@@ -19,6 +19,7 @@
#include "Renderbuffer.h"
#include "RefCountObject.h"
#include "utilities.h"
+#include "libEGL/Texture2D.hpp"
#include "common/debug.h"
#define GL_API
@@ -109,7 +110,7 @@
sw::Resource *resource;
};
-class Texture2D : public Texture
+class Texture2D : public Texture, public egl::Texture2D
{
public:
explicit Texture2D(GLuint id);
diff --git a/src/GLES2/libGLESv2/Texture.h b/src/GLES2/libGLESv2/Texture.h
index 085fe92..b4ae3e6 100644
--- a/src/GLES2/libGLESv2/Texture.h
+++ b/src/GLES2/libGLESv2/Texture.h
@@ -19,6 +19,7 @@
#include "Renderbuffer.h"
#include "RefCountObject.h"
#include "utilities.h"
+#include "libEGL/Texture2D.hpp"
#include "common/debug.h"
#define GL_APICALL
@@ -109,7 +110,7 @@
sw::Resource *resource;
};
-class Texture2D : public Texture
+class Texture2D : public Texture, public egl::Texture2D
{
public:
explicit Texture2D(GLuint id);