diff --git a/src/OpenGL/libGLES_CM/Texture.h b/src/OpenGL/libGLES_CM/Texture.h
index 82e4b33..3e0fa8a 100644
--- a/src/OpenGL/libGLES_CM/Texture.h
+++ b/src/OpenGL/libGLES_CM/Texture.h
@@ -88,7 +88,7 @@
 
 	virtual Renderbuffer *getRenderbuffer(GLenum target) = 0;
 	virtual egl::Image *getRenderTarget(GLenum target, unsigned int level) = 0;
-	virtual egl::Image *createSharedImage(GLenum target, unsigned int level);
+	egl::Image *createSharedImage(GLenum target, unsigned int level);
 	virtual bool isShared(GLenum target, unsigned int level) const = 0;
 
 	virtual void generateMipmaps() = 0;
@@ -97,7 +97,7 @@
 	virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source) = 0;
 
 protected:
-	virtual ~Texture();
+	~Texture() override;
 
 	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);
@@ -131,14 +131,14 @@
 	void releaseProxy(const Renderbuffer *proxy) override;
 	void sweep() override;
 
-	virtual GLenum getTarget() const;
+	GLenum getTarget() const override;
 
-	virtual GLsizei getWidth(GLenum target, GLint level) const;
-	virtual GLsizei getHeight(GLenum target, GLint level) const;
-	virtual GLenum getFormat(GLenum target, GLint level) const;
-	virtual GLenum getType(GLenum target, GLint level) const;
-	virtual sw::Format getInternalFormat(GLenum target, GLint level) const;
-	virtual int getLevelCount() const;
+	GLsizei getWidth(GLenum target, GLint level) const override;
+	GLsizei getHeight(GLenum target, GLint level) const override;
+	GLenum getFormat(GLenum target, GLint level) const override;
+	GLenum getType(GLenum target, GLint level) const override;
+	sw::Format getInternalFormat(GLenum target, GLint level) const override;
+	int getLevelCount() const override;
 
 	void setImage(GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels);
 	void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels);
@@ -149,23 +149,23 @@
 
 	void setSharedImage(egl::Image *image);
 
-	virtual bool isSamplerComplete() const;
-	virtual bool isCompressed(GLenum target, GLint level) const;
-	virtual bool isDepth(GLenum target, GLint level) const;
-	virtual void bindTexImage(gl::Surface *surface);
-	virtual void releaseTexImage();
+	bool isSamplerComplete() const override;
+	bool isCompressed(GLenum target, GLint level) const override;
+	bool isDepth(GLenum target, GLint level) const override;
+	void bindTexImage(gl::Surface *surface);
+	void releaseTexImage() override;
 
-	virtual void generateMipmaps();
-	virtual void autoGenerateMipmaps();
+	void generateMipmaps() override;
+	void autoGenerateMipmaps() override;
 
-	virtual Renderbuffer *getRenderbuffer(GLenum target);
-	virtual egl::Image *getRenderTarget(GLenum target, unsigned int level);
-	virtual bool isShared(GLenum target, unsigned int level) const;
+	Renderbuffer *getRenderbuffer(GLenum target) override;
+	egl::Image *getRenderTarget(GLenum target, unsigned int level) override;
+	bool isShared(GLenum target, unsigned int level) const override;
 
 	egl::Image *getImage(unsigned int level);
 
 protected:
-	virtual ~Texture2D();
+	~Texture2D() override;
 
 	bool isMipmapComplete() const;
 
@@ -187,10 +187,10 @@
 public:
 	explicit TextureExternal(GLuint name);
 
-	virtual GLenum getTarget() const;
+	GLenum getTarget() const override;
 
 protected:
-	virtual ~TextureExternal();
+	~TextureExternal() override;
 };
 }
 
diff --git a/src/OpenGL/libGLESv2/Texture.cpp b/src/OpenGL/libGLESv2/Texture.cpp
index e7d894d..2407b8a 100644
--- a/src/OpenGL/libGLESv2/Texture.cpp
+++ b/src/OpenGL/libGLESv2/Texture.cpp
@@ -1611,48 +1611,9 @@
 	Texture::setImage(format, type, unpackInfo, pixels, image[level]);
 }
 
-void Texture3D::bindTexImage(gl::Surface *surface)
-{
-	GLenum format;
-
-	switch(surface->getInternalFormat())
-	{
-	case sw::FORMAT_A8R8G8B8:
-		format = GL_RGBA;
-		break;
-	case sw::FORMAT_X8R8G8B8:
-		format = GL_RGB;
-		break;
-	default:
-		UNIMPLEMENTED();
-		return;
-	}
-
-	for(int level = 0; level < IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
-	{
-		if(image[level])
-		{
-			image[level]->release();
-			image[level] = nullptr;
-		}
-	}
-
-	image[0] = surface->getRenderTarget();
-
-	mSurface = surface;
-	mSurface->setBoundTexture(this);
-}
-
 void Texture3D::releaseTexImage()
 {
-	for(int level = 0; level < IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
-	{
-		if(image[level])
-		{
-			image[level]->release();
-			image[level] = nullptr;
-		}
-	}
+	UNREACHABLE(0);   // 3D textures cannot have an EGL surface bound as an image
 }
 
 void Texture3D::setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize, const void *pixels)
diff --git a/src/OpenGL/libGLESv2/Texture.h b/src/OpenGL/libGLESv2/Texture.h
index f01e0f2..4ab2462 100644
--- a/src/OpenGL/libGLESv2/Texture.h
+++ b/src/OpenGL/libGLESv2/Texture.h
@@ -49,7 +49,7 @@
 public:
 	explicit Texture(GLuint name);
 
-	virtual sw::Resource *getResource() const;
+	sw::Resource *getResource() const override;
 
 	virtual void addProxyRef(const Renderbuffer *proxy) = 0;
 	virtual void releaseProxy(const Renderbuffer *proxy) = 0;
@@ -107,14 +107,14 @@
 
 	virtual Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer) = 0;
 	virtual egl::Image *getRenderTarget(GLenum target, unsigned int level) = 0;
-	virtual egl::Image *createSharedImage(GLenum target, unsigned int level);
+	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 zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source) = 0;
 
 protected:
-	virtual ~Texture();
+	~Texture() override;
 
 	void setImage(GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels, egl::Image *image);
 	void subImage(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels, egl::Image *image);
@@ -156,40 +156,40 @@
 	void releaseProxy(const Renderbuffer *proxy) override;
 	void sweep() override;
 
-	virtual GLenum getTarget() const;
+	GLenum getTarget() const override;
 
-	virtual GLsizei getWidth(GLenum target, GLint level) const;
-	virtual GLsizei getHeight(GLenum target, GLint level) const;
-	virtual GLenum getFormat(GLenum target, GLint level) const;
-	virtual GLenum getType(GLenum target, GLint level) const;
-	virtual sw::Format getInternalFormat(GLenum target, GLint level) const;
-	virtual int getLevelCount() const;
+	GLsizei getWidth(GLenum target, GLint level) const override;
+	GLsizei getHeight(GLenum target, GLint level) const override;
+	GLenum getFormat(GLenum target, GLint level) const override;
+	GLenum getType(GLenum target, GLint level) const override;
+	sw::Format getInternalFormat(GLenum target, GLint level) const override;
+	int getLevelCount() const override;
 
 	void setImage(GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels);
 	void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels);
 	void subImage(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels);
 	void subImageCompressed(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels);
 	void copyImage(GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
-	virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
+	void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source) override;
 
 	void setSharedImage(egl::Image *image);
 
-	virtual bool isSamplerComplete() const;
-	virtual bool isCompressed(GLenum target, GLint level) const;
-	virtual bool isDepth(GLenum target, GLint level) const;
-	virtual void bindTexImage(gl::Surface *surface);
-	virtual void releaseTexImage();
+	bool isSamplerComplete() const override;
+	bool isCompressed(GLenum target, GLint level) const override;
+	bool isDepth(GLenum target, GLint level) const override;
+	void bindTexImage(gl::Surface *surface);
+	void releaseTexImage() override;
 
-	virtual void generateMipmaps();
+	void generateMipmaps() override;
 
-	virtual Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer);
-	virtual egl::Image *getRenderTarget(GLenum target, unsigned int level);
-	virtual bool isShared(GLenum target, unsigned int level) const;
+	Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer) override;
+	egl::Image *getRenderTarget(GLenum target, unsigned int level) override;
+	bool isShared(GLenum target, unsigned int level) const override;
 
 	egl::Image *getImage(unsigned int level);
 
 protected:
-	virtual ~Texture2D();
+	~Texture2D() override;
 
 	bool isMipmapComplete() const;
 
@@ -215,14 +215,14 @@
 	void releaseProxy(const Renderbuffer *proxy) override;
 	void sweep() override;
 
-	virtual GLenum getTarget() const;
+	GLenum getTarget() const override;
 
-	virtual GLsizei getWidth(GLenum target, GLint level) const;
-	virtual GLsizei getHeight(GLenum target, GLint level) const;
-	virtual GLenum getFormat(GLenum target, GLint level) const;
-	virtual GLenum getType(GLenum target, GLint level) const;
-	virtual sw::Format getInternalFormat(GLenum target, GLint level) const;
-	virtual int getLevelCount() const;
+	GLsizei getWidth(GLenum target, GLint level) const override;
+	GLsizei getHeight(GLenum target, GLint level) const override;
+	GLenum getFormat(GLenum target, GLint level) const override;
+	GLenum getType(GLenum target, GLint level) const override;
+	sw::Format getInternalFormat(GLenum target, GLint level) const override;
+	int getLevelCount() const override;
 
 	void setImage(GLenum target, GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels);
 	void setCompressedImage(GLenum target, GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels);
@@ -230,23 +230,23 @@
 	void subImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels);
 	void subImageCompressed(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels);
 	void copyImage(GLenum target, GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
-	virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
+	void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source) override;
 
-	virtual bool isSamplerComplete() const;
-	virtual bool isCompressed(GLenum target, GLint level) const;
-	virtual bool isDepth(GLenum target, GLint level) const;
-	virtual void releaseTexImage();
+	bool isSamplerComplete() const override;
+	bool isCompressed(GLenum target, GLint level) const override;
+	bool isDepth(GLenum target, GLint level) const override;
+	void releaseTexImage() override;
 
-	virtual void generateMipmaps();
+	void generateMipmaps() override;
 
-	virtual Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer);
-	virtual egl::Image *getRenderTarget(GLenum target, unsigned int level);
-	virtual bool isShared(GLenum target, unsigned int level) const;
+	Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer) override;
+	egl::Image *getRenderTarget(GLenum target, unsigned int level) override;
+	bool isShared(GLenum target, unsigned int level) const override;
 
 	egl::Image *getImage(int face, unsigned int level);
 
 protected:
-	virtual ~TextureCubeMap();
+	~TextureCubeMap() override;
 
 private:
 	bool isCubeComplete() const;
@@ -275,15 +275,15 @@
 	void releaseProxy(const Renderbuffer *proxy) override;
 	void sweep() override;
 
-	virtual GLenum getTarget() const;
+	GLenum getTarget() const override;
 
-	virtual GLsizei getWidth(GLenum target, GLint level) const;
-	virtual GLsizei getHeight(GLenum target, GLint level) const;
-	virtual GLsizei getDepth(GLenum target, GLint level) const;
-	virtual GLenum getFormat(GLenum target, GLint level) const;
-	virtual GLenum getType(GLenum target, GLint level) const;
-	virtual sw::Format getInternalFormat(GLenum target, GLint level) const;
-	virtual int getLevelCount() const;
+	GLsizei getWidth(GLenum target, GLint level) const override;
+	GLsizei getHeight(GLenum target, GLint level) const override;
+	GLsizei getDepth(GLenum target, GLint level) const override;
+	GLenum getFormat(GLenum target, GLint level) const override;
+	GLenum getType(GLenum target, GLint level) const override;
+	sw::Format getInternalFormat(GLenum target, GLint level) const override;
+	int getLevelCount() const override;
 
 	void setImage(GLint level, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels);
 	void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize, const void *pixels);
@@ -294,22 +294,21 @@
 
 	void setSharedImage(egl::Image *image);
 
-	virtual bool isSamplerComplete() const;
-	virtual bool isCompressed(GLenum target, GLint level) const;
-	virtual bool isDepth(GLenum target, GLint level) const;
-	virtual void bindTexImage(gl::Surface *surface);
-	virtual void releaseTexImage();
+	bool isSamplerComplete() const override;
+	bool isCompressed(GLenum target, GLint level) const override;
+	bool isDepth(GLenum target, GLint level) const override;
+	void releaseTexImage() override;
 
-	virtual void generateMipmaps();
+	void generateMipmaps() override;
 
-	virtual Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer);
-	virtual egl::Image *getRenderTarget(GLenum target, unsigned int level);
-	virtual bool isShared(GLenum target, unsigned int level) const;
+	Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer) override;
+	egl::Image *getRenderTarget(GLenum target, unsigned int level) override;
+	bool isShared(GLenum target, unsigned int level) const override;
 
 	egl::Image *getImage(unsigned int level);
 
 protected:
-	virtual ~Texture3D();
+	~Texture3D() override;
 
 	bool isMipmapComplete() const;
 
@@ -331,11 +330,11 @@
 public:
 	explicit Texture2DArray(GLuint name);
 
-	virtual GLenum getTarget() const;
-	virtual void generateMipmaps();
+	GLenum getTarget() const override;
+	void generateMipmaps() override;
 
 protected:
-	virtual ~Texture2DArray();
+	~Texture2DArray() override;
 };
 
 class TextureExternal : public Texture2D
@@ -343,10 +342,10 @@
 public:
 	explicit TextureExternal(GLuint name);
 
-	virtual GLenum getTarget() const;
+	GLenum getTarget() const override;
 
 protected:
-	virtual ~TextureExternal();
+	~TextureExternal() override;
 };
 }
 
