fixed a bug in GL_NEAREST sampler
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user