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);