# Transparenz - Geschwindigkeit



## Gen.d.Pz.Tr.Seb (25. Jan 2008)

Ich arbeite derzeit an einem Spiel das eine isometrische Map verwendet. Aufgrund der isometrie gibt es relativ viel transparenz in meinen tiles (4 ecken + noch etwas nach oben um 'hohe' gebäude und einheite zu rendern).

Im moment läuft das Spiel und linux halbwegs flüssig (unter windows nicht, siehe meinen zweiten thread weiter unten), jedoch habe ich vor weitere images über vorhandene drüber zu rendern die einen bestimmten Status eines Gebäudes oder einer Einheit anzeigen sollen. 

Und da ich am liebsten überall die gleichen tile sizes verwenden möchte (da erspare ich mir sehr viel aufwand), würden diese tiles zum größten teil transparent sein.

So, nun würde ich gerne wissen wie stark sich vollkommene transparenz auf die rendergeschwindigkeit auswirkt? (Teil-transparenz verlangsamt das spiel extrem, das hab ich schon gelernt). Falls die Transparenz ein Problem ist, gibt es irgendeine Möglichkeit den Geschwindigkeitsverlust durch transparenz irgendwie zu vermindern?


----------



## Wildcard (25. Jan 2008)

Bei Images ist immer die Frage, ob es sich um Compatible Images handelt, oder nicht.
Nur Compatible Images können von der Hardwarebeschleunigung profitieren.
Derzeit ist dies nur bei Bitmasken Transparenz möglich, demzufolge sollte man ein geeignetes ColorModel verwenden.


----------



## Gen.d.Pz.Tr.Seb (25. Jan 2008)

Compatible images verwende ich. Mit BitMasken und ColorModel hast mich jetzt verloren, da muss ich erst mal einlesen(informieren).


----------



## Gen.d.Pz.Tr.Seb (28. Jan 2008)

```
// Create a BufferedImage adapted to the users environment.
		final GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
		final GraphicsDevice d = e.getDefaultScreenDevice();
		final GraphicsConfiguration c = d.getDefaultConfiguration();

		final BufferedImage newimg = c.createCompatibleImage(img.getWidth(), img.getHeight(), Transparency.BITMASK);
		final Graphics2D g2d = newimg.createGraphics();
		g2d.setComposite(AlphaComposite.Src);
		g2d.drawImage(img, 0, 0, img.getWidth(), img.getHeight(), null);
		g2d.dispose();

		return newimg;
```

So speichere ich jetzt das geladene png und verwende es dann zum rendern weiter. So komme ich auf ~40fps. Schalte ich die transparenz ab (also BufferedImage.TYPE_INT_RGB) komme ich auf ~110.

Was mache ich noch falsch, oder schaft mein System einfach die transparenz nicht (was nicht wirklich sein kann da spiele sonst sehr gut auf meinem rechner laufen)?


----------

