Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 16, 2025 15:43

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Dieses Thema ist gesperrt. Du kannst keine Beiträge editieren oder weitere Antworten erstellen.  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: Mo Dez 28, 2009 10:05 
Offline
DGL Member

Registriert: So Dez 27, 2009 14:23
Beiträge: 45
Hallo,

ich nutze D2010 mit eurem dgl und Indy 10. Bis jetzt war alles gut. es fängt jetzt aber die Probleme :)
Ich brauche jetzt ein kleines Chat-Fenster mit UTF8-Support. aber anscheiend nutzt opengl Ansi standarts kann nur mit Ansi-Format texten bearbeiten.

Ein Texture hilft ja auch nicht wirklich, weil die Strings Unicode (mindestens UTF-8) sein werden und eine Konvertierung nach Ansi zur Verlust verursachen.

Ein dynamisch generated Texture wird mir auch eine langsame Lösung. blockiert die Rendering der Szene.

kennt jemand eine elegante Lösung ??


Zuletzt geändert von BawerPower am Mo Dez 28, 2009 14:53, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
BeitragVerfasst: Mo Dez 28, 2009 12:40 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich weiss nicht, wie gut sich die TextSuite mit (Delphi 2010-)Unicode verträgt, aber das wäre auf jeden Fall ein Ansatzpunkt.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
 
BeitragVerfasst: Mo Dez 28, 2009 14:53 
Offline
DGL Member

Registriert: So Dez 27, 2009 14:23
Beiträge: 45
geil!
Es funktioniert auch mit türkischen Charset unter D2010 und in Runtime stört er die Anwendung fast gar nicht.

vielen Dank.


Nach oben
 Profil  
 
BeitragVerfasst: So Feb 14, 2010 20:45 
Offline
DGL Member

Registriert: So Dez 27, 2009 14:23
Beiträge: 45
Falss jemand es noch braucht, da auch im google fast nichts zu finden ist!

Anscheiend hat dglOpenGL etwa probleme mit UnicodeStrings in Opengl.

In diesem Tutorial http://wiki.delphigl.com/index.php/wglUseFontBitmaps wird die Nutzung eines Fonts erklärt.

andere diese CodeLine
Code:
  1. FontLists := glGenLists(256);

wie folgende
Code:
  1. FontLists := glGenLists(512);


und ensprechende Anpassung, die Zeile
Code:
  1. wglUseFontBitmaps (DC, 0, 255, FontLists);

wie folgende ändern
Code:
  1. wglUseFontBitmapsW (DC, 0, 511, FontLists);


kleine Erklärung : mit 512 habe ich erste 512 Characters aus der Font datei holen lassen. könnte aber verschieden sein nach Ihr Wünschfont.

Beim Aufruf des Listes die Parameter GL_UNSIGNED_BYTE als GL_UNSIGNED_SHORT ändern. also
Code:
  1. glCallLists(Length(pText), GL_UNSIGNED_SHORT, Pointer(pText));  // Entsprechende Listen aufrufen


getestet mit D2010. funktioniert perfekt mit Unicode-Strings, auch chinesiche Characters.

EDIT ::: es geht auch mit dglOpengGL wenn man die 'wglUseFontBitmaps' als 'wglUseFontBitmapsW' ersetzt!!! steht nicht im wiki aber in header gibt es noch.


viel Spass


Zuletzt geändert von BawerPower am Di Feb 16, 2010 21:45, insgesamt 3-mal geändert.

Nach oben
 Profil  
 
BeitragVerfasst: So Feb 14, 2010 23:33 
Offline
DGL Member

Registriert: Mo Aug 31, 2009 13:19
Beiträge: 151
Kleine Anmerkung: Der OpenGL-Header, der bei Delphi dabei ist, und dessen Nutzung du hier vorschlägst ist an vielen Stellen fehlerhaft. Näheres steht dazu auch irgendwo hier im Forum in nem Announcement.


Nach oben
 Profil  
 
BeitragVerfasst: Mo Feb 15, 2010 22:21 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Falls die dglOpenGL.pas tatsächlich Probleme mit Unicode hat, dann sollte das gefixt werden.
Allerdings ist der OpenGL-Header von Delphi total kaputt. Er ist veraltet und Funktionen sind nicht OpenGL-Konform benannt. Deshalb kann ich nur von der Nutzung des orginal Delphi-Header abraten.

Anstatt seine Zeit damit zu verschwenden sollte man lieber die DGLOpenGL.pas aufboren.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
 
BeitragVerfasst: Di Feb 16, 2010 19:50 
Offline
DGL Member

Registriert: So Dez 27, 2009 14:23
Beiträge: 45
allererstens, die beide headern zu vergleichen wollte ich eigentlich gar nicht aber anscheind muss ich langsam darüber nachdenken. dglOpenGL zu fixen ist ja natürlich eine Möglichkeit.

jetzt kommt aber noch sclimmeres.
ich habe jetzt mehrere Szenen und will jede Szene als Class in ein DLL reinpacken und bei Bedarf dynamisch die DLL datei aufrufen und ein Instanz von diesem Class holen, da ich bereit ziemlich viele Szene geplannt habe und unnötige Speicherplatze frei lassen will.
Also aus Erfahrung kann ich sagen dass Delphi mit der Methode 'Free' den Speicherplatz freigibt aber diesen freigegebenen Platz nicht für die Nutzung des Betriebssystems zur Verfügüng gestellt, sondern für eigene Nutzung der Applikation. d.h. wenn Ihr ein Objekt mit Free freigibt, bleibt den Speicherplatzt immer noch für die Applikation reserviert. bei nächstem Speicherbedarf der Applikation wird dieser freigegebenen Platzt wieder genutzt. Mit DLL ist die Speicherverwaltung aber nicht so. auch nicht Perfekt aber viel viel besser.

Und jetzt die Frage. hat jemand sowas mit dglOpenGL gemacht?? ich bekomme immer Zugriffsfehler wenn ich dgl in DLL nutze (egal welche funktion ich aufrufe, auch mit glBegin beginnt Fehler) . Aber komischerweise klappt das auch mit opengl headerdatei von delphi. ganz ehrlich klappt mit opengl super.
muss ich noch was einstellen, damit dgl header auch in DLL'S ohne Fehler funktioniert?

Ich bin ja kein OpenGL-FUN vom Delphi, aber will ja auch mein Projekt schnell wie möglich zu realisieren.


Nach oben
 Profil  
 
BeitragVerfasst: Di Feb 16, 2010 20:32 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ganz wichtig ist, dass du nicht die Delphi-OpenGL Header zusammen mit der dglOpenGl.pas benutzt. Wenn du die zusammen nutzt, dann gibt es Fehler. Also, entweder komplett DGL-Header, oder komplett Delphi-Header.

Weiterhin musst du bedenken, dass beim DGL Header zu aller erst eine Initialisierung gemacht werden muss. Als Beispiel kann ich einen Blick ins Template empfehlen, da sieht man was man initialisieren muss.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
 
BeitragVerfasst: Di Feb 16, 2010 20:51 
Offline
DGL Member

Registriert: So Dez 27, 2009 14:23
Beiträge: 45
Flash hat geschrieben:
Ganz wichtig ist, dass du nicht die Delphi-OpenGL Header zusammen mit der dglOpenGl.pas benutzt. Wenn du die zusammen nutzt, dann gibt es Fehler. Also, entweder komplett DGL-Header, oder komplett Delphi-Header.
genau so ist es ja auch. ich habe nicht anders gemacht als alle dglOpenGL headern in DLL als OpenGL zu ersetzen. übrigens, bis der Fehler aufgetreten ist war ja auch überall dglOpenGL auer einer Fontdatei wegen Unicode. nur dort war opengl allein genutzt.



Flash hat geschrieben:
Weiterhin musst du bedenken, dass beim DGL Header zu aller erst eine Initialisierung gemacht werden muss. Als Beispiel kann ich einen Blick ins Template empfehlen, da sieht man was man initialisieren muss.

Also, die Initialisierung befindet sich in Hauptprogramm. Höchstwahrscheinlich tritt er wegen Initialisierung aber wie kann ich diese Initialisierung auch zu DLL mitteilen so dass er mit dieser initialisierte context weiter arbeiten kann? InitOpenGL, CreateRenderingContex und ActivateRenderingContex wird ja in Hauptprogramm aufgerufen. Auserdem, im Hauptprogramm ist ja überall immer noch dglOpenGL eingebunden.

oder soll ich mal die Initialisierung auch in der DLL aufrufen ??

EDIT: jep, in DLL habe ich nur InitOpenGL und ActivateRenderingContex noch mal aufgerufen, mit der gleiche DC und RC Parametern, die vom Huptprogramm weitergegeben werden. klappt jetzt.

das mit dem Unicode geht jetzt auch mit dglOpenGL.


Nach oben
 Profil  
 
BeitragVerfasst: Di Feb 16, 2010 22:36 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
BawerPower hat geschrieben:
übrigens, bis der Fehler aufgetreten ist war ja auch überall dglOpenGL auer einer Fontdatei wegen Unicode. nur dort war opengl allein genutzt.

Wenn du DGLOpenGL.pas nutzt, kannst du keinen anderen Header verwenden. Egal wo dieser andere Header eingebunden wird. Falls dort eine OpenGL Funktion aufgerufen wird, wird mit großer Wahrscheinlichkeit ein Fehler erzeugt.

Aber ich stell nochmal die Frage in den Raum an die anderen DGLer: Stimmt das was ich schreibe bezüglich 2Headern?

BawerPower hat geschrieben:
oder soll ich mal die Initialisierung auch in der DLL aufrufen ??

EDIT: jep, in DLL habe ich nur InitOpenGL und ActivateRenderingContex noch mal aufgerufen, mit der gleiche DC und RC Parametern, die vom Huptprogramm weitergegeben werden. klappt jetzt.

Ich wusste nicht, dass das nötig ist (Ich benutze selbst kein Delphi sondern Java). Aber gut, dass du das herausgefunden hast.

BawerPower hat geschrieben:
das mit dem Unicode geht jetzt auch mit dglOpenGL.

Hast du etwas am Header ändern müssen, oder wo lag das Problem?
Nützliche Änderungen/Verbesserungen am Header übernehmen wir sehr gern.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
 
BeitragVerfasst: Di Feb 16, 2010 23:02 
Offline
DGL Member

Registriert: So Dez 27, 2009 14:23
Beiträge: 45
Zitat:
Aber ich stell nochmal die Frage in den Raum an die anderen DGLer: Stimmt das was ich schreibe bezüglich 2Headern?
ja das stimmt. wenn du allererstens die Initialisierung aufrufst so wie ich gemacht habe, tritt dann kein Fehler auf, egal ob der Compiler dglopenl oder opengl nutzt. Aber ich denke mal wenn man keine initialisierung für dglOpenGL vornimmt und beide header hizufügt, dann nutzt delphi zuerst sein opengl header (getestet habe ich nicht da ich die initialisierung immer in ersten reihe gemacht habe)

Zitat:
Hast du etwas am Header ändern müssen, oder wo lag das Problem?
Nützliche Änderungen/Verbesserungen am Header übernehmen wir sehr gern.

Nein! Mit einem Blick in Windows header bin zu 'wglUseFontBitmapsW' gelandet
was auch in dglOpenGL header drin ist aber mich nicht in Wiki getroffen hat.
einfach mal 'wglUseFontBitmaps' mit 'wglUseFontBitmapsW' ersezten.
den Rest bleibt gleich wie oben beschrieben.


Nach oben
 Profil  
 
BeitragVerfasst: Mi Feb 17, 2010 12:45 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Mehrere Header: Es ist egal wie viele Header man verwendet. Die Header machen nichts anderes als einen Methodenpointer von OpenGL zu erfragen und diesen bei Bedarf aufzurufen. Als Entwickler muss man aber aufpassen, dass die Header zur richtigen Zeit geladen und aufgerufen werden. Die TextSuite benutzt nur ihren eigenen Header und die glBitmap hat sowohl einen eigenen bzw kann auch die dglOpenGL verwenden. Und damit gibt es keine Probleme. Wichtig ist nur, dass die zusätzlichen Header die Funktionspointer erst dann laden, wenn der RC erstellt wurde. Der Code muss auch passend aufgerufen werden aber das versteht sich wohl von selbst. Der Rest ist total egal.

Welchen Header man benutzt kann man steuern in dem man die Unit vor die Funktion schreibt. Also dglOpenGL.glBegin(). Bzw wird das dadurch beeinflusst welcher Header als Letztes eingebunden wurde. "Uses opengl, dglOpenGL;" nutzt zu erst die dglOpenGL.

BawerPower: Ich sage es ja nur ungern. Aber dein Thema wirkt auf mich ziemlich verwirrend. Wenn du eine Frage hast die nicht zu deiner Ausgangsfrage gehört, dann sei bitte das nächste Mal so gut und erstelle ein zusätzliches Thema.

Obendrein verstehe ich nicht wieso du urplötzlich bei wglUseFontBitmaps gelandet bist. Denn die Bitmapsfonts sind schlicht grotten langsam, bieten keine Gestaltungsmöglichkeiten und sind noch ziemlich hässlich. Und deine Aussagen beißen sich in meinen Augen irgendwie auch etwas. Du erstellst eine Liste mit 512 Einträgen. So weit so klar. Du erstellst dort auch die ersten 512 Zeichen hinein. Auch klar. Allerdings dann hast du keine Probleme chinesische Zeichen darzustellen? Alleine um eine chinesische Tageszeitung lesen zu können benötigt man schon 3000-5000 verschiedene Zeichen. Und ich kann mir nur schwer vorstellen, dass die in deinen 512 Listenplätze (inklusive Ansisatz) hineinpassen. Von daher bin ich mir nicht sicher ob du da nicht was verdreht hast. ;)


Nach oben
 Profil  
 
BeitragVerfasst: Mi Feb 17, 2010 14:33 
Offline
DGL Member

Registriert: So Dez 27, 2009 14:23
Beiträge: 45
Lossy eX hat geschrieben:
BawerPower: Ich sage es ja nur ungern. Aber dein Thema wirkt auf mich ziemlich verwirrend. Wenn du eine Frage hast die nicht zu deiner Ausgangsfrage gehört, dann sei bitte das nächste Mal so gut und erstelle ein zusätzliches Thema.

das merkt man ja aber wenn ich wüsste dass das Thema in der Richtung geht dann hättest du ja Recht.

Lossy eX hat geschrieben:
Obendrein verstehe ich nicht wieso du urplötzlich bei wglUseFontBitmaps gelandet bist.

Ich hatte irgendwo ein Beispiel gefunden, das mit Unicode funktioniert. Es war aber mit der Sprache 'D' gescrieben. Durch die Code bin ich zur wglUseFontBitmaps gestossen, was bei dglopengl mit unicode nicht geht aber mit opengl schon. wenn man kein dglopengl nutzt dann sieht man dass die funktion wglusefontbitmaps sich in Windows header befindet (also nicht in opengl header), und die funktion wglusefontbitmapsW von opengl aufruft obwohl die Namen verschieden sind!

Lossy eX hat geschrieben:
Denn die Bitmapsfonts sind schlicht grotten langsam, bieten keine Gestaltungsmöglichkeiten und sind noch ziemlich hässlich

kann ja langsam sein aber ganz wichtig für mich, mit OutLineFonts geht Unicode immer noch nicht, und das Aussehen mit Bitmapsfont ist für mich gar nicht schlecht da ich es nur für Chat-Fenster nutze. das Verdammt ist, dass ich jetzt eigene Komponente wie TGLLabel, TGLEdit schreiben muss was die Komponente TEdit, TLabel, etc,... simulieren und Unicode brauchen.

Lossy eX hat geschrieben:
Alleine um eine chinesische Tageszeitung lesen zu können benötigt man schon 3000-5000 verschiedene Zeichen.

wie oben beschrieben, mir reicht UTF-8!! für türkishe Characterset!!! ich selbst verstehe kein chinesisch, aber oben steht auch die Lösüng für chinesisch. das mit 512 war ja auch oben beschrieben dass es nach wünschfont verschieden sein kann. also nicht jede fontdatei beinhaltet so viele Chars. Auserdem wenn man nicht nutzen will sollte man auch nicht ganzes im speicher zu laden.

Lossy eX hat geschrieben:
Von daher bin ich mir nicht sicher ob du da nicht was verdreht hast. ;)

Ich bitte auch ungern, von unnötigen Kommentaren zu vermeiden, da ich wirklich solche Polemiken nicht mag und nur mein Projekt richtig, sauber fertigen will. Es nutzt ja nichts wenn man sich nur beschwerdet und keine Lösüng bietet! Lasst einfach mal den Platz frei, damit anderen auch nicht viel Zeit verschwenden müssen um etwas nützliches in Forums raus zu finden!


Nach oben
 Profil  
 
BeitragVerfasst: Mi Feb 17, 2010 20:15 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich glaube du hast Lossy falsch verstanden.

Er wollte bestimmt nicht dein Projekt polemisch "abfertigen".

Seine Vermutung gingen wohl in die Richtung, dass du ganz allgemein, einfach nur Text ausgeben willst und dafür ist der von dir gewählte Ansatz nicht optimal.

Das weiß Lossy auch deshalb sehr genau, weil er eine Bibliothek geschrieben hat, die ganz hervoragend Text rendert: Die TextSuite.
Hast du die schonmal ausprobiert? (Ist hier im Forum als Projekt vorgestellt worden)

Polemik gehört bei uns nicht zum üblichen Foren-Umgangston.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
 
BeitragVerfasst: Mi Feb 17, 2010 21:25 
Offline
DGL Member

Registriert: So Dez 27, 2009 14:23
Beiträge: 45
so schlimm hatte ich eigentlich auch nicht gemeint. Eure Sprache ist aber auch nicht kinderleicht:) also bin Ausländer und erst seit 5 Jahren habe ich angefangen, eure Sprache zu lernen. wenn ich etwas falsch schreibe oder etwas anders gemeint habe als ich wollte, bitte ich um Verständnis:)

und zu Textsuite, die hatte ich ja auch probiert. mit der klappt ja Textausgabe. aber war nicht stabil insbesonders wenn ich rumspielen wollte. auserdem war auch nicht genug schnell mit meiner Applikation wie ich wollte. wie gesagt ich will die Texte ganz einfach klein und richtig schnell darstellen.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Dieses Thema ist gesperrt. Du kannst keine Beiträge editieren oder weitere Antworten erstellen.  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 16 Queries | GZIP : On ]