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

Aktuelle Zeit: Fr Jul 25, 2025 17:12

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 12, 2003 22:45 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 29, 2002 10:37
Beiträge: 251
Wohnort: Ulm
nabend,

ich versuch gerade, zwei unterschiedliche Rendering Contexte zu erstellen, nur klappt das zeichnen nicht so ganz :( ich krieg die fehlermeldung "Incoherent DC/RC pair" wenn ich activaterenderingcontext(PDC,PRC); (für den zweiten RC) aufrufe. der 2. soll in einem panel laufen (was er alleine auch tut..) und der erste ist das hauptfenster. die initialisierungen beider RCs sind identisch, nur dsas bei dem ersten die variablen FDC/FRC und beim zweiten PDC/PRC heißen.. hier mal der komplette aufruf des zweiten (ist in einer neuen form..):

<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>
<span class='reserved'>procedure</span> TformObjects.FormCreate(Sender: TObject);
<span class='reserved'>begin</span>
Preview.PreviewInit(pnlGL.Handle);
preview.Previewresize(pnlGL.Width,pnlGL.Height);
application.OnIdle := previewidlefunc;
<span class='reserved'>end</span>;

<span class='reserved'>procedure</span> TformObjects.previewidlefunc(Sender: TObject; <span class='reserved'>var</span> Done: Boolean);
<span class='reserved'>begin</span>
Preview.drawScene;
done := false;
<span class='reserved'>end</span>;

<span class='comment'>{ T3DPreview }</span>

<span class='reserved'>procedure</span> T3DPreview.drawScene;
<span class='reserved'>begin</span>
activaterenderingcontext(pdc,prc);
glMatrixMode(GL_MODELVIEW);
glClear(GL_COLOR_BUFFER_BIT <span class='reserved'>or</span> GL_DEPTH_BUFFER_BIT);
glLoadIdentity;


SwapBuffers(pDC);
deactivaterenderingcontext;
<span class='reserved'>end</span>;

<span class='reserved'>procedure</span> T3DPreview.PreviewInit(cHandle: HDC);
<span class='reserved'>var</span>
dummy: hpalette;
<span class='reserved'>begin</span>
<span class='reserved'>if</span> <span class='reserved'>not</span> InitOpenGL <span class='reserved'>then</span>
exit;
<span class='comment'>{ Rendering Context erstellen.. }</span>
<span class='reserved'>try</span>
<span class='comment'>{ DC über das mitgelieferte Handle erhalte }</span>
pDC := GetDC(cHandle);
<span class='comment'>{ Rendering Context mit Default-Values erstellen }</span>
pRC := CreateRenderingContext(pDC,[opDoubleBuffered],<span class='integer'>32</span>,<span class='integer'>0</span>,<span class='integer'>0</span>,<span class='integer'>0</span>,<span class='integer'>0</span>,dummy);
<span class='reserved'>if</span> pRC = <span class='integer'>0</span> <span class='reserved'>then</span>
exit;
<span class='comment'>{ Rendering Settings (blending, licht, depth-test, ...) einschalten }</span>
PreviewSettings;
<span class='reserved'>except</span>
<span class='reserved'>raise</span>;
<span class='reserved'>end</span>;
<span class='reserved'>end</span>;

<span class='reserved'>procedure</span> T3DPreview.Previewresize(width, height: integer);
<span class='reserved'>begin</span>
<span class='reserved'>if</span> height=<span class='integer'>0</span> <span class='reserved'>then</span>
height := <span class='integer'>1</span>;
activaterenderingcontext(pdc,prc);
glviewport(<span class='integer'>0</span>,<span class='integer'>0</span>,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(<span class='integer'>45</span>,width/height,<span class='integer'>1.0</span>,<span class='integer'>1024</span>);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
deactivaterenderingcontext;
<span class='reserved'>end</span>;

<span class='reserved'>procedure</span> T3DPreview.PreviewSettings;
<span class='reserved'>begin</span>
activateRenderingContext(pdc,prc);
glShadeModel(GL_SMOOTH);
glClearColor(<span class='integer'>0.3</span>,<span class='integer'>0.3</span>,<span class='integer'>0.3</span>,<span class='integer'>1.0</span>);
glClearDepth(<span class='integer'>1.0</span>);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glEnable(GL_CULL_FACE);
deactivaterenderingcontext;
<span class='reserved'>end</span>;
</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->


der aufruf des ersten ist quasi das ding vom letzten thread von mir hier in dem ordner..

kann mir einer sagen, wie ich die fehlermeldung umgehen kann? oder was ich falsch mache??

_________________
http://www.rochus.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 12, 2003 23:01 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 29, 2002 10:37
Beiträge: 251
Wohnort: Ulm
Ich frag gleich mal noch ne zweite frage, falls das, was ich machen will, so nicht geht.. :

wie erstelle ich zwei rendering contexte, mit denen ich arbeiten kann?

_________________
http://www.rochus.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 12, 2003 23:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Nein, das was du oben versuchst geht nicht.Deshalb auch die Meldung mit den inkoherenten DC/RC-Paar.Für jeden RC brauchst du auch nen eigenenen DC, sonst funzt das nicht.

Zitat:
wie erstelle ich zwei rendering contexte, mit denen ich arbeiten kann?

Genauso, wie wenn du einen erstellen willst.Anhand der Tatsache das du ActivateRenderingContext benutzt, geh ich mal davon aus, das du Mike Lischkes OpenGl12.pas benutzt, weshalb ich mich dann auch darauf beziehe :
<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>DC1 := GetHandle(Form.Handle);
DC2 := GetHandle(Panel.Handle);
RC1 := CreateRenderingContext(DC1, ...);
RC2 := CreateRenderingContext(DC2, ...);</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->
Beim Zeichnen musst du dann natürlich zwischen den zwei Kontexten hin- und herschalten :
<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>ActivateRenderingContext(DC1, RC1);
// Zeichne ...
DeActivateRenderingContext;
ActivateRenderingContext(DC2, RC2);
// Zeichne ...
DeActivateRenderingContext;</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->
Allerdings ist der Kontextwechsel in jedem Frame eine recht kostspielige Angelegenheit.Wenn du also eine Szene nicht in jedem Frame aktualisieren musst (z.B. ein Objektvorschaufenster), dann solltest du dies über einen Timer zeichnen.Das zerrt dann nicht so an deiner Renderleistung.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 13, 2003 06:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich verwende bei mir Thread zum rendern. Das hat hauptsächlich auch andere Gründe. Damit konnte ich auf meiner TNT 2 ohne Probleme auf 4 Panels gleichzeitig rendern. Und die ganze Verwirrung mit aktivem Renderkontext kann man sich dabei auch sparen. Der aktive Renderkontext ist Threadbezogen. Soll bedeuten bei einem eigenen Renderthread brauch man nur zu Begin einmal den Kontext aktivieren und er ist bis zum Ende der Anwendung gültig.
Ist nur die Frage, welche der beiden Methoden schneller ist? Der kleine Overhed mit den Threads oder das ständige wechseln den Kontextes? Aber wenn Thread gut gemacht sind, dürfte der Overghead nur sehr gering ausfallen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 13, 2003 07:20 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
:huh: uuuhhhhhhhhhh..... (*erinnerung.auf.kommt*). Schreib mir mal jemand ne Mail mit ner Erinnerung, habe hier irgendwo ein fast fertiges Template für dieses Problem gemacht und bisher vergessen hochzuladen .... <_< typisch...

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


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 16 Queries | GZIP : On ]