Seite 2 von 2

Verfasst: 18.08.2008 23:05
von Thorium
Dostej hat geschrieben: Legtst DU die Sourcen irgendwann mal offen (PBOSL?)
Generell bin ich einem Offenlegen der Sourcen nicht abgeneigt. Allerdings nicht solange ich noch daran arbeite. Das hat verschiedene Gründe. Wenn ich nicht mehr drann arbeite, werde ich mit Sicherheit den Source offenlegen auf Anfrage.

So wie ich es auch schon mit anderen Projekten getan habe.

Verfasst: 26.02.2009 11:07
von Thorium
So, lange hab ich hier nix mehr gemacht. Aber da der Ressource Loader sowieso Teil meines Gameprojekts ist, wurde der immer weiter verbessert. Es gibt zwar (noch) keine neue Stable. Aber mal ein Video wie so ein Levelstreaming aussehen kann.

Das Video zeigt einen 2D Shooter, der Background ist ein sehr langes Bitmap. (1024x7680 Pixel) Die Auflösung beträgt 1024x768. Die ist nicht so klein, weil der Ressourceloader net nachkommt, sondern weil ich sonst kein Video mit unter 25FPS aufnehmen kann. Weil Fraps massig Leistung zieht. /:-> Sorry dafür. Also das Level ist praktisch 10 Bildschirmlängen lang. Die Bitmap wird wärend dem Spielen von der HDD gestreamt mit dem Ressourceloader, den ich hier bereitstelle.

Das Video läuft leider nur mit 30fps. Ohne Fraps läuft das Spiel auf meinem AMD Athlon XP 3200 mit ca. 1000 FPS.

PsychoPilot.avi (5,45MB)

Achja, der Background ist ein echtes Foto, was ich aus Google Earth geklaut hab.

Verfasst: 26.02.2009 14:29
von PMV
Hm, interessant isses ja schon ... wie stellst du dir das mit den Sprachen
vor? 256 vorgegebene Sprachen? Oder kann jeder die 256 Sprachen selber
wählen? Es ist natürlich sehr unwahrscheinlich, das jemand mal über diese
256 kommt ... aber man weis ja nie :wink:

Ich würd dir ja ISO 639-3 empfehlen zur identifikation:
http://www.sil.org/iso639-3/codes.asp
Dann brauchst auch keine eigenen Konstanten dafür generieren :D

MFG PMV

Verfasst: 26.02.2009 15:00
von Thorium
PMV hat geschrieben:Hm, interessant isses ja schon ... wie stellst du dir das mit den Sprachen
vor? 256 vorgegebene Sprachen? Oder kann jeder die 256 Sprachen selber
wählen? Es ist natürlich sehr unwahrscheinlich, das jemand mal über diese
256 kommt ... aber man weis ja nie :wink:
Jeder kann sie selbst wählen. Man muss dem Loader nur beim initialisieren eine Nummer übergeben dann läd er die Ressourcen mit dieser Nummer. Gibt es die Ressource nicht mit der Nummer, läd er die mit der niedrigsten Nummer. Dabei ist es dem Loader erstmal egal was für ne Sprache das tatsächlich ist. Interessant wirds erst, wenn ich das mit der Sprachähnlichkeit mache aber ob und wann ich das mache, weis ich noch nicht. Hat sehr sehr niedrige Priorität. Aber in dem Fall müsste auf jeden Fall ein Standart her, danke schonmal für den Norm-Link.

Verfasst: 18.08.2009 22:46
von Thorium
Neue Version steht zum Download bereit: Thorium Ressource Manager v0.02

Nachdem ich ihn nun schon ne ganze Weile stück für stück immer ein wenig verbessert hab und in meinem Gameprojekt einsetze, wird es Zeit für einen neuen Release. Wie an der Versionsnummer zu sehen immernoch nicht der Final.

Changelog
  • hinzugefügt: 64bit Version
  • hinzugefügt: ZLib-Kompression
  • hinzugefügt: None-Debug-Version
  • geändert: Dekompressionsgeschwindigkeit von JCalG1 verbessert (bis zu 25%)
  • geändert: Lade- und Dekompressionsthread werden jetzt dynamisch erstellt und beendet anstatt die ganze Zeit mitzulaufen. Dadurch wird keine CPU-Zeit beansprucht, wenn der Loader keine Arbeit hat.
  • geändert: Kompressionen werden nun per Pluginsystem eingebunden. Das heisst bei der Weitergabe brauchen nur die Plugins mitgegeben werden, deren Kompression auch verwendet wird.
  • geändert: kleine Änderung am Containerformat (nicht mehr kompatibel zu 0.01)
  • fixed: Crash durch fehlende Threadsicherheit
Plus viele viele kleine Änderungen und Optimierungen.

Nach meiner Erfahrung ist der Loader jetzt stabil. Mir sind keine Crashes bekannt, die nicht mit dieser Version gefixt sind und auch keine sonstigen Bugs.
Was auch ein Grund ist warum ich diese Version veröffentliche. Vieleicht findet ja jemand noch Bugs, die mir entgangen sind.

Der Beispielcode wurde auch vereinfacht. Ich weis zwar nicht ob es sicher ist ein Image einem Imagegadet in einem Thread zuzuweisen aber das Beispiel wird dadurch extrem vereinfacht.

Noch eins: Das Beispiel lässt sich nicht als x64 kompilieren, wegen dem lib Import. Ich habe das Problem bereits als Bug von PB gemeldet.

Verfasst: 19.08.2009 17:43
von Vermilion
Ich bin total neugierig, wie du das asynchron geschafft hast. :) Weil aus meiner Sicht baut PureBasic darauf auf, was eben das verhindert (DirectX). Ein paar Windows API Calls, oder wie?

Verfasst: 19.08.2009 18:34
von Thorium
Vermilion hat geschrieben:Ich bin total neugierig, wie du das asynchron geschafft hast. :) Weil aus meiner Sicht baut PureBasic darauf auf, was eben das verhindert (DirectX). Ein paar Windows API Calls, oder wie?
Naja, beim laden und dekomprimieren spielt DX ja noch nicht mit. Erst beim "catchen" der Ressourcen. Das funktioniert aber sogar problemlos in nem Thread mit DX allerdings nicht mit OGL. Dementsprechend kann man bei DX die Ressourcen im Callback catchen (der läuft mit im Dekompressionsthread). Bei OGL muss man im Callback ne Variable setzen, das die Ressource geladen wurde und diese im Hauptthread abfragen und dann dort catchen.

Verfasst: 19.08.2009 20:03
von X0r
> Das funktioniert aber sogar problemlos in nem Thread mit DX allerdings nicht mit OGL.

Und zwar deshalb, weil ein Thread ein Teilprozess und der wglContext dort nicht mehr gültig ist.
Dafür gibt es aber ne einfache Lösung.

Verfasst: 19.08.2009 20:20
von Thorium
X0r hat geschrieben:> Das funktioniert aber sogar problemlos in nem Thread mit DX allerdings nicht mit OGL.

Und zwar deshalb, weil ein Thread ein Teilprozess und der wglContext dort nicht mehr gültig ist.
Dafür gibt es aber ne einfache Lösung.
Und die wäre?
Ist die auch mit dem OGL Subsystem von PB umsetzbar oder funktioniert die Lösung nur, wenn man sich sein eignes System baut?

Verfasst: 19.08.2009 20:27
von X0r
Ich würde mal sagen, dass man im Thread einfach über wglCreateContext und wglMakeCurrent quasi ein neues context erstellen muss.
Edit:
Hab es gerade mit meiner Engine getestet, funktioniert.