Du machst eine Variable welche der Prozedur oder auch Funktion entspricht. Diese muss genau so deklariert sein wie die Funktion selber. Für nähere Details schau einfach in der Delphi-Hilfe oder im Handbuch zu "Prozeduale Variablen" nach. Dann weist Du dieser Variable die Adresse Deiner eigentlichen Funktion zu und verwendest zum Aufrufen nur noch die Variable. Delphi blickt das dann automatisch und ruft die Prozedur auf, welche in der Variable hinterlegt ist. Das ist das was gemacht wird, wenn Du deinem OnClick-Ereignis in Deiner Form eine Prozedur zuweist. DIE vernwedet die genauso wie die VCL um den Benutzer die Möglichkeit zu geben, auf diverse Ereignisse zu reagieren.
Aber an Deiner Stelle würd ich das Zeugs aus der DPR raus und in eine andere Unit verfrachten!
_________________ Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?
ihr initialisiert opengl anders als bei den tutorials von son of satan... der hat ohne setpixelformat gearbeitet und mit ActivateRenderingContext und DeactivateRenderingContext...
is das zweitere langsamer, weil man es öfter aufruft?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Zitat:
Sind das nicht 2 Funktionen aus Opengl12.pas, die von sich aus bei bedarf das pixel format setzen?
Jupp...die Funktion CreateRenderingContext () macht nichts anderes als das Pixelformat zu setzen, aber warum selber machen, wenns dazu ne praktische Unit gibt
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
-> wglMakeCurrent, mehr nicht...die beiden Funktionen machen den GL-Kontext aktiv bzw. deaktivieren ihn...ich weis, das ist eigentlich nicht in jedem Frame nötig, aber zur Problemvermeidung und Fehlerbehebung einfach besser.
wieso zum teufel schaff ichs nicht ein normales QUADRAT zu zeichnen nach deiner methode, son ?
wenn ich nach der DGL methode vorgeh klappts ohne probleme... was mach ich falsch? ich hab mir dein source angeschaut und finde den fehler nicht, da ich eigntl alles gleich hab..
und wenn ich versuche picking und selection zu machen nach GENAU demselben schema, nur nicht über deine methode sondern mit manuellem SetPixelformat etc... klappt das nicht und bekomme nur GL_INVALID_irgendwas (so wie du es auf deiner seite beschrieben hast...) ich hab 100pro nichts vergessen und alles is gleich!
if DeviceContext=0 then begin ShowMessage('FormCreate in sncMain: "GetDC(...)" failed!'); halt; end;
if RenderingContext=0 then begin ShowMessage('FormCreate in sncMain: "CreateRenderingContext(...)" failed!'); halt; end;
if not LoadOpenGL then begin ShowMessage('FormCreate in sncMain: "LoadOpenGL" failed!'); halt; end;
if Fullscreen and not ChangeToFullscreenMode(iWidth,iHeight,iPixelDepth) then begin Showmessage('FormCreate in sncMain: "ChangeToFullscreenMode(...)" failed!'); Fullscreen:=false; end;
das is alles... und ich hab nur nen dunkel roten hintergrund... mehr krieg ich net aufn schirm... weder fehlermeldung sonst noch was. wenn ich das ganze über setpixelformat mache hat es geklappt...
Registriert: Mo Sep 02, 2002 15:41 Beiträge: 867 Wohnort: nahe Stuttgart
ich hab auch ein Problem. Ich hab jetzt alles auf eine andere Unit ausgelagert, und jetzt scheint das programm still zu stehen (er macht nur den Hintergrund schwarz und zeichnet nix von der Scene)? Der Sourcecode ist der gleiche, bloß mit den Verbesserungen von Schod und der Auslagerung von gmDraw und gmProcessKeys in Draw.pas
if DeviceContext=0 then begin ShowMessage('FormCreate in sncMain: "GetDC(...)" failed!'); halt; end;
if RenderingContext=0 then begin ShowMessage('FormCreate in sncMain: "CreateRenderingContext(...)" failed!'); halt; end;
if not LoadOpenGL then begin ShowMessage('FormCreate in sncMain: "LoadOpenGL" failed!'); halt; end;
if Fullscreen and not ChangeToFullscreenMode(iWidth,iHeight,iPixelDepth) then begin Showmessage('FormCreate in sncMain: "ChangeToFullscreenMode(...)" failed!'); Fullscreen:=false; end;
@Bluetoby: Änder mal Deine gmDraw Funktion so ab, dass Du z.B. Per zufallsgenerator immer 'ne Andere Farbe zu Löschen der Szene hast. Und setz in Delphi einen Break-Point. Somit kannst Du überprüfen, was genau schief läuft.!
_________________ Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?
Naja, da Du kein VCL-Fenster verwendest, birngt die das zuweisen der Caption an eine Variable nix. Wenn Du die Caption in der Variable hast, dann musst Du sie auch noch an Dein Fenster zuweisen. Probier mal: SetWindowText(FensterHandle, PChar(GIGAmetrie.WindowCaption)); Steht übrigens alles in der Platform-SDK-Hilfe. Sollte man sich als Coder auf jeden Fall besorgen!!!
_________________ Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?
Registriert: Mo Sep 02, 2002 15:41 Beiträge: 867 Wohnort: nahe Stuttgart
Oh nein! Danke für den Tipp... irgendwie erschien es mir logisch, dass wenn ich es im CreateWindow der WindowMain-Schleife aufrufe, dass ich dann nur die Var ändern müsste, aber ich wollte die ja nur um die Anwendungscaption am Start zu verändern... glaube mache viele Schusselfehler...
Mitglieder in diesem Forum: 0 Mitglieder und 7 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.