AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [OpenGL] pixelweise verarbeiten
Thema durchsuchen
Ansicht
Themen-Optionen

[OpenGL] pixelweise verarbeiten

Ein Thema von nailor · begonnen am 15. Mai 2004 · letzter Beitrag vom 3. Dez 2005
Antwort Antwort
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#1

[OpenGL] pixelweise verarbeiten

  Alt 15. Mai 2004, 13:59
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
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: [OpenGL] pixelweise verarbeiten

  Alt 15. Mai 2004, 17:52
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
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#3

Re: [OpenGL] pixelweise verarbeiten

  Alt 15. Mai 2004, 18:01
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
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
moritz

Registriert seit: 18. Apr 2003
1.037 Beiträge
 
#4

Re: [OpenGL] pixelweise verarbeiten

  Alt 15. Mai 2004, 18:02
Ich werd aus beiden Beiträge ned schlau
"Optimistisch ist diejenige Weltanschauung, die das Sein höher als das Nichts stellt und so die Welt und das Leben als etwas an sich Wertvolles bejaht."
Albert Schweitzer
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#5

Re: [OpenGL] pixelweise verarbeiten

  Alt 15. Mai 2004, 20:35
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
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
moritz

Registriert seit: 18. Apr 2003
1.037 Beiträge
 
#6

Re: [OpenGL] pixelweise verarbeiten

  Alt 15. Mai 2004, 20:57
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ß
"Optimistisch ist diejenige Weltanschauung, die das Sein höher als das Nichts stellt und so die Welt und das Leben als etwas an sich Wertvolles bejaht."
Albert Schweitzer
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#7

Re: [OpenGL] pixelweise verarbeiten

  Alt 15. Mai 2004, 21:03
Zitat von Onz:
Vielleicht gibt es sowas ja auch in OpenGl
das will ich doch grade rausfinden
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: [OpenGL] pixelweise verarbeiten

  Alt 3. Dez 2005, 13:55
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:
RC:= CreateRenderingContext( DC,
                               [opDoubleBuffered],
                               32,
                               24,
                               0,0,0,
                               0);
und dann kann man den derzeit zum bearbeiten aktiven Buffer mit

SwapBuffers(DC); zum aktiven Bildschirmbuffer machen.

Wahrscheinlich weißt du das alles selber, aber das war so das, was mir zur Frage nach einem weiteren Buffer einfiel.

Gruß
Jan
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: [OpenGL] pixelweise verarbeiten

  Alt 3. Dez 2005, 14:10
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....
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  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 06:24 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