Skysnake
Lötkolbengott/-göttin
Sodele Leute, ich hab die Woche mit diesem Projekt hier zu getragen, wobei die meiste Zeit eigentlich aufs Debuggen des OpenCL Teils drauf gegangen ist... 
OpenCL hat halt so seine Stopelfallen, in die man sehr gern rein tritt und dann erst mal ne Stunde oder länger nicht sieht, wo das Problem liegt. Naja, seid rum.
Hier mal ein kleiner Bild des im Titel beschriebenen Programms.
Auslastung der 5870@stock mit einem E8400@4GHz beträgt ~40%, mit >100 FPS. Sieht man ja im Afterburner
Falls mehr interesse daran besteht, meldet euch einfach
Das Ganze ist schon recht modular aufgebaut, ich werd aber noch weiter dran basteln, damit man vorm Start noch die Pfade für die Bilder angeben kann, die Geschwindigkeit, mit der zwischen den Bildern gewechselt werden soll usw. Das meist ist schon im Code drin, nur atm noch als #define implementiert. Ist also relativ schnell zu ersetzen.
EDIT:
Sodele hier die neuste Version, jetzt mit der Möglichkeit, den Morpher an/ab zu schalten mittels der Taste 'c'. Btw. Falls es noch nicht aufgefallen war, mittels 'awsd' kann man unter Windows das Bild verschieben, und unter Linux mit den Pfeiltasten. Windows zickt da irgendwie rum... Und mit + - kann man zoomen
EDIT2:
Und noch ne neuere Version. Das Bild wird nun nicht mehr kleiner, wenn man den "Morpher" laufen lässt. Ursache war, wie vielleicht schon gesagt, dass die Randwerte nicht initialisiert wurden und somit Werte >1.0 erreicht wurrden. Da alles was >=1.0 ist, als Weiß dargestellt wird, wurde das Bild immer kleiner.
Durch drücken von 'r' kann nun fortlaufend das aktuell dargestellt Bild als BMP abgespeichert werden. Erneutes drücken von 'r' deaktiviert die Funktion wieder. Im Moment ist das alles noch SEHR unperformant, also extrem langsam. Man brauch ca 1s pro BMP. Wenn ich Zeit habe, muss ich mich noch daran machen, die ganze Sache performanter zu schreiben.
EDIT3:
Mich hat die Performance so geärgert, das ich mich doch gleich dran gemacht hab. Das schreiben der BMPs ist jetzt etwa um einen Faktor 5 schneller, wenn nicht mehr. Sollte jetzt nicht mehr all zu stark stören
EDIT4:
Den "BurnIn Viewer" hinzugefügt
Benutzung auf EIGENE GEFAHR! Ich übernehme keine Haftung für Schäden an eurer Hardware! Achtet auf die Temperaturen usw.!
EDIT5:
Ich möchte nochmal ausdrücklich darauf hinweisen, dass das Programm ein extremer Stresstest ist. Ich empfehle jedem, die Lüfterdrehzahl vorher manuell etwas hoch zu ziehen, wenn ihr das Programm einige Minuten laufen lassen wollt. Ich hab kurz vor der Notabschaltung wegen überhitzung die Lüfterdrehzahl hoch gezogen. Achtet also bitte darauf. Nicht das sich noch jemand die GPU schrottet.
EDIT6:
Ok, ich hab jetzt das halbe Programm umgeschrieben, um von glDrawPixels weg zu kommen. Bis jetzt waren ja so ca 100 FPS drin. Eigentlich genug, nur war es eben ziemlich umständlich die ganzen Sachen hin und her zu kopieren. Also hab ich mich entschlossen jetzt Texturen zu verwenden, und siehe da, es ist "geringfügig" schneller
So 8k FPS sind jetzt mit einer 5870 drin, wenn nichts berechnet wird. Sobald der Morpher angeschlatet wird, gehen die FPS natürlich ziemlich in den Keller, aber auch weniger als bisher. Ich hoffe euch freut diese "kleine" Performanceverbesserung, und nehmt was für eure eigenen Projekte mit. glDrawPixels ist SAUUUU langsam 
Ok, also dann mal zum Programm. Wie ihr sicherlich sofort seht, haben die Bilder jetzt einen schwarzen Rand. Dieser rührt daher, dass ich die gesamte textur zeichne, aber eben einen Rand für die Randwerte benötige, um die Berechnungen durchführen zu können. Die Berechnung wurde jetzt auch flexibel gestaltet, sodass jedes Bild in seiner nativen Auflösung berechnet wird ohne einen Überstand. Ich denke der Rand stört niemanden, und ist sogar ganz nützlich, da man so sieht von wo bis wo das Bild geht. Falls gewünscht könne ich dies aber auch noch recht einfach umstellen, oder ein op_out/in daraus machen.
Im Moment müsst ihr leider darauf verzichten das Bild hin und her zu schieben, sowie zu zoomen, das wird aber in einer späteren Version wieder einzug halten.
'r' für Bilder abspeichern ist im Moment leider ohne Funktion, werde ich später aber wahrscheinlich wieder implementieren, im Moment habe ich dafür aber keine Zeit.
Ansonsten gibt es aber auch ein paar tolle Neuerugen
1. Mit ',' und '.' könnt ihr die Anzahl Iterationen erhöhen bzw. verringern.
2. Mit 'i' könnt ihr einen wert eingeben über die console. Hierfür müsst ihr die Console leider seperat anklicken, ansonsten nimmt diese die Eingaben nicht an.
3. Mit 'n' und 'b' könnt ihr durch die Bilder schalten
4. Mit 'v' könnt ihr den Morpher zurücksetzen.
5. Mit 'p' könnt ihr den Profile Modus anschalten, bei dem es sich praktisch um einen Benchmark handelt
Ihr könnt ja mal ein bischen rum spielen, und schauen, wie ihr die besten Ergebnisse erreicht.
Ich sag mal so viel dazu. Die Größe des Bildes spielt eine entscheide Rolle
EDIT 7:
Wegen Problemen mal gleich V1.1 nachgeschoben

OpenCL hat halt so seine Stopelfallen, in die man sehr gern rein tritt und dann erst mal ne Stunde oder länger nicht sieht, wo das Problem liegt. Naja, seid rum.
Hier mal ein kleiner Bild des im Titel beschriebenen Programms.
Auslastung der 5870@stock mit einem E8400@4GHz beträgt ~40%, mit >100 FPS. Sieht man ja im Afterburner

Falls mehr interesse daran besteht, meldet euch einfach

Das Ganze ist schon recht modular aufgebaut, ich werd aber noch weiter dran basteln, damit man vorm Start noch die Pfade für die Bilder angeben kann, die Geschwindigkeit, mit der zwischen den Bildern gewechselt werden soll usw. Das meist ist schon im Code drin, nur atm noch als #define implementiert. Ist also relativ schnell zu ersetzen.
EDIT:
Sodele hier die neuste Version, jetzt mit der Möglichkeit, den Morpher an/ab zu schalten mittels der Taste 'c'. Btw. Falls es noch nicht aufgefallen war, mittels 'awsd' kann man unter Windows das Bild verschieben, und unter Linux mit den Pfeiltasten. Windows zickt da irgendwie rum... Und mit + - kann man zoomen

EDIT2:
Und noch ne neuere Version. Das Bild wird nun nicht mehr kleiner, wenn man den "Morpher" laufen lässt. Ursache war, wie vielleicht schon gesagt, dass die Randwerte nicht initialisiert wurden und somit Werte >1.0 erreicht wurrden. Da alles was >=1.0 ist, als Weiß dargestellt wird, wurde das Bild immer kleiner.
Durch drücken von 'r' kann nun fortlaufend das aktuell dargestellt Bild als BMP abgespeichert werden. Erneutes drücken von 'r' deaktiviert die Funktion wieder. Im Moment ist das alles noch SEHR unperformant, also extrem langsam. Man brauch ca 1s pro BMP. Wenn ich Zeit habe, muss ich mich noch daran machen, die ganze Sache performanter zu schreiben.
EDIT3:
Mich hat die Performance so geärgert, das ich mich doch gleich dran gemacht hab. Das schreiben der BMPs ist jetzt etwa um einen Faktor 5 schneller, wenn nicht mehr. Sollte jetzt nicht mehr all zu stark stören

EDIT4:
Den "BurnIn Viewer" hinzugefügt

Benutzung auf EIGENE GEFAHR! Ich übernehme keine Haftung für Schäden an eurer Hardware! Achtet auf die Temperaturen usw.!
EDIT5:
Ich möchte nochmal ausdrücklich darauf hinweisen, dass das Programm ein extremer Stresstest ist. Ich empfehle jedem, die Lüfterdrehzahl vorher manuell etwas hoch zu ziehen, wenn ihr das Programm einige Minuten laufen lassen wollt. Ich hab kurz vor der Notabschaltung wegen überhitzung die Lüfterdrehzahl hoch gezogen. Achtet also bitte darauf. Nicht das sich noch jemand die GPU schrottet.
EDIT6:
Ok, ich hab jetzt das halbe Programm umgeschrieben, um von glDrawPixels weg zu kommen. Bis jetzt waren ja so ca 100 FPS drin. Eigentlich genug, nur war es eben ziemlich umständlich die ganzen Sachen hin und her zu kopieren. Also hab ich mich entschlossen jetzt Texturen zu verwenden, und siehe da, es ist "geringfügig" schneller


Ok, also dann mal zum Programm. Wie ihr sicherlich sofort seht, haben die Bilder jetzt einen schwarzen Rand. Dieser rührt daher, dass ich die gesamte textur zeichne, aber eben einen Rand für die Randwerte benötige, um die Berechnungen durchführen zu können. Die Berechnung wurde jetzt auch flexibel gestaltet, sodass jedes Bild in seiner nativen Auflösung berechnet wird ohne einen Überstand. Ich denke der Rand stört niemanden, und ist sogar ganz nützlich, da man so sieht von wo bis wo das Bild geht. Falls gewünscht könne ich dies aber auch noch recht einfach umstellen, oder ein op_out/in daraus machen.
Im Moment müsst ihr leider darauf verzichten das Bild hin und her zu schieben, sowie zu zoomen, das wird aber in einer späteren Version wieder einzug halten.
'r' für Bilder abspeichern ist im Moment leider ohne Funktion, werde ich später aber wahrscheinlich wieder implementieren, im Moment habe ich dafür aber keine Zeit.

Ansonsten gibt es aber auch ein paar tolle Neuerugen

1. Mit ',' und '.' könnt ihr die Anzahl Iterationen erhöhen bzw. verringern.
2. Mit 'i' könnt ihr einen wert eingeben über die console. Hierfür müsst ihr die Console leider seperat anklicken, ansonsten nimmt diese die Eingaben nicht an.
3. Mit 'n' und 'b' könnt ihr durch die Bilder schalten
4. Mit 'v' könnt ihr den Morpher zurücksetzen.
5. Mit 'p' könnt ihr den Profile Modus anschalten, bei dem es sich praktisch um einen Benchmark handelt

Ihr könnt ja mal ein bischen rum spielen, und schauen, wie ihr die besten Ergebnisse erreicht.
Ich sag mal so viel dazu. Die Größe des Bildes spielt eine entscheide Rolle

EDIT 7:
Wegen Problemen mal gleich V1.1 nachgeschoben

Anhänge
Zuletzt bearbeitet: