Adds a function to the Renderer which will return a newly created Image.

TRAC #22254

Author: Shannon Woods
Signed-off-by: Geoff Lang
Signed-off-by: Daniel Koch

git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1569 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Texture.cpp b/src/libGLESv2/Texture.cpp
index 41f5ebf..9632727 100644
--- a/src/libGLESv2/Texture.cpp
+++ b/src/libGLESv2/Texture.cpp
@@ -336,7 +336,7 @@
 
     for (int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; ++i)
     {
-        mImageArray[i] = new rx::Image();
+        mImageArray[i] = renderer->createImage();
     }
 }
 
@@ -925,7 +925,7 @@
 
         for (int j = 0; j < IMPLEMENTATION_MAX_TEXTURE_LEVELS; ++j)
         {
-            mImageArray[i][j] = new rx::Image();
+            mImageArray[i][j] = renderer->createImage();
         }
     }
 }
diff --git a/src/libGLESv2/renderer/Renderer.h b/src/libGLESv2/renderer/Renderer.h
index 7e1b043..6b27ade 100644
--- a/src/libGLESv2/renderer/Renderer.h
+++ b/src/libGLESv2/renderer/Renderer.h
@@ -166,6 +166,9 @@
     virtual ShaderExecutable *loadExecutable(const void *function, size_t length, GLenum type, void *data) = 0;
     virtual ShaderExecutable *compileToExecutable(gl::InfoLog &infoLog, const char *shaderHLSL, GLenum type) = 0;
 
+    // Image creation
+    virtual Image *createImage() = 0;
+
   protected:
     bool initializeCompiler();
     ID3DBlob *compileToBinary(gl::InfoLog &infoLog, const char *hlsl, const char *profile, bool alternateFlags);
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index aa373ca..884adda 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -1250,4 +1250,11 @@
     return;
 }
 
+Image *Renderer11::createImage()
+{
+    // TODO
+    UNIMPLEMENTED();
+    return NULL;
+}
+
 }
\ No newline at end of file
diff --git a/src/libGLESv2/renderer/Renderer11.h b/src/libGLESv2/renderer/Renderer11.h
index 877210f..12433ea 100644
--- a/src/libGLESv2/renderer/Renderer11.h
+++ b/src/libGLESv2/renderer/Renderer11.h
@@ -132,6 +132,9 @@
     virtual ShaderExecutable *loadExecutable(const void *function, size_t length, GLenum type, void *data);
     virtual ShaderExecutable *compileToExecutable(gl::InfoLog &infoLog, const char *shaderHLSL, GLenum type);
 
+    // Image operations
+    virtual Image *createImage();
+
     // D3D11-renderer specific methods
     ID3D11Device *getDevice() { return mDevice; }
     ID3D11DeviceContext *getDeviceContext() { return mDeviceContext; };
diff --git a/src/libGLESv2/renderer/Renderer9.cpp b/src/libGLESv2/renderer/Renderer9.cpp
index 715aade..6e7447f 100644
--- a/src/libGLESv2/renderer/Renderer9.cpp
+++ b/src/libGLESv2/renderer/Renderer9.cpp
@@ -2810,4 +2810,9 @@
     return true;
 }
 
+Image *Renderer9::createImage()
+{
+    return new Image();
+}
+
 }
\ No newline at end of file
diff --git a/src/libGLESv2/renderer/Renderer9.h b/src/libGLESv2/renderer/Renderer9.h
index 02159d6..f76721e 100644
--- a/src/libGLESv2/renderer/Renderer9.h
+++ b/src/libGLESv2/renderer/Renderer9.h
@@ -166,6 +166,9 @@
     virtual ShaderExecutable *loadExecutable(const void *function, size_t length, GLenum type, void *data);
     virtual ShaderExecutable *compileToExecutable(gl::InfoLog &infoLog, const char *shaderHLSL, GLenum type);
 
+    // Image operations
+    virtual Image *createImage();
+
     // D3D9-renderer specific methods
     bool boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest);