openGL - Texturperformance

Cromon

Erfahrenes Mitglied
Hallo zusammen!

Ich bin noch immer an meiner Applikation zum Rendern von grossen Terraingebieten. Mittlerweile habe ich sehr viel an der Performance erhöhen können! Allerdings habe ein Problem bei speziellen Texturen! Es handelt sich um folgenden Code:
Code:
if(mhdr.nLayers > 1)
	{
		glActiveTextureARB(GL_TEXTURE0_ARB);
		glEnable(GL_TEXTURE_2D);
		glActiveTextureARB(GL_TEXTURE1_ARB);
		glEnable(GL_TEXTURE_2D);
		glDepthMask(GL_FALSE);
	}

	for(ui32 i = 1; i < mhdr.nLayers && i < sSelectionMgr.maxtex; ++i)
	{
		glActiveTextureARB(GL_TEXTURE0_ARB);
		glBindTexture(GL_TEXTURE_2D, texture[i]);

		glActiveTextureARB(GL_TEXTURE1_ARB);
		glBindTexture(GL_TEXTURE_2D, alphamap[i - 1]);

		glDrawElements(GL_TRIANGLE_STRIP, striplen, GL_UNSIGNED_SHORT, strip);
	}

	if(mhdr.nLayers > 1)
	{
		glActiveTextureARB(GL_TEXTURE1_ARB);
		glDisable(GL_TEXTURE_2D);
		glActiveTextureARB(GL_TEXTURE0_ARB);
		glDisable(GL_TEXTURE_2D);
		glDepthMask(GL_TRUE);
	}

Das Gelände setzt sich aus mehreren Texturlayern zusammen. Die Layer 2 - X (von 1 begonnen mit Zählen) haben eine Alphakomponente. Und genau da liegt mein Problem.

Wenn ich nur den untersten Layer rendere und die obigen nicht, so habe ich eine Framerate von 102 FPS. Sobald jedoch ein weitere Layer hinzukommt ist sie auf knapp 20 FPS. Merkwürdigerweise bleibt es dann jedoch auf 20 FPS auch bei 4 Layern.

Es bringt auch keinen wirklich spürbaren Vorteil, wenn ich GL_TEXTURE1_ARB nicht verwende. Der Übergang ist dann einfach breiter (1 Layer -> 102, 2 Layer -> 40, 3 Layer -> 30, 4 Layer -> 20).

Daher stellt sich für mich die Frage: Ist es so wahnsinnig aufwändig diese Texturen zu rendern? Und warum wird die Framerate nicht kleiner, wenn die Layerzahl noch weiter ansteigt und springt von 2 auf 1 so rapide?

Gruss
Cromon
 
Zuletzt bearbeitet:
Hi,

also ich weiß nicht ob das normal ist das die Framerate bei einer Textur mehr auf 20% der vorherigen Wertes sinkt :D

Kann es sein das du i-welche States (Bei DX heißt es so) falsch gesetzt hast?

Setzt du so einer Art Textur-Splatting Technik ein?
Wie machst du das? legst du einfach mehrere Texturen komplett über das ganze Terrain?

Ändert sich an den FPS was wenn du andere Filter benutzt?

Vll kannst du es auch mal mit GLSL versuchen wenn du es nicht so wie so schon machst.
Eigene Shader sollen ja wesentlich schneller sein als die standart Pipline( heißt das bei OpenGL auch so?)

Bin leider nicht so der OpenGL Fachmann. Hoffe ich hab dir trotzdem geholfen.

Gruß
Anfänger
 
Hoi

War gerade nicht erreichbar die Tage, deshalb hat es so lange gedauert ;).

Ich muss sagen, dass ich mich auch nicht als openGL Fachmann outen würde, aber ich schaue mal, was ich davon ausprobieren kann ;).

Ein paar Tests haben folgendes ergeben:
Wenn ich ohne eine Alphamap bei den oberen 3 layern render, also solid alle 4 Layer übereinander, dann sind die Frameraten etwa linear abnehmend, also erwartungsgemäss. Sobald ich aber über eine Alphamap die oberen 3 Layer rendere ist die Framerate sehr schnell im Keller.

Gruss
Cromon
 
Zurück