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

Aktuelle Zeit: So Jul 20, 2025 05:13

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 39 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: RenderProzedur verbessern
BeitragVerfasst: Mo Jan 18, 2010 18:12 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

hab alles hinbekommen, außer die Übergabe der Daten über die Textur. Es kommt dauernt n Zugriffsfehler wenn ich in die Scanline schreiben will. Hier ma der Code:
Code:
  1.  
  2. //Textur erzeugen
  3.   TexSize.X := fMaxLine;
  4.   TexSize.Y := fMaxData;
  5.   fDataTex  := TglBitmap2D.Create(TexSize, ifAlpha);
  6. //neue Daten hinzufügen
  7.   if BASS_ChannelIsActive(fSoundStream) = BASS_ACTIVE_PLAYING then
  8.     BASS_ChannelGetData(fSoundStream, @Data, BASS_DATA_FFT512);
  9.  
  10.   inc(fLineIndex);
  11.   if fLineIndex >= fDataTex.Width then
  12.     fLineIndex := 0;
  13.  
  14.   for i := 0 to fDataTex.Height-1 do
  15.     PByteArray(fDataTex.Scanline[fLineIndex])^[i] := Trunc(Data[i]*255);
  16.  
  17.   fDataTex.GenTexture;

Die Textur is jetzt genau so groß wie die das 2D Array der Daten das ich vorher hatte. Un jetzt müsste ich doch über den ScanlineIndex an die eine Reihe aus Daten ran kommen, in die ich dann die neuen Daten schreib, oder?!

Hier ma noch der ShaderCode nur so zur Ergänzung (und evtl. Fehlerbehebung)
Code:
  1. //Vertex
  2. uniform vec4 LDataLLineColor, HDataLLineColor, LDataHLineColor, HDataHLineColor;
  3. uniform float MaxLine, MaxData, XInterval, ZInterval;
  4. uniform sampler2D Texture0;
  5. void main(void)
  6. {
  7.     float line = abs(gl_Vertex.x)/MaxLine;
  8.     float data = abs(gl_Vertex.z)/MaxData;
  9.  
  10.     vec4 pos = gl_Vertex;
  11.    
  12.     pos.x = pos.x * XInterval;
  13.     if (pos.z < 0.0){
  14.         pos.z = (abs(pos.z)-0.125)*ZInterval;
  15.     } else {
  16.         pos.z = (abs(pos.z)+0.125)*ZInterval;
  17.     }
  18.    
  19.     pos.y = pos.y * texture2D(Texture0, vec2(line, data)).a;
  20.     //pos.y = pos.y * 0.5;
  21.    
  22.     gl_Position = gl_ModelViewProjectionMatrix * pos;
  23.    
  24.     gl_FrontColor = vec4((LDataLLineColor.r*data + HDataLLineColor.r*(1.0-data))*line +
  25.                          (LDataHLineColor.r*data + HDataHLineColor.r*(1.0-data))*(1.0-line),
  26.                          (LDataLLineColor.g*data + HDataLLineColor.g*(1.0-data))*line +
  27.                          (LDataHLineColor.g*data + HDataHLineColor.g*(1.0-data))*(1.0-line),
  28.                          (LDataLLineColor.b*data + HDataLLineColor.b*(1.0-data))*line +
  29.                          (LDataHLineColor.b*data + HDataHLineColor.b*(1.0-data))*(1.0-line),
  30.                          (LDataLLineColor.a*data + HDataLLineColor.a*(1.0-data))*line +
  31.                          (LDataHLineColor.a*data + HDataHLineColor.a*(1.0-data))*(1.0-line));
  32. }
  33. //end
  34.  
  35. //Fragment
  36. void main(void){   
  37.     gl_FragColor = gl_Color;
  38. }
  39. //end

Wenn wir das Problem mit den Daten jetzt noch in den griff bekommen bin ich glücklich ^^

€: Mir is grad aufgefallen, das irgendwas falsch sein muss. wenn ich im Shader auf die Textur zugreif un die Daten des Vertex schreiben will (pos.y = pos.y * texture2D(Texture0, vec2(line, data)).a;) dann hab ich max 1FPS. Wenn ich die Daten aber per Hand änder (pos.y = pos.y * 0.5;) läufts flüssig?!

€2: mir is nochwas eingefallen^^ Und zwar muss ich ja die Textur immer neu erstellen, wennich die Daten im Speicher änder. Gibts auch ne Möglichkeit direkt auf den TexturSpeicher zuzugriefen, oder sollte ich das ganze vlt doch ober ein VBO machen, in dem ich dann über die Farbe die Daten übergeb?!

MfG Bergmann

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: RenderProzedur verbessern
BeitragVerfasst: Mo Jan 18, 2010 21:54 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Und zwar muss ich ja die Textur immer neu erstellen, wennich die Daten im Speicher änder.

Nein, musst du nicht. Wenn du glTexSubImage2D benutzt kannst du Teile der Textur (oder auch die ganze) überschreiben ohne das sie neu erstellt wird.

Zitat:
€: Mir is grad aufgefallen, das irgendwas falsch sein muss. wenn ich im Shader auf die Textur zugreif un die Daten des Vertex schreiben will (pos.y = pos.y * texture2D(Texture0, vec2(line, data)).a;) dann hab ich max 1FPS. Wenn ich die Daten aber per Hand änder (pos.y = pos.y * 0.5;) läufts flüssig?!

Sofern das nicht am neu erstellen der Textur liegt, kann deine Grafikkarte vielleicht ein Texturzugriff im Vertexshader und schaltet deshalb in den Softwaremodus?

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: RenderProzedur verbessern
BeitragVerfasst: Mo Jan 18, 2010 22:10 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

am Neusterstellen liegts nich, ich hab ma irgend n Bild geladen un geguckt obs damit geht: Fehlanzeige. Und der Texturzugriff funktioniert bei meinen anderen Shadern auch ganz gut (allerdings im Fragment Shader). Hab ne GeForce 7800GTX, die dürfte damit doch eig keine Probleme haben, oder?!

MfG Bergmann

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: RenderProzedur verbessern
BeitragVerfasst: Mo Jan 18, 2010 22:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Laut Wikipedia hat die ShaderModel 3.0. Da gibt es einige wenige Karten die das noch nicht können, ich glaube das waren aber ATI Karten. Es kann aber auch am Treiber liegen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: RenderProzedur verbessern
BeitragVerfasst: Mo Jan 18, 2010 22:17 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Treiber is auch der aktuelle drauf (ForceWare 195.62)...

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: RenderProzedur verbessern
BeitragVerfasst: Mo Jan 18, 2010 22:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
OpenGL und GLSL Version?

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: RenderProzedur verbessern
BeitragVerfasst: Mo Jan 18, 2010 22:23 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hab ich auch den neusten Header: 3.2.2
Wo find ich die GLSL Version?

€: komisch, aufm Lappi (9200M GS) läufts 1a?! Vlt liegts ja wirklich an meiner Graka... Ich hab in letzer Zeit ab un zu Probleme beim anschalten des PCs, da hab ich nachm BootScreen n schwarzen, aber leicht blinkenden Bildschirm. Vlt hängt das ja irgendwie zusammen. Gibts irgendwo sowas wie n GrakaDiagnoseTool?

€2: selbst mit ner TexturGröße von 1x1 spinnt er total rum -.-

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: RenderProzedur verbessern
BeitragVerfasst: Mo Jan 18, 2010 23:54 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Hab ich auch den neusten Header: 3.2.2

Es geht nicht um den Header sondern um das was dir der Treiber anbietet. Ich weiß allerdings nicht wo man das in Windows sehen kann, in Linux gibt es einfach "glxinfo"

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: RenderProzedur verbessern
BeitragVerfasst: Di Jan 19, 2010 00:01 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
also HIER steht auch OpenGL 3.2...

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: RenderProzedur verbessern
BeitragVerfasst: Di Jan 19, 2010 00:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Das der Treiber das kann ist klar, die Frage ist kann er das auch mit deiner Hardware.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: RenderProzedur verbessern
BeitragVerfasst: Di Jan 19, 2010 00:40 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HIER (ganz unten rechts) steht bis OpenGL 2.0 un die 8200M GS vom Lappi kann OpenGL 2.1 und Shader 4.0. Also liegts denk ich ma wirklich am Shader, weil so weit ich das überblicken kann benutz ich max OpenGL 2.0 Fuktionen für die Shader, der Rest dürfte 1.5 sein...
Aber liegt es denn nahe, das der Texturzugriff im Vertexshader ruckelt wie sau, un im Fragmentshader 1a funzt?

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: RenderProzedur verbessern
BeitragVerfasst: Di Jan 19, 2010 00:45 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ja, weil Texturzugriff im Vertexshader vergleichweise neu ist, das wurde mit Shader 3.0 eingeführt. Allerdings ist nirgendwo so genau definiert was Shader 3.0 beinhaltet und daher können das dann einige Karten mit Shader 3.0 Label dann doch nicht oder irgendwie so.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: RenderProzedur verbessern
BeitragVerfasst: Di Jan 19, 2010 01:09 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hm, also muss ich das jetzt doch irgendwie anders machen. Wie bekomm ich die Daten jetzt vernünftig in den Shader?!

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: RenderProzedur verbessern
BeitragVerfasst: Di Jan 19, 2010 09:52 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Texturen und TBOs sind die einzige Möglichkeit größere Datenmengen in den Shader zu bekommen. Wenn bei dir nichtmal normale Texturen gehen, fallen TBOs definitiv aus.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: RenderProzedur verbessern
BeitragVerfasst: Di Jan 19, 2010 14:21 
Offline
DGL Member

Registriert: Mo Nov 06, 2006 19:15
Beiträge: 172
Schau mal, in diesem PDF steht: "NVIDIA Grafikprozessoren bieten die umfassendste Implementierung der Shader Model 3.0 Funktionalität, inklusive Vertex Texture Fetch (VTF)"

Stichwort "umfassende Implementierung": Coolcat hat Recht mit dem Schlupfloch in der SM 3.0 Definition. Allerdings wurde dieses von ATi genutzt, weil dort bereits SM 2.0-Karten wie die 9600er über eine Erweiterung Namens Render-to-Vertex-Buffer ähnliche Anwendungsbereiche abdecken konnten.
Du hast zwar eine GTX-Karte aber was für die GS-Variante gilt müsste auch für die GTX stimmen. Jetzt sind wir so schlau wie vorher. Eigentlich müsste Vertex-Texture-Fetch gehen, scheint aber auf Software zurückzufallen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 39 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]