Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/evas

Dir     : e17/libs/evas/src/lib/engines/gl_common


Modified Files:
        evas_gl_routines.c 


Log Message:


query extensions now... properly... :)

===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/evas/src/lib/engines/gl_common/evas_gl_routines.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- evas_gl_routines.c  5 Sep 2003 05:43:07 -0000       1.3
+++ evas_gl_routines.c  5 Sep 2003 06:52:42 -0000       1.4
@@ -1,11 +1,19 @@
 #include "evas_gl_common.h"
 
+//#define NV_RECT_EXT 
+//#define SGIS_MIPMAPS_EXT
+
 /* nvidia extensions */
-extern void glPixelDataRangeNV(int target, int length, void *pointer);
-#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878
-#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879
+//extern void glPixelDataRangeNV(int target, int length, void *pointer);
+//#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878
+//#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879
+
+#ifndef GL_TEXTURE_RECTANGLE_NV
 #define GL_TEXTURE_RECTANGLE_NV 0x84f5
+#endif
 
+#define NATIVE_PIX_FORMAT GL_BGRA
+#define NATIVE_PIX_UNIT   GL_UNSIGNED_INT_8_8_8_8_REV
 
 static void _evas_gl_common_texture_mipmaps_build(Evas_GL_Texture *tex, RGBA_Image 
*im, int smooth);
 static void _evas_gl_common_gradient_texture_build(Evas_GL_Context *gc, 
Evas_GL_Gradient *gr);
@@ -24,6 +32,7 @@
 evas_gl_common_context_new(void)
 {
    Evas_GL_Context *gc;
+   const GLubyte *ext;
    
    if (_evas_gl_common_context)
      {
@@ -49,6 +58,15 @@
    gc->change.buf     = 1;
    gc->change.other   = 1;
    
+   ext = glGetString(GL_EXTENSIONS);
+   if (ext)
+     {
+       if (strstr(ext, "GL_SGIS_generate_mipmap")) gc->ext.sgis_generate_mipmap = 1;
+       if (strstr(ext, "GL_NV_texture_rectangle")) gc->ext.nv_texture_rectangle = 1;
+       printf("EXT supported: GL_SGIS_generate_mipmap = %x\n", 
gc->ext.sgis_generate_mipmap);
+       printf("EXT supported: GL_NV_texture_rectangle = %x\n", 
gc->ext.nv_texture_rectangle);
+     }
+   
 //   _evas_gl_common_context = gc;
    return gc;
 }
@@ -198,9 +216,7 @@
    tex = calloc(1, sizeof(Evas_GL_Texture));
    if (!tex) return NULL;
 
-//#define NV_RECT_EXT 
-   
-#ifdef NV_RECT_EXT
+   if ((gc->ext.nv_texture_rectangle) && (1))
      {
        printf("new rect tex %ix%i\n", im->image->w, im->image->h);
        
@@ -226,14 +242,14 @@
 
        if (im->flags & RGBA_IMAGE_HAS_ALPHA) texfmt = GL_RGBA8;
        else texfmt = GL_RGB8;
-       pixfmt = GL_BGRA;
+       pixfmt = NATIVE_PIX_FORMAT;
 
        glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, 
                     texfmt, tex->w, tex->h, 0,
-                    pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV, im->image->data);
+                    pixfmt, NATIVE_PIX_UNIT, im->image->data);
        return tex;
      }
-#endif   
+
    shift = 1; while (im->image->w > shift) shift = shift << 1; tw = shift;
    shift = 1; while (im->image->h > shift) shift = shift << 1; th = shift;
    tex->gc = gc;
@@ -265,25 +281,11 @@
 
    if (im->flags & RGBA_IMAGE_HAS_ALPHA) texfmt = GL_RGBA8;
    else texfmt = GL_RGB8;
-   pixfmt = GL_BGRA;
+   pixfmt = NATIVE_PIX_FORMAT;
    
    glTexImage2D(GL_TEXTURE_2D, 0, 
                texfmt, tw, th, 0,
-               pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV, NULL);
-#ifdef NVIDIA_HACK
-/* NVIDIA HACK 1,part-1 */   
-   /* Nvidia's 4496 drivers and below have a bug. unless i "allocate" the
-    * mipmap space here before i go and use a texture, it will never accept
-    * mipmaps being added to a texture later on, or at the least it will never
-    * use added mipmaps.
-    * 
-    * so as a workaround i allocate the mipmap texels here with a NULL pointer
-    * passed to glTexImage2D() and i fill in the mipmap pixels later on in
-    * _evas_gl_common_texture_mipmaps_build(). this works, but is ugly.
-    * 
-    * i currently have no reason to believe GL can't do what i want to do,
-    * that is add mipmaps and allocate space for them any time i want. see
-    */
+               pixfmt, NATIVE_PIX_UNIT, NULL);
      {
        int ttw, tth;
        int l;
@@ -300,137 +302,33 @@
             if (tth < 1) tth = 1;
             glTexImage2D(GL_TEXTURE_2D, l,
                          texfmt, ttw, tth, 0,
-                         pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV, NULL);
+                         pixfmt, NATIVE_PIX_UNIT, NULL);
          }
      }
-/* END ENVIDIA HACK */
-#endif   
+   if (gc->ext.sgis_generate_mipmap)
+     {
+       glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_TRUE);
+       tex->have_mipmaps = 1;
+     }
    glTexSubImage2D(GL_TEXTURE_2D, 0, 
                   0, 0, im_w, im_h,
-                  pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
+                  pixfmt, NATIVE_PIX_UNIT,
                   im_data);
    if (im_w < tw)
      glTexSubImage2D(GL_TEXTURE_2D, 0, 
                     im_w, 0, 1, im_h,
-                    pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
+                    pixfmt, NATIVE_PIX_UNIT,
                     im_data + im_w - 1);
    if (im_h < th)
      glTexSubImage2D(GL_TEXTURE_2D, 0, 
                     0, im_h, im_w, 1,
-                    pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
+                    pixfmt, NATIVE_PIX_UNIT,
                     im_data + (im_w * (im_h - 1)));
    if ((im_w < tw) && (im_h < th))
      glTexSubImage2D(GL_TEXTURE_2D, 0, 
                     im_w, im_h, 1, 1,
-                    pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
+                    pixfmt, NATIVE_PIX_UNIT,
                     im_data + (im_w * (im_h - 1)) + im_w - 1);
-#ifdef RADEON_HACK   
-/* RADEON HACK 1 */
-   /* similar to nvidia's bug (fixed in hack 1) ati's drivers SEGV if i try
-    * and upload textures later on than now, not even alloocating them first
-    * like nvidias hack does helps this, so if i EVER need mipmaps, it's now or
-    * never, and that just SUCKS. i'm forever generating mipmaps for textures
-    * where i might never need them. this is just silly! must report this to
-    * ati
-    */
-     {
-       int ttw, tth;
-       int w, h;
-       int l;
-       RGBA_Image *im1 = NULL, *im2 = NULL;
-#ifdef BUILD_MMX
-       int mmx, sse, sse2;
-#endif
-
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
-#ifdef BUILD_MMX
-       evas_common_cpu_can_do(&mmx, &sse, &sse2);
-#endif
-       w = im->image->w;
-       h = im->image->h;
-       im1 = im;
-   
-       ttw = tw;
-       tth = th;
-       l = 0;
-       
-       while ((ttw > 1) || (tth > 1))
-         {
-            int pw, ph;
-            
-            l++;
-            
-            pw = w;
-            ph = h;
-            
-            w /= 2;
-            h /= 2;
-            if (w < 1) w = 1;
-            if (h < 1) h = 1;
-            
-            ttw /= 2;
-            tth /= 2;
-            if (ttw < 1) ttw = 1;
-            if (tth < 1) tth = 1;
-
-            im2 = evas_common_image_create(w, h);
-#ifdef BUILD_MMX
-            if (mmx)
-              {  
-                 evas_common_scale_rgba_mipmap_down_2x2_mmx(im1->image->data,
-                                                            im2->image->data, 
-                                                            pw, ph);
-              }
-            else
-#endif   
-              {
-                 if (im->flags & RGBA_IMAGE_HAS_ALPHA)
-                   evas_common_scale_rgba_mipmap_down_2x2_c(im1->image->data,
-                                                            im2->image->data, 
-                                                            pw, ph);
-                 else
-                   evas_common_scale_rgb_mipmap_down_2x2_c(im1->image->data,
-                                                           im2->image->data, 
-                                                           pw, ph);
-              }
-            if (im1 != im) evas_common_image_free(im1);
-            im1 = NULL;
-            
-            im_data = im2->image->data;
-            im_w = w;
-            im_h = h;
-            glTexImage2D(GL_TEXTURE_2D, l,
-                         texfmt, ttw, tth, 0,
-                         pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV, NULL);
-            glTexSubImage2D(GL_TEXTURE_2D, l,
-                            0, 0, im_w, im_h,
-                            pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
-                            im_data);
-            if (im_w < ttw)
-              glTexSubImage2D(GL_TEXTURE_2D, l,
-                              im_w, 0, 1, im_h,
-                              pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
-                              im_data + im_w - 1);
-            if (im_h < tth)
-              glTexSubImage2D(GL_TEXTURE_2D, l,
-                              0, im_h, im_w, 1,
-                              pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
-                              im_data + (im_w * (im_h - 1)));
-            if ((im_w < ttw) && (im_h < tth))
-              glTexSubImage2D(GL_TEXTURE_2D, l, 
-                              im_w, im_h, 1, 1,
-                              pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
-                              im_data + (im_w * (im_h - 1)) + im_w - 1);
-            im1 = im2;
-            im2 = NULL;
-         }
-       if ((im1 != im) && (im1)) evas_common_image_free(im1);
-       tex->have_mipmaps = 1;
-       tex->smooth = 1;
-     }
-/* END RADEON HACK */
-#endif   
    return tex;
 }
 
@@ -466,17 +364,18 @@
 
        if (im->flags & RGBA_IMAGE_HAS_ALPHA) texfmt = GL_RGBA8;
        else texfmt = GL_RGB8;
-       pixfmt = GL_BGRA;
+       pixfmt = NATIVE_PIX_FORMAT;
        
        glTexSubImage2D(GL_TEXTURE_RECTANGLE_NV, 0, 
                        0, 0, tex->w, tex->h,
-                       pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
+                       pixfmt, NATIVE_PIX_UNIT,
                        im->image->data);
        return;
      }
    tw = tex->w;
    th = tex->h;
    tex->changed = 1;
+   tex->have_mipmaps = 0;
    glEnable(GL_TEXTURE_2D);
    if (tex->not_power_of_two)
      {
@@ -517,136 +416,34 @@
 
    if (im->flags & RGBA_IMAGE_HAS_ALPHA) texfmt = GL_RGBA8;
    else texfmt = GL_RGB8;
-   pixfmt = GL_BGRA;
-   
+   pixfmt = NATIVE_PIX_FORMAT;
+
+   if (tex->gc->ext.sgis_generate_mipmap)
+     {
+       glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_TRUE);
+       tex->have_mipmaps = 1;
+     }
    glTexSubImage2D(GL_TEXTURE_2D, 0, 
                   0, 0, im_w, im_h,
-                  pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
+                  pixfmt, NATIVE_PIX_UNIT,
                   im_data);
 #if 1 // this is sloooow... well slower than just the above...
    if (im_w < tw)
      glTexSubImage2D(GL_TEXTURE_2D, 0, 
                     im_w, 0, 1, im_h,
-                    pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
+                    pixfmt, NATIVE_PIX_UNIT,
                     im_data + im_w - 1);
    if (im_h < th)
      glTexSubImage2D(GL_TEXTURE_2D, 0, 
                     0, im_h, im_w, 1,
-                    pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
+                    pixfmt, NATIVE_PIX_UNIT,
                     im_data + (im_w * (im_h - 1)));
    if ((im_w < tw) && (im_h < th))
      glTexSubImage2D(GL_TEXTURE_2D, 0, 
                     im_w, im_h, 1, 1,
-                    pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
+                    pixfmt, NATIVE_PIX_UNIT,
                     im_data + (im_w * (im_h - 1)) + im_w - 1);
 #endif   
-#ifdef RADEON_HACK   
-/* RADEON HACK 1 */
-   /* similar to nvidia's bug (fixed in hack 1) ati's drivers SEGV if i try
-    * and upload textures later on than now, not even alloocating them first
-    * like nvidias hack does helps this, so if i EVER need mipmaps, it's now or
-    * never, and that just SUCKS. i'm forever generating mipmaps for textures
-    * where i might never need them. this is just silly! must report this to
-    * ati
-    */
-     {
-       int ttw, tth;
-       int w, h;
-       int l;
-       RGBA_Image *im1 = NULL, *im2 = NULL;
-#ifdef BUILD_MMX
-       int mmx, sse, sse2;
-#endif
-
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
-#ifdef BUILD_MMX
-       evas_common_cpu_can_do(&mmx, &sse, &sse2);
-#endif
-       w = im->image->w;
-       h = im->image->h;
-       im1 = im;
-   
-       ttw = tw;
-       tth = th;
-       l = 0;
-       
-       while ((ttw > 1) || (tth > 1))
-         {
-            int pw, ph;
-            
-            l++;
-            
-            pw = w;
-            ph = h;
-            
-            w /= 2;
-            h /= 2;
-            if (w < 1) w = 1;
-            if (h < 1) h = 1;
-            
-            ttw /= 2;
-            tth /= 2;
-            if (ttw < 1) ttw = 1;
-            if (tth < 1) tth = 1;
-
-            im2 = evas_common_image_create(w, h);
-#ifdef BUILD_MMX
-            if (mmx)
-              {  
-                 evas_common_scale_rgba_mipmap_down_2x2_mmx(im1->image->data,
-                                                            im2->image->data, 
-                                                            pw, ph);
-              }
-            else
-#endif   
-              {
-                 if (im->flags & RGBA_IMAGE_HAS_ALPHA)
-                   evas_common_scale_rgba_mipmap_down_2x2_c(im1->image->data,
-                                                            im2->image->data, 
-                                                            pw, ph);
-                 else
-                   evas_common_scale_rgb_mipmap_down_2x2_c(im1->image->data,
-                                                           im2->image->data, 
-                                                           pw, ph);
-              }
-            if (im1 != im) evas_common_image_free(im1);
-            im1 = NULL;
-            
-            im_data = im2->image->data;
-            im_w = w;
-            im_h = h;
-//          glTexImage2D(GL_TEXTURE_2D, l,
-//                       texfmt, ttw, tth, 0,
-//                       pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV, NULL);
-            glTexSubImage2D(GL_TEXTURE_2D, l,
-                            0, 0, im_w, im_h,
-                            pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
-                            im_data);
-            if (im_w < ttw)
-              glTexSubImage2D(GL_TEXTURE_2D, l,
-                              im_w, 0, 1, im_h,
-                              pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
-                              im_data + im_w - 1);
-            if (im_h < tth)
-              glTexSubImage2D(GL_TEXTURE_2D, l,
-                              0, im_h, im_w, 1,
-                              pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
-                              im_data + (im_w * (im_h - 1)));
-            if ((im_w < ttw) && (im_h < tth))
-              glTexSubImage2D(GL_TEXTURE_2D, l, 
-                              im_w, im_h, 1, 1,
-                              pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
-                              im_data + (im_w * (im_h - 1)) + im_w - 1);
-            im1 = im2;
-            im2 = NULL;
-         }
-       if ((im1 != im) && (im1)) evas_common_image_free(im1);
-       tex->have_mipmaps = 1;
-       tex->smooth = 1;
-     }
-/* END RADEON HACK */
-#endif   
 }
 
 void
@@ -1233,7 +1030,7 @@
 
    if (im->flags & RGBA_IMAGE_HAS_ALPHA) texfmt = GL_RGBA8;
    else texfmt = GL_RGB8;
-   pixfmt = GL_BGRA;
+   pixfmt = NATIVE_PIX_FORMAT;
    
    printf("building mipmaps... [%i x %i]\n", tw, th);
    glEnable(GL_TEXTURE_2D);
@@ -1280,49 +1077,24 @@
        im_data = im2->image->data;
        im_w = w;
        im_h = h;
-#ifdef NVIDIA_HACK
-/* NVIDIA HACK 1,part-2 */
-   /* Nvidia's 4496 drivers and below have a bug. unless i "allocate" the
-    * mipmap space here before i go and use a texture, it will never accept
-    * mipmaps being added to a texture later on, or at the least it will never
-    * use added mipmaps.
-    * 
-    * so as a workaround i allocate the mipmap texels here with a NULL pointer
-    * passed to glTexImage2D() and i fill in the mipmap pixels later on in
-    * _evas_gl_common_texture_mipmaps_build(). this works, but is ugly.
-    * 
-    * i currently have no reason to believe GL can't do what i want to do,
-    * that is add mipmaps and allocate space for them any time i want. see
-    */
-/* disable this as the mipmap was already allocated earlier on
-       glTexImage2D(GL_TEXTURE_2D, level,
-                    texfmt, tw, th, 0,
-                    pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV, NULL);
- */
-#else
-       glTexImage2D(GL_TEXTURE_2D, level,
-                    texfmt, tw, th, 0,
-                    pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV, NULL);
-#endif 
-/* END NVIDIA HACK */  
        glTexSubImage2D(GL_TEXTURE_2D, level, 
                        0, 0, im_w, im_h,
-                       pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
+                       pixfmt, NATIVE_PIX_UNIT,
                        im_data);
        if (im_w < tw)
          glTexSubImage2D(GL_TEXTURE_2D, level, 
                          im_w, 0, 1, im_h,
-                         pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
+                         pixfmt, NATIVE_PIX_UNIT,
                          im_data + im_w - 1);
        if (im_h < th)
          glTexSubImage2D(GL_TEXTURE_2D, level,
                          0, im_h, im_w, 1,
-                         pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
+                         pixfmt, NATIVE_PIX_UNIT,
                          im_data + (im_w * (im_h - 1)));
        if ((im_w < tw) && (im_h < th))
          glTexSubImage2D(GL_TEXTURE_2D, level, 
                          im_w, im_h, 1, 1,
-                         pixfmt, GL_UNSIGNED_INT_8_8_8_8_REV,
+                         pixfmt, NATIVE_PIX_UNIT,
                          im_data + (im_w * (im_h - 1)) + im_w - 1);
        im1 = im2;
        im2 = NULL;




-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to