AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Ausschließlich GPU verwenden
Thema durchsuchen
Ansicht
Themen-Optionen

Ausschließlich GPU verwenden

Ein Thema von EWeiss · begonnen am 2. Sep 2013 · letzter Beitrag vom 9. Sep 2013
Antwort Antwort
Seite 2 von 2     12   
EWeiss
(Gast)

n/a Beiträge
 
#11

AW: Ausschließlich GPU verwenden

  Alt 6. Sep 2013, 06:12
Hab immer noch ein performance problem.

Meine vorgehensweise ist folgende.

Erstelle ein VisWindow innerhalb meiner DLL das ParentWindow ist das der Anwendung welche die DLL verwendet.
Beim Initialisieren des Plugin wird das Handle übergeben (PAnel oder was auch immer) auf dem das VisWindow als Parent gesetzt wird.

Wenn das Timing auf 25ms (Timer) gesetzt wird funktioniert soweit alles
will ich aber in realzeit min 10ms rendern bin ich nicht mehr in der lage die Anwendung zu beenden
ohne das vorher das Plugin beendet wird.
Ich kann aber nicht in der Renderfunktion Peekmessage(DoEvents) verwenden das verursacht jede menge anderer probleme.

Was bleiben dann noch für andere möglichkeiten damit die Anwendung bedienbar bleibt?
Die CPU auslastung ist gerade mal 30% trotzdem kann ich die Anwendung nicht beenden.

gruss
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#12

AW: Ausschließlich GPU verwenden

  Alt 8. Sep 2013, 16:40
Wie schon zuvor genannt kannst du mit GetAsyncKeystate() in deiner Loop eine eigene Quasi-Message-Behandlung einbauen. Dann ist sichergestellt, dass die wirklich in jedem Frame 1 Mal durchlaufen wird, und man muss sich nicht mehr auf das Durchkommen von Windows-Messages verlassen. Das machen Spiele in aller Regel genau so / verflucht ähnlich.
"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
 
#13

AW: Ausschließlich GPU verwenden

  Alt 8. Sep 2013, 17:00
Wie schon zuvor genannt kannst du mit GetAsyncKeystate() in deiner Loop eine eigene Quasi-Message-Behandlung einbauen.
GetAsyncKeystate?
Hat das nicht eher mit behandlungen von Key eingaben zu tun?

Hab mir jetzt auf dieser weise geholfen.
Ein selbstgebautes doevents welches bei der WM_QUIT Message ein "PostQuitMessage(0)" sendet.

Aber würde mich doch einmal interessieren was , wie du dir das vorstellst mit GetAsyncKeystate.
Denn mit meiner MEthode habe ich leichte Artefakte beim resitz.

Ein DoEvents mit GetAsyncKeystate?
Ohne innerhalb des Renderevents wird die Zeit nicht mehr gerendert.
PAnsiChar(ansistring(strSongpos + ' / ' + strSongLength)), fLargeFontID, TS_ALIGN_LEFT);
Zitat:
damit die Anwendung bedienbar bleibt?
GetAsyncKeystate hat keinerlei einfluss auf das Paint/refresh event der Anwendung welches
durch den loop verhindert wird. Das kann ich widerrum nur mit einem DoEvents oder processmessagen erreichen.


gruss

Geändert von EWeiss ( 8. Sep 2013 um 18:25 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#14

AW: Ausschließlich GPU verwenden

  Alt 9. Sep 2013, 01:06
Oh, ups. Da habe ich ein wenig zu schnell gelesen fürchte ich. Ich dachte, dass das Programmende über einen Tastendruck ausgelöst wird, dass dein Vis erhält. Da mir die Schnittstelle zwischen deinem Plugin und seinem Host nicht ganz klar ist, wird's knapp mit konkreten Tips. Das Ende wird also von der Host-Anwendung ausgelöst, und diese schickt dann ein WM_QUIT an dein Plugin? Wenn es nicht ggf. noch andere Indikatoren gibt, die du unabhängig von der Message-Queue heranziehen könntest, wäre der einzige wirklich saubere Weg fürchte ich das Selbstbauen der Queue innerhalb deines Renderloops. Allerdings ist das etwas ins Unreine gedacht, da ich mich mit dem Ersetzen/Selbstschreiben einer WndProc, und ob und wie das Umzubiegen wäre, noch nicht befasst habe.

Was mich auch etwas verwirrt, ist dein aktueller Workaround. Du bekommst die WM_QUIT Message also doch mit? Wenn ja, dann verstehe ich das gesamte Problem noch nicht, weil dann könntest du ja daraufhin dein Plugin einfach beenden. Noch mehr irritiert mich das PostQuitMessage(0), da dies nichts weiter macht, als dass Windows dir dann nochmals ein WM_QUIT schickt. Wenn ich das MSDN da richtig verstanden habe, müsstest du dir damit eine Quasi-Endlosschleife gebaut haben. Ganz viel
"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
 
#15

AW: Ausschließlich GPU verwenden

  Alt 9. Sep 2013, 01:11
Zitat:
Du bekommst die WM_QUIT Message also doch mit?
Nein .. Nicht von der Anwendung.
Beim Click auf den X Button.

Das sollte es vielleicht etwas erklären
WM_QUIT in einer Message Loop ist nicht gleich WM_QUIT innerhalb einer Proc.

Hier wird mir nur mitgeteilt das ich NUN die Anwendung beenden kann.. wenn ich denn will.

Delphi-Quellcode:
      while PeekMessage(ProcMsg, 0, 0, 0, PM_REMOVE) do
      begin
        if (ProcMsg.message = WM_QUIT) then
        begin
          PostQuitMessage(0);
          exit;
       end;

       TranslateMessage(ProcMsg);
       DispatchMessage(ProcMsg);
      end;
Das ist quasi ein DoEvent mit abschließender PostQuitMessage die dann dafür sorgt das die Anwendung beendet werden kann.
Mache ich das nicht muss ich erst das Plugin beenden.

gruss

Geändert von EWeiss ( 9. Sep 2013 um 01:18 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz