Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 00:11

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Texturen direkt ändern
BeitragVerfasst: Mo Feb 15, 2010 16:17 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 18, 2009 07:17
Beiträge: 44
Wohnort: Gießen/Hessen
Hallo DGL,

ich war schon länger nicht mehr hier, und muss sagen das neue Web-Layout ist übersichtlicher als das Alte, obwohl ich im Geiste immer noch das Alte vor mir sehe... war auch nicht schlecht. :)

Ok, zu meinem Problem ,

ich arbeite gerade an einem Programm das Bilder darstellen und manipulieren soll. Eine Version als nur Windows DC habe ich bereits fertig, jetzt soll OpenGL zum Einsatz kommen, da ich denke das hier viel Perfomance verschenkt würde, wenn ungenutzt. Ich habe alles auch soweit das das verschieben der geladenen Texturen, Transparenz, Skalierung etc... auch funktioniert und das prächtig.

Jetzt habe ich aber das Problem das wenn ich z.B. Teile des Bildes löschen möchte, (z.B. mit Radiergummi) das ich eine komplett neue Textur erstellen muss (für Jedes betroffene Bild ca 10MB * 10) und das in Echtzeit, und hier liegt mein Problem. Wie bekomme ich die Texturen quasi in Echtzeit manipuliert, oder ist OpenGL nicht dafür geeignet. Ich frage mich auch wie die Entwickler von Compiz das unter Linux mit der OpenGL Unterstüztung geregelt haben, dort kann man ja auch direkt auf den Bildschirm zeichnen, und das innerhalb eines OpenGL-Renderkontextes.

Danke für Eure Hilfe.
G-DC!

_________________
Gruß Andreas (aka DeepCopy) - Sic Luceat Lux

Classified Directive: initialization write in function for finalization, repeat until public case uses begin, if not case type as default, var in virtual override for while, in case of class type type asm until read begin.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen direkt ändern
BeitragVerfasst: Mo Feb 15, 2010 16:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Du kannst nicht nur auf den Bildschirm sondern auch in Texturen rendern. Stichwort: FBO.

Um nur Teile einer Textur zu ersetzen kann auch glCopyTexSubImage2D ganz hilfreich sein. Das funktioniert wie glTexSubImage2D, liest aber aus anderen Texturen oder dem Framebuffer.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen direkt ändern
BeitragVerfasst: Di Feb 16, 2010 09:24 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Du kannst per Shader brushes erstellen und direkt in das FBO rendern, ohne wieder auf die CPU und RAM gehen zu müssen.
Dazu hat Nvidia in wärend der GF6 generation einiges gemacht guckst du hier http://developer.download.nvidia.com/shaderlibrary/packages/paint_brush.zip.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen direkt ändern
BeitragVerfasst: Di Feb 16, 2010 17:23 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 18, 2009 07:17
Beiträge: 44
Wohnort: Gießen/Hessen
Danke für die Tipps,
aber ich muss mit dem Projekt noch bis Ende es Monats fertig werden, und kann jetzt
unmöglich damit anfangen shader zu erlernen, ich habe mir das so gedacht.

Ich speichere ein Bitmap das bereits als Textur vorhanden ist, stelle die Texturen
dar so wie bisher, und verwende zum Ändern der Texturen nur die Teile die sich
auf dem Bitmap geändert haben, und lade die Änderungen mit glCopyTexSubImage2D
in die Textur ein, und stelle es wie gehabt im render context dar.

Ich meine damit das ich eigentlich einen virtuellen Arbeitsbereich habe, der mit dem
Grafikkarteninhalt identisch ist, und eben diesen, anstelle der Grafikkarte bearbeite.

Vorteil für mich, ich kann alle Funktionen des device contextes nutzen, linen, rechtecke
ROP-Codes, kreise... etc... Und brauche keinen komplette neuen Code zu schreiben!

Ich hoffe ich habe klar genug ausdrückt, das ganze ist halt ein wenig komplizierter.

_________________
Gruß Andreas (aka DeepCopy) - Sic Luceat Lux

Classified Directive: initialization write in function for finalization, repeat until public case uses begin, if not case type as default, var in virtual override for while, in case of class type type asm until read begin.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen direkt ändern
BeitragVerfasst: Di Feb 16, 2010 17:39 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Compiz nutzt Shaderprogramme, die alten halt.
Die Lösung die du dir Vorstellst wird auf jeden Fall laufen aber ist halt komplexer und langsamer als über Shader aber da du nicht drin bewandert bist dauert es dann wohl noch einiges länger.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen direkt ändern
BeitragVerfasst: Di Feb 16, 2010 20:29 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ist die von DeepCopy genannte glFunktion die schnellste NichtShader Methode um Texturbereiche auszutauschen? Nur so als Frage, ich hatte da im Hinterkopf, dass es auch eine veraltete Variante gab, die extrem schlecht performt.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen direkt ändern
BeitragVerfasst: Di Feb 16, 2010 21:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Die Frage ist was man möchte. glCopyTexSubImage2D schreibt einfach nur in den Speicher der Grafikkarte. Will man aber z.B. viele identische Muster in die Textur schreiben (Brush) ist wahrscheinlich ein FBO schneller. Die FBO-Variante kann von der Grafikkarte parallel ausgeführt werden, während glCopyTexSubImage2D in jedem Fall sequenziell läuft und CPU sowie GPU bindet.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen direkt ändern
BeitragVerfasst: Mi Feb 17, 2010 10:13 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
In einen FBO zu malen ist von der Perf mit einem normalen Szenen Rendern in ein FBO zu vergleichen nur dank scissor kann man das sogar um ein vielfaches beschleunigen(mehr mit deferred shading zu vergleichen). Man muss allerdings beachten, das die Performance dann stark vom Brush abhängt. Man macht ein Texturbinding auf das Brush und legt die Farbe z.B. über die Vertexcolor fest. Dann kann man dann malt man das Brush auf das FBO, hierbei braucht man 2 lesezugriffe(FBO aktuell,Brush) bei Texturbrushes pro Pixel und 1 schreibzugriff(neuer FBO Pixel). Einfach ein Quad mit der Textur zeichnen und kein glClear nutzen(das blending macht dann die arbeit). Man kann auch die ganzen Postscreenfeatures und so weiter drauf anwenden, die sind natürlich wesentlich rechenintensiver aber selbst das ist ein Witz, da ja jedes game von vor 3-4 Jahren selbst sowas schon macht.
Adobe Photoshop wird seit CS1 oder 2 schon experimentell mit OpenGL1.5>= und glsl das interne rechnen auf cpu ersetzt, guck mal bei youtube rein, findest einige videos von denen.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], Majestic-12 [Bot] und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 15 Queries | GZIP : On ]