mesa: texture crop rect state
authorBrian Paul <brian.paul@tungstengraphics.com>
Tue, 12 Aug 2008 23:41:57 +0000 (17:41 -0600)
committerKeith Whitwell <keith@tungstengraphics.com>
Mon, 22 Sep 2008 05:13:57 +0000 (22:13 -0700)
(cherry picked from commit c01fbc7866d7cd5cf4263dffec6d9591470b4c23)

src/mesa/main/glheader.h
src/mesa/main/mtypes.h
src/mesa/main/texparam.c

index c5f4ca9..1d0f178 100644 (file)
 #endif
 
 
+#ifndef GL_OES_draw_texture
+#define GL_TEXTURE_CROP_RECT_OES  0x8B9D
+#endif
+
 
 #if !defined(CAPI) && defined(WIN32) && !defined(BUILD_FOR_SNAP)
 #define CAPI _cdecl
index 9f49e3c..3370aa2 100644 (file)
@@ -1432,6 +1432,7 @@ struct gl_texture_object
    GLenum DepthMode;           /**< GL_ARB_depth_texture */
    GLint _MaxLevel;            /**< actual max mipmap level (q in the spec) */
    GLfloat _MaxLambda;         /**< = _MaxLevel - BaseLevel (q - b in spec) */
+   GLint CropRect[4];           /**< GL_OES_draw_texture */
    GLboolean GenerateMipmap;    /**< GL_SGIS_generate_mipmap */
    GLboolean _Complete;                /**< Is texture object complete? */
 
@@ -1441,7 +1442,6 @@ struct gl_texture_object
    /** GL_EXT_paletted_texture */
    struct gl_color_table Palette;
 
-
    /**
     * \name For device driver.
     * Note: instead of attaching driver data to this pointer, it's preferable
index dc27124..664adad 100644 (file)
@@ -410,6 +410,14 @@ _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params )
             }
          }
          break;
+#ifdef FEATURE_OES_draw_texture
+      case GL_TEXTURE_CROP_RECT_OES:
+         texObj->CropRect[0] = (GLint) params[0];
+         texObj->CropRect[1] = (GLint) params[1];
+         texObj->CropRect[2] = (GLint) params[2];
+         texObj->CropRect[3] = (GLint) params[3];
+         break;
+#endif
 
       default:
          _mesa_error(ctx, GL_INVALID_ENUM,
@@ -448,6 +456,12 @@ _mesa_TexParameteriv( GLenum target, GLenum pname, const GLint *params )
       fparam[2] = INT_TO_FLOAT(params[2]);
       fparam[3] = INT_TO_FLOAT(params[3]);
    }
+   else if (pname == GL_TEXTURE_CROP_RECT_OES) {
+      fparam[0] = (GLfloat) params[0];
+      fparam[1] = (GLfloat) params[1];
+      fparam[2] = (GLfloat) params[2];
+      fparam[3] = (GLfloat) params[3];
+   }
    else {
       if (pname == GL_TEXTURE_PRIORITY)
          fparam[0] = INT_TO_FLOAT(params[0]);
@@ -886,6 +900,14 @@ _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params )
         else 
            error = 1;
          break;
+#ifdef FEATURE_OES_draw_texture
+      case GL_TEXTURE_CROP_RECT_OES:
+         params[0] = obj->CropRect[0];
+         params[0] = obj->CropRect[1];
+         params[0] = obj->CropRect[2];
+         params[0] = obj->CropRect[3];
+         break;
+#endif
       default:
         error = 1;
         break;
@@ -1028,6 +1050,14 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
             return;
          }
          break;
+#ifdef FEATURE_OES_draw_texture
+      case GL_TEXTURE_CROP_RECT_OES:
+         params[0] = obj->CropRect[0];
+         params[0] = obj->CropRect[1];
+         params[0] = obj->CropRect[2];
+         params[0] = obj->CropRect[3];
+         break;
+#endif
       default:
          ; /* silence warnings */
    }