fixed a bug in GL_NEAREST sampler

This commit is contained in:
Daniel Borca
2004-02-02 07:46:27 +00:00
parent c9e1c8098b
commit 4c7883e402
2 changed files with 18 additions and 21 deletions
-15
View 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");
}
+18 -6
View 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;