Refactored redefine.
TRAC #18714
Signed-off-by: Daniel Koch
Author: Nicolas Capens
git-svn-id: https://angleproject.googlecode.com/svn/trunk@822 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Texture.cpp b/src/libGLESv2/Texture.cpp
index 7554007..1df3924 100644
--- a/src/libGLESv2/Texture.cpp
+++ b/src/libGLESv2/Texture.cpp
@@ -1535,26 +1535,31 @@
return mImageArray[0].getD3DFormat();
}
-void Texture2D::redefineTexture(GLint level, GLenum format, GLsizei width, GLsizei height, GLenum type, bool forceRedefine)
+void Texture::Image::redefine(GLenum format, GLsizei width, GLsizei height, GLenum type)
+{
+ this->width = width;
+ this->height = height;
+ this->format = format;
+ this->type = type;
+
+ if (surface)
+ {
+ surface->Release();
+ surface = NULL;
+ dirty = true;
+ }
+
+ createSurface();
+}
+
+void Texture2D::redefineImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLenum type, bool forceRedefine)
{
GLsizei textureWidth = mImageArray[0].width;
GLsizei textureHeight = mImageArray[0].height;
GLenum textureFormat = mImageArray[0].format;
GLenum textureType = mImageArray[0].type;
- mImageArray[level].width = width;
- mImageArray[level].height = height;
- mImageArray[level].format = format;
- mImageArray[level].type = type;
-
- if (mImageArray[level].surface != NULL)
- {
- mImageArray[level].surface->Release();
- mImageArray[level].surface = NULL;
- mImageArray[level].dirty = true;
- }
-
- mImageArray[level].createSurface();
+ mImageArray[level].redefine(format, width, height, type);
if (!mTexture)
{
@@ -1592,7 +1597,7 @@
void Texture2D::setImage(GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels)
{
- redefineTexture(level, format, width, height, type, false);
+ redefineImage(level, format, width, height, type, false);
Texture::setImage(unpackAlignment, pixels, &mImageArray[level]);
}
@@ -1614,7 +1619,7 @@
return;
}
- redefineTexture(0, format, surface->getWidth(), surface->getHeight(), GL_UNSIGNED_BYTE, true);
+ redefineImage(0, format, surface->getWidth(), surface->getHeight(), GL_UNSIGNED_BYTE, true);
IDirect3DTexture9 *texture = surface->getOffscreenTexture();
@@ -1627,12 +1632,12 @@
void Texture2D::releaseTexImage()
{
- redefineTexture(0, GL_RGB, 0, 0, GL_UNSIGNED_BYTE, true);
+ redefineImage(0, GL_RGB, 0, 0, GL_UNSIGNED_BYTE, true);
}
void Texture2D::setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels)
{
- redefineTexture(level, format, width, height, GL_UNSIGNED_BYTE, false);
+ redefineImage(level, format, width, height, GL_UNSIGNED_BYTE, false);
Texture::setCompressedImage(imageSize, pixels, &mImageArray[level]);
}
@@ -1691,7 +1696,7 @@
return error(GL_OUT_OF_MEMORY);
}
- redefineTexture(level, format, width, height, GL_UNSIGNED_BYTE, false);
+ redefineImage(level, format, width, height, GL_UNSIGNED_BYTE, false);
if (!mImageArray[level].isRenderable())
{
@@ -1740,7 +1745,7 @@
return error(GL_OUT_OF_MEMORY);
}
- redefineTexture(level, mImageArray[level].format, mImageArray[level].width, mImageArray[level].height, GL_UNSIGNED_BYTE, false);
+ redefineImage(level, mImageArray[level].format, mImageArray[level].width, mImageArray[level].height, GL_UNSIGNED_BYTE, false);
if (!mImageArray[level].isRenderable() || (!mTexture && !isComplete()))
{
@@ -2183,7 +2188,7 @@
void TextureCubeMap::setCompressedImage(GLenum face, GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels)
{
- redefineTexture(faceIndex(face), level, format, width, height, GL_UNSIGNED_BYTE);
+ redefineImage(faceIndex(face), level, format, width, height, GL_UNSIGNED_BYTE);
Texture::setCompressedImage(imageSize, pixels, &mImageArray[faceIndex(face)][level]);
}
@@ -2460,7 +2465,7 @@
void TextureCubeMap::setImage(int faceIndex, GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels)
{
- redefineTexture(faceIndex, level, format, width, height, type);
+ redefineImage(faceIndex, level, format, width, height, type);
Texture::setImage(unpackAlignment, pixels, &mImageArray[faceIndex][level]);
}
@@ -2476,26 +2481,14 @@
return face - GL_TEXTURE_CUBE_MAP_POSITIVE_X;
}
-void TextureCubeMap::redefineTexture(int face, GLint level, GLenum format, GLsizei width, GLsizei height, GLenum type)
+void TextureCubeMap::redefineImage(int face, GLint level, GLenum format, GLsizei width, GLsizei height, GLenum type)
{
GLsizei textureWidth = mImageArray[0][0].width;
GLsizei textureHeight = mImageArray[0][0].height;
GLenum textureFormat = mImageArray[0][0].format;
GLenum textureType = mImageArray[0][0].type;
- mImageArray[face][level].width = width;
- mImageArray[face][level].height = height;
- mImageArray[face][level].format = format;
- mImageArray[face][level].type = type;
-
- if (mImageArray[face][level].surface != NULL)
- {
- mImageArray[face][level].surface->Release();
- mImageArray[face][level].surface = NULL;
- mImageArray[face][level].dirty = true;
- }
-
- mImageArray[face][level].createSurface();
+ mImageArray[face][level].redefine(format, width, height, type);
if (!mTexture)
{
@@ -2536,7 +2529,7 @@
}
unsigned int faceindex = faceIndex(target);
- redefineTexture(faceindex, level, format, width, height, GL_UNSIGNED_BYTE);
+ redefineImage(faceindex, level, format, width, height, GL_UNSIGNED_BYTE);
if (!mImageArray[faceindex][level].isRenderable())
{
@@ -2604,7 +2597,7 @@
}
unsigned int faceindex = faceIndex(target);
- redefineTexture(faceindex, level, mImageArray[faceindex][level].format, mImageArray[faceindex][level].width, mImageArray[faceindex][level].height, GL_UNSIGNED_BYTE);
+ redefineImage(faceindex, level, mImageArray[faceindex][level].format, mImageArray[faceindex][level].width, mImageArray[faceindex][level].height, GL_UNSIGNED_BYTE);
if (!mImageArray[faceindex][level].isRenderable() || (!mTexture && !isComplete()))
{