Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

15.03.2010, 19:38

GPU Texture manipulation

Hi,
ich wollte mal wissen, ob es, ohne auf CUDA oder OpenCL 'zurück'-zugreifen, möglich ist, mit OpenGL oder Direct3D9 Texture-Daten GPU-beschleunigt zu manipulieren.
Z.B. die Texture horizontal/vertikal spiegeln. Das dauert mit der CPU immer recht lange und solche niederen Arbeiten sollten doch für die GPU nun wirklich nicht zu kompliziert sein.
Oder lassen sich solche Dinge vielleicht ganz gut mit Shadern lösen?
Am liebsten wär mir ja ne Funktion wie "glFlipTexImage2D(GL_TEXTURE_2D, GL_VERT, 256, 256, ImageBuffer)" :D

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

15.03.2010, 21:23

Ja ist möglich. Wenns aber nur ums spiegeln geht kannst du auch einfach die Texcoords umdrehen :p

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

3

16.03.2010, 09:45

Und wenn ich die TexCoords nicht umdrehen will? ;)
Das hat schon einen Grund, warum ich die Daten 'spiegeln' will.
Und wie geht das? Mit Shader wahrscheinlich, hab ich Recht?

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

4

16.03.2010, 10:49

naja sample sie doch einfach andersrum aus der textur^^ das ist doch spiegeln, da werden dann auch die texturcoords nicht verändert.

5

16.03.2010, 10:54

Probiers doch mal mit Samplerstates.
AdressU, AdressV = MIRROR

Oh, Tromml war schneller...

Alyx

Treue Seele

Beiträge: 236

Wohnort: Hannover

Beruf: Head Of Software Development

  • Private Nachricht senden

6

16.03.2010, 11:29

@Lukas: Ich würde Geld drauf wetten, dass es ... wenn es sauber programmiert ist... schneller geht sie auf CPU-Seite zu spiegeln und dann gespiegelt upzuloaden als sie ungespiegelt hochzuladen und dann mit der GPU zu spiegeln, wenn es nur eine einmalige Aktion ist.

Wenn es bei dir auf der CPU so langsam ist, vergewaligst du entweder den CPU-Cache oder hast sonst irgendwo was grobes verbrochen.
Da ich im Softpixel-Engine kein performantes Speicher-Management entdecken konnte, sondern eher direkte new und stl-Aufrufe, gehe jetzt einfach mal davon aus, dass du irgendwo new BYTE[Width*Height*PixelSize] machst, was dann auch schon der Grund für deinen Bottleneck auf CPU-Seite wäre.
Bau dir mal einen Speichermanager dahinter und mach das ganze nochmal und deine Geschwindigkeit wird sich mit ziemlicher Sicherheit mindestens verzehnfachen.

Wir haben hier vor einigen Jahren mal exzessiv Tests durchgeführt in Hinsicht auf CPU Vs. GPU und es gibt Bereiche, da ist die GPU definitiv unschlagbar, wie zum Beispiel wenn du deine Bilder nun alle von 723x723 auf 512x512 bikubisch verkleinern wolltest, sie um X Grad rotieren wolltest oder ähnliches, aber bei so "stupiden" Aufgaben wie dem Beispiel mit dem Spiegeln war die CPU immer schneller, weil der Overhead der API-Aufrufe alleine schon größer ist als die Zeit, die die CPU braucht, um das Bild schon komplett zu spiegeln.

LG
Alyx

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

16.03.2010, 11:56

Gib mal etwas mehr Info was genau du da vorhast. Was für Daten sind in dieser Textur und warum, wann und wie oft willst du sie spiegeln!? Wenn es nur darum geht dass du ein Bild geladen und dann gespiegelt haben willst dann mach das einfach gleich beim laden des Bildes. Da wirst du mit der GPU kaum was rausholen...

Werbeanzeige