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
parent 06312bae
...@@ -1658,10 +1658,7 @@ void Texture2D::commitRect(GLint level, GLint xoffset, GLint yoffset, GLsizei wi ...@@ -1658,10 +1658,7 @@ void Texture2D::commitRect(GLint level, GLint xoffset, GLint yoffset, GLsizei wi
Image *image = &mImageArray[level]; Image *image = &mImageArray[level];
RECT sourceRect = transformPixelRect(xoffset, yoffset, width, height, image->height);; RECT sourceRect = transformPixelRect(xoffset, yoffset, width, height, image->height);;
POINT destPoint = {sourceRect.left, sourceRect.top};
POINT destPoint;
destPoint.x = sourceRect.left;
destPoint.y = sourceRect.top;
result = getDevice()->UpdateSurface(image->surface, &sourceRect, destLevel, &destPoint); result = getDevice()->UpdateSurface(image->surface, &sourceRect, destLevel, &destPoint);
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
...@@ -1907,28 +1904,15 @@ void Texture2D::createTexture() ...@@ -1907,28 +1904,15 @@ void Texture2D::createTexture()
void Texture2D::updateTexture() void Texture2D::updateTexture()
{ {
IDirect3DDevice9 *device = getDevice();
int levels = levelCount(); int levels = levelCount();
for (int level = 0; level < levels; level++) for (int level = 0; level < levels; level++)
{ {
if (mImageArray[level].surface && mImageArray[level].dirty) Image *image = &mImageArray[level];
{
IDirect3DSurface9 *levelSurface = NULL;
HRESULT result = mTexture->GetSurfaceLevel(level, &levelSurface);
ASSERT(SUCCEEDED(result));
if (SUCCEEDED(result)) if (image->surface && image->dirty)
{ {
result = device->UpdateSurface(mImageArray[level].surface, NULL, levelSurface, NULL); commitRect(level, 0, 0, mImageArray[level].width, mImageArray[level].height);
ASSERT(SUCCEEDED(result));
levelSurface->Release();
mImageArray[level].dirty = false;
}
} }
} }
} }
...@@ -2209,14 +2193,13 @@ void TextureCubeMap::setCompressedImage(GLenum face, GLint level, GLenum format, ...@@ -2209,14 +2193,13 @@ void TextureCubeMap::setCompressedImage(GLenum face, GLint level, GLenum format,
Texture::setCompressedImage(imageSize, pixels, &mImageArray[faceIndex(face)][level]); 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); ASSERT(mImageArray[face][level].surface != NULL);
if (level < levelCount()) if (level < levelCount())
{ {
IDirect3DSurface9 *destLevel = getCubeMapSurface(faceTarget, level); IDirect3DSurface9 *destLevel = getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, level);
ASSERT(destLevel != NULL); ASSERT(destLevel != NULL);
if (destLevel != NULL) if (destLevel != NULL)
...@@ -2224,10 +2207,7 @@ void TextureCubeMap::commitRect(GLenum faceTarget, GLint level, GLint xoffset, G ...@@ -2224,10 +2207,7 @@ void TextureCubeMap::commitRect(GLenum faceTarget, GLint level, GLint xoffset, G
Image *image = &mImageArray[face][level]; Image *image = &mImageArray[face][level];
RECT sourceRect = transformPixelRect(xoffset, yoffset, width, height, image->height);; RECT sourceRect = transformPixelRect(xoffset, yoffset, width, height, image->height);;
POINT destPoint = {sourceRect.left, sourceRect.top};
POINT destPoint;
destPoint.x = sourceRect.left;
destPoint.y = sourceRect.top;
HRESULT result = getDevice()->UpdateSurface(image->surface, &sourceRect, destLevel, &destPoint); HRESULT result = getDevice()->UpdateSurface(image->surface, &sourceRect, destLevel, &destPoint);
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
...@@ -2243,7 +2223,7 @@ void TextureCubeMap::subImage(GLenum target, GLint level, GLint xoffset, GLint y ...@@ -2243,7 +2223,7 @@ void TextureCubeMap::subImage(GLenum target, GLint level, GLint xoffset, GLint y
{ {
if (Texture::subImage(xoffset, yoffset, width, height, format, type, unpackAlignment, pixels, &mImageArray[faceIndex(target)][level])) 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 @@ void TextureCubeMap::subImageCompressed(GLenum target, GLint level, GLint xoffse ...@@ -2251,7 +2231,7 @@ void TextureCubeMap::subImageCompressed(GLenum target, GLint level, GLint xoffse
{ {
if (Texture::subImageCompressed(xoffset, yoffset, width, height, format, imageSize, pixels, &mImageArray[faceIndex(target)][level])) 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::createTexture() ...@@ -2386,8 +2366,6 @@ void TextureCubeMap::createTexture()
void TextureCubeMap::updateTexture() void TextureCubeMap::updateTexture()
{ {
IDirect3DDevice9 *device = getDevice();
for (int face = 0; face < 6; face++) for (int face = 0; face < 6; face++)
{ {
int levels = levelCount(); int levels = levelCount();
...@@ -2397,18 +2375,7 @@ void TextureCubeMap::updateTexture() ...@@ -2397,18 +2375,7 @@ void TextureCubeMap::updateTexture()
if (image->surface && image->dirty) if (image->surface && image->dirty)
{ {
IDirect3DSurface9 *levelSurface = getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, level); commitRect(face, level, 0, 0, image->width, image->height);
ASSERT(levelSurface != NULL);
if (levelSurface != NULL)
{
HRESULT result = device->UpdateSurface(image->surface, NULL, levelSurface, NULL);
ASSERT(SUCCEEDED(result));
levelSurface->Release();
image->dirty = false;
}
} }
} }
} }
...@@ -2605,7 +2572,7 @@ void TextureCubeMap::copyImage(GLenum target, GLint level, GLenum format, GLint ...@@ -2605,7 +2572,7 @@ void TextureCubeMap::copyImage(GLenum target, GLint level, GLenum format, GLint
} }
} }
IDirect3DSurface9 *TextureCubeMap::getCubeMapSurface(GLenum face, unsigned int level) IDirect3DSurface9 *TextureCubeMap::getCubeMapSurface(GLenum target, unsigned int level)
{ {
if (mTexture == NULL) if (mTexture == NULL)
{ {
...@@ -2615,7 +2582,7 @@ IDirect3DSurface9 *TextureCubeMap::getCubeMapSurface(GLenum face, unsigned int l ...@@ -2615,7 +2582,7 @@ IDirect3DSurface9 *TextureCubeMap::getCubeMapSurface(GLenum face, unsigned int l
IDirect3DSurface9 *surface = NULL; 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; return (SUCCEEDED(hr)) ? surface : NULL;
} }
......
...@@ -295,16 +295,16 @@ class TextureCubeMap : public Texture ...@@ -295,16 +295,16 @@ class TextureCubeMap : public Texture
virtual void convertToRenderTarget(); virtual void convertToRenderTarget();
virtual IDirect3DSurface9 *getRenderTarget(GLenum target); virtual IDirect3DSurface9 *getRenderTarget(GLenum target);
// face is one of the GL_TEXTURE_CUBE_MAP_* enumerants. // target is one of the GL_TEXTURE_CUBE_MAP_* enumerants.
// Returns NULL if the call underlying Direct3D call fails. // Returns NULL if the call underlying Direct3D call fails.
IDirect3DSurface9 *getCubeMapSurface(GLenum face, unsigned int level); IDirect3DSurface9 *getCubeMapSurface(GLenum target, unsigned int level);
static unsigned int faceIndex(GLenum face); static unsigned int faceIndex(GLenum face);
bool isCubeComplete() const; bool isCubeComplete() const;
void setImage(int faceIndex, GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels); void setImage(int faceIndex, GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels);
void commitRect(GLenum faceTarget, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height); void commitRect(int faceIndex, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
void redefineTexture(int faceIndex, GLint level, GLenum format, GLsizei width, GLsizei height, GLenum type); void redefineTexture(int faceIndex, GLint level, GLenum format, GLsizei width, GLsizei height, GLenum type);
Image mImageArray[6][IMPLEMENTATION_MAX_TEXTURE_LEVELS]; Image mImageArray[6][IMPLEMENTATION_MAX_TEXTURE_LEVELS];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment