Alters the blitter's copy function so that you can pass a framebuffer to it directly.
TRAC #21910
Signed-off-by: Daniel Koch
git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1375 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/Image.cpp b/src/libGLESv2/renderer/Image.cpp
index 0930173..9fe315b 100644
--- a/src/libGLESv2/renderer/Image.cpp
+++ b/src/libGLESv2/renderer/Image.cpp
@@ -15,6 +15,7 @@
#include "libGLESv2/mathutil.h"
#include "libGLESv2/utilities.h"
#include "libGLESv2/Texture.h"
+#include "libGLESv2/Framebuffer.h"
namespace gl
{
@@ -973,8 +974,16 @@
}
// This implements glCopyTex[Sub]Image2D for non-renderable internal texture formats and incomplete textures
-void Image::copy(GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, IDirect3DSurface9 *renderTarget)
+void Image::copy(GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source)
{
+ IDirect3DSurface9 *renderTarget = source->getRenderTarget();
+
+ if (!renderTarget)
+ {
+ ERR("Failed to retrieve the render target.");
+ return error(GL_OUT_OF_MEMORY);
+ }
+
IDirect3DDevice9 *device = getDisplay()->getRenderer()->getDevice(); // D3D9_REPLACE
IDirect3DSurface9 *renderTargetData = NULL;
D3DSURFACE_DESC description;
@@ -985,6 +994,7 @@
if (FAILED(result))
{
ERR("Could not create matching destination surface.");
+ renderTarget->Release();
return error(GL_OUT_OF_MEMORY);
}
@@ -994,6 +1004,7 @@
{
ERR("GetRenderTargetData unexpectedly failed.");
renderTargetData->Release();
+ renderTarget->Release();
return error(GL_OUT_OF_MEMORY);
}
@@ -1007,6 +1018,7 @@
{
ERR("Failed to lock the source surface (rectangle might be invalid).");
renderTargetData->Release();
+ renderTarget->Release();
return error(GL_OUT_OF_MEMORY);
}
@@ -1018,6 +1030,7 @@
ERR("Failed to lock the destination surface (rectangle might be invalid).");
renderTargetData->UnlockRect();
renderTargetData->Release();
+ renderTarget->Release();
return error(GL_OUT_OF_MEMORY);
}
@@ -1192,6 +1205,7 @@
renderTargetData->UnlockRect();
renderTargetData->Release();
+ renderTarget->Release();
mDirty = true;
}