Grüße,
für den LD24 greife ich dieses mal (wieder) auf "einfaches" CPU-Render zurück um meinen alten Code / Engine verwenden zu können und mich nicht in LWJGL zu verlieren.
Hab da ein bisschen rumprobiert und wollte jetzt auch Alpha-Support einbauen. In meiner Enigne verwende ich "rohe" Pixel-Daten ohne BufferedImages etc. und berechne meine Farben / Alpha also auch selbst. Dazu verwende ich ganz normal Porter-Duff Composition ? Wikipedia mit folgender Methode, die Marco13 mal freundlicherweis für mich "aufgeräumt" hat:
Nun zu meinem Problem:
Wenn ich diese Methode über mehr als ca. 200.000 Pixel / Loop laufen lasse brechen mir die fps auf <60 ein ... Verwendet wird ein (einizger) Thread der nur für diese Berechnung da ist. Dennoch sind 200k Pixel nicht gerade viel.
Kann man da relativ einfach noch was tweaken um die Performance zu verbessern? Multi-Threading hab ich schon vergeblich versucht ... das ist ganz ekelhaft zu sychronisieren (für mich zumindest) und wäre jetzt keine Option.
Vielleicht kann mir ja jemand zu dieser späten Stunde noch helfen.
-Luk10-
für den LD24 greife ich dieses mal (wieder) auf "einfaches" CPU-Render zurück um meinen alten Code / Engine verwenden zu können und mich nicht in LWJGL zu verlieren.
Hab da ein bisschen rumprobiert und wollte jetzt auch Alpha-Support einbauen. In meiner Enigne verwende ich "rohe" Pixel-Daten ohne BufferedImages etc. und berechne meine Farben / Alpha also auch selbst. Dazu verwende ich ganz normal Porter-Duff Composition ? Wikipedia mit folgender Methode, die Marco13 mal freundlicherweis für mich "aufgeräumt" hat:
Java:
protected static int computeColor(int argb0, int argb1) {
double a0 = ((argb0 >> 24) & 0xff) / 255.0;
double r0 = ((argb0 >> 16) & 0xff) / 255.0;
double g0 = ((argb0 >> 8) & 0xff) / 255.0;
double b0 = ((argb0 >> 0) & 0xff) / 255.0;
double a1 = ((argb1 >> 24) & 0xff) / 255.0;
double r1 = ((argb1 >> 16) & 0xff) / 255.0;
double g1 = ((argb1 >> 8) & 0xff) / 255.0;
double b1 = ((argb1 >> 0) & 0xff) / 255.0;
double a = a1 + (1 - a1) * a0;
double r = (1.0 / a) * (a1 * r1 + (1 - a1) * a0 * r0);
double g = (1.0 / a) * (a1 * g1 + (1 - a1) * a0 * g0);
double b = (1.0 / a) * (a1 * b1 + (1 - a1) * a0 * b0);
int result = ((int) (a * 255) << 24) | ((int) (r * 255) << 16) | ((int) (g * 255) << 8) | ((int) (b * 255) << 0);
return result;
}
Nun zu meinem Problem:
Wenn ich diese Methode über mehr als ca. 200.000 Pixel / Loop laufen lasse brechen mir die fps auf <60 ein ... Verwendet wird ein (einizger) Thread der nur für diese Berechnung da ist. Dennoch sind 200k Pixel nicht gerade viel.
Kann man da relativ einfach noch was tweaken um die Performance zu verbessern? Multi-Threading hab ich schon vergeblich versucht ... das ist ganz ekelhaft zu sychronisieren (für mich zumindest) und wäre jetzt keine Option.
Vielleicht kann mir ja jemand zu dieser späten Stunde noch helfen.
-Luk10-