Refactor image renderability lookup
Trac #19356
Issue=273
Signed-off-by: Nicolas Capens
Based on preliminary patch from Ken Russell
Images are never renderable directly, so renaming the Image::isRenderable function clarifies that we are
only checking on the renderability of the format.
Also factor out the lookup to a static helper function (it will be used elsewhere in the next patch)
git-svn-id: https://angleproject.googlecode.com/svn/trunk@926 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/common/version.h b/src/common/version.h
index 2bf3317..9a3148b 100644
--- a/src/common/version.h
+++ b/src/common/version.h
@@ -1,7 +1,7 @@
#define MAJOR_VERSION 1
#define MINOR_VERSION 0
#define BUILD_VERSION 0
-#define BUILD_REVISION 925
+#define BUILD_REVISION 926
#define STRINGIFY(x) #x
#define MACRO_STRINGIFY(x) STRINGIFY(x)
diff --git a/src/libGLESv2/Texture.cpp b/src/libGLESv2/Texture.cpp
index 54bbb10..3c2cef3 100644
--- a/src/libGLESv2/Texture.cpp
+++ b/src/libGLESv2/Texture.cpp
@@ -73,6 +73,28 @@
return D3DFMT_A8R8G8B8;
}
+static bool IsTextureFormatRenderable(D3DFORMAT format)
+{
+ switch(format)
+ {
+ case D3DFMT_L8:
+ case D3DFMT_A8L8:
+ case D3DFMT_DXT1:
+ case D3DFMT_DXT3:
+ case D3DFMT_DXT5:
+ return false;
+ case D3DFMT_A8R8G8B8:
+ case D3DFMT_X8R8G8B8:
+ case D3DFMT_A16B16G16R16F:
+ case D3DFMT_A32B32G32R32F:
+ return true;
+ default:
+ UNREACHABLE();
+ }
+
+ return false;
+}
+
Image::Image()
{
mWidth = 0;
@@ -201,26 +223,9 @@
}
}
-bool Image::isRenderable() const
+bool Image::isRenderableFormat() const
{
- switch(getD3DFormat())
- {
- case D3DFMT_L8:
- case D3DFMT_A8L8:
- case D3DFMT_DXT1:
- case D3DFMT_DXT3:
- case D3DFMT_DXT5:
- return false;
- case D3DFMT_A8R8G8B8:
- case D3DFMT_X8R8G8B8:
- case D3DFMT_A16B16G16R16F:
- case D3DFMT_A32B32G32R32F:
- return true;
- default:
- UNREACHABLE();
- }
-
- return false;
+ return IsTextureFormatRenderable(getD3DFormat());
}
D3DFORMAT Image::getD3DFormat() const
@@ -1120,7 +1125,7 @@
int destYOffset = transformPixelYOffset(yoffset, height, mHeight);
RECT destRect = {xoffset, destYOffset, xoffset + width, destYOffset + height};
- if (isRenderable())
+ if (isRenderableFormat())
{
result = D3DXLoadSurfaceFromSurface(getSurface(), NULL, &destRect, renderTargetData, NULL, &sourceRect, D3DX_FILTER_BOX, 0);
@@ -1896,7 +1901,7 @@
redefineImage(level, format, width, height, GL_UNSIGNED_BYTE);
- if (!mImageArray[level].isRenderable())
+ if (!mImageArray[level].isRenderableFormat())
{
mImageArray[level].copy(0, 0, x, y, width, height, renderTarget);
mDirtyImages = true;
@@ -1948,7 +1953,7 @@
return error(GL_OUT_OF_MEMORY);
}
- if (!mImageArray[level].isRenderable() || (!mTexStorage && !isSamplerComplete()))
+ if (!mImageArray[level].isRenderableFormat() || (!mTexStorage && !isSamplerComplete()))
{
mImageArray[level].copy(xoffset, yoffset, x, y, width, height, renderTarget);
mDirtyImages = true;
@@ -2761,7 +2766,7 @@
unsigned int faceindex = faceIndex(target);
redefineImage(faceindex, level, format, width, height, GL_UNSIGNED_BYTE);
- if (!mImageArray[faceindex][level].isRenderable())
+ if (!mImageArray[faceindex][level].isRenderableFormat())
{
mImageArray[faceindex][level].copy(0, 0, x, y, width, height, renderTarget);
mDirtyImages = true;
@@ -2819,7 +2824,7 @@
unsigned int faceindex = faceIndex(target);
- if (!mImageArray[faceindex][level].isRenderable() || (!mTexStorage && !isSamplerComplete()))
+ if (!mImageArray[faceindex][level].isRenderableFormat() || (!mTexStorage && !isSamplerComplete()))
{
mImageArray[faceindex][level].copy(0, 0, x, y, width, height, renderTarget);
mDirtyImages = true;
diff --git a/src/libGLESv2/Texture.h b/src/libGLESv2/Texture.h
index 233afae..32bc909 100644
--- a/src/libGLESv2/Texture.h
+++ b/src/libGLESv2/Texture.h
@@ -56,7 +56,7 @@
HRESULT lock(D3DLOCKED_RECT *lockedRect, const RECT *rect);
void unlock();
- bool isRenderable() const;
+ bool isRenderableFormat() const;
D3DFORMAT getD3DFormat() const;
GLsizei getWidth() const {return mWidth;}