Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

KahnSoft

Frischling

  • »KahnSoft« ist der Autor dieses Themas

Beiträge: 59

Wohnort: Berlin

  • Private Nachricht senden

1

15.11.2015, 13:48

HDC split

Hallo zusammen,

ich teile ein Fenster mit GDI und OpenGL alles wunderbar, bei einigen grafisch unterentwickelten Laptops oder VM's kommt es vor
das OpenGL trotz beschneidender Anweisung im Viewport, den GDI Bereich übermalt.

Gibt es Hinweise OpenGL nicht nur über die ViewPort-Matrix die Zeichenfläche zu begrenzen, muss man eine Sektion reservieren
Hat da jemand ähnliche Erfahrung ?


Vielen Dank für Hinweise
Gruß
Karsten

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

15.11.2015, 14:31

Der Viewport bestimmt nur, auf welchen Bereich des Framebuffer gerendert wird, Dinge wie z.B. glClear() berücksichtigen den Viewport nicht. Wieso genau musst du GDI und OpenGL in den selben HDC zeichnen lassen?

KahnSoft

Frischling

  • »KahnSoft« ist der Autor dieses Themas

Beiträge: 59

Wohnort: Berlin

  • Private Nachricht senden

3

15.11.2015, 16:23

Why

Hi,

danke für deine Antwort, dies ist eine Messsoftware, nebenan befindet sich ein PropertyTree. Funktioniert seit Jahrzehnten,
wenn aber die Hardware minimal ist, stellt sich heraus das wirklich der ganze DC verwendet wird. Eine 3D Karte löscht nur den durch
Viewport bestimmten Bereich.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »KahnSoft« (16.11.2015, 15:29)


SlinDev

Treue Seele

Beiträge: 142

Wohnort: Lübeck

Beruf: Programmierer

  • Private Nachricht senden

4

15.11.2015, 16:44

glScissor mit aktiviertem scissor test sollte tun was du willst?

KahnSoft

Frischling

  • »KahnSoft« ist der Autor dieses Themas

Beiträge: 59

Wohnort: Berlin

  • Private Nachricht senden

5

15.11.2015, 17:37

glEnable(GL_SCISSOR_TEST);

Hallo,

das ist ja sehr interessant! Und nie verwendet von uns, ich kann jetzt deutlich sehen, das der Bereich
nicht mehr von der Hardware glClear befüllt wird, scheinbar bleibt der Bereich jetzt gänzlich schwarz,
und die GDI Komponente wird nicht dargestellt ,oder mit schwarz übermalt.

Also das war erstmal ein sehr guter Hinweis !

Vielen Dank dafür.
Karsten

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

15.11.2015, 18:59

Es geht also wirklich darum, dass die OpenGL Anzeige nur Teil eines größeren GUI sein soll. Ich bin ehrlich gesagt außerordentlich erstaunt, dass das bisher offenbar so funktioniert hat. Die ordentliche Lösung wäre natürlich, ein Childwindow für das OpenGL Display im GUI zu machen, und in dieses zu Rendern... ;)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

15.11.2015, 19:00

Jau, der übliche Weg ist irgendein Platzhalter-Control einzufügen, sich dessen HDC zu holen und nur darauf zu rendern.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

KahnSoft

Frischling

  • »KahnSoft« ist der Autor dieses Themas

Beiträge: 59

Wohnort: Berlin

  • Private Nachricht senden

8

16.11.2015, 15:35

Hi Blue,

also das trifft zu für alte OpenGL Hardware, (SoftwarereRender lass ich mal ungetestet bei Seite) , aber sowie eine normale Grafikkarte nach 2004/5 eingebaut ist
unterstützt diese auch das der HDC nur dort verwendet wird wie der Viewport eingestellt ist.

Nachteil Laptops mit reduzierter GFX Hardware kommen damit nicht klar.

Ich habe nun ein MemoryDC eingebaut, damit scheint es auf dem Laptop zu laufen, aber
seltsamerweise füllt GL erstmal mit schwarz dann mit der Farbe die ich eingestellt habe (GlClear), somit flackert das ganze, ein EraseBackground wird nicht ausgelöst.

Sehr bedenklich.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

16.11.2015, 15:40

Es geht gar nicht um verschiedene Hardware. Es geht darum, dass Du eigentlich für den Renderbereich ein eigenes Control nehmen und dessen HDC verwenden könntest. Damit gäbe es überhaupt gar keine Notwendigkeit irgendwas zu clippen und es wäre auch egal welche Karte der Rechner jeweils hätte. Windows würde intern selbst sicherstellen, dass OpenGL nur in den richtigen, dafür vorgesehenen Bereich des speziell nur für OpenGL hinterlegten Controls gerendert wird.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

KahnSoft

Frischling

  • »KahnSoft« ist der Autor dieses Themas

Beiträge: 59

Wohnort: Berlin

  • Private Nachricht senden

10

16.11.2015, 16:43

Genau so habe ich nun einen separaten MemDC hergelitten, ich habe schlichtweg nie mit alter Hardware gegengetestet.

Dank für den Hinweis
Viele Grüße
Karsten

Werbeanzeige