Auf dem Weg von DDraw nach OpenGL ..
- HeinzK
- Establishment
- Beiträge: 234
- Registriert: 05.11.2009, 08:37
- Benutzertext: ZwiAner
- Echter Name: Heinz Kempter
- Wohnort: Wald
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Ok .. glu.h und GLU eingebaut und es funktioniert.
Wo liegen unter Linux eigentlich die Lib's und h-Dateien (also glu.h bzw. glu.lib)?
Wo liegen unter Linux eigentlich die Lib's und h-Dateien (also glu.h bzw. glu.lib)?
Es ist leichter, einen Sack Flöhe zu hüten.
Re: Auf dem Weg von DDraw nach OpenGL ..
Oder aber glOrtho():
gluOrtho2D sets up a two-dimensional orthographic viewing region. This is equivalent to calling glOrtho with near=-1 and far=1.
- HeinzK
- Establishment
- Beiträge: 234
- Registriert: 05.11.2009, 08:37
- Benutzertext: ZwiAner
- Echter Name: Heinz Kempter
- Wohnort: Wald
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Danke für den Hinweis.
Es ist leichter, einen Sack Flöhe zu hüten.
Re: Auf dem Weg von DDraw nach OpenGL ..
Das ist nicht immer ganz einheitlich. Nach dem FHS (Filesystem Hierarchy Standard) befinden sich die Header und Libs für das System selber unter /usr/include und /usr/lib (oft auch /usr/lib64). Manchmal wird aber auch /usr/TARGET/lib usw. für das Standardtarget genutzt. Das Target das st so etwas wie i386-linux-gnu. Wenn man Libs selber compiliert haben diese auch oft als Ziel /usr/local/lib. Eine Distribution kann das allerdings auch ganz anders machen.HeinzK hat geschrieben:Wo liegen unter Linux eigentlich die Lib's und h-Dateien (also glu.h bzw. glu.lib)?
- HeinzK
- Establishment
- Beiträge: 234
- Registriert: 05.11.2009, 08:37
- Benutzertext: ZwiAner
- Echter Name: Heinz Kempter
- Wohnort: Wald
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Ok, dann werde ich diese auf finden .. und weiter im Text:
Linux/Ubuntu/OpenGL: Ist es richtig, dass am Programmende keine Resourcen (Window, OpenGL) freigegeben werden müssen?
Linux/Ubuntu/OpenGL: Ist es richtig, dass am Programmende keine Resourcen (Window, OpenGL) freigegeben werden müssen?
Es ist leichter, einen Sack Flöhe zu hüten.
- Aramis
- Moderator
- Beiträge: 1458
- Registriert: 25.02.2009, 19:50
- Echter Name: Alexander Gessler
- Wohnort: 2016
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
hmm ja, Resourcen muesstest du eigentlich schon freigeben. Fuer die ganzen X11–Objekte gibt es meist entsprechende Loesch-Funktionen, z.B. XFreeColormap, XDestroyWindow, XCloseDisplay
- HeinzK
- Establishment
- Beiträge: 234
- Registriert: 05.11.2009, 08:37
- Benutzertext: ZwiAner
- Echter Name: Heinz Kempter
- Wohnort: Wald
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Gut zu wissen, in meinem vorliegenden Beispiel hat sich keiner darum gekümmert.
Es ist leichter, einen Sack Flöhe zu hüten.
- HeinzK
- Establishment
- Beiträge: 234
- Registriert: 05.11.2009, 08:37
- Benutzertext: ZwiAner
- Echter Name: Heinz Kempter
- Wohnort: Wald
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Ich habe versucht meine erste Klasse unter Linux/C++ entwerfen:
Ist es das, was ich fürchte .. es gibt kein CObject unter Linux .. oder was habe ich falsch gemacht?
/home/hk/TestOpenGL/KOpenGL.h|2|error: expected class-name before ‘{’ token|
||=== Build finished: 1 errors, 0 warnings ==pe
Code: Alles auswählen
class CKOpenDisplay : public CObject
{
public:
CKOpenDisplay(void);
virtual ~CKOpenDisplay(void);
private:
};
/home/hk/TestOpenGL/KOpenGL.h|2|error: expected class-name before ‘{’ token|
||=== Build finished: 1 errors, 0 warnings ==pe
Es ist leichter, einen Sack Flöhe zu hüten.
- Aramis
- Moderator
- Beiträge: 1458
- Registriert: 25.02.2009, 19:50
- Echter Name: Alexander Gessler
- Wohnort: 2016
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
CObject gehoert zu MFC. Die gibt es unter Linux nicht, und auch unter Windows wuerde ich davon abraten. Entweder ueberhaupt keine Basisklasse … oder eine selbstgebastelte, falls alle deine Klassen sich gewisse Verhaltensweisen teilen.
- HeinzK
- Establishment
- Beiträge: 234
- Registriert: 05.11.2009, 08:37
- Benutzertext: ZwiAner
- Echter Name: Heinz Kempter
- Wohnort: Wald
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Das Problem ist .. ich verliere ohne CObject das Serialize .. war bisher Bequem und einfach damit alle Variablen incl. Objektzeiger zu speichern und zu laden .. jammerschade ..
PS:
Ich bin für eine LFC (Linux Foundation Classes) !
PS:
Ich bin für eine LFC (Linux Foundation Classes) !
Es ist leichter, einen Sack Flöhe zu hüten.
- Aramis
- Moderator
- Beiträge: 1458
- Registriert: 25.02.2009, 19:50
- Echter Name: Alexander Gessler
- Wohnort: 2016
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Ja, Serialisierung wirst du dir wohl selber basteln muessen. boost.serialization kann dabei vielleicht helfen.
- HeinzK
- Establishment
- Beiträge: 234
- Registriert: 05.11.2009, 08:37
- Benutzertext: ZwiAner
- Echter Name: Heinz Kempter
- Wohnort: Wald
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Ok, danke für den Hinweis mit dem 'serialize'. Für heute ist Schluss, das alles muss ich zuerst einmal verkraften ..
Es ist leichter, einen Sack Flöhe zu hüten.
- HeinzK
- Establishment
- Beiträge: 234
- Registriert: 05.11.2009, 08:37
- Benutzertext: ZwiAner
- Echter Name: Heinz Kempter
- Wohnort: Wald
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Ich hab' heut nacht im Traum 'Serialize' programmiert .. und glaub', so könnt es sogar klappen.
Frage:
Bisher habe ich CString genutzt. Als Ersatz habe ich mal mit std::string 'gespielt'.
OK, was ich nutze, ist fast alles vorhanden, außer 'Format'.
Beispiel:
Wie löst man das am effektivsten mit std::string?
Frage:
Bisher habe ich CString genutzt. Als Ersatz habe ich mal mit std::string 'gespielt'.
OK, was ich nutze, ist fast alles vorhanden, außer 'Format'.
Beispiel:
Code: Alles auswählen
CString sText;
sText.Format("%s%d%0.5f", "Test", 100, 4.5);
Es ist leichter, einen Sack Flöhe zu hüten.
- Aramis
- Moderator
- Beiträge: 1458
- Registriert: 25.02.2009, 19:50
- Echter Name: Alexander Gessler
- Wohnort: 2016
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Mit std::stringstream:
Das kann man auch noch geschickt wrappen um die Konstruktion des temporaeren stringstream's zu verbergen. Alternativ, wenn du naeher an CString::Format bleiben willst, boost.format. Bietet ebenso wie std::stringstream Typsicherheit.
Ansonsten gibt es noch sprintf, eine Hilfsfunktion aus der C–Standardbibliothek. Du kannst deine Strings in einem statischen Buffer zusammenbasteln und dann in einen std::string konvertieren (das ist von den Genannten die unidiomatischte Methode, und die gefaehrlichste).
Code: Alles auswählen
std::stringstream ss;
ss << 4.f << " ist eine tolle Zahl";
const std::string s = ss.str();
Ansonsten gibt es noch sprintf, eine Hilfsfunktion aus der C–Standardbibliothek. Du kannst deine Strings in einem statischen Buffer zusammenbasteln und dann in einen std::string konvertieren (das ist von den Genannten die unidiomatischte Methode, und die gefaehrlichste).
- HeinzK
- Establishment
- Beiträge: 234
- Registriert: 05.11.2009, 08:37
- Benutzertext: ZwiAner
- Echter Name: Heinz Kempter
- Wohnort: Wald
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Ich bin am experimentieren.
Im Moment bin ich auf gutem Weg eine Lösung zu finden.
Problem:
Unbehandelte Ausnahme ... std::bad_alloc ..
Habe ich da ein Problem, weil ich mit 'new' und 'delete' arbeite? Oder was ist los.
Was ich eigentlich machen will:
Also einfach ein CharArray eine std::string zuordnen. Was mach ich da falsch? Oder geht auch das nicht?
Im Moment bin ich auf gutem Weg eine Lösung zu finden.
Problem:
Code: Alles auswählen
std::stringstream ss;
Habe ich da ein Problem, weil ich mit 'new' und 'delete' arbeite? Oder was ist los.
Was ich eigentlich machen will:
Code: Alles auswählen
char *cBuff = new char[256];
..
std::string sFrm(cBuff);
Es ist leichter, einen Sack Flöhe zu hüten.
- kimmi
- Moderator
- Beiträge: 1405
- Registriert: 26.02.2009, 09:42
- Echter Name: Kim Kulling
- Wohnort: Luebeck
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Der char-Array sollte NULL-terminiert sein.
Gruß Kimmi
Gruß Kimmi
- HeinzK
- Establishment
- Beiträge: 234
- Registriert: 05.11.2009, 08:37
- Benutzertext: ZwiAner
- Echter Name: Heinz Kempter
- Wohnort: Wald
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Bin kurz vor der Lösung meines Problems (hoffe ich). Es scheint an 'new/delete' kontra 'malloc/free' zu liegen.
Ich vermute std::string arbeitet mit 'malloc/free' und ich habe den char* mit 'new/delete' angelegt. Sobald es läuft (oder auch nicht) melde ich mich wieder.
Ich vermute std::string arbeitet mit 'malloc/free' und ich habe den char* mit 'new/delete' angelegt. Sobald es läuft (oder auch nicht) melde ich mich wieder.
Es ist leichter, einen Sack Flöhe zu hüten.
- Aramis
- Moderator
- Beiträge: 1458
- Registriert: 25.02.2009, 19:50
- Echter Name: Alexander Gessler
- Wohnort: 2016
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Nein.
Dein Fehler ist, dass dir das RAII-Konzept (siehe Wikipedia) nicht gelaeufig ist. Dahinter steht, vereinfacht, die automatische Verwaltung von Resourcen durch den Konstruktor/Destruktor Mechanismus von C++.
Wenn du deine Objekte sauber designst, musst du so gut wie *nie* Speicher manuell erzeugen oder freigeben. Die STL, zu der std::string zaehlt, ist ein Paradebeispiel dafuer. Welchen Allokator dein String intern benutzt um seinen Buffer anzulegen, ist irrelevant – du kriegst davon gar nichts mit.
Nicht DU musst Speicher anlegen und dem String geben. Sondern der String legt fuer sich selber den Speicher an, den er benoetigt – und gibt ihn frei, sobald er selber zerstoert wird. Wenn du dem c‘tor eine Zeichenkette uebergibst, so versucht er eine Kopie davon zu erstellen und sieht diese fortan als sein Eigentum an.
(vermutlich war der Speicherbereich, den du versucht hast an den String zu ‘binden’, undefiniert – der Versuch davon eine Kopie zu machen knallt also mit hoher Wahrscheinlichkeit, da die Laenge des Strings ja von der Praesenz eines Null-Zeichens am Ende abhaengt)
Dein Fehler ist, dass dir das RAII-Konzept (siehe Wikipedia) nicht gelaeufig ist. Dahinter steht, vereinfacht, die automatische Verwaltung von Resourcen durch den Konstruktor/Destruktor Mechanismus von C++.
Wenn du deine Objekte sauber designst, musst du so gut wie *nie* Speicher manuell erzeugen oder freigeben. Die STL, zu der std::string zaehlt, ist ein Paradebeispiel dafuer. Welchen Allokator dein String intern benutzt um seinen Buffer anzulegen, ist irrelevant – du kriegst davon gar nichts mit.
Nicht DU musst Speicher anlegen und dem String geben. Sondern der String legt fuer sich selber den Speicher an, den er benoetigt – und gibt ihn frei, sobald er selber zerstoert wird. Wenn du dem c‘tor eine Zeichenkette uebergibst, so versucht er eine Kopie davon zu erstellen und sieht diese fortan als sein Eigentum an.
(vermutlich war der Speicherbereich, den du versucht hast an den String zu ‘binden’, undefiniert – der Versuch davon eine Kopie zu machen knallt also mit hoher Wahrscheinlichkeit, da die Laenge des Strings ja von der Praesenz eines Null-Zeichens am Ende abhaengt)
Code: Alles auswählen
void foo(..)
{
// erstellt eine Kopie des Strings 'ahoi' und legt sie im Objekt ab
std::string s = "ahoi";
// erstellt eine unaebhaengige Kopie des Objektes
std::string s2 = s;
// std::string definiert den '+'–Operator um zwei Strings zu verknuepfen.
// das Ergebnis ist ein dritter, der wieder fuer sich selber Speicher anlegt.
std::string s3 = s2+s;
// genau jetzt wird der d'tor der strings aufgerufen. Aller Speicher wird freigegeben.
}
- HeinzK
- Establishment
- Beiträge: 234
- Registriert: 05.11.2009, 08:37
- Benutzertext: ZwiAner
- Echter Name: Heinz Kempter
- Wohnort: Wald
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Ja, das habe ich verstanden. Mein Problem war einen char* nach std::string zu konvertieren.
Ich habe es nun gelöst, in dem ich eine eigene String-Klasse angelegt habe. Diese wird die
von mir benutzten Methoden von CString mit Hilfe von std::string nachbilden.
Vorerst habe ich das Problem mit Visual Studio bearbeitet .. und es läuft. Nun werde
ich es auf Linux/Ubuntu portieren .. melde mich wieder.
Ich habe es nun gelöst, in dem ich eine eigene String-Klasse angelegt habe. Diese wird die
von mir benutzten Methoden von CString mit Hilfe von std::string nachbilden.
Vorerst habe ich das Problem mit Visual Studio bearbeitet .. und es läuft. Nun werde
ich es auf Linux/Ubuntu portieren .. melde mich wieder.
Es ist leichter, einen Sack Flöhe zu hüten.
- HeinzK
- Establishment
- Beiträge: 234
- Registriert: 05.11.2009, 08:37
- Benutzertext: ZwiAner
- Echter Name: Heinz Kempter
- Wohnort: Wald
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Geschafft, ein erster Entwurf von CKString ist im 'Kasten'.
Ergebnis:
Für alle die es testen wollen:
http://www.zwianer.de/$PCSpiel$/Problem ... String.zip
Mt CKString kann ich CString in meinem Quelltexten für Windows und Linux ersetzen. :D
Code: Alles auswählen
CKString sKStr1("Test1");
cout << "A: " << sKStr1.GetsStr() << endl;
int iLen = sKStr1.GetLength();
cout << "B: " << iLen << endl;
CKString *pKStr2 = new CKString("Test2");
CKString sKStr3;
sKStr3 = pKStr2->GetsStr();
if (pKStr2 != NULL)
{
delete pKStr2;
pKStr2 = NULL;
}
cout << "C: " << sKStr3.GetsStr() << endl;
CKString sKStr4;
sKStr4.SetsKString("Test4");
sKStr4 = sKStr4.Left(2);
cout << "D: " << sKStr4.GetsStr() << endl;
CKString sKStr5;
sKStr5.SetsKString("Test5");
sKStr5 = sKStr5.Right(3);
cout << "E: " << sKStr5.GetsStr() << endl;
CKString sKStr6("Test6");
sKStr6 = sKStr6.Mid(1, 3);
cout << "F: " << sKStr6.GetsStr() << endl;
CKString sKStr7("TestCompare");
CKString sKStr8("TestCompare");
int iCmp = sKStr7.Compare(sKStr8);
cout << "G: " << iCmp << endl;
sKStr8.SetsKString("TestCom");
iCmp = sKStr7.Compare(sKStr8);
cout << "H: " << iCmp << endl;
sKStr8.SetsKString("TestComparer");
iCmp = sKStr7.Compare(sKStr8);
cout << "I: " << iCmp << endl;
CKString sKStr9;
sKStr9.Format("%s %d %0.3f", "Test1", 100, 1.23456789);
cout << "J: " << sKStr9.GetsStr() << endl;
Für alle die es testen wollen:
http://www.zwianer.de/$PCSpiel$/Problem ... String.zip
Mt CKString kann ich CString in meinem Quelltexten für Windows und Linux ersetzen. :D
Zuletzt geändert von HeinzK am 24.09.2010, 14:17, insgesamt 1-mal geändert.
Es ist leichter, einen Sack Flöhe zu hüten.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
::std::string::empty() ist da um zu testen, ob der String leer ist. Um den String zu leeren (was sowieso nicht nötig ist, dafür sorgt der Konstruktor) gibt es ::std::string::clear().
Gruß, Ky
Gruß, Ky
- HeinzK
- Establishment
- Beiträge: 234
- Registriert: 05.11.2009, 08:37
- Benutzertext: ZwiAner
- Echter Name: Heinz Kempter
- Wohnort: Wald
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Das ist ein Unterschied zu CString:
CString::Empty leert den String und gibt den Speicher frei.
Der Test auf 'Leer' wird über CString::GetLength() gemacht.
Aber danke für diesen Hinweis. Diesen Unterschied hätte ich wahrscheinlich erst beim debuggen entdeckt.
PS:
Das Freigeben des Speichers kann durchaus Sinn machen, wenn z.Bsp. der String nur vorübergehend nicht mehr benutzt wird.
CString::Empty leert den String und gibt den Speicher frei.
Der Test auf 'Leer' wird über CString::GetLength() gemacht.
Aber danke für diesen Hinweis. Diesen Unterschied hätte ich wahrscheinlich erst beim debuggen entdeckt.
PS:
Das Freigeben des Speichers kann durchaus Sinn machen, wenn z.Bsp. der String nur vorübergehend nicht mehr benutzt wird.
Es ist leichter, einen Sack Flöhe zu hüten.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Du kannst den Speicher nicht mit Sicherheit freigeben – die Größe des Strings wird zwar auf 0 gesetzt, intern bleibt aber noch was allokiert (.c_str() muss ja z.B. auch für leere Strings zumindest einen Zeiger auf eine Null zurückgeben). Und im Default-Konstruktor, von dem aus du .empty() aufgerufen hast, ist der String sowieso von Anfang an in diesem Zustand.
- HeinzK
- Establishment
- Beiträge: 234
- Registriert: 05.11.2009, 08:37
- Benutzertext: ZwiAner
- Echter Name: Heinz Kempter
- Wohnort: Wald
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Ok, danke für die Hinweise.
Es ist leichter, einen Sack Flöhe zu hüten.
- Aramis
- Moderator
- Beiträge: 1458
- Registriert: 25.02.2009, 19:50
- Echter Name: Alexander Gessler
- Wohnort: 2016
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Genau genommen gehen die meisten std::string–Implementierungen so vor, dass fuer kleinere Strings ein statischer Buffer direkt im String–Objekt zum Einsatz kommt (MSVC veranschlagt ~16Bytes). std::string::clear() trifft keine Aussage in Bezug auf den Speicherverbrauch, sondern setzt nur die Laenge des Strings zurueck auf 0.Das Freigeben des Speichers kann durchaus Sinn machen, wenn z.Bsp. der String nur vorübergehend nicht mehr benutzt wird.
- HeinzK
- Establishment
- Beiträge: 234
- Registriert: 05.11.2009, 08:37
- Benutzertext: ZwiAner
- Echter Name: Heinz Kempter
- Wohnort: Wald
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Code: Alles auswählen
#ifdef _WIN32
#include "stdafx.h"
#else
#include "/media/D_DRIVE/Kempter/VC9/ZwiAnerOpenGL/Linux/Tests/TestKString/main.h"
#endif
Mache ich etwas falsch, oder ist es prinzipiell nicht möglich #ifdef und #include zu mischen?
Was ist die Alternative?
Es ist leichter, einen Sack Flöhe zu hüten.
- Aramis
- Moderator
- Beiträge: 1458
- Registriert: 25.02.2009, 19:50
- Echter Name: Alexander Gessler
- Wohnort: 2016
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Doch, das ist moeglich. Dein Beispiel inkludiert stdafx.h wenn _WIN32 definiert ist, andernfalls diesen schrecklichen Absolutpfad (wieso nicht einfach den Pfad als zusaetzlichen Includepfad an den Compiler uebergeben [gcc: -I<pfad>]).Mache ich etwas falsch, oder ist es prinzipiell nicht möglich #ifdef und #include zu mischen?
- HeinzK
- Establishment
- Beiträge: 234
- Registriert: 05.11.2009, 08:37
- Benutzertext: ZwiAner
- Echter Name: Heinz Kempter
- Wohnort: Wald
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Nein, das tut es nicht. Ich erhalte unter Windows einen fatal error C1019: Unerwartetes #else!
Den 'schrecklichen Absolutpfad' brauche ich im Moment für Ubuntu.
Ich versuche ja im Moment gemeinsam von Windows und Linux auf die gleiche Datei zuzugreifen.
Den 'schrecklichen Absolutpfad' brauche ich im Moment für Ubuntu.
Ich versuche ja im Moment gemeinsam von Windows und Linux auf die gleiche Datei zuzugreifen.
Es ist leichter, einen Sack Flöhe zu hüten.
- Aramis
- Moderator
- Beiträge: 1458
- Registriert: 25.02.2009, 19:50
- Echter Name: Alexander Gessler
- Wohnort: 2016
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Doch, tut es :-) Der Fehler muss an anderer Stelle liegen.Nein, das tut es nicht.
Vielleicht fehlt am Ende der stdafx.h etwas. Die wird ja schließlich an genau der Stelle in den Quelltext eingefuegt. Wenn sie z.B so aussieht:Ich erhalte unter Windows einen fatal error C1019: Unerwartetes #else!
Code: Alles auswählen
#endif
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Auf dem Weg von DDraw nach OpenGL ..
Ins Blaue: Deine Line-Endings sind nicht konsistent, weil du die Datei sowohl unter Windows als auch unter Linux bearbeitet hast.