fixed a bug in GL_NEAREST sampler
authorDaniel Borca <dborca@users.sourceforge.net>
Mon, 2 Feb 2004 07:46:27 +0000 (07:46 +0000)
committerDaniel Borca <dborca@users.sourceforge.net>
Mon, 2 Feb 2004 07:46:27 +0000 (07:46 +0000)
src/mesa/drivers/glide/fxddtex.c
src/mesa/swrast/s_texture.c

index 80728fe..17ff082 100644 (file)
@@ -978,21 +978,6 @@ fxDDChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
    fxMesaContext fxMesa = FX_CONTEXT(ctx);
    GLboolean allow32bpt = fxMesa->HaveTexFmt;
 
-   /* [dBorca] Hack alert:
-    * There is something wrong with this!!! Take an example:
-    * 1) start HW rendering
-    * 2) create a texture like this:
-    *    glTexImage2D(GL_TEXTURE_2D, 0, 3, 16, 16, 0,
-    *                 GL_RGB, GL_UNSIGNED_BYTE, floorTexture);
-    *    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-    * 3) we get here with internalFormat==3 and return either
-    *    _mesa_texformat_rgb565 or _mesa_texformat_argb8888
-    * 4) at some point, we encounter total rasterization fallback
-    * 5) displaying a polygon with the above textures yield garbage on areas
-    *    where pixel is larger than a texel, because our already set texel
-    *    function doesn't match the real _mesa_texformat_argb888
-    */
-
    if (TDFX_DEBUG & VERBOSE_TEXTURE) {
       fprintf(stderr, "fxDDChooseTextureFormat(...)\n");
    }
index b5a4509..37e8ea8 100644 (file)
@@ -1592,12 +1592,18 @@ sample_lambda_2d( GLcontext *ctx, GLuint texUnit,
       switch (tObj->MinFilter) {
       case GL_NEAREST:
          if (repeatNoBorderPOT) {
-            switch (tImg->Format) {
-            case GL_RGB:
+            switch (tImg->TexFormat->MesaFormat) {
+            case MESA_FORMAT_RGB:
+            case MESA_FORMAT_RGB888:
+            /*case MESA_FORMAT_BGR888:*/
                opt_sample_rgb_2d(ctx, texUnit, tObj, m, texcoords + minStart,
                                  NULL, rgba + minStart);
                break;
-            case GL_RGBA:
+            case MESA_FORMAT_RGBA:
+            case MESA_FORMAT_RGBA8888:
+            case MESA_FORMAT_ARGB8888:
+            /*case MESA_FORMAT_ABGR8888:*/
+            /*case MESA_FORMAT_BGRA8888:*/
               opt_sample_rgba_2d(ctx, texUnit, tObj, m, texcoords + minStart,
                                   NULL, rgba + minStart);
                break;
@@ -1649,12 +1655,18 @@ sample_lambda_2d( GLcontext *ctx, GLuint texUnit,
       switch (tObj->MagFilter) {
       case GL_NEAREST:
          if (repeatNoBorderPOT) {
-            switch (tImg->Format) {
-            case GL_RGB:
+            switch (tImg->TexFormat->MesaFormat) {
+            case MESA_FORMAT_RGB:
+            case MESA_FORMAT_RGB888:
+            /*case MESA_FORMAT_BGR888:*/
                opt_sample_rgb_2d(ctx, texUnit, tObj, m, texcoords + magStart,
                                  NULL, rgba + magStart);
                break;
-            case GL_RGBA:
+            case MESA_FORMAT_RGBA:
+            case MESA_FORMAT_RGBA8888:
+            case MESA_FORMAT_ARGB8888:
+            /*case MESA_FORMAT_ABGR8888:*/
+            /*case MESA_FORMAT_BGRA8888:*/
               opt_sample_rgba_2d(ctx, texUnit, tObj, m, texcoords + magStart,
                                   NULL, rgba + magStart);
                break;