Registriert: Fr Mai 29, 2009 19:44 Beiträge: 12 Wohnort: Saarland
Hallo,
ich versuche schon seit ein paar Stunden einen OpenGl3.2 GC zu erstellen, aber irgendwie kriege ich es nicht ganz gebacken ^^
Ich habe mir schon das Tutorial zu OpenGL 3 durchgelesen, aber ich kenne mich in C nicht aus.
Auch google liefert keine nützlichen Tipps/Codes. Würde das ganze halt gern in Delphi machen, aber zur Zeit beisse ich mir die Zähne an der erstellung des GCs aus Wenn jemand schon einen CG für OpenGL 3.2 erstellt hat, köne er/sie dann den Code hier vill. reinposten, oder mir erklären wie ich einen erstellen kann?
Registriert: So Okt 21, 2007 14:16 Beiträge: 123
Programmiersprache: Delphi
Hallo,
das ist mir jetzt etwas peinlich, aber ich habe einen neuen Rechner mit OpenGL 3.2 fähiger Grafikkarte und stehe jetzt vor dem selben Problem -.- mit meinem Code klappts auf jeden Fall bei mir nicht. Ein Treiberproblem schließe ich aus, da http://www.dhpoware.com/demos/gl3HelloWorld.html bei mir funktioniert. Falls du - oder jemand anderes - das mittlerweile in Delphi geschafft hat, wäre es sehr nett, wenn das hier jemand posten würde
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ich habe nur 3.1er Hardware. Entsprechend kann ich nicht sagen ob das mit 3.2 funktionieren würde oder nicht. Für die dglOpenGL hatte ich eine Testanwendung geschrieben wo ich den 3.0 Kontext getestet hatte. Ich habe das gerade mal auf ein Delphi Formular übertragen.
Ob der Code so richtig schön ist lasse ich mal dahin gestellt. Auch weiß ich nicht ob er richtig sicher ist. Also ich weiß nicht was was passiert, wenn GL 3.0 nicht unterstützt wird. Bzw muss der natürlich auch an die jeweiligen Gegebenheiten angepasst werden.
Code:
procedure TMainForm.FormShow(Sender:TObject);
var
// gl2
PixelFormatDescriptor: TPixelFormatDescriptor;
PixelFormat:Integer;
gl2Context: HGLRC;
// gl3
Attribs:arrayof GLint;
begin
// init OpenGL
ifnot InitOpenGL then
raise Exception.Create('OpenGL seems to be unsupported.');
raise Exception.Create('Creation of OpenGL 3.0 context failed');
// deactivate and destroy gl 2.0 context
wglMakeCurrent(fDC,0);
wglDeleteContext(gl2Context);
// activate context and load all functionpointer
ActivateRenderingContext(fDC, fRC);
// Initialization of opengl
glClearColor(1,0.5,0.5,0);
end;
Hier aber ein bisschen was zu Erklärung des Codes. Ich mache nichts weiter als einen 2.0 Kontext zu erstellen. Dazu gehört das Pixelformat zu definieren (PixelFormatDescriptor) und dann ein passendes Format zu suchen (ChoosePixelFormat) und zu setzen (SetPixelFormat). Anschließend werden die Funktionen zum Erstellen des Kontexts geladen und die Attribute vorbereitet. Wenn das geschafft ist wird versucht einen Kontext zu erstellen. Hat das nicht geklappt wird die Versionsnummer verkleinert.
Vom Prinzip her ziemlich genau das was du (joni) auch machst. Nur mit dem Unterschied, dass ich die in unserem OpenGL Header eingebauten Konstanten/Funktionen benutzen bzw. den 2.0 Kontext nur über wglMakeCurrent aktiviere. ActivateRenderingContext geht her und lädt alle Funktionspointer. Was aber quatsch/nicht nötig ist.
Wobei ich auch gerade sehe, dass dein Fehler wahrscheinlich schon darin liegt, dass du bei der Defintion von TWGLCreateContextAttribsARB vergessen hast ein stdcall mit anzugeben. Ohne Typenkonvention kann es natürlich nicht klappen. Bzw bei dem letzten Parameter tendiere ich eher dazu mich peinlich genau an das zu halten wie es im C/C++ Header definiert ist.
Registriert: So Okt 21, 2007 14:16 Beiträge: 123
Programmiersprache: Delphi
Hallo,
vielen Dank, es lag wirklich am stdcall. Meine Grafikkarte (HD 5770) sollte eigentlich OpenGL 3.2 können, wenn es denn die Treiber schon gäbe (um Missverständnissen vorzubeugen: OpenGL 3.1 kann der Treiber schon).
[Edit] So, mittlerweile gibts jetzt auch die Treiber für OpenGL 3.2 [/Edit]
Gruß Joni.
Zuletzt geändert von Joni am Mo Feb 01, 2010 10:25, insgesamt 2-mal geändert.
Ja nVidia war diesmal unglaublich schnell mit den ersten Betatreibern. Hab mich auch schon bedankt. Die Kinnlade ist mir aber dann runtergeklappt als ich feststellen musste, dass die Matrizen nicht mehr vorhanden sind. An sonsten sehr positiv, dass es erstmal keine Extensions für 3.2 gibt und alle redundanten Möglichkeiten das selbe zu tun weggefallen sind. Für den Moment hat man also ohne Extensions prüfen zu müssen in einem 3.2er Kontext alles was Spaß macht bereits zur Verfügung. Für C gibt es auf OpenGL.org eine Header-Datei die sich so einstellen lässt, dass Immediate Mode Befehle und andere gar nicht mehr bekannt sind. Dann kann man auch keine falschen Funktionen mehr aufrufen oder versehentlich Texturformate wählen die es nicht mehr gibt.
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.