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:
//Textur erzeugen
TexSize.X:= fMaxLine;
TexSize.Y:= fMaxData;
fDataTex := TglBitmap2D.Create(TexSize, ifAlpha);
//neue Daten hinzufügen
if BASS_ChannelIsActive(fSoundStream)= BASS_ACTIVE_PLAYING then
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)
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?!
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?
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?!
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.
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 -.-
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"
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?
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.
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.
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.
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.