.| Autor | Beitrag |
|---|---|
|
000 09.11.2001, 14:50 Prefect |
Inzwischen haben ja wahrscheinlich die meisten mitgekriegt, daß im DHCC eine Tutorial-Reihe zu SDL von mir zu finden ist. Ich habe mir die letzten Tage Gedanken gemacht, wie ich diese Reihe am besten weiterführen sollte nachdem die grundlegendsten Dinge geklärt sind. Zunächst einmal wären da die Themengebiete, die es bei SDL noch zu behandeln gibt: Welche dieser Themen sind eurer Ansicht nach am wichtigsten? Und noch etwas: Ich persönlich denke, daß ein reines Abhandeln der einzelnen SDL-Funktionen ziemlich fad wäre und habe deswegen vor, mehr oder weniger ein kleines Spiel zu programmieren (wie ich ja im Tutorial auch schon erwähnt habe). Das hat zur Folge, daß das Tutorial ab Kapitel 6 immer weniger mit SDL zu tun haben wird (also vielleicht 20% SDL, 80% Spieleprogrammierung). Was haltet ihr davon? cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
001 09.11.2001, 14:57 Hellfire |
- Multithreading |
|
Profil || Suche |
|
002 09.11.2001, 17:40 hausi |
Wegen OGL kannst du auch unter http://nehe.gamedev.net schauen. Findest auch relativ viel. -- |
|
Profil || Suche |
|
003 09.11.2001, 19:07 Jehova-3 |
Dito --Are you gonna miss me ?
|
|
Profil || Suche |
|
004 09.11.2001, 19:10 Prefect |
Naja, es geht ja nicht um OpenGL selbst sondern mehr um das Interface von SDL zu OpenGL. Ich werde natürlich nicht OpenGL selbst komplett behandeln, da würde ich ja noch durchdrehen... cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
005 13.11.2001, 15:58 Lorkes |
Egal was du schreibst, ich werde lesen ^_^ --Dieser Beitrag wurde am 13.11.2001 um 15:58 von Lorkes bearbeitet. |
|
Profil || Suche |
|
006 13.11.2001, 19:21 DarKnight |
Generell Multithreading und erweiterte Animationstechniken *langsamsdlfanwerd* --void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja? |
|
Profil || Suche |
|
007 14.11.2001, 16:43 Prefect |
Was wollt ihr eigentlich alle mit Multithreading? Im Endeffekt hat SDL ja nix mit Multithreading zu tun, und MT ist auch nicht unbedingt das Tollste... aber naja, ich werde wohl mal was zum Thema schreiben :) Allerdings braucht man, um Threading vernünftig erklären zu können, irgendeine Basis, so daß das Threading auch Sinn bringt. Und die Situationen, in denen Threading Sinn macht sind meist recht komplex. cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
008 14.11.2001, 17:30 DarKnight |
Nunja ich sags mal so. Jeder der mal Java programmiert hat und dort mit Threads gearbeitet hat (da smacht man in Java dauernd) wird sich von C ein wenig "verarscht" vorkommen. Denn Multithreading in Java ist so simpel geregelt, dass man es einfach gerne verwendet (ausserdem kommt man bei Internetanwendungen und Spielen wohl kaum drum herum). Bei C (bei reinem C unter DOS gibt es kein Multithreading, deswegen muss man schon in Linux programmiert haben, um zu wissen wie es geht *g*) und C++ (WinAPI) ist MT längst nicht so simpel. Und SDL stellt eine drastische Vereinfachung dar und zwar für C/C++ (soweit ich das auf deren Homepage gelesen habe). Deswegen fände iche s interessant. Nicht für mich persönlich sondern für Leute die gerne mal wissen wollen wie MT funzt und es an einfachen Beispielen lernen wollen. So =) --void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja? |
|
Profil || Suche |
|
009 14.11.2001, 22:51 dp Administrator |
auf jeden fall multithreading und animierte grafiken (war das jetzt oben dabei? -egal) die idee mit dem spiel wäre nicht schlecht aber ich finde es sollte erstmal primär um SDL gehen :) -- |
|
Profil || Suche |
|
010 15.11.2001, 14:36 Prefect |
Ich komme mir etwas seltsam vor, denn ich habe erst vor zwei Tagen einen entsprechenden Rant auf den GameDev-Foren geschrieben. Aber was solls. Die Behauptung, man käme bei Spielen nicht um Threads herum, ist lächerlich, zumindest heutzutage und wahrscheinlich auch noch die nächsten paar Jahre. Es gibt grundsätzlich nur zwei Situationen, in denen man Threads braucht. 1) Du schreibst eine GUI-Anwendung, die eine bestimmte rechen- oder I/O-intensive Arbeit im Hintergrund erledigt. Denkbar ist hier z.B. ein Komprimierungsprogramm, bei dem schonmal im Hintergrund ein paar 100MB oder auch GBs hin- und herverschoben werden. Im Fall dieses Komprimierungsprogramms würdest du dann in einem Thread die GUI managen während der andere den Komprimierungsalgorithmus durchführt. Hierbei werden individuelle Threads verwendet. 2) Ein Hochleistungsprogramm (zumeist ein Server, wobei dieser Fall sogar auf Spiele zutreffen könnte) wird über einen Pool aus Arbeiterthreads gemanagt falls es auf einem Multiprozessorsystem ausgeführt wird. Dadurch kann die Leistung der zusätzlichen Prozessoren ausgenutzt werden. In allen anderen Fällen führt Multithreading zu einer Zunahme an benötigten Betriebssystemen, zusätzlichen Taskswitches und einem Performanceverlust durch die Notwendigkeit von Locks etc... Gerade bei Spielen spielt noch ein weiterer Faktor eine wichtige Rolle. Multithreading ist eine kritische Angelegenheit. Nur weil man zwei Threads auf zwei CPUs laufen hat heißt das noch lange nicht, daß das Programm doppelt so schnell läuft. Dies kann allerhöchstens dann der Fall sein wenn die Threads komplett unabhängig voneinander sind. Dies ist z.B. bei HTTP-Servern fast der Fall, da der Großteil der Zeit mit I/O oder mit dem Parsen und Ausführen von Scripts verbracht wird. Diese Scripts sind natürlich voneinander unabhängig [Anm: Ich rede hier von einem tatsächlich gethreadeten Server, und keinem prozessbasierten wie z.B. Apache] Bei einem IRC-Server ist das aber schon nicht mehr der Fall. Was ist z.B. wenn zwei Ops in einem Channel sind, und es trifft gleichzeit ein "MODE #channel -o anderer_op" von beiden ein? Hierbei handelt es sich um eine Race Condition, und die Threads müssen Critical Sections oder Locks für sich beanspruchen während sie die Operation ausführen, damit es nicht zu Datenkorruption kommt. Je größer die Überlappung der Datenbereiche, auf die die Threads zugreifen, ist, desto mehr solcher Locks braucht man. So gesehen: Für ein richtig großes MMO-Spiel kann Threading durchaus etwas bringen, und vielleicht sehr begrenzt auch etwas für andere Spiele. Generell sind Threads aber bei weitem nicht die Lösung eines Problems, sondern lediglich ein Hilfsmittel zur eigentlichen Lösung. Und gerade bei Spielen sind diese überlappenden Datenbereiche traditionell extrem groß, noch größer als bei einem IRC-Server. So gesehen ist es eigentlich ganz gut, daß Multithreading von C nicht gerade einfach gemacht wird. cu, Widelands - Gemütliche Aufbaustrategie, Free Software Dieser Beitrag wurde am 15.11.2001 um 14:44 von Prefect bearbeitet. |
|
Profil || Suche |
|
011 15.11.2001, 16:48 DarKnight |
Ich habe nicht gesagt, dass man bei der Programmierung von Spielen nicht anders vorgehen kann. Man kann selbstverständlich ein Spiel schreiben, das nur aus dem Game-Loop besteht, keine Frage. Aber (du hast es schon gesagt) was ist, wenn man ein Multiplayer Spiel programmiert? Du kommst bei der Programmierung leistungsfähiger Server garnicht darum herum, Threads zu verwenden. Ein Grossteil der Socket Funktionen (z.B. es gibt auch noch viele andere Beispiele) warten bis sie ihre Aufgabe erledigt haben und kehren dann erst zurück. Und was ist, wenn der Server dabei auch noch rein zufälligerweise Grafik und andere Sachen verwalten muss? Ich würde mal sagen, spielen würde dann unheimlich Spass machen, vor allem wenn das Spiel alle 10 Sekunden stehenbleibt. Du magst das so sehen, dass MT kaum benötigt wird, aber diese Ansicht teile ich in keiner Hinsicht. So =) --void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja? Dieser Beitrag wurde am 15.11.2001 um 20:51 von DarKnight bearbeitet. |
|
Profil || Suche |
|
012 16.11.2001, 14:16 Prefect |
Eben genau deshalb gibt es Non-Blocking-Sockets... Wenn ein MMO-Server auch noch Grafik verwalten muß dann stimmt übrigens etwas am Design nicht. Wenn man für administrative Aufgaben ein graphisches Frontend braucht dann sollte das in Form eines gesondert authorisierten Clients ablaufen. Ich darf nun noch einmal anmerken: Threads erhöhen _nicht_ die Performance, sondern sie erniedrigen sie. Andererseits muß man irgendwie von MP-System Vorteile ziehen können, z.B. im Fall eines MMO. Einfach irgendwelche Threads dann zu implementieren ist aber Quatsch auf Grund der angesprochenen Probleme mit Locks. Im Falle eines MMO ergibts sich aber eine recht elegante Möglichkeit (IMO). Zunächst einmal könnte man Datenbankoperationen in ein gesondertes Programm (oder Thread) auslagern. Zweitens könnte man die Welt in mehrere Abschnitte unterteilen, und diese dann jeweils von einem einzelnen Thread verwalten lassen. Dadurch ließen sich die notwendigen Locks minimieren, da ja nur an den Grenzen Probleme auftreten können. cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |

