Seite 1 von 5

Wozu dient CreateTexture()?

Verfasst: 03.08.2011 20:24
von ullmann
Wozu dient der Befehl CreateTexture()? Ja, er erstellt eine leere Textur. Aber wie kann man diese Textur füllen?
Ich glaube das geht nicht. Auch wenn ich ein Bild bemale, abspeichere und als Textur lade, brauche ich
CreateTexture() nicht. Damit wäre doch der Befehl überflüssig?

Re: Wozu dient CreateTexture()?

Verfasst: 03.08.2011 20:27
von STARGÅTE
Es gab mal TextturOutput() für das Drawing(), allerdings wurde der Befehl entfernt.

Re: Wozu dient CreateTexture()?

Verfasst: 03.08.2011 20:42
von ullmann
Ja, ich weiß. Aber damit wird ja wohl auch CreateTexture() überflüssig, oder?

Re: Wozu dient CreateTexture()?

Verfasst: 04.08.2011 08:23
von Falko
ullmann hat geschrieben:Ja, ich weiß. Aber damit wird ja wohl auch CreateTexture() überflüssig, oder?
So wie es aussieht, ja. Im englischen Forum hatte Rings was ins Bugforum gestellt. Leider
keine Antwort von Fred. Vielleicht hofft Fred, das Directx11 das ermöglicht.

http://www.purebasic.fr/german/viewtopi ... atetexture

Re: Wozu dient CreateTexture()?

Verfasst: 04.08.2011 12:01
von Vermilion
Als die 3D engine auf DirectX 9 umgestellt wurde hat der Befehl TextureOutput() (und somit auch CreateTexture()) seine Wirkung verloren. Wenn ich mich recht erinnere war das technisch nicht mehr umzusetzen.*

Wenn man Texturen generieren und laden will, so könnte man es über folgenden Umweg machen:
  • Image erstellen
  • Auf Image zeichnen
  • Image als Datei speichern
  • Gespeichertes Image als Textur laden (ob das Quellverzeichnis vorher oder erst danach als 3D Archiv registriert werden muss, damit die Grafik gefunden wird, kann ich jetzt nicht sagen)
Es wäre langsamer im Vergleich zum ausschließlich im Arbeitsspeicher Erstellen und Bearbeiten. Dafür sollte es funktionieren. Und bei den heutigen Datenträgern ist die Frage nach der Speichermenge, die für das kurze Zwischenspeichern benötigt wird, kein Thema mehr. Außer man meint eine hochauflösende Textur für ein Terrain zu erstellen. Das wäre dann schon etwas mehr Zeit- und Rechnaufwand.

* Nichts ist unmöglich, aber irgendwo ist auch eine Grenze, die die Umsetzung als sinnvoll eingrenzt.

Re: Wozu dient CreateTexture()?

Verfasst: 04.08.2011 12:40
von DarkDragon
Man sollte sowas sowieso nicht verwenden. Dafür gibt es Shader!

Re: Wozu dient CreateTexture()?

Verfasst: 04.08.2011 12:47
von Vermilion
DarkDragon hat geschrieben:Man sollte sowas sowieso nicht verwenden. Dafür gibt es Shader!
Zur Texturgenerierung? Mit PureBasic und der dazugehörigen OGRE engine wohl kaum zu machen. :?

Re: Wozu dient CreateTexture()?

Verfasst: 04.08.2011 17:19
von DarkDragon
Vermilion hat geschrieben:
DarkDragon hat geschrieben:Man sollte sowas sowieso nicht verwenden. Dafür gibt es Shader!
Zur Texturgenerierung? Mit PureBasic und der dazugehörigen OGRE engine wohl kaum zu machen. :?
Also statische oder zeitbasierte Texturgenerierung ist bereits möglich, dafür hat OGRE bereits vordefinierte Konstanten (HLSL)/Uniforms (GLSL), die man einbinden kann. PureBasic fehlen nur noch essentielle Befehle auch selbst Uniform Variablen zu definieren, dann könnte man wild drauf rum zeichnen mit Shadern, wie man eben gerade lust hat und ist nicht auf irgendwelche Regelmäßigkeiten wie die Zeit angewiesen.

Re: Wozu dient CreateTexture()?

Verfasst: 05.08.2011 07:47
von Danilo
DarkDragon hat geschrieben:Man sollte sowas sowieso nicht verwenden. Dafür gibt es Shader!
Kannst Du bitte mal ein Beispiel geben wie man damit
zeichnen kann? Ein Kreis mit Strich durch und darüber
den Text "Hallo PB!" bitte.

Es gibt aber auch bei DirectX9 die Möglichkeit in eine Texture zu
zeichnen. Dafür gibt es IDirect3DTexture9::LockRect und
IDirect3DTexture9::UnlockRect. LockRect gibt dabei einen
Pointer direkt zu den Bits und den Pitch zurück.
Und mit IDirect3DDevice9::UpdateTexture kann man eine
Texture vom System-Speicher in eine Texture kopieren die
im Pool/Videospeicher ist.

Re: Wozu dient CreateTexture()?

Verfasst: 05.08.2011 09:11
von Vermilion
Eigentlich läuft mir der Sabber im Mund zusammen, wenn ich nur von Shadern oder gleich GPGPU höre. Nur leider ist es nicht so einfach wie im folgenden pseudo-PureBasic Beispiel:

Code: Alles auswählen

CreateThread(@MyProcedure(), 0, #PB_Thread_GPU)
Wenn man bedenkt, wie viel schneller so manches mit der Grafikkarte von der Hand geht, dann fragt man sich, warum CPUs immer noch dafür verwendet werden. Zum Beispiel Bildbearbeitung. Unter Mac OS X ist das ja anders, da habe ich Pixelmator (quasi GIMP für Mac) und der setzt die GPU voll ein. Filter werden in Echtzeit angewendet, denen man auf anderen Systemen zusehen kann, wie sie zeilenweise umgesetzt werden.

Aber andererseits habe ich auch ein bisschen Angst. Früher hatte man eine CPU mit einem Kern und das war auch schon die einzige Sorge. Heute hat man Quadcore CPUs und GPUs mit unendlich vielen Shadern und somit auch 4 * Unendlich Sorgen. :mrgreen: Naja, gut, das ergibt jetzt nicht so viel Sinn. Kernaussage: Irgendwie verkompliziert das alles.