Share the EGL image interface between implementations.

BUG=18110152

Change-Id: Ia36cc97c0f1b6609382ebaed7ef55231d22d9519
Reviewed-on: https://swiftshader-review.googlesource.com/1252
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/GLES2/libEGL/Config.cpp b/src/GLES2/libEGL/Config.cpp
index ea80e42..842fde6 100644
--- a/src/GLES2/libEGL/Config.cpp
+++ b/src/GLES2/libEGL/Config.cpp
@@ -16,7 +16,6 @@
 #include "Config.h"
 
 #include "common/debug.h"
-#include "libGLESv2/Image.hpp"
 
 #include <algorithm>
 #include <vector>
diff --git a/src/GLES2/libEGL/Context.hpp b/src/GLES2/libEGL/Context.hpp
index c7ac343..df23e8f 100644
--- a/src/GLES2/libEGL/Context.hpp
+++ b/src/GLES2/libEGL/Context.hpp
@@ -6,14 +6,10 @@
 #define GL_API

 #include <GLES/gl.h>

 

-namespace gl

-{

-class Image;

-}

-

 namespace egl

 {

 class Surface;

+class Image;

 

 class Context

 {

@@ -21,7 +17,7 @@
 	virtual void destroy() = 0;

 	virtual void bindTexImage(Surface *surface) = 0;

 	virtual EGLenum validateSharedImage(EGLenum target, GLuint name, GLuint textureLevel) = 0;

-	virtual gl::Image *createSharedImage(EGLenum target, GLuint name, GLuint textureLevel) = 0;

+	virtual Image *createSharedImage(EGLenum target, GLuint name, GLuint textureLevel) = 0;

 };

 }

 

diff --git a/src/GLES2/libEGL/Image.hpp b/src/GLES2/libEGL/Image.hpp
new file mode 100644
index 0000000..25024f5
--- /dev/null
+++ b/src/GLES2/libEGL/Image.hpp
@@ -0,0 +1,45 @@
+#ifndef egl_Image_hpp

+#define egl_Image_hpp

+

+#include "Renderer/Surface.hpp"

+

+namespace egl

+{

+// Types common between gl.h and gl2.h

+// We can't include either header in EGL

+typedef unsigned int GLenum;

+typedef int GLint;

+typedef int GLsizei;

+

+class Image : public sw::Surface

+{

+public:

+	Image(sw::Resource *texture, int width, int height, int depth, sw::Format format, bool lockable, bool renderTarget)

+		: sw::Surface(texture, width, height, depth, format, lockable, renderTarget)

+	{

+	}

+

+	virtual void loadImageData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *input) = 0;

+	virtual void loadCompressedData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels) = 0;

+

+	virtual void *lock(unsigned int left, unsigned int top, sw::Lock lock) = 0;

+	virtual unsigned int getPitch() const = 0;

+	virtual void unlock() = 0;

+

+	virtual int getWidth() = 0;

+	virtual int getHeight() = 0;

+	virtual GLenum getFormat() = 0;

+	virtual GLenum getType() = 0;

+	virtual sw::Format getInternalFormat() = 0;

+	virtual int getMultiSampleDepth() = 0;

+

+	virtual void addRef() = 0;

+	virtual void release() = 0;

+	virtual void unbind() = 0;   // Break parent ownership and release

+

+	virtual bool isShared() const = 0;

+	virtual void markShared() = 0;

+};

+}

+

+#endif   // egl_Image_hpp

diff --git a/src/GLES2/libEGL/Surface.cpp b/src/GLES2/libEGL/Surface.cpp
index 2da6ca6..41abff7 100644
--- a/src/GLES2/libEGL/Surface.cpp
+++ b/src/GLES2/libEGL/Surface.cpp
@@ -18,7 +18,7 @@
 #include "main.h"

 #include "Display.h"

 #include "Texture2D.hpp"

-#include "libGLESv2/Image.hpp"

+#include "Image.hpp"

 #include "common/debug.h"

 #include "Main/FrameBuffer.hpp"

 

@@ -189,7 +189,7 @@
 	}

 }

 

-gl::Image *Surface::getRenderTarget()

+egl::Image *Surface::getRenderTarget()

 {

     if(backBuffer)

     {

@@ -199,7 +199,7 @@
     return backBuffer;

 }

 

-gl::Image *Surface::getDepthStencil()

+egl::Image *Surface::getDepthStencil()

 {

     if(mDepthStencil)

     {

diff --git a/src/GLES2/libEGL/Surface.h b/src/GLES2/libEGL/Surface.h
index d713fc3..fe33be8 100644
--- a/src/GLES2/libEGL/Surface.h
+++ b/src/GLES2/libEGL/Surface.h
@@ -21,16 +21,12 @@
 #define EGLAPI

 #include <EGL/egl.h>

 

-namespace gl

-{

-class Image;

-}

-

 namespace egl

 {

 class Display;

 class Config;

 class Texture2D;

+class Image;

 

 class Surface

 {

@@ -45,8 +41,8 @@
 

 	EGLNativeWindowType getWindowHandle();

     

-    virtual gl::Image *getRenderTarget();

-    virtual gl::Image *getDepthStencil();

+    virtual egl::Image *getRenderTarget();

+    virtual egl::Image *getDepthStencil();

 

     void setSwapInterval(EGLint interval);

 

@@ -70,9 +66,9 @@
     bool reset();

 

     Display *const mDisplay;

-    gl::Image *mDepthStencil;

+    egl::Image *mDepthStencil;

 	sw::FrameBuffer *frameBuffer;

-	gl::Image *backBuffer;

+	egl::Image *backBuffer;

 	egl::Texture2D *mTexture;

 

 	bool reset(int backbufferWidth, int backbufferHeight);

diff --git a/src/GLES2/libEGL/libEGL.cpp b/src/GLES2/libEGL/libEGL.cpp
index 1130a50..2b70f52 100644
--- a/src/GLES2/libEGL/libEGL.cpp
+++ b/src/GLES2/libEGL/libEGL.cpp
@@ -16,7 +16,7 @@
 #include "Surface.h"

 #include "Texture2D.hpp"

 #include "Context.hpp"

-#include "libGLESv2/Image.hpp"

+#include "Image.hpp"

 #include "common/debug.h"

 #include "Common/Version.h"

 

@@ -1117,7 +1117,7 @@
 			return error(validationResult, EGL_NO_IMAGE_KHR);

 		}

 

-        gl::Image *image = context->createSharedImage(target, name, textureLevel);

+        egl::Image *image = context->createSharedImage(target, name, textureLevel);

 

         if(!image)

         {

@@ -1155,7 +1155,7 @@
             return error(EGL_BAD_PARAMETER, EGL_FALSE);

         }

 

-        gl::Image *glImage = static_cast<gl::Image*>(image);

+        egl::Image *glImage = static_cast<egl::Image*>(image);

         glImage->release();

 

         return success(EGL_TRUE);

diff --git a/src/GLES2/libEGL/libEGL.vcxproj b/src/GLES2/libEGL/libEGL.vcxproj
index 6c4043c..51242f5 100644
--- a/src/GLES2/libEGL/libEGL.vcxproj
+++ b/src/GLES2/libEGL/libEGL.vcxproj
@@ -163,6 +163,7 @@
     <ClInclude Include="Config.h" />

     <ClInclude Include="Context.hpp" />

     <ClInclude Include="Display.h" />

+    <ClInclude Include="Image.hpp" />

     <ClInclude Include="main.h" />

     <ClInclude Include="resource.h" />

     <ClInclude Include="Surface.h" />

diff --git a/src/GLES2/libEGL/libEGL.vcxproj.filters b/src/GLES2/libEGL/libEGL.vcxproj.filters
index c10e3d5..b89cfd5 100644
--- a/src/GLES2/libEGL/libEGL.vcxproj.filters
+++ b/src/GLES2/libEGL/libEGL.vcxproj.filters
@@ -64,6 +64,9 @@
     <ClInclude Include="Texture2D.hpp">

       <Filter>Header Files</Filter>

     </ClInclude>

+    <ClInclude Include="Image.hpp">

+      <Filter>Header Files</Filter>

+    </ClInclude>

   </ItemGroup>

   <ItemGroup>

     <ResourceCompile Include="libEGL.rc" />

diff --git a/src/GLES2/libEGL/main.cpp b/src/GLES2/libEGL/main.cpp
index 0857d7d..7db8559 100644
--- a/src/GLES2/libEGL/main.cpp
+++ b/src/GLES2/libEGL/main.cpp
@@ -92,8 +92,8 @@
     gl::createContext = (egl::Context *(*)(const egl::Config*, const egl::Context*))getProcAddress(libGLESv2, "glCreateContext");

     gl::makeCurrent = (void (*)(egl::Context*, egl::Display*, egl::Surface*))getProcAddress(libGLESv2, "glMakeCurrent");

     gl::getProcAddress = (__eglMustCastToProperFunctionPointerType (*)(const char*))getProcAddress(libGLESv2, "glGetProcAddress");

-    gl::createBackBuffer = (gl::Image *(*)(int, int, const egl::Config*))getProcAddress(libGLESv2, "createBackBuffer");

-	gl::createDepthStencil = (gl::Image *(*)(unsigned int, unsigned int, sw::Format, int, bool))getProcAddress(libGLESv2, "createDepthStencil");

+    gl::createBackBuffer = (egl::Image *(*)(int, int, const egl::Config*))getProcAddress(libGLESv2, "createBackBuffer");

+	gl::createDepthStencil = (egl::Image *(*)(unsigned int, unsigned int, sw::Format, int, bool))getProcAddress(libGLESv2, "createDepthStencil");

     gl::createFrameBuffer = (sw::FrameBuffer *(*)(EGLNativeDisplayType, EGLNativeWindowType, int, int))getProcAddress(libGLESv2, "createFrameBuffer");

 

 	return libGLESv2 != 0;

@@ -263,8 +263,8 @@
 	egl::Context *(*createContext)(const egl::Config *config, const egl::Context *shareContext) = 0;

 	void (*makeCurrent)(egl::Context *context, egl::Display *display, egl::Surface *surface) = 0;

 	__eglMustCastToProperFunctionPointerType (*getProcAddress)(const char *procname) = 0;

-	Image *(*createBackBuffer)(int width, int height, const egl::Config *config) = 0;

-	Image *(*createDepthStencil)(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard) = 0;

+	egl::Image *(*createBackBuffer)(int width, int height, const egl::Config *config) = 0;

+	egl::Image *(*createDepthStencil)(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard) = 0;

 	sw::FrameBuffer *(*createFrameBuffer)(EGLNativeDisplayType display, EGLNativeWindowType window, int width, int height) = 0;

 }

 

diff --git a/src/GLES2/libEGL/main.h b/src/GLES2/libEGL/main.h
index 485f0b1..2fa3647 100644
--- a/src/GLES2/libEGL/main.h
+++ b/src/GLES2/libEGL/main.h
@@ -73,6 +73,7 @@
 	class Surface;
 	class Display;
 	class Context;
+	class Image;
 }
 
 namespace sw
@@ -84,13 +85,11 @@
 // libGLESv2 dependencies
 namespace gl
 {
-	class Image;
-
 	extern egl::Context *(*createContext)(const egl::Config *config, const egl::Context *shareContext);
 	extern void (*makeCurrent)(egl::Context *context, egl::Display *display, egl::Surface *surface);
 	extern __eglMustCastToProperFunctionPointerType (*getProcAddress)(const char *procname);
-	extern Image *(*createBackBuffer)(int width, int height, const egl::Config *config);
-	extern Image *(*createDepthStencil)(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard);
+	extern egl::Image *(*createBackBuffer)(int width, int height, const egl::Config *config);
+	extern egl::Image *(*createDepthStencil)(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard);
 	extern sw::FrameBuffer *(*createFrameBuffer)(EGLNativeDisplayType display, EGLNativeWindowType window, int width, int height);
 }
 
diff --git a/src/GLES2/libGLES_CM/Context.cpp b/src/GLES2/libGLES_CM/Context.cpp
index 808cdd4..1e83169 100644
--- a/src/GLES2/libGLES_CM/Context.cpp
+++ b/src/GLES2/libGLES_CM/Context.cpp
@@ -205,8 +205,8 @@
     }

 

     // Wrap the existing resources into GL objects and assign them to the '0' names

-    Image *defaultRenderTarget = surface->getRenderTarget();

-    Image *depthStencil = surface->getDepthStencil();

+    egl::Image *defaultRenderTarget = surface->getRenderTarget();

+    egl::Image *depthStencil = surface->getDepthStencil();

 

     Colorbuffer *colorbufferZero = new Colorbuffer(defaultRenderTarget);

     DepthStencilbuffer *depthStencilbufferZero = new DepthStencilbuffer(depthStencil);

@@ -1303,11 +1303,11 @@
         return error(GL_INVALID_FRAMEBUFFER_OPERATION_OES, false);

     }

 

-    Image *renderTarget = framebuffer->getRenderTarget();

+    egl::Image *renderTarget = framebuffer->getRenderTarget();

 	device->setRenderTarget(renderTarget);

 	if(renderTarget) renderTarget->release();

 

-    Image *depthStencil = framebuffer->getDepthStencil();

+    egl::Image *depthStencil = framebuffer->getDepthStencil();

     device->setDepthStencilSurface(depthStencil);

 	if(depthStencil) depthStencil->release();

 

@@ -1634,7 +1634,7 @@
 					surfaceLevel = levelCount - 1;

 				}

 

-				Image *surface = texture->getImage(surfaceLevel);

+				egl::Image *surface = texture->getImage(surfaceLevel);

 				device->setTextureLevel(index, 0, mipmapLevel, surface, sw::TEXTURE_2D);

 			}

 		}

@@ -1674,7 +1674,7 @@
         }

     }

 

-    Image *renderTarget = framebuffer->getRenderTarget();

+    egl::Image *renderTarget = framebuffer->getRenderTarget();

 

     if(!renderTarget)

     {

@@ -2277,7 +2277,7 @@
 	return EGL_SUCCESS;

 }

 

-Image *Context::createSharedImage(EGLenum target, GLuint name, GLuint textureLevel)

+egl::Image *Context::createSharedImage(EGLenum target, GLuint name, GLuint textureLevel)

 {

     if(target == EGL_GL_TEXTURE_2D_KHR)

     {

diff --git a/src/GLES2/libGLES_CM/Context.h b/src/GLES2/libGLES_CM/Context.h
index bb66976..653ce11 100644
--- a/src/GLES2/libGLES_CM/Context.h
+++ b/src/GLES2/libGLES_CM/Context.h
@@ -370,7 +370,7 @@
 

 	virtual void bindTexImage(egl::Surface *surface);

 	virtual EGLenum validateSharedImage(EGLenum target, GLuint name, GLuint textureLevel);

-	virtual Image *createSharedImage(EGLenum target, GLuint name, GLuint textureLevel);

+	virtual egl::Image *createSharedImage(EGLenum target, GLuint name, GLuint textureLevel);

 

 	Device *getDevice();

 

diff --git a/src/GLES2/libGLES_CM/Device.cpp b/src/GLES2/libGLES_CM/Device.cpp
index 224d0d6..6042715 100644
--- a/src/GLES2/libGLES_CM/Device.cpp
+++ b/src/GLES2/libGLES_CM/Device.cpp
@@ -355,7 +355,7 @@
 		draw(drawType, 0, primitiveCount);

 	}

 

-	void Device::setDepthStencilSurface(Image *depthStencil)

+	void Device::setDepthStencilSurface(egl::Image *depthStencil)

 	{

 		if(this->depthStencil == depthStencil)

 		{

@@ -382,7 +382,7 @@
 		scissorEnable = enable;

 	}

 

-	void Device::setRenderTarget(Image *renderTarget)

+	void Device::setRenderTarget(egl::Image *renderTarget)

 	{

 		if(renderTarget)

 		{

@@ -409,7 +409,7 @@
 		this->viewport = viewport;

 	}

 

-	bool Device::stretchRect(Image *source, const sw::Rect *sourceRect, Image *dest, const sw::Rect *destRect, bool filter)

+	bool Device::stretchRect(egl::Image *source, const sw::Rect *sourceRect, egl::Image *dest, const sw::Rect *destRect, bool filter)

 	{

 		if(!source || !dest || !validRectangle(sourceRect, source) || !validRectangle(destRect, dest))

 		{

@@ -615,7 +615,7 @@
 		return true;

 	}

 

-	bool Device::validRectangle(const sw::Rect *rect, Image *surface)

+	bool Device::validRectangle(const sw::Rect *rect, egl::Image *surface)

 	{

 		if(!rect)

 		{

diff --git a/src/GLES2/libGLES_CM/Device.hpp b/src/GLES2/libGLES_CM/Device.hpp
index ca54e29..d8c4eff 100644
--- a/src/GLES2/libGLES_CM/Device.hpp
+++ b/src/GLES2/libGLES_CM/Device.hpp
@@ -14,13 +14,14 @@
 

 #include "Renderer/Renderer.hpp"

 

-namespace gl

+namespace egl

 {

-	class Texture;

+	class Image;

 }

 

 namespace gl

 {

+	class Texture;

 	class Image;

 

 	enum PrimitiveType

@@ -58,13 +59,13 @@
 		virtual Image *createRenderTarget(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool lockable);

 		virtual void drawIndexedPrimitive(PrimitiveType type, unsigned int indexOffset, unsigned int primitiveCount, int indexSize);

 		virtual void drawPrimitive(PrimitiveType primitiveType, unsigned int primiveCount);

-		virtual void setDepthStencilSurface(Image *newDepthStencil);

+		virtual void setDepthStencilSurface(egl::Image *newDepthStencil);

 		virtual void setScissorEnable(bool enable);

-		virtual void setRenderTarget(Image *renderTarget);

+		virtual void setRenderTarget(egl::Image *renderTarget);

 		virtual void setScissorRect(const sw::Rect &rect);

 		virtual void setViewport(const Viewport &viewport);

 

-		virtual bool stretchRect(Image *sourceSurface, const sw::Rect *sourceRect, Image *destSurface, const sw::Rect *destRect, bool filter);

+		virtual bool stretchRect(egl::Image *sourceSurface, const sw::Rect *sourceRect, egl::Image *destSurface, const sw::Rect *destRect, bool filter);

 		virtual void finish();

 

 	private:

@@ -73,14 +74,14 @@
 		bool bindResources();

 		bool bindViewport();   // Also adjusts for scissoring

 

-		bool validRectangle(const sw::Rect *rect, Image *surface);

+		bool validRectangle(const sw::Rect *rect, egl::Image *surface);

 

 		Viewport viewport;

 		sw::Rect scissorRect;

 		bool scissorEnable;

 

-		Image *renderTarget;

-		Image *depthStencil;

+		egl::Image *renderTarget;

+		egl::Image *depthStencil;

 	};

 }

 

diff --git a/src/GLES2/libGLES_CM/Framebuffer.cpp b/src/GLES2/libGLES_CM/Framebuffer.cpp
index 1832913..3af1fcb 100644
--- a/src/GLES2/libGLES_CM/Framebuffer.cpp
+++ b/src/GLES2/libGLES_CM/Framebuffer.cpp
@@ -123,7 +123,7 @@
 
 // Increments refcount on surface.
 // caller must Release() the returned surface
-Image *Framebuffer::getRenderTarget()
+egl::Image *Framebuffer::getRenderTarget()
 {
 	Renderbuffer *colorbuffer = mColorbufferPointer.get();
 
@@ -137,7 +137,7 @@
 
 // Increments refcount on surface.
 // caller must Release() the returned surface
-Image *Framebuffer::getDepthStencil()
+egl::Image *Framebuffer::getDepthStencil()
 {
 	Renderbuffer *depthstencilbuffer = mDepthbufferPointer.get();
 	
diff --git a/src/GLES2/libGLES_CM/Framebuffer.h b/src/GLES2/libGLES_CM/Framebuffer.h
index 1b60462..50c3920 100644
--- a/src/GLES2/libGLES_CM/Framebuffer.h
+++ b/src/GLES2/libGLES_CM/Framebuffer.h
@@ -43,8 +43,8 @@
     void detachTexture(GLuint texture);

     void detachRenderbuffer(GLuint renderbuffer);

 

-    Image *getRenderTarget();

-    Image *getDepthStencil();

+    egl::Image *getRenderTarget();

+    egl::Image *getDepthStencil();

 

     Renderbuffer *getColorbuffer();

     Renderbuffer *getDepthbuffer();

diff --git a/src/GLES2/libGLES_CM/Image.cpp b/src/GLES2/libGLES_CM/Image.cpp
index 8302343..41bacb2 100644
--- a/src/GLES2/libGLES_CM/Image.cpp
+++ b/src/GLES2/libGLES_CM/Image.cpp
@@ -34,7 +34,7 @@
 	Image::Image(Texture *parentTexture, GLsizei width, GLsizei height, GLenum format, GLenum type)
 		: parentTexture(parentTexture), width(width), height(height), format(format), type(type)
 		, internalFormat(selectInternalFormat(format, type)), multiSampleDepth(1)
-		, sw::Surface(getParentResource(parentTexture), width, height, 1, selectInternalFormat(format, type), true, true)
+		, egl::Image(getParentResource(parentTexture), width, height, 1, selectInternalFormat(format, type), true, true)
 	{
         shared = false;
 		referenceCount = 1;
@@ -42,7 +42,7 @@
 
 	Image::Image(Texture *parentTexture, GLsizei width, GLsizei height, sw::Format internalFormat, GLenum format, GLenum type, int multiSampleDepth, bool lockable, bool renderTarget)
 		: parentTexture(parentTexture), width(width), height(height), internalFormat(internalFormat), format(format), type(type), multiSampleDepth(multiSampleDepth)
-		, sw::Surface(getParentResource(parentTexture), width, height, multiSampleDepth, internalFormat, lockable, renderTarget)
+		, egl::Image(getParentResource(parentTexture), width, height, multiSampleDepth, internalFormat, lockable, renderTarget)
 	{
         shared = false;
 		referenceCount = 1;
diff --git a/src/GLES2/libGLES_CM/Image.hpp b/src/GLES2/libGLES_CM/Image.hpp
index 43216a5..5995647 100644
--- a/src/GLES2/libGLES_CM/Image.hpp
+++ b/src/GLES2/libGLES_CM/Image.hpp
@@ -13,6 +13,7 @@
 #define gl_Image_hpp
 
 #include "Renderer/Surface.hpp"
+#include "libEGL/Image.hpp"
 
 #define GL_API
 #include <GLES/gl.h>
@@ -21,7 +22,7 @@
 {
 	class Texture;
 
-	class Image : public sw::Surface
+	class Image : public egl::Image
 	{
 	public:
 		Image(Texture *parentTexture, GLsizei width, GLsizei height, GLenum format, GLenum type);
diff --git a/src/GLES2/libGLES_CM/Renderbuffer.cpp b/src/GLES2/libGLES_CM/Renderbuffer.cpp
index 5e1ea63..4043a32 100644
--- a/src/GLES2/libGLES_CM/Renderbuffer.cpp
+++ b/src/GLES2/libGLES_CM/Renderbuffer.cpp
@@ -92,14 +92,14 @@
 
 // Increments refcount on image.
 // caller must release() the returned image
-Image *RenderbufferTexture2D::getRenderTarget()
+egl::Image *RenderbufferTexture2D::getRenderTarget()
 {
 	return mTexture2D->getRenderTarget(GL_TEXTURE_2D, 0);
 }
 
 // Increments refcount on image.
 // caller must release() the returned image
-Image *RenderbufferTexture2D::createSharedImage()
+egl::Image *RenderbufferTexture2D::createSharedImage()
 {
     return mTexture2D->createSharedImage(GL_TEXTURE_2D, 0);
 }
@@ -165,14 +165,14 @@
 
 // Increments refcount on image.
 // caller must Release() the returned image
-Image *Renderbuffer::getRenderTarget()
+egl::Image *Renderbuffer::getRenderTarget()
 {
 	return mInstance->getRenderTarget();
 }
 
 // Increments refcount on image.
 // caller must Release() the returned image
-Image *Renderbuffer::createSharedImage()
+egl::Image *Renderbuffer::createSharedImage()
 {
     return mInstance->createSharedImage();
 }
@@ -283,7 +283,7 @@
 	return mSamples;
 }
 
-Colorbuffer::Colorbuffer(Image *renderTarget) : mRenderTarget(renderTarget)
+Colorbuffer::Colorbuffer(egl::Image *renderTarget) : mRenderTarget(renderTarget)
 {
 	if(renderTarget)
 	{
@@ -332,7 +332,7 @@
 
 // Increments refcount on image.
 // caller must release() the returned image
-Image *Colorbuffer::getRenderTarget()
+egl::Image *Colorbuffer::getRenderTarget()
 {
 	if(mRenderTarget)
 	{
@@ -344,7 +344,7 @@
 
 // Increments refcount on image.
 // caller must release() the returned image
-Image *Colorbuffer::createSharedImage()
+egl::Image *Colorbuffer::createSharedImage()
 {
     if(mRenderTarget)
     {
@@ -360,7 +360,7 @@
     return mRenderTarget->isShared();
 }
 
-DepthStencilbuffer::DepthStencilbuffer(Image *depthStencil) : mDepthStencil(depthStencil)
+DepthStencilbuffer::DepthStencilbuffer(egl::Image *depthStencil) : mDepthStencil(depthStencil)
 {
 	if(depthStencil)
 	{
@@ -410,7 +410,7 @@
 
 // Increments refcount on image.
 // caller must release() the returned image
-Image *DepthStencilbuffer::getRenderTarget()
+egl::Image *DepthStencilbuffer::getRenderTarget()
 {
 	if(mDepthStencil)
 	{
@@ -422,7 +422,7 @@
 
 // Increments refcount on image.
 // caller must release() the returned image
-Image *DepthStencilbuffer::createSharedImage()
+egl::Image *DepthStencilbuffer::createSharedImage()
 {
     if(mDepthStencil)
     {
@@ -438,7 +438,7 @@
     return mDepthStencil->isShared();
 }
 
-Depthbuffer::Depthbuffer(Image *depthStencil) : DepthStencilbuffer(depthStencil)
+Depthbuffer::Depthbuffer(egl::Image *depthStencil) : DepthStencilbuffer(depthStencil)
 {
 	if(depthStencil)
 	{
@@ -462,7 +462,7 @@
 {
 }
 
-Stencilbuffer::Stencilbuffer(Image *depthStencil) : DepthStencilbuffer(depthStencil)
+Stencilbuffer::Stencilbuffer(egl::Image *depthStencil) : DepthStencilbuffer(depthStencil)
 {
 	if(depthStencil)
 	{
diff --git a/src/GLES2/libGLES_CM/Renderbuffer.h b/src/GLES2/libGLES_CM/Renderbuffer.h
index fd785d6..17460b3 100644
--- a/src/GLES2/libGLES_CM/Renderbuffer.h
+++ b/src/GLES2/libGLES_CM/Renderbuffer.h
@@ -40,8 +40,8 @@
 	virtual void addProxyRef(const Renderbuffer *proxy);

     virtual void releaseProxy(const Renderbuffer *proxy);

 

-	virtual Image *getRenderTarget() = 0;

-    virtual Image *createSharedImage() = 0;

+	virtual egl::Image *getRenderTarget() = 0;

+    virtual egl::Image *createSharedImage() = 0;

     virtual bool isShared() const = 0;

 

 	virtual GLsizei getWidth() const = 0;

@@ -68,8 +68,8 @@
 	virtual void addProxyRef(const Renderbuffer *proxy);

     virtual void releaseProxy(const Renderbuffer *proxy);

 

-	virtual Image *getRenderTarget();

-    virtual Image *createSharedImage();

+	virtual egl::Image *getRenderTarget();

+    virtual egl::Image *createSharedImage();

     virtual bool isShared() const;

 

 	virtual GLsizei getWidth() const;

@@ -92,8 +92,8 @@
 

 	virtual ~RenderbufferStorage() = 0;

 

-	virtual Image *getRenderTarget() = 0;

-    virtual Image *createSharedImage() = 0;

+	virtual egl::Image *getRenderTarget() = 0;

+    virtual egl::Image *createSharedImage() = 0;

     virtual bool isShared() const = 0;

 

 	virtual GLsizei getWidth() const;

@@ -127,8 +127,8 @@
     virtual void addRef();

     virtual void release();

 

-	Image *getRenderTarget();

-    virtual Image *createSharedImage();

+	egl::Image *getRenderTarget();

+    virtual egl::Image *createSharedImage();

     virtual bool isShared() const;

 

 	GLsizei getWidth() const;

@@ -152,39 +152,39 @@
 class Colorbuffer : public RenderbufferStorage

 {

 public:

-	explicit Colorbuffer(Image *renderTarget);

+	explicit Colorbuffer(egl::Image *renderTarget);

 	Colorbuffer(GLsizei width, GLsizei height, GLenum format, GLsizei samples);

 

 	virtual ~Colorbuffer();

 

-	virtual Image *getRenderTarget();

-    virtual Image *createSharedImage();

+	virtual egl::Image *getRenderTarget();

+    virtual egl::Image *createSharedImage();

     virtual bool isShared() const;

 

 private:

-	Image *mRenderTarget;

+	egl::Image *mRenderTarget;

 };

 

 class DepthStencilbuffer : public RenderbufferStorage

 {

 public:

-	explicit DepthStencilbuffer(Image *depthStencil);

+	explicit DepthStencilbuffer(egl::Image *depthStencil);

 	DepthStencilbuffer(GLsizei width, GLsizei height, GLsizei samples);

 

 	~DepthStencilbuffer();

 

-	virtual Image *getRenderTarget();

-    virtual Image *createSharedImage();

+	virtual egl::Image *getRenderTarget();

+    virtual egl::Image *createSharedImage();

     virtual bool isShared() const;

 

 protected:

-	Image *mDepthStencil;

+	egl::Image *mDepthStencil;

 };

 

 class Depthbuffer : public DepthStencilbuffer

 {

 public:

-	explicit Depthbuffer(Image *depthStencil);

+	explicit Depthbuffer(egl::Image *depthStencil);

 	Depthbuffer(GLsizei width, GLsizei height, GLsizei samples);

 

 	virtual ~Depthbuffer();

@@ -193,7 +193,7 @@
 class Stencilbuffer : public DepthStencilbuffer

 {

 public:

-	explicit Stencilbuffer(Image *depthStencil);

+	explicit Stencilbuffer(egl::Image *depthStencil);

 	Stencilbuffer(GLsizei width, GLsizei height, GLsizei samples);

 

 	virtual ~Stencilbuffer();

diff --git a/src/GLES2/libGLES_CM/Texture.cpp b/src/GLES2/libGLES_CM/Texture.cpp
index 90b507e..cd53de6 100644
--- a/src/GLES2/libGLES_CM/Texture.cpp
+++ b/src/GLES2/libGLES_CM/Texture.cpp
@@ -169,9 +169,9 @@
     return mMaxAnisotropy;

 }

 

-Image *Texture::createSharedImage(GLenum target, unsigned int level)

+egl::Image *Texture::createSharedImage(GLenum target, unsigned int level)

 {

-    Image *image = getRenderTarget(target, level);   // Increments reference count

+    egl::Image *image = getRenderTarget(target, level);   // Increments reference count

 

     if(image)

     {

@@ -181,7 +181,7 @@
     return image;

 }

 

-void Texture::setImage(GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, Image *image)

+void Texture::setImage(GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, egl::Image *image)

 {

     if(pixels && image)

     {

@@ -189,7 +189,7 @@
     }

 }

 

-void Texture::setCompressedImage(GLsizei imageSize, const void *pixels, Image *image)

+void Texture::setCompressedImage(GLsizei imageSize, const void *pixels, egl::Image *image)

 {

     if(pixels && image)

     {

@@ -197,7 +197,7 @@
     }

 }

 

-void Texture::subImage(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, Image *image)

+void Texture::subImage(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, egl::Image *image)

 {

 	if(!image)

 	{

@@ -225,7 +225,7 @@
     }

 }

 

-void Texture::subImageCompressed(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels, Image *image)

+void Texture::subImageCompressed(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels, egl::Image *image)

 {

 	if(!image)

 	{

@@ -248,7 +248,7 @@
     }

 }

 

-bool Texture::copy(Image *source, const sw::Rect &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, Image *dest)

+bool Texture::copy(egl::Image *source, const sw::Rect &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, egl::Image *dest)

 {

     Device *device = getDevice();

 	

@@ -477,7 +477,7 @@
 

 void Texture2D::copyImage(GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source)

 {

-    Image *renderTarget = source->getRenderTarget();

+    egl::Image *renderTarget = source->getRenderTarget();

 

     if(!renderTarget)

     {

@@ -520,7 +520,7 @@
         return error(GL_INVALID_VALUE);

     }

 

-    Image *renderTarget = source->getRenderTarget();

+    egl::Image *renderTarget = source->getRenderTarget();

 

     if(!renderTarget)

     {

@@ -639,7 +639,7 @@
     }

 }

 

-Image *Texture2D::getImage(unsigned int level)

+egl::Image *Texture2D::getImage(unsigned int level)

 {

 	return image[level];

 }

@@ -659,7 +659,7 @@
     return mColorbufferProxy;

 }

 

-Image *Texture2D::getRenderTarget(GLenum target, unsigned int level)

+egl::Image *Texture2D::getRenderTarget(GLenum target, unsigned int level)

 {

     ASSERT(target == GL_TEXTURE_2D);

 	ASSERT(level < IMPLEMENTATION_MAX_TEXTURE_LEVELS);

diff --git a/src/GLES2/libGLES_CM/Texture.h b/src/GLES2/libGLES_CM/Texture.h
index 73ce99e..a0d890d 100644
--- a/src/GLES2/libGLES_CM/Texture.h
+++ b/src/GLES2/libGLES_CM/Texture.h
@@ -84,20 +84,20 @@
 	virtual bool isDepth(GLenum target, GLint level) const = 0;

 

     virtual Renderbuffer *getRenderbuffer(GLenum target) = 0;

-    virtual Image *getRenderTarget(GLenum target, unsigned int level) = 0;

-    virtual Image *createSharedImage(GLenum target, unsigned int level);

+    virtual egl::Image *getRenderTarget(GLenum target, unsigned int level) = 0;

+    virtual egl::Image *createSharedImage(GLenum target, unsigned int level);

     virtual bool isShared(GLenum target, unsigned int level) const = 0;

 

     virtual void generateMipmaps() = 0;

     virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source) = 0;

 

 protected:

-    void setImage(GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, Image *image);

-    void subImage(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, Image *image);

-    void setCompressedImage(GLsizei imageSize, const void *pixels, Image *image);

-    void subImageCompressed(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels, Image *image);

+    void setImage(GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, egl::Image *image);

+    void subImage(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, egl::Image *image);

+    void setCompressedImage(GLsizei imageSize, const void *pixels, egl::Image *image);

+    void subImageCompressed(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels, egl::Image *image);

 

-	bool copy(Image *source, const sw::Rect &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, Image *dest);

+	bool copy(egl::Image *source, const sw::Rect &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, egl::Image *dest);

 

 	bool isMipmapFiltered() const;

 

@@ -145,15 +145,15 @@
     virtual void generateMipmaps();

 

 	virtual Renderbuffer *getRenderbuffer(GLenum target);

-    virtual Image *getRenderTarget(GLenum target, unsigned int level);

+    virtual egl::Image *getRenderTarget(GLenum target, unsigned int level);

 	virtual bool isShared(GLenum target, unsigned int level) const;

 

-    Image *getImage(unsigned int level);

+    egl::Image *getImage(unsigned int level);

 

 protected:

 	bool isMipmapComplete() const;

 

-	Image *image[IMPLEMENTATION_MAX_TEXTURE_LEVELS];

+	egl::Image *image[IMPLEMENTATION_MAX_TEXTURE_LEVELS];

     

     egl::Surface *mSurface;

     

diff --git a/src/GLES2/libGLESv2/Context.cpp b/src/GLES2/libGLESv2/Context.cpp
index 7b459b4..f48a57f 100644
--- a/src/GLES2/libGLESv2/Context.cpp
+++ b/src/GLES2/libGLESv2/Context.cpp
@@ -253,8 +253,8 @@
     }

 

     // Wrap the existing resources into GL objects and assign them to the '0' names

-    Image *defaultRenderTarget = surface->getRenderTarget();

-    Image *depthStencil = surface->getDepthStencil();

+    egl::Image *defaultRenderTarget = surface->getRenderTarget();

+    egl::Image *depthStencil = surface->getDepthStencil();

 

     Colorbuffer *colorbufferZero = new Colorbuffer(defaultRenderTarget);

     DepthStencilbuffer *depthStencilbufferZero = new DepthStencilbuffer(depthStencil);

@@ -1680,11 +1680,11 @@
         return error(GL_INVALID_FRAMEBUFFER_OPERATION, false);

     }

 

-    Image *renderTarget = framebuffer->getRenderTarget();

+    egl::Image *renderTarget = framebuffer->getRenderTarget();

 	device->setRenderTarget(renderTarget);

 	if(renderTarget) renderTarget->release();

 

-    Image *depthStencil = framebuffer->getDepthStencil();

+    egl::Image *depthStencil = framebuffer->getDepthStencil();

     device->setDepthStencilSurface(depthStencil);

 	if(depthStencil) depthStencil->release();

 

@@ -2115,7 +2115,7 @@
 					surfaceLevel = levelCount - 1;

 				}

 

-				Image *surface = texture->getImage(surfaceLevel);

+				egl::Image *surface = texture->getImage(surfaceLevel);

 				device->setTextureLevel(sampler, 0, mipmapLevel, surface, sw::TEXTURE_2D);

 			}

 		}

@@ -2138,7 +2138,7 @@
 						surfaceLevel = levelCount - 1;

 					}

 

-					Image *surface = cubeTexture->getImage(face, surfaceLevel);

+					egl::Image *surface = cubeTexture->getImage(face, surfaceLevel);

 					device->setTextureLevel(sampler, face, mipmapLevel, surface, sw::TEXTURE_CUBE);

 				}

 			}

@@ -2179,7 +2179,7 @@
         }

     }

 

-    Image *renderTarget = framebuffer->getRenderTarget();

+    egl::Image *renderTarget = framebuffer->getRenderTarget();

 

     if(!renderTarget)

     {

@@ -2992,8 +2992,8 @@
     {

         if(blitRenderTarget)

         {

-            Image *readRenderTarget = readFramebuffer->getRenderTarget();

-            Image *drawRenderTarget = drawFramebuffer->getRenderTarget();

+            egl::Image *readRenderTarget = readFramebuffer->getRenderTarget();

+            egl::Image *drawRenderTarget = drawFramebuffer->getRenderTarget();

  

             bool success = device->stretchRect(readRenderTarget, &sourceRect, drawRenderTarget, &destRect, false);

 

@@ -3101,7 +3101,7 @@
 	return EGL_SUCCESS;

 }

 

-Image *Context::createSharedImage(EGLenum target, GLuint name, GLuint textureLevel)

+egl::Image *Context::createSharedImage(EGLenum target, GLuint name, GLuint textureLevel)

 {

 	GLenum textureTarget = GL_NONE;

 

diff --git a/src/GLES2/libGLESv2/Context.h b/src/GLES2/libGLESv2/Context.h
index bbb7fd2..cc0e636 100644
--- a/src/GLES2/libGLESv2/Context.h
+++ b/src/GLES2/libGLESv2/Context.h
@@ -422,7 +422,7 @@
 

 	virtual void bindTexImage(egl::Surface *surface);

 	virtual EGLenum validateSharedImage(EGLenum target, GLuint name, GLuint textureLevel);

-	virtual gl::Image *createSharedImage(EGLenum target, GLuint name, GLuint textureLevel);

+	virtual egl::Image *createSharedImage(EGLenum target, GLuint name, GLuint textureLevel);

 

 	Device *getDevice();

 

diff --git a/src/GLES2/libGLESv2/Device.cpp b/src/GLES2/libGLESv2/Device.cpp
index 7fa5512..7a0488b 100644
--- a/src/GLES2/libGLESv2/Device.cpp
+++ b/src/GLES2/libGLESv2/Device.cpp
@@ -377,7 +377,7 @@
 		draw(drawType, 0, primitiveCount);

 	}

 

-	void Device::setDepthStencilSurface(Image *depthStencil)

+	void Device::setDepthStencilSurface(egl::Image *depthStencil)

 	{

 		if(this->depthStencil == depthStencil)

 		{

@@ -424,7 +424,7 @@
 		scissorEnable = enable;

 	}

 

-	void Device::setRenderTarget(Image *renderTarget)

+	void Device::setRenderTarget(egl::Image *renderTarget)

 	{

 		if(renderTarget)

 		{

@@ -471,7 +471,7 @@
 		this->viewport = viewport;

 	}

 

-	bool Device::stretchRect(Image *source, const sw::Rect *sourceRect, Image *dest, const sw::Rect *destRect, bool filter)

+	bool Device::stretchRect(egl::Image *source, const sw::Rect *sourceRect, egl::Image *dest, const sw::Rect *destRect, bool filter)

 	{

 		if(!source || !dest || !validRectangle(sourceRect, source) || !validRectangle(destRect, dest))

 		{

@@ -722,7 +722,7 @@
 		return true;

 	}

 

-	bool Device::validRectangle(const sw::Rect *rect, Image *surface)

+	bool Device::validRectangle(const sw::Rect *rect, egl::Image *surface)

 	{

 		if(!rect)

 		{

diff --git a/src/GLES2/libGLESv2/Device.hpp b/src/GLES2/libGLESv2/Device.hpp
index 4e0337d..973afc8 100644
--- a/src/GLES2/libGLESv2/Device.hpp
+++ b/src/GLES2/libGLESv2/Device.hpp
@@ -14,13 +14,14 @@
 

 #include "Renderer/Renderer.hpp"

 

-namespace gl

+namespace egl

 {

-	class Texture;

+	class Image;

 }

 

 namespace gl

 {

+	class Texture;

 	class Image;

 

 	enum PrimitiveType

@@ -58,17 +59,17 @@
 		virtual Image *createRenderTarget(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool lockable);

 		virtual void drawIndexedPrimitive(PrimitiveType type, unsigned int indexOffset, unsigned int primitiveCount, int indexSize);

 		virtual void drawPrimitive(PrimitiveType primitiveType, unsigned int primiveCount);

-		virtual void setDepthStencilSurface(Image *newDepthStencil);

+		virtual void setDepthStencilSurface(egl::Image *newDepthStencil);

 		virtual void setPixelShader(sw::PixelShader *shader);

 		virtual void setPixelShaderConstantF(unsigned int startRegister, const float *constantData, unsigned int count);

 		virtual void setScissorEnable(bool enable);

-		virtual void setRenderTarget(Image *renderTarget);

+		virtual void setRenderTarget(egl::Image *renderTarget);

 		virtual void setScissorRect(const sw::Rect &rect);

 		virtual void setVertexShader(sw::VertexShader *shader);

 		virtual void setVertexShaderConstantF(unsigned int startRegister, const float *constantData, unsigned int count);

 		virtual void setViewport(const Viewport &viewport);

 

-		virtual bool stretchRect(Image *sourceSurface, const sw::Rect *sourceRect, Image *destSurface, const sw::Rect *destRect, bool filter);

+		virtual bool stretchRect(egl::Image *sourceSurface, const sw::Rect *sourceRect, egl::Image *destSurface, const sw::Rect *destRect, bool filter);

 		virtual void finish();

 

 	private:

@@ -78,7 +79,7 @@
 		void bindShaderConstants();

 		bool bindViewport();   // Also adjusts for scissoring

 

-		bool validRectangle(const sw::Rect *rect, Image *surface);

+		bool validRectangle(const sw::Rect *rect, egl::Image *surface);

 

 		Viewport viewport;

 		sw::Rect scissorRect;

@@ -95,8 +96,8 @@
 		float pixelShaderConstantF[224][4];

 		float vertexShaderConstantF[256][4];

 

-		Image *renderTarget;

-		Image *depthStencil;

+		egl::Image *renderTarget;

+		egl::Image *depthStencil;

 	};

 }

 

diff --git a/src/GLES2/libGLESv2/Framebuffer.cpp b/src/GLES2/libGLESv2/Framebuffer.cpp
index 8ba7d9e..dd16a20 100644
--- a/src/GLES2/libGLESv2/Framebuffer.cpp
+++ b/src/GLES2/libGLESv2/Framebuffer.cpp
@@ -123,7 +123,7 @@
 
 // Increments refcount on surface.
 // caller must Release() the returned surface
-Image *Framebuffer::getRenderTarget()
+egl::Image *Framebuffer::getRenderTarget()
 {
 	Renderbuffer *colorbuffer = mColorbufferPointer.get();
 
@@ -137,7 +137,7 @@
 
 // Increments refcount on surface.
 // caller must Release() the returned surface
-Image *Framebuffer::getDepthStencil()
+egl::Image *Framebuffer::getDepthStencil()
 {
 	Renderbuffer *depthstencilbuffer = mDepthbufferPointer.get();
 	
diff --git a/src/GLES2/libGLESv2/Framebuffer.h b/src/GLES2/libGLESv2/Framebuffer.h
index c3e0f0b..2406dad 100644
--- a/src/GLES2/libGLESv2/Framebuffer.h
+++ b/src/GLES2/libGLESv2/Framebuffer.h
@@ -43,8 +43,8 @@
     void detachTexture(GLuint texture);

     void detachRenderbuffer(GLuint renderbuffer);

 

-    Image *getRenderTarget();

-    Image *getDepthStencil();

+    egl::Image *getRenderTarget();

+    egl::Image *getDepthStencil();

 

     Renderbuffer *getColorbuffer();

     Renderbuffer *getDepthbuffer();

diff --git a/src/GLES2/libGLESv2/Image.cpp b/src/GLES2/libGLESv2/Image.cpp
index a2950c6..85bfa1e 100644
--- a/src/GLES2/libGLESv2/Image.cpp
+++ b/src/GLES2/libGLESv2/Image.cpp
@@ -33,7 +33,7 @@
 	Image::Image(Texture *parentTexture, GLsizei width, GLsizei height, GLenum format, GLenum type)
 		: parentTexture(parentTexture), width(width), height(height), format(format), type(type)
 		, internalFormat(selectInternalFormat(format, type)), multiSampleDepth(1)
-		, sw::Surface(getParentResource(parentTexture), width, height, 1, selectInternalFormat(format, type), true, true)
+		, egl::Image(getParentResource(parentTexture), width, height, 1, selectInternalFormat(format, type), true, true)
 	{
         shared = false;
 		referenceCount = 1;
@@ -41,7 +41,7 @@
 
 	Image::Image(Texture *parentTexture, GLsizei width, GLsizei height, sw::Format internalFormat, GLenum format, GLenum type, int multiSampleDepth, bool lockable, bool renderTarget)
 		: parentTexture(parentTexture), width(width), height(height), internalFormat(internalFormat), format(format), type(type), multiSampleDepth(multiSampleDepth)
-		, sw::Surface(getParentResource(parentTexture), width, height, multiSampleDepth, internalFormat, lockable, renderTarget)
+		, egl::Image(getParentResource(parentTexture), width, height, multiSampleDepth, internalFormat, lockable, renderTarget)
 	{
         shared = false;
 		referenceCount = 1;
diff --git a/src/GLES2/libGLESv2/Image.hpp b/src/GLES2/libGLESv2/Image.hpp
index faae7d5..e796bcd 100644
--- a/src/GLES2/libGLESv2/Image.hpp
+++ b/src/GLES2/libGLESv2/Image.hpp
@@ -13,6 +13,7 @@
 #define gl_Image_hpp
 
 #include "Renderer/Surface.hpp"
+#include "libEGL/Image.hpp"
 
 #define GL_APICALL
 #include <GLES2/gl2.h>
@@ -21,7 +22,7 @@
 {
 	class Texture;
 
-	class Image : public sw::Surface
+	class Image : public egl::Image
 	{
 	public:
 		Image(Texture *parentTexture, GLsizei width, GLsizei height, GLenum format, GLenum type);
diff --git a/src/GLES2/libGLESv2/Renderbuffer.cpp b/src/GLES2/libGLESv2/Renderbuffer.cpp
index 6ca0c15..81fcd45 100644
--- a/src/GLES2/libGLESv2/Renderbuffer.cpp
+++ b/src/GLES2/libGLESv2/Renderbuffer.cpp
@@ -92,14 +92,14 @@
 
 // Increments refcount on image.
 // caller must release() the returned image
-Image *RenderbufferTexture2D::getRenderTarget()
+egl::Image *RenderbufferTexture2D::getRenderTarget()
 {
 	return mTexture2D->getRenderTarget(GL_TEXTURE_2D, 0);
 }
 
 // Increments refcount on image.
 // caller must release() the returned image
-Image *RenderbufferTexture2D::createSharedImage()
+egl::Image *RenderbufferTexture2D::createSharedImage()
 {
     return mTexture2D->createSharedImage(GL_TEXTURE_2D, 0);
 }
@@ -167,7 +167,7 @@
 
 // Increments refcount on image.
 // caller must release() the returned image
-Image *RenderbufferTextureCubeMap::createSharedImage()
+egl::Image *RenderbufferTextureCubeMap::createSharedImage()
 {
     return mTextureCubeMap->createSharedImage(mTarget, 0);
 }
@@ -233,14 +233,14 @@
 
 // Increments refcount on image.
 // caller must Release() the returned image
-Image *Renderbuffer::getRenderTarget()
+egl::Image *Renderbuffer::getRenderTarget()
 {
 	return mInstance->getRenderTarget();
 }
 
 // Increments refcount on image.
 // caller must Release() the returned image
-Image *Renderbuffer::createSharedImage()
+egl::Image *Renderbuffer::createSharedImage()
 {
     return mInstance->createSharedImage();
 }
@@ -351,7 +351,7 @@
 	return mSamples;
 }
 
-Colorbuffer::Colorbuffer(Image *renderTarget) : mRenderTarget(renderTarget)
+Colorbuffer::Colorbuffer(egl::Image *renderTarget) : mRenderTarget(renderTarget)
 {
 	if(renderTarget)
 	{
@@ -400,7 +400,7 @@
 
 // Increments refcount on image.
 // caller must release() the returned image
-Image *Colorbuffer::getRenderTarget()
+egl::Image *Colorbuffer::getRenderTarget()
 {
 	if(mRenderTarget)
 	{
@@ -412,7 +412,7 @@
 
 // Increments refcount on image.
 // caller must release() the returned image
-Image *Colorbuffer::createSharedImage()
+egl::Image *Colorbuffer::createSharedImage()
 {
     if(mRenderTarget)
     {
@@ -428,7 +428,7 @@
     return mRenderTarget->isShared();
 }
 
-DepthStencilbuffer::DepthStencilbuffer(Image *depthStencil) : mDepthStencil(depthStencil)
+DepthStencilbuffer::DepthStencilbuffer(egl::Image *depthStencil) : mDepthStencil(depthStencil)
 {
 	if(depthStencil)
 	{
@@ -478,7 +478,7 @@
 
 // Increments refcount on image.
 // caller must release() the returned image
-Image *DepthStencilbuffer::getRenderTarget()
+egl::Image *DepthStencilbuffer::getRenderTarget()
 {
 	if(mDepthStencil)
 	{
@@ -490,7 +490,7 @@
 
 // Increments refcount on image.
 // caller must release() the returned image
-Image *DepthStencilbuffer::createSharedImage()
+egl::Image *DepthStencilbuffer::createSharedImage()
 {
     if(mDepthStencil)
     {
@@ -506,7 +506,7 @@
     return mDepthStencil->isShared();
 }
 
-Depthbuffer::Depthbuffer(Image *depthStencil) : DepthStencilbuffer(depthStencil)
+Depthbuffer::Depthbuffer(egl::Image *depthStencil) : DepthStencilbuffer(depthStencil)
 {
 	if(depthStencil)
 	{
@@ -530,7 +530,7 @@
 {
 }
 
-Stencilbuffer::Stencilbuffer(Image *depthStencil) : DepthStencilbuffer(depthStencil)
+Stencilbuffer::Stencilbuffer(egl::Image *depthStencil) : DepthStencilbuffer(depthStencil)
 {
 	if(depthStencil)
 	{
diff --git a/src/GLES2/libGLESv2/Renderbuffer.h b/src/GLES2/libGLESv2/Renderbuffer.h
index 2e8a49e..b947ace 100644
--- a/src/GLES2/libGLESv2/Renderbuffer.h
+++ b/src/GLES2/libGLESv2/Renderbuffer.h
@@ -41,8 +41,8 @@
 	virtual void addProxyRef(const Renderbuffer *proxy);

     virtual void releaseProxy(const Renderbuffer *proxy);

 

-	virtual Image *getRenderTarget() = 0;

-    virtual Image *createSharedImage() = 0;

+	virtual egl::Image *getRenderTarget() = 0;

+    virtual egl::Image *createSharedImage() = 0;

     virtual bool isShared() const = 0;

 

 	virtual GLsizei getWidth() const = 0;

@@ -69,8 +69,8 @@
 	virtual void addProxyRef(const Renderbuffer *proxy);

     virtual void releaseProxy(const Renderbuffer *proxy);

 

-	virtual Image *getRenderTarget();

-    virtual Image *createSharedImage();

+	virtual egl::Image *getRenderTarget();

+    virtual egl::Image *createSharedImage();

     virtual bool isShared() const;

 

 	virtual GLsizei getWidth() const;

@@ -94,7 +94,7 @@
     virtual void releaseProxy(const Renderbuffer *proxy);

 

 	virtual Image *getRenderTarget();

-    virtual Image *createSharedImage();

+    virtual egl::Image *createSharedImage();

     virtual bool isShared() const;

 

 	virtual GLsizei getWidth() const;

@@ -118,8 +118,8 @@
 

 	virtual ~RenderbufferStorage() = 0;

 

-	virtual Image *getRenderTarget() = 0;

-    virtual Image *createSharedImage() = 0;

+	virtual egl::Image *getRenderTarget() = 0;

+    virtual egl::Image *createSharedImage() = 0;

     virtual bool isShared() const = 0;

 

 	virtual GLsizei getWidth() const;

@@ -153,8 +153,8 @@
     virtual void addRef();

     virtual void release();

 

-	Image *getRenderTarget();

-    virtual Image *createSharedImage();

+	egl::Image *getRenderTarget();

+    virtual egl::Image *createSharedImage();

     virtual bool isShared() const;

 

 	GLsizei getWidth() const;

@@ -178,39 +178,39 @@
 class Colorbuffer : public RenderbufferStorage

 {

 public:

-	explicit Colorbuffer(Image *renderTarget);

+	explicit Colorbuffer(egl::Image *renderTarget);

 	Colorbuffer(GLsizei width, GLsizei height, GLenum format, GLsizei samples);

 

 	virtual ~Colorbuffer();

 

-	virtual Image *getRenderTarget();

-    virtual Image *createSharedImage();

+	virtual egl::Image *getRenderTarget();

+    virtual egl::Image *createSharedImage();

     virtual bool isShared() const;

 

 private:

-	Image *mRenderTarget;

+	egl::Image *mRenderTarget;

 };

 

 class DepthStencilbuffer : public RenderbufferStorage

 {

 public:

-	explicit DepthStencilbuffer(Image *depthStencil);

+	explicit DepthStencilbuffer(egl::Image *depthStencil);

 	DepthStencilbuffer(GLsizei width, GLsizei height, GLsizei samples);

 

 	~DepthStencilbuffer();

 

-	virtual Image *getRenderTarget();

-    virtual Image *createSharedImage();

+	virtual egl::Image *getRenderTarget();

+    virtual egl::Image *createSharedImage();

     virtual bool isShared() const;

 

 protected:

-	Image *mDepthStencil;

+	egl::Image *mDepthStencil;

 };

 

 class Depthbuffer : public DepthStencilbuffer

 {

 public:

-	explicit Depthbuffer(Image *depthStencil);

+	explicit Depthbuffer(egl::Image *depthStencil);

 	Depthbuffer(GLsizei width, GLsizei height, GLsizei samples);

 

 	virtual ~Depthbuffer();

@@ -219,7 +219,7 @@
 class Stencilbuffer : public DepthStencilbuffer

 {

 public:

-	explicit Stencilbuffer(Image *depthStencil);

+	explicit Stencilbuffer(egl::Image *depthStencil);

 	Stencilbuffer(GLsizei width, GLsizei height, GLsizei samples);

 

 	virtual ~Stencilbuffer();

diff --git a/src/GLES2/libGLESv2/Texture.cpp b/src/GLES2/libGLESv2/Texture.cpp
index f170c00..30eebe4 100644
--- a/src/GLES2/libGLESv2/Texture.cpp
+++ b/src/GLES2/libGLESv2/Texture.cpp
@@ -169,9 +169,9 @@
     return mMaxAnisotropy;

 }

 

-Image *Texture::createSharedImage(GLenum target, unsigned int level)

+egl::Image *Texture::createSharedImage(GLenum target, unsigned int level)

 {

-    Image *image = getRenderTarget(target, level);   // Increments reference count

+    egl::Image *image = getRenderTarget(target, level);   // Increments reference count

 

     if(image)

     {

@@ -181,7 +181,7 @@
     return image;

 }

 

-void Texture::setImage(GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, Image *image)

+void Texture::setImage(GLenum format, GLenum type, GLint unpackAlignment, const void *pixels,egl:: Image *image)

 {

     if(pixels && image)

     {

@@ -189,7 +189,7 @@
     }

 }

 

-void Texture::setCompressedImage(GLsizei imageSize, const void *pixels, Image *image)

+void Texture::setCompressedImage(GLsizei imageSize, const void *pixels, egl::Image *image)

 {

     if(pixels && image)

     {

@@ -197,7 +197,7 @@
     }

 }

 

-void Texture::subImage(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, Image *image)

+void Texture::subImage(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, egl::Image *image)

 {

 	if(!image)

 	{

@@ -225,7 +225,7 @@
     }

 }

 

-void Texture::subImageCompressed(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels, Image *image)

+void Texture::subImageCompressed(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels, egl::Image *image)

 {

 	if(!image)

 	{

@@ -248,7 +248,7 @@
     }

 }

 

-bool Texture::copy(Image *source, const sw::Rect &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, Image *dest)

+bool Texture::copy(egl::Image *source, const sw::Rect &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, egl::Image *dest)

 {

     Device *device = getDevice();

 	

@@ -477,7 +477,7 @@
 

 void Texture2D::copyImage(GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source)

 {

-    Image *renderTarget = source->getRenderTarget();

+    egl::Image *renderTarget = source->getRenderTarget();

 

     if(!renderTarget)

     {

@@ -520,7 +520,7 @@
         return error(GL_INVALID_VALUE);

     }

 

-    Image *renderTarget = source->getRenderTarget();

+	egl::Image *renderTarget = source->getRenderTarget();

 

     if(!renderTarget)

     {

@@ -639,7 +639,7 @@
     }

 }

 

-Image *Texture2D::getImage(unsigned int level)

+egl::Image *Texture2D::getImage(unsigned int level)

 {

 	return image[level];

 }

@@ -659,7 +659,7 @@
     return mColorbufferProxy;

 }

 

-Image *Texture2D::getRenderTarget(GLenum target, unsigned int level)

+egl::Image *Texture2D::getRenderTarget(GLenum target, unsigned int level)

 {

     ASSERT(target == GL_TEXTURE_2D);

 	ASSERT(level < IMPLEMENTATION_MAX_TEXTURE_LEVELS);

@@ -971,7 +971,7 @@
 

 void TextureCubeMap::copyImage(GLenum target, GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source)

 {

-	Image *renderTarget = source->getRenderTarget();

+	egl::Image *renderTarget = source->getRenderTarget();

 

     if(!renderTarget)

     {

@@ -1030,7 +1030,7 @@
         return error(GL_INVALID_VALUE);

     }

 

-    Image *renderTarget = source->getRenderTarget();

+    egl::Image *renderTarget = source->getRenderTarget();

 

     if(!renderTarget)

     {

diff --git a/src/GLES2/libGLESv2/Texture.h b/src/GLES2/libGLESv2/Texture.h
index b4ae3e6..ff3b392 100644
--- a/src/GLES2/libGLESv2/Texture.h
+++ b/src/GLES2/libGLESv2/Texture.h
@@ -84,20 +84,20 @@
 	virtual bool isDepth(GLenum target, GLint level) const = 0;

 

     virtual Renderbuffer *getRenderbuffer(GLenum target) = 0;

-    virtual Image *getRenderTarget(GLenum target, unsigned int level) = 0;

-    virtual Image *createSharedImage(GLenum target, unsigned int level);

+    virtual egl::Image *getRenderTarget(GLenum target, unsigned int level) = 0;

+    virtual egl::Image *createSharedImage(GLenum target, unsigned int level);

     virtual bool isShared(GLenum target, unsigned int level) const = 0;

 

     virtual void generateMipmaps() = 0;

     virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source) = 0;

 

 protected:

-    void setImage(GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, Image *image);

-    void subImage(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, Image *image);

-    void setCompressedImage(GLsizei imageSize, const void *pixels, Image *image);

-    void subImageCompressed(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels, Image *image);

+    void setImage(GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, egl::Image *image);

+    void subImage(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, egl::Image *image);

+    void setCompressedImage(GLsizei imageSize, const void *pixels, egl::Image *image);

+    void subImageCompressed(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels, egl::Image *image);

 

-	bool copy(Image *source, const sw::Rect &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, Image *dest);

+	bool copy(egl::Image *source, const sw::Rect &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, egl::Image *dest);

 

 	bool isMipmapFiltered() const;

 

@@ -145,15 +145,15 @@
     virtual void generateMipmaps();

 

 	virtual Renderbuffer *getRenderbuffer(GLenum target);

-    virtual Image *getRenderTarget(GLenum target, unsigned int level);

+    virtual egl::Image *getRenderTarget(GLenum target, unsigned int level);

 	virtual bool isShared(GLenum target, unsigned int level) const;

 

-    Image *getImage(unsigned int level);

+    egl::Image *getImage(unsigned int level);

 

 protected:

 	bool isMipmapComplete() const;

 

-	Image *image[IMPLEMENTATION_MAX_TEXTURE_LEVELS];

+	egl::Image *image[IMPLEMENTATION_MAX_TEXTURE_LEVELS];

     

     egl::Surface *mSurface;