Buggy GeForce TMU's

Two rendering passes are required. The first one requires TMU0 enabled for 2d texturing and TMU1 for cube mapping. The second pass only requires TMU0 2d texturing.
The problem is when I disable TMU1, I get a noticeable drop down in performance which makes my application not real-time - 1 fps.
I tired the following to debug:

  1. Binding TMU1 in the second pass to
    default texture name 0.

  2. Re-enabling TMU1 after disabling it
    prevents weird frame rate dorpdown.

This means that glDiable does not cause the problem untill glBegin … glEnd (rendering) begins.

P2 400MHZ, 256MB RAM
GeForce2 MX, 32 MB, 2x AGP
Drivers (latest detonator from nvidia)
OpenGL 1.3.1
Windows 98 SE


This was discussed recently, but I dont know what the outcome was.

You have 2 choices:

glBindTexture(texture_type, 0);
Both should work fine. I use glDisable myself.


Ok. But I tried both and neither one gives the desired result. Binding to 0 results in incorrect texturing (not disabling it), and glDisable drops down performance significantly.
Why does this abnormal performance drop hapen when disabling the other TMU. Should not it be faster to have only one TMU enabled instead of two?
Or is this a bug in NVIDIA TMU’s/drivers?

wis mak,

Can you post a small example or code snippet that demonstrates the problem?

Here it’s:

void Render ()
glActiveTextureARB (GL_TEXTURE0_ARB);
glBindTexture (GL_TEXTURE_2D, normalmap);
glActiveTextureARB (GL_TEXTURE1_ARB);

glBegin (GL_QUAD);

glEnd ();

glEnable (GL_BLEND);
glBeldnFunc (GL_DST_COLOR, GL_ZERO);

glActiveTextureARB (GL_TEXTURE0_ARB);
glBindTexture (GL_TEXTURE_2D, decal);
glActiveTextureARB (GL_TEXTURE1_ARB);
glDisable (GL_TEXTURE_CUBE_MAP_ARB); //<—
// when it’s left enabled no performance
// problems

glBegin (GL_QUAD);

glEnd ();

glDisable (GL_BLEND);

I know it’s a weird problem. But how do I resolve it, when it’s not NVIDIA TMU’s bug?

Pleeeeeeeeeeeeeeeease helllllllllp.

Do you have a small demo that shows the problem? I’d like to be able to run it and recompile/debug it to see if I can find the problem.