Also ob der Z-Buffer auf 16 oder 32 Bit gesetzt ist, macht definitiv keinerlei Unterschied. Das funktionierte selbst auf alten Riva TNT Karten von anno domini schon perfekt mit 16 Bit.
Wenn die Genauigkeit deines Z-Buffers so große Probleme macht, vermute ich deinen Fehler mittlerweile viel eher in deinen ganzen anderen Berechnungen als bei deinen OpenGL-Settings. Durch deine Flag-Umschalterei werden diese Fehler lediglich besser kaschiert, aber besser werden sie damit nicht.
Der Depth-Test beim Zeichnen der Planes... sofern ich mich nun grad nicht völlig irre... muss auf jeden Fall auf GL_LEQUAL gesetzt werden. Das System beruht ja schließlich darauf, dass die + und - Planes sich in allen Bereichen des Bildschirms, auf die kein Schatten geworfen werden soll, gegenseitig neutralisieren und nur dort, wo die "weg guckenden" der Planes durch den Depth-Test nicht gezeichnet werden (weil sie in das Objekt "reintstechen") ist dies dann nicht der Fall, weswegen der Stencil-Wert dort am Ende dann !=0 ist, so dass man weiß, dass der Bereich schattiert ist. Und ob du nun 16 oder 32 Bit Z-Buffer hast, macht dort dann mal null komma gar nichts aus, weil bei der Berechnung der Dreieckskannten im 3D-Raum als auch die Startpuntke der Shadow-Planes für eben diese kritischen Punkte ja exakt die selbe Koordinaten verwenden (wenn deine Berechnung richtig ist) und da darf GL_LEQUAL definitiv NICHT fehlschlagen ;-). Und bei allen weiter entfernten Punkten der Shadow-Planes, die ja bei A+LightDirection*Infinity, B+LightDirection*Infinity und C+LightDirection*Infinity liegen sollten, kann dieser Test ebenfalls niemals fehlschlagen, da egal wie ungenau die Z-Berechnung ist, > und < liefern in diesem Fall, wo die Planes ja wirklich im 90° Winkel wegstehen, ganz definitiv keine Werte, die dazu führen könnten ;-).
Das einzige was ich mir sonst noch vorstellen könnte ist, dass du dich selbst in einem der Shadow-Volumina befindest, das darf natürlich nicht passieren :-).
LG
Alyx