Cum pot obține unele ferestre pe OpenGL un singur formular

OpenGL în Delphi: În loc de introducere

Tehnologie deschisă bibliotecă grafică (Deschide biblioteca grafică - OpenGL) este standardul de facto pentru proiectarea sistemului profesional, jocuri de calculator și alte aplicații folosind două și grafică tridimensională. Datorită biblioteca cross-platform este utilizat pe scară largă într-o varietate de sisteme de dezvoltare pentru diferite sisteme de operare - de la server la mobil. Bineînțeles, că nu este o excepție și ca un popular sistem de Delphi, care oferă posibilitatea de a lucra cu OpenGL OpenGL.pas după o conexiune simplă modul.







Într-adevăr, OpenGL pentru a utiliza în Delphi nu este o sarcină dificilă, care este bine descrisă într-o carte populară [1]. În același timp, trebuie să se constate că diferența dintre abordarea de nivel scăzut pentru a lucra cu grafica in componenta OpenGL de abordare la nivel înalt pentru dezvoltarea de aplicații face dificilă reutilizarea de cod o dată în scris în diferite proiecte. În plus, necesitatea de a menține un context pentru fiecare fereastră de redare a creat concepție greșită despre inutilitatea, imposibilitatea sau dificultatea de a bazându-se pe o singură formă de mai multe ferestre cu grafica OpenGL.

Articolul descrie o componentă pentru Delphi, pune în aplicare atât OpenGL mijloace de ieșire grafică, și mijloace convenționale de biblioteca de componente vizuale (Visual biblioteca de componente - VCL) folosind clasa TCanvas. Proiectul de formular poate conține orice număr de instanțe ale acestei componente, oferind astfel făcând mai multe ferestre.







a crea o componentă

În [1] și în multe alte surse de pe Internet cu exemple de lucru OpenGL + Delphi, există exemple de ieșire grafice de pe suprafața componentelor. Cu toate acestea, această abordare este ilustrată prin codul în interiorul matriței, efectuarea atât operațiile pregătitoare necesare, si grafica de fapt, la componenta afișarea de suprafață. Firește, această abordare nu face reutilizabilă cod în alte proiecte fără modificări semnificative.

Luați în considerare posibilele modalități de rezolvare a problemei creării unei componente care nu are nevoie de nici un cod sub formă de proiect sau pentru lucrul cu grafica OpenGL.

Selectarea strămoș

În ceea ce privește OpenGL nevoie de un device context, este logic ca părinte pentru componenta noastră de a alege un simplu TWinControl fereastra de clasă.

În cazul în care necesitatea de a pune în aplicare o ieșire universală ca mijloc de OpenGL și VCL ca părinte puteți lua TCustomControl, având deja proprietatea Canvas și virtuale Paint funcția de tragere.

Experimentatul poate constata că clasa componentei TGraphicControl simplu grafic care are o proprietate pânză poate oferi un link către device context în proprietatea Canvas.Handle. Cu toate acestea, în primul rând, această metodă este fără acte, în conformitate cu caseta documentația OpenGL nu ar trebui să conțină stil CS_PARENTDC, și că, în stilul TGraphicControl, desigur, incluse. În al doilea rând, pregătirea contextului de redare potrivit pentru a furniza, la momentul creării ferestrei. În al treilea rând, aplicarea, probabil, trebuie să lucreze pe fiecare ecran cu tastatura, dar acest lucru este posibil numai într-o componentă fereastră.

Cred că aceste argumente sunt suficiente pentru a opri alegerea pe o clasă de fereastră.

Astfel, se presupune soluția unui strămoș pentru a crea o componentă.

Utilizarea Mediu Maestru Componenta / New VCL Component sau pur și simplu prin crearea unui modul nou, să declare o nouă clasă: