Use commitRect within updateTexture to avoid duplicate logic.
TRAC #18495
Signed-off-by: Daniel Koch
Author: Nicolas Capens
git-svn-id: https://angleproject.googlecode.com/svn/trunk@818 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Texture.cpp b/src/libGLESv2/Texture.cpp
index b8b9bdf..9e8f454 100644
--- a/src/libGLESv2/Texture.cpp
+++ b/src/libGLESv2/Texture.cpp
@@ -1658,10 +1658,7 @@
Image *image = &mImageArray[level];
RECT sourceRect = transformPixelRect(xoffset, yoffset, width, height, image->height);;
-
- POINT destPoint;
- destPoint.x = sourceRect.left;
- destPoint.y = sourceRect.top;
+ POINT destPoint = {sourceRect.left, sourceRect.top};
result = getDevice()->UpdateSurface(image->surface, &sourceRect, destLevel, &destPoint);
ASSERT(SUCCEEDED(result));
@@ -1907,28 +1904,15 @@
void Texture2D::updateTexture()
{
- IDirect3DDevice9 *device = getDevice();
-
int levels = levelCount();
for (int level = 0; level < levels; level++)
{
- if (mImageArray[level].surface && mImageArray[level].dirty)
+ Image *image = &mImageArray[level];
+
+ if (image->surface && image->dirty)
{
- IDirect3DSurface9 *levelSurface = NULL;
- HRESULT result = mTexture->GetSurfaceLevel(level, &levelSurface);
-
- ASSERT(SUCCEEDED(result));
-
- if (SUCCEEDED(result))
- {
- result = device->UpdateSurface(mImageArray[level].surface, NULL, levelSurface, NULL);
- ASSERT(SUCCEEDED(result));
-
- levelSurface->Release();
-
- mImageArray[level].dirty = false;
- }
+ commitRect(level, 0, 0, mImageArray[level].width, mImageArray[level].height);
}
}
}
@@ -2209,14 +2193,13 @@
Texture::setCompressedImage(imageSize, pixels, &mImageArray[faceIndex(face)][level]);
}
-void TextureCubeMap::commitRect(GLenum faceTarget, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height)
+void TextureCubeMap::commitRect(int face, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height)
{
- int face = faceIndex(faceTarget);
ASSERT(mImageArray[face][level].surface != NULL);
if (level < levelCount())
{
- IDirect3DSurface9 *destLevel = getCubeMapSurface(faceTarget, level);
+ IDirect3DSurface9 *destLevel = getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, level);
ASSERT(destLevel != NULL);
if (destLevel != NULL)
@@ -2224,10 +2207,7 @@
Image *image = &mImageArray[face][level];
RECT sourceRect = transformPixelRect(xoffset, yoffset, width, height, image->height);;
-
- POINT destPoint;
- destPoint.x = sourceRect.left;
- destPoint.y = sourceRect.top;
+ POINT destPoint = {sourceRect.left, sourceRect.top};
HRESULT result = getDevice()->UpdateSurface(image->surface, &sourceRect, destLevel, &destPoint);
ASSERT(SUCCEEDED(result));
@@ -2243,7 +2223,7 @@
{
if (Texture::subImage(xoffset, yoffset, width, height, format, type, unpackAlignment, pixels, &mImageArray[faceIndex(target)][level]))
{
- commitRect(target, level, xoffset, yoffset, width, height);
+ commitRect(faceIndex(target), level, xoffset, yoffset, width, height);
}
}
@@ -2251,7 +2231,7 @@
{
if (Texture::subImageCompressed(xoffset, yoffset, width, height, format, imageSize, pixels, &mImageArray[faceIndex(target)][level]))
{
- commitRect(target, level, xoffset, yoffset, width, height);
+ commitRect(faceIndex(target), level, xoffset, yoffset, width, height);
}
}
@@ -2386,8 +2366,6 @@
void TextureCubeMap::updateTexture()
{
- IDirect3DDevice9 *device = getDevice();
-
for (int face = 0; face < 6; face++)
{
int levels = levelCount();
@@ -2397,18 +2375,7 @@
if (image->surface && image->dirty)
{
- IDirect3DSurface9 *levelSurface = getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, level);
- ASSERT(levelSurface != NULL);
-
- if (levelSurface != NULL)
- {
- HRESULT result = device->UpdateSurface(image->surface, NULL, levelSurface, NULL);
- ASSERT(SUCCEEDED(result));
-
- levelSurface->Release();
-
- image->dirty = false;
- }
+ commitRect(face, level, 0, 0, image->width, image->height);
}
}
}
@@ -2605,7 +2572,7 @@
}
}
-IDirect3DSurface9 *TextureCubeMap::getCubeMapSurface(GLenum face, unsigned int level)
+IDirect3DSurface9 *TextureCubeMap::getCubeMapSurface(GLenum target, unsigned int level)
{
if (mTexture == NULL)
{
@@ -2615,7 +2582,7 @@
IDirect3DSurface9 *surface = NULL;
- HRESULT hr = mTexture->GetCubeMapSurface(es2dx::ConvertCubeFace(face), level, &surface);
+ HRESULT hr = mTexture->GetCubeMapSurface(es2dx::ConvertCubeFace(target), level, &surface);
return (SUCCEEDED(hr)) ? surface : NULL;
}
@@ -2812,4 +2779,4 @@
return renderTarget;
}
-}
+}
\ No newline at end of file