AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DirectX LayeredWindow

Ein Thema von EWeiss · begonnen am 2. Aug 2011 · letzter Beitrag vom 2. Aug 2011
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: DirectX LayeredWindow

  Alt 2. Aug 2011, 17:08
Ja ja mit deinem Link auf die Suche liegst du richtig ..
Da findet man nämlich so gut wie nix.

Interessant.. hmm wohl milde ausgedrückt!
Denke mal eher unmöglich

Mein gedanke war ein LayerdWindow zu verwenden um gerade das flackern zu unterdrücken.
Eigentlich dürfte DXWindow mit dem der Visualisisierung gar nichts am hut haben ich(Die Anwebdung) will ja nicht auf das Vis Window zeichnen.
Deshalb ja auch das Layered überlagert.

gruss
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: DirectX LayeredWindow

  Alt 2. Aug 2011, 17:37
Naja, das ist halt genau auch des Pudels Kern: DirectX ist ein Overlay über dem, was die WinAPI so zeichnet, und folglich auch über einem Layered Window.* Aus der normalen WinAPI heraus kommt du da auch nicht zwischen/vor/zuvor, da beißt die Maus keinen Faden ab. Leider. Man muss zwangsweise an den Backbuffer des dem Fenster zugewiesenen D3D Devices ran, und idealerweise auch die Bufferflips mitbekommen (-> Hooken). Eine D3D-Anwendung, die nicht explizit eine Schnittstelle für solche Aktionen bietet, ist meines Wissens nach nicht anders beizukommen. (Hatte vor 2-3 Jahren eine sehr ähnliche Such-Odyssee.)

*) Technisch ist es sogar so, dass DX-Buffer erst "ganz hinten" in der Verarbeitung der Grafikkarte, knapp vor Ausgabe ans Bildschirmkabel sozusagen, die entsprechenden Bereiche des "normalen" Framebuffers übernageln. Aus Sicht von Windows sind solche Fenster i.A. einfach schwarz (mit Ausnahme von Aero).
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium ( 2. Aug 2011 um 17:40 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: DirectX LayeredWindow

  Alt 2. Aug 2011, 17:59
Danke!
Dann muss ich mir was anderes überlegen .. tüfteln

gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: DirectX LayeredWindow

  Alt 2. Aug 2011, 18:40
Das ist auch nichts anderes als ein überlagertes LayeredWindow
und da flackert nix .. Hmmm

gruss

Geändert von EWeiss (11. Jul 2019 um 15:40 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: DirectX LayeredWindow

  Alt 2. Aug 2011, 19:05
Wo stammt das her? Was ist das im Hintergrund? Woher weisst du, dass es ein Layered Windows ist? Was für ein OS? Wie ist dessen GUI konfiguriert? Welche Grafikkarte? (Manch kleinere Modelle müssen für zu hohe Featuresets von DX auf Softrendering zurückgreifen, was ggf. einen Einfluss haben könnte)... Die Informationslage ist einfach sehr dünn bei dir
Und letztendlich kannst du es doch einfach auch mal konkret ausprobieren! Dann dürften sich deine Fragen vom Anfang doch recht eindeutig lösen lassen - ein Layer für ein Fenster zu machen, und sei es erstmal mit einem Testbutton drauf, sollte recht fix gehen denke ich doch.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: DirectX LayeredWindow

  Alt 2. Aug 2011, 19:43
Wo stammt das her? Was ist das im Hintergrund? Woher weisst du, dass es ein Layered Windows ist? Was für ein OS? Wie ist dessen GUI konfiguriert? Welche Grafikkarte? (Manch kleinere Modelle müssen für zu hohe Featuresets von DX auf Softrendering zurückgreifen, was ggf. einen Einfluss haben könnte)... Die Informationslage ist einfach sehr dünn bei dir
Und letztendlich kannst du es doch einfach auch mal konkret ausprobieren! Dann dürften sich deine Fragen vom Anfang doch recht eindeutig lösen lassen - ein Layer für ein Fenster zu machen, und sei es erstmal mit einem Testbutton drauf, sollte recht fix gehen denke ich doch.
Ich wollte das im Vorfeld klären warum soll ich mir die Arbeit mit DX machen wenn ich nachher feststellen muss das es nicht geht.
Das im Hintergrund ist Milkdrop2 das Fenster davor ist von meinem VMPiano das ist garantiert Layered (sonst könntest du Milk dahinter gar nicht sehen).
Ich habe es aber mal mit meiner DLL getestet (Normales Layered Window)

Theoretisch würde es ohne Flackern gehn das problem ist nur das man ein Layered Window nicht als Parent(Child) einfügen kann.
Das Layered Window wird dann sofort beendet ... und somit hat sich das hier auch erledigt da es für mich
anders nicht wirklich einen Sinn macht(das Fenster läßt sich nicht ONTOP halten).

bsp. Milkdrop2 im VollBildschirm (ist in DirectX geschrieben)

Hier noch ein Bild von TuneClipper
Aber wie schon gesagt das ist kein Parent sondern ein überlagertes Layered Window.
Und es flackert auch hier nichts.

gruss

Geändert von EWeiss (11. Jul 2019 um 15:40 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#7

AW: DirectX LayeredWindow

  Alt 2. Aug 2011, 20:01
Hier sieht man auch, dass du in der Tat Aero an hast. Das macht einen großen Unterschied, da dann Windows intern die DX-Surfaces auch der GDI durchreicht, und sowas dann geht. Merkte ich bei einem Progrämmchen, dass Screenshots eines D3D Spiels gemacht hat, und zwar einfach via GetDC(hwnd): Unter Win7/Aero ging das, unter WinXP gabs ein schwarzes Bild. Ich frag sowas ja nicht umsonst.

Dass es im Vollbildmodus dann nicht mehr geht ist auch verständlich, da dann das D3D Device volle Kontrolle bekommt, und Aero quasi "suspended" ist, welches sonst die Windowed-Targets umleitet und ich sich selbst als Surface einbindet und darstellt (und somit der API zur Verfügung stellen kann). Mich würde daher mal interessieren, wie sich dein Layer ohne Aero, bzw. unter WinXP verhält. Theoretisch müsste zumindest letzteres mindestens Flackern.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz