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

Aktuelle Zeit: Di Mai 14, 2024 06:35

Foren-Übersicht » DGL » Feedback
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: Mo Feb 13, 2006 20:03 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Feb 13, 2006 19:32
Beiträge: 20
Hallo,

super Tutorials habt ihr hier! Man kann ja gleich richtig loslegen!
Ich hab' mir bei den Templates jetzt das für zwei unabhängige Rendercontexte heruntergeladen. Das wär' genau, die Funktionalität, die ich suche:

OpenGL 1.2 Template (VCL) für zwei RenderContext
http://www.delphigl.com/do_download.php?f=3333

Aber da gibt's einen Laufzeitfehler in der Prozedur
Code:
  1.  Form1.Show

an dieser Stelle:
Code:
  1.  readExtensions;

Wenn ich den Funktionsaufruf auskommentiere, wird das Formular zwar angezeigt, aber dann kommt der Laufzeitfehler beim Beenden.
Was ist zu tun ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 13, 2006 21:55 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hmpf...Ohne 100% sicher zu sein: Ich glaube das Template basiert noch auf dem OpenGL12 Header, Ich schätze einfach mal, dass du DGLOpenGL.pas benutzt (Was zu beführworten ist) und irgendwas muss noch angepasst werden, damit der neue Header und das alte Template zusammenspielen.

Aber was ist die Frage.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 14, 2006 18:06 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Ähm ich glaube, man muss das ClearExtensions oder so ähnlich ne Zeile drüber auskommentieren.

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 30, 2006 12:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Feb 13, 2006 19:32
Beiträge: 20
Hallo,

der Laufzeitfehler in ClearExtensions wird ausgelöst in der unit sdl in der Zeile 3367 (in dem code-Schnippsel in der Zeile, in der "external" steht).
Das übersteigt mein Delphi-Wissen jetzt ganz eindeutig - kann jemand da draussen weiter helfen?

Code:
  1.  
  2. { Get the address of a GL function (for extension functions) }
  3. function SDL_GL_GetProcAddress(procname: PChar) : Pointer;
  4. cdecl;
  5. external {$IFDEF __GPC__}name 'SDL_GL_GetProcAddress'{$ELSE} SDLLibName{$ENDIF __GPC__};
  6. {$EXTERNALSYM SDL_GL_GetProcAddress}
  7.  


InitOpenGL wurde vorher bereits in Form.Create aufgerufen.

dort drüber (in der sdl) steht der Kommentar:
Code:
  1.  
  2. {------------------------------------------------------------------------------}
  3. { OpenGL Routines                                                              }
  4. {------------------------------------------------------------------------------}
  5.  
  6. { Dynamically load a GL driver, if SDL is built with dynamic GL.
  7.  
  8.   SDL links normally with the OpenGL library on your system by default,
  9.   but you can compile it to dynamically load the GL driver at runtime.
  10.   If you do this, you need to retrieve all of the GL functions used in
  11.   your program from the dynamic library using SDL_GL_GetProcAddress().
  12.  
  13.   This is disabled in default builds of SDL. }
  14.  


... kennt sich damit jemand aus ?

Gruss,
ölgötz


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 30, 2006 13:08 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3827
Wohnort: Tespe (nahe Hamburg)
Nun bin ich ein wenig irritiert. Wenn der Aufruf InitOpenGL zu beginn erfolgt, sollte es eigentlich keine Probleme geben, da alles dynamisch geladen wird. Was mich allerdings ein wenig verwundert ist, wie das SDL dort herein spielt. Versuchst Du eine SDL-Anwendung oder eine VCL-Anwendung mit zwei RC zu realisieren?

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 30, 2006 13:29 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Feb 13, 2006 19:32
Beiträge: 20
Hallo Phobeus,

Das soll eine VCL-Anwendung werden. Ich habe am Template noch gar nix verändert.

Grüsse vom ölgötz


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 30, 2006 14:18 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3827
Wohnort: Tespe (nahe Hamburg)
Ich habe aktuell kein Windows zur Hand. Kann jemand das Problem nachvollziehen oder ggf. das Template an die DGL-Header anpassen und mir per Mail hochladen? Dann schmeißen wir das alte 1.2er raus.

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 30, 2006 15:08 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das einfachste wird folgendes sein: Lade das 1.5er Template runter. Das sollte mit dem Header funktionieren. Dann guckst du dir das nicht funktionierende alte Template an, und passt entweder das an den neuen Header an, oder das neue Template mit zwei rendercontexten.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 30, 2006 20:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Feb 13, 2006 19:32
Beiträge: 20
Danke dir für den Tipp, ich hab' das jetzt ausprobiert.
Aber das 1.5er Template und das 2contextTemplate sind so verschieden, dass das 2contextTemplate wohl doch für eine SDL-Anwendung geschrieben ist. Sorry, ich bin nicht gerade Experte darin, so etwas zu unterscheiden. Ich habe bisher immer angenommen, in Delphi/Kylix gäbe es nur die VCL bzw. CLX. :oops:
Gibt es auch noch ein anderes SDL-Template zum umbiegen ?

Gruss,
ölgötz


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 30, 2006 23:44 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3827
Wohnort: Tespe (nahe Hamburg)
Also ich bin weiterhin sehr verwirrt und habe mir das Template gerade nochmal runtergeladen, weil ich absolut nicht weiß, wie dort irgend etwas mit SDL rein kommen sollte. SDL ist eine Art plattformunabhängies DirectX und ist definitiv mein Ratschlag für jeden der ein Spiel oder eine Vollbildanwendung schreiben möchte, da er dann seine Anwendung mit wenig Aufwand nach Linux oder Mac portieren kann. Grob gesagt solltest Du also dann SDL verwenden, wenn Du mit dem Gedanken spielst deine Anwendung für die WinAPI zu schreiben... schnell vergessen und lieber SDL lernen. Der Vorteil ist bei einer Vollbildanwendung, dass man (zumindest eingebildet *g) mehr Kontrolle über den Programmverlauf hast und sogar direkt die Event-Schleife vor Augen hast... ideal für eine Vollbildanwendung. Eine VCL-Anwendung ist eine typische Delphi-Anwendung in der alles brav objektorientiert von statten geht und man auf seinem Formular die ganzen Komponenten platzieren kann. Siehst Du also irgendwo eine Klasse rumgeistern, die von TForm abgeleitet ist, so handelt es sich wohl um VCL. CLX ist der VCL sehr ähnlich und dient primär für Kylix und der Portierung nach Linux. Ich selbst empfehle dies nicht mehr einzusetzen.

So wie es sich für mich anhört, möchtest Du ja allerdings eine VCL-Anwendung schreiben und der Regelfall ist es dort eine Benutzeroberfläche zu schaffen und irgendwo zwei Panels als Viewport zu verwenden. Natürlich kann man natürlich auch mit einem RC sich den Viewport so einteilen, dass es ausschaut als ob man zwei "RC" hätte, aber der Aufwand dafür ist meist größer. Du solltest daher wohl zunächst eher einen Bogen machen um alles wo SDL drauf steht. Wie das SDL bei Dir reinkommt, ist mir immer noch rätselhaft und ... kontrolliere nochmal bitte, ob Du den richtigen Download erwischt hast: http://www.delphigl.com/do_download.php?f=3333

Das Template umschreiben kann ich nicht, weil ich aktuell nur ein Linux-System zur Verfügung habe und nicht Blindlings das Template umschreiben möchte. Bei meiner verzweifelten Suche nach SDL ist mir dabei allerdings ein ganz anderes Gedanke gekommen, der vielleicht zum Jackpot geführt hat. Du hast die OpenGL12.pas raus genommen und gegen unsere Header umgetauscht und brav InitOpenGL aufgerufen? Dann werfe einmal einen Blick auf die mitgelieferte glBMP.pas. Diese ist nämlich auch bereits ziemlich alt und basiert nicht auf unsere Header, sondern der OpenGL12.pas. Schmeiße diese dort ebenfalls einmal aus den Units heraus und trage dort die DGL-Header ein. Das ganze ist in der Tat eine sehr fiese Stolperfalle! Deine Hauptdatei ist absolut einwandfrei, allerdings greift die glBMP.pas auf die nicht gebundenen Funktionen der alten Header zurück und damit hast Du genau das beschriebene Problem als würdest Du nicht unsere Header richtig initalisiert haben. Prüfe das bitte einmal, ich möchte wetten, dass es das Problem ist!

Ich bin mir diesem Stolperstein bewußt und wir werden das Template definitiv an unsere Header anpassen und auch einmal die alte glBMP entsorgen für die Lossey Ex ja inzwischen bereits seit langer Zeit eine würdige neue Version gemacht hat.

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 02, 2006 10:21 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Feb 13, 2006 19:32
Beiträge: 20
Hallo Phoebus,

Eine Verständnisfrage vorweg: ist der Begriff "header" eigentlich gleichbedeutend mit dem Begriff "unit" ?
... wenn ich dich dann richtig verstanden habe, soll ich die beiden units OpenGL12, glBmp in der uses-Klausel der Anwendung durch dglOpenGL, glBitmap ersetzen ? - Dann muss ich natürlich TBitmap verwenden anstelle von TBmp und entsprechend andere Methoden ?
Soweit komm' ich noch mit. Aber wie ersetze ich denn beispielsweise den Befehl LoadOpenGL ? Eine entsprechende Funktion habe ich in der dglOpenGL nicht gefunden. Zu ClearExtensions gibt's auch nichts äquivalentes.
In den Templates, die die dglOpenGL verwenden, wird OpenGL ganz anders geladen und initialisiert, als in der OpenGL12. Das geradezubiegen übersteigt mein bisher bescheidenes Wissen über OpenGL leider.

... vielleicht gibt es aber auch eine andere Möglichkeit, das zu erreichen, was ich will: ich möchte eine Anwendung haben, in der dreidimensionale Objekte in zwei verschiedenen Bildern (oder meinetwegen auch im selben Bild) nebeneinander dargestellt werden, dass aber beide Darstellungen ihre eigenen Fluchtpunkte besitzen. Kann man das eventuell auch mit einem einzelnen GL-Kontext hinbekommen, also dass verschiedene Objekte im gleichen GL-Kontext in unterschiedlichen Perspektiven dargestellt werden ? Wie müsste ich dann vorgehen ?

Grüsse,
ölgötz


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 03, 2006 02:22 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2067
Programmiersprache: C++
ölgötz hat geschrieben:
Eine Verständnisfrage vorweg: ist der Begriff "header" eigentlich gleichbedeutend mit dem Begriff "unit" ?

Jein, eine Unit ist eine allgemeine Pascal-Datei, wohingegen der Header eine spezielle Unit ist, die Funktionen/Proceduren aus einer DLL zur Verfügung stellt.

ölgötz hat geschrieben:
Soweit komm' ich noch mit. Aber wie ersetze ich denn beispielsweise den Befehl LoadOpenGL ? Eine entsprechende Funktion habe ich in der dglOpenGL nicht gefunden. Zu ClearExtensions gibt's auch nichts äquivalentes.

LoadOpenGL wird schon über InitOpenGL erledigt, der zweite Aufruf entfällt einfach bei unserem Header.
Auch das ClearExtensions ist nicht vorhanden, da es nicht nötig ist. Am Programmende geschieht dies automatisch.

ölgötz hat geschrieben:
In den Templates, die die dglOpenGL verwenden, wird OpenGL ganz anders geladen und initialisiert, als in der OpenGL12. Das geradezubiegen übersteigt mein bisher bescheidenes Wissen über OpenGL leider.

Du hast vermutlich das VCL-Template dir angeschaut. Dieses ist etwas komplizierter, da unter anderem auch ein FPS-Counter mit passender Schrift und die Möglichkeit des Vollbildmodus im Template enthalten ist.
Nimm es dir einfach als langfristiges Ziel die Initialisierung von OpenGL unter VCL zu verstehen. Als kurzfristiges ist erstmal das BasicOpenGL zu sehen.
Denn wenn es schon initialisiert ist, musst du erstmal nichts ändern, und vielleicht schwängst du ja auf [werbung]SDL[/werbung] wo die Initalisierung wieder etwas anders aussieht.

ölgötz hat geschrieben:
... vielleicht gibt es aber auch eine andere Möglichkeit, das zu erreichen, was ich will: ich möchte eine Anwendung haben, in der dreidimensionale Objekte in zwei verschiedenen Bildern (oder meinetwegen auch im selben Bild) nebeneinander dargestellt werden, dass aber beide Darstellungen ihre eigenen Fluchtpunkte besitzen. Kann man das eventuell auch mit einem einzelnen GL-Kontext hinbekommen, also dass verschiedene Objekte im gleichen GL-Kontext in unterschiedlichen Perspektiven dargestellt werden ? Wie müsste ich dann vorgehen ?

Ja, gibt es.
Dafür solltest du dich bis zum Tutorial Renderpass durcharbeiten.
Dann renderst du einfach jede Szene für sich in eine Textur, die du dann nebeneinander anzeigst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 03, 2006 07:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Feb 13, 2006 19:32
Beiträge: 20
i0n0s hat geschrieben:
Nimm es dir einfach als langfristiges Ziel die Initialisierung von OpenGL unter VCL zu verstehen.

Ist OK. Bin schon dabei.
i0n0s hat geschrieben:
Dafür solltest du dich bis zum Tutorial Renderpass durcharbeiten.
Dann renderst du einfach jede Szene für sich in eine Textur, die du dann nebeneinander anzeigst.

Das Tutorial hab' ich gerade beim Frühstück durchgelesen. Das sieht so aus, als wär' das die Funktionalität, die ich brauche. An sowas ähnliches hatte ich schon selber gedacht, aber unter Verwendung der guten alten Delphi-VCL-Hausmittelchen: Die Bilder in OpenGL erzeugen, per Screenshot speichern und dann in zwei TImages wieder darstellen ... aber irgendwie kam mir das so vor, wie durch-die-Brust-ins-Auge-schiessen ... Die Szene in OpenGL direkt in eine Textur zu rendern und dann auf zwei Rechtecke zu kleben, ist natürlich genau die Art und Weise, wie's gemacht gehört.

... Hat euch schon mal jemand gesagt, dass das hier ein richtig gutes Forum ist ? ... Ach so? Auch das habt ihr schon gewusst ...?

Gruss,
ölgötz


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 03, 2006 16:02 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
tsssssss......

also ob RenderToTexture hier wirklich das Richtige ist, darüber lässt sich streiten. Performanter und auch schöner sollte es mit 2 Renderkontexten in der VCL gehen. Das Template dort muss aber, so wie ich das jetzt hier mitbekommen hab, noch auf die dglopengl.pas umgestellt werden. Das ist eigentlich gar nicht so schwer: ClearExtensions rausschmeißen und LoadOpenGL durch InitOpenGL ersetzen. Das sollte funktionieren.

Der Ansatz mit den TImages ist auf jeden Fall der verkehrte. Das wird viel zu langsam, als das es noch nutzbar bleibt. Als sinnvolle Optionen bleiben tatsächlich nur die beiden Kontexte oder aber RenderToTexture übrig.

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 04, 2006 17:57 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Feb 13, 2006 19:32
Beiträge: 20
Hallo,

... jetzt habe ich die Lösung mit dem Renderpass ausprobiert. Es funktioniert gut, die Darstellung wird allerdings ziemlich pixelig.
Größer als 512 x 512 x 3 kann ich die Texturen aber nicht machen und schon dabei passiert es, dass Flächen, die bei kleinerer Auflösung weiss gezeichnet wurden, plötzlich grau erscheinen. Wenn ich die Texturen wieder auf 512 x 256 x 3 verkleinere, sind die Flächen wieder weiss - ich nehme an, dass ich bereits zuviel Grafikspeicher verbrauche und die Texturen irgendwo hineinschreibe, wo ich nicht darf ?
Kann man da noch was 'rausholen, oder habe ich damit schon die Grenzen dessen erreicht, was meine Grafikkarte (NVIDIA GeForce FX Go5200) und das Renderpassing ermöglichen - kann ich z.B. evtl. Speicher sparen, indem ich s/w - Texturen übergebe, was müsste ich dafür tun ?


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » DGL » Feedback


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.029s | 17 Queries | GZIP : On ]