![]() |
[OpenGL] pixelweise verarbeiten
Hi,
ich habe ein Programm, dass für einzelne Pixel Farbwerte bestimmt und einen Mauszeiger anzeigt. Wenn man nun bei jedem Frame jeden Pixel neu berechnet (die Liste mit den gespeicherten Farbwerten durchgeht), wird das sehr schnell langsam. Wenn man mit Display-Listen arbeitet, wird die Sache schon ne ganze Ecke schneller, da sich die Pixel nur relativ selten ändern. Danach noch den Mauszeiger zeichnen, und fertig ist der Frame. Allerdings werden auch die Listen nach einer Weile langsam, wenn man sehr viele Pixel hat. Daher ist meine Frage, ob man das ganze irgendwie noch schneller machen kann. Wie gesagt, der eigentliche Bildschirminhalt ändert sich nur realtiv selten... nailor |
Re: [OpenGL] pixelweise verarbeiten
Moin!
Optimiere die Liste nebenbei noch. Im Detail: Schmeisse die Pixel wieder raus, die eine sehr selten abgefragte Farbe haben und alle anderen bleiben drinne, so dass du immer einen festen Stamm von Einträgen drinne hast. Zusätzlich kannst du die Liste noch zugriffsorientiert sortieren. MfG Muetze1 |
Re: [OpenGL] pixelweise verarbeiten
ich muss immer entweder alle pixel neu einlesen, oder aber das alte bild (bis auf den mauszeiger) nochmal verwenden...
irgendwie werde ich aus deinem beitrag nicht schlau |
Re: [OpenGL] pixelweise verarbeiten
Ich werd aus beiden Beiträge ned schlau :gruebel:
|
Re: [OpenGL] pixelweise verarbeiten
im prinzip ist es so (nur prinzip nicht ganz genau):
ich hab ein 2-dimensionales array, wo drinsteht, welcher pixel welche farbe bekommt und immer wenn sich da was ändert, will ich die pixel neu setzen. da ich aber mit opengl arbeite (also ohne vcl und so was) muss ich mich immer drum kümmern, dass der ganze bildschirm neu gezeichnet wird (und das muss ich immer, wenn die maus bewegt wird). dann muss ich aber auch alle pixel neu machen, was viel zu lange dauert. deshalb suche ich eine möglichlkeit, die pixel schneller zu setzen. weil die sich nur relativ selten (aber noch oft genug) ändern, war meine erste idee eine display-liste. die hat zwar geholfen, aber noch nicht genug. perfekt wäre es, wenn ich den kompletten bilschirm, bevor der mauszeiger gezeichnet wird, irgendwie auf einen stack packen könnte, dann den mauszeiger zeichnen, und beim nächsten frame entweder alles neu machen (falls sich was geändert hat) oder einfach das alte vom stack hohlen könnte (wenn alles geblieben ist). dann sofort wieder auf den stack, den mauszeiger dabei, und warten auf den nächsten frame... dann wäre das komplett neu zeichnen _wesentlich_ seltener nötig, und die sache erheblich beschleunigt. hoffe, jetzt versteht man mich! nailor |
Re: [OpenGL] pixelweise verarbeiten
Hallo
Jupp! :) Also in DirectX gibt es sg. Surfaces, also Buffer außerhalb des anzeigebereichs. Diese kannst dann in den Backbuffer kopieren, und dann den Mausziger zeichnen. Das kopieren geht Flott da das Surface auch im Grafikspeicher liegt. Vielleicht gibt es sowas ja auch in OpenGl Schönen Gruß |
Re: [OpenGL] pixelweise verarbeiten
Zitat:
|
Re: [OpenGL] pixelweise verarbeiten
Hallo Nailor,
Dieser Beitrag kommt zwar reichlich spät, aber vielleicht hilft er ja doch nocht. Ich weiß, dass man in OpenGL das Quadbuffering aktivieren kann, dazu wird dann die doppelte Menge an Speicher für die Ausgabe reserviert. Das wird zum Beispiel für stereo-rendering genutzt. Vielleicht hilft dir allerdings auch schon doublebuffering weiter, wenn du den 2. Buffer noch nicht nutzt. Ich aktiviere das bei mir so:
Delphi-Quellcode:
und dann kann man den derzeit zum bearbeiten aktiven Buffer mit
RC:= CreateRenderingContext( DC,
[opDoubleBuffered], 32, 24, 0,0,0, 0);
Delphi-Quellcode:
zum aktiven Bildschirmbuffer machen.
SwapBuffers(DC);
Wahrscheinlich weißt du das alles selber, aber das war so das, was mir zur Frage nach einem weiteren Buffer einfiel. Gruß Jan |
Re: [OpenGL] pixelweise verarbeiten
Wenn ich es richtig verstanden habe, dann brauchst du eine Textur als Render-Ziel. Dh du renderst alles auf einer Textur, solle sich nichts ändern, zeichnest du sie immer wieder + Cursor. Sollte das Bedarf bestehen, etwas zu ändern, renderst wieder auf Textur und so wieter....
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 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