make sure all texture->isCompressed calls are type-specific

Issue=306
Signed-off-by: Nicolas Capens

git-svn-id: http://angleproject.googlecode.com/svn/trunk@1079 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index 8406e4b..a8b3de6 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -2353,19 +2353,21 @@
                     return error(GL_INVALID_OPERATION);
                 }
 
-                if (tex->isCompressed())
-                {
-                    return error(GL_INVALID_OPERATION);
-                }
-
                 switch (textarget)
                 {
                   case GL_TEXTURE_2D:
-                    if (tex->getTarget() != GL_TEXTURE_2D)
                     {
-                        return error(GL_INVALID_OPERATION);
+                        if (tex->getTarget() != GL_TEXTURE_2D)
+                        {
+                            return error(GL_INVALID_OPERATION);
+                        }
+                        gl::Texture2D *tex2d = static_cast<gl::Texture2D *>(tex);
+                        if (tex2d->isCompressed())
+                        {
+                            return error(GL_INVALID_OPERATION);
+                        }
+                        break;
                     }
-                    break;
 
                   case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
                   case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
@@ -2373,11 +2375,18 @@
                   case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
                   case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
                   case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
-                    if (tex->getTarget() != GL_TEXTURE_CUBE_MAP)
                     {
-                        return error(GL_INVALID_OPERATION);
+                        if (tex->getTarget() != GL_TEXTURE_CUBE_MAP)
+                        {
+                            return error(GL_INVALID_OPERATION);
+                        }
+                        gl::TextureCubeMap *texcube = static_cast<gl::TextureCubeMap *>(tex);
+                        if (texcube->isCompressed())
+                        {
+                            return error(GL_INVALID_OPERATION);
+                        }
+                        break;
                     }
-                    break;
 
                   default:
                     return error(GL_INVALID_ENUM);
@@ -2487,28 +2496,37 @@
 
         if (context)
         {
-            gl::Texture *texture;
-
             switch (target)
             {
               case GL_TEXTURE_2D:
-                texture = context->getTexture2D();
-                break;
+                {
+                    gl::Texture2D *tex2d = context->getTexture2D();
+
+                    if (tex2d->isCompressed())
+                    {
+                        return error(GL_INVALID_OPERATION);
+                    }
+
+                    tex2d->generateMipmaps();
+                    break;
+                }
 
               case GL_TEXTURE_CUBE_MAP:
-                texture = context->getTextureCubeMap();
-                break;
+                {
+                    gl::TextureCubeMap *texcube = context->getTextureCubeMap();
+
+                    if (texcube->isCompressed())
+                    {
+                        return error(GL_INVALID_OPERATION);
+                    }
+
+                    texcube->generateMipmaps();
+                    break;
+                }
 
               default:
                 return error(GL_INVALID_ENUM);
             }
-
-            if (texture->isCompressed())
-            {
-                return error(GL_INVALID_OPERATION);
-            }
-
-            texture->generateMipmaps();
         }
     }
     catch(std::bad_alloc&)