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
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::createTexture()
void Texture2D::updateTexture()
{
IDirect3DDevice9 *device = getDevice();
int levels = levelCount();
for (int level = 0; level < levels; level++)
{
if (mImageArray[level].surface && mImageArray[level].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));
Image *image = &mImageArray[level];
levelSurface->Release();
mImageArray[level].dirty = false;
}
if (image->surface && image->dirty)
{
commitRect(level, 0, 0, mImageArray[level].width, mImageArray[level].height);
}
}
}
......@@ -2209,14 +2193,13 @@ void TextureCubeMap::setCompressedImage(GLenum face, GLint level, GLenum format,
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 @@ void TextureCubeMap::commitRect(GLenum faceTarget, GLint level, GLint xoffset, G
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 @@ 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]))
{
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
{
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()
void TextureCubeMap::updateTexture()
{
IDirect3DDevice9 *device = getDevice();
for (int face = 0; face < 6; face++)
{
int levels = levelCount();
......@@ -2397,18 +2375,7 @@ void TextureCubeMap::updateTexture()
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 @@ 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)
{
......@@ -2615,7 +2582,7 @@ IDirect3DSurface9 *TextureCubeMap::getCubeMapSurface(GLenum face, unsigned int l
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 @@ IDirect3DSurface9 *TextureCubeMap::getRenderTarget(GLenum target)
return renderTarget;
}
}
}
\ No newline at end of file
......@@ -295,16 +295,16 @@ class TextureCubeMap : public Texture
virtual void convertToRenderTarget();
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.
IDirect3DSurface9 *getCubeMapSurface(GLenum face, unsigned int level);
IDirect3DSurface9 *getCubeMapSurface(GLenum target, unsigned int level);
static unsigned int faceIndex(GLenum face);
bool isCubeComplete() const;
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);
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