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