Hi Matze,
ich habe Ayas Tutorials zuerst auch als
VCL-Version gemacht und es ging genau so gut, Aya hat es dann im
IRC NonVCL gemacht, ansonsten ändert sich für Dich nicht viel.
1. Neue Anwendung erstellen.
2. Bei den Komponenten auf den Reiter "Zusätzlich", dort gibt es die Komponente "ApplicationEvents", blauer Kreis, eine Fackel drin uns drei schwarze Pfeile.
Von der AppEvents-Kompo brauchst Du das Ereigniss OnIdle, das sieht dann so aus:
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Idle(Sender: TObject;
var Done: Boolean);
begin
DrawScene;
Done := False;
end;
Was sich noch ändert, in der DrawScene kommt die letzte Zeile noch rein, bei
NonVCL ist die nämlich woanders drin.
Delphi-Quellcode:
procedure TForm1.DrawScene;
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glLoadIdentity;
glTranslate(0, 0, -5);
glRotate(RotateX, 1, 0, 0);
glBegin(GL_QUADS);
.
.
.
glEnd;
RotateX := RotateX + 1;
if RotateX > 360 then
RotateX := RotateX - 360;
SwapBuffers(h_DC); //<-- Übeltäter...
end;
Ins normale FormCreate kommt noch das rein:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
InitOpenGL;
h_DC := GetDC(
Handle);
SetDCPixelFormat(h_DC);
hRC := wglCreateContext(h_DC);
wglMakeCurrent(h_DC,hRC);
InitGL;
end;
Das müsste es gewesen sein, die IniGL und SetDCPixels... bleiben gleich, fällt mir jetzt auf die schnell jedenfalls kein Untershcied ein. Egl, probier das einfach mal aus, wenns nicht geht, sag bescheid, dann häng ich dann die
Unit ganz an, so wie es bei mir auch mal gelaufen ist und noch läuft hoff ich.