DirectX (C++) auf Softwarebasis ?
-
Eine dumme Frage. Kann man DirectX komplett auf Software umstellen so dass keine Grafikkarte notwendig ist ?
Ich bin mal hingegangen und habe die D3D Hardwarebeschleunigung (über dxdiag) ausgeschaltet. Danach habe ich mal geschaut, wo meine DirectX Anwendung überall kracht.
Dabei stellte ich fest, dass wenn ich die Hardwarebeschleunigung ausschalte, die Funktion CreateDevice() ein "NOTAVAILABLE" zurückliefert. Die Parameter DeviceType und BehaviorFlags wurden dabei durch die Klassen d3denumeration.cpp, d3dsettings.cpp bestimmt, welche Teil der DX SDK sind.
Beim Parameter DeviceType sah ich dass man mittels D3DDEVTYPE_SW ein Software Gerät angeben kann. Im Internet fand ich dazu auch ein kleines Beispiel, doch nur für Mobil Version von DirectX. Deswegen hier meine Frage:
Weis jemand wie man das Software Gerät hier angeben kann ? Im Beispiel wurde dies mittels einer DLL gemacht, doch leider fand ich keine passende DLL-Version für einen PC.
-
DirectX kann man durchaus alleine auf Softwarebasis laufen lassen,
doch weil das saulangsam mache ich das nie.Auf jeden Fall muss bei der CreateDevice Methode D3DCREATE_SOFTWARE_VERTEXPROCESSING angegeben werden, ob noch weitere Kriterien erfüllt sein müssen weiß ich jedoch nicht.
-
Die Angabe von Software VP lässt NICHT D3D9 in Software rendern! Das Vertex Processing gibt lediglich an, ob die Vertex Transformationen (Transform & Lighting) in HW oder SW ausgeführt werden.
Ein Software Device erstellt man durch Angabe von D3DDEVTYPE_SW bei CreateDevice. Wie man dann jedoch genau den Software Renderer implementiert weiß ich nicht. Kann mich nur noch erinnern mal gelesen zu haben, dass es ziemlich kompliziert sein soll.
-
du kannst den refras nutzen. siehe:
http://msdn2.microsoft.com/en-us/library/bb172547(VS.85).aspxdas SW flag heisst dass du selber alles zeichnen moechtest. siehe:
http://msdn2.microsoft.com/en-us/library/bb174321(VS.85).aspx
-
this->that schrieb:
Ein Software Device erstellt man durch Angabe von D3DDEVTYPE_SW bei CreateDevice. Wie man dann jedoch genau den Software Renderer implementiert weiß ich nicht. Kann mich nur noch erinnern mal gelesen zu haben, dass es ziemlich kompliziert sein soll.
Wenns dich mal interessiert, Irrlicht hat einen Software-Renderer dabei und ist OpenSource.
Kannst mir ja mal anschauen wenn du lustig bist. 
rya.
-
Scorcher24 schrieb:
this->that schrieb:
Ein Software Device erstellt man durch Angabe von D3DDEVTYPE_SW bei CreateDevice. Wie man dann jedoch genau den Software Renderer implementiert weiß ich nicht. Kann mich nur noch erinnern mal gelesen zu haben, dass es ziemlich kompliziert sein soll.
Wenns dich mal interessiert, Irrlicht hat einen Software-Renderer dabei und ist OpenSource.
Kannst mir ja mal anschauen wenn du lustig bist. 
rya.K. Generell find ich das Thema Software Rasterizer schon interessant. Aber momentan hab ich einfach zu wenig Zeit dafür^^
-
Wie man den jetzt auch immer erstellt, wenn man ersteinmal ein softwaredevice von DirectX hat, ist es da wirklich nothwendig auch noch einen eigenen Renderer zu schreiben?
Reicht es da nicht einfach die ganz normalen DirectX Funktionen zu verwenden?Weil so weit ich weiß kann man ja mit einem Softwaredevice DirectX-Features verwenden, welche die Graphikkarte nicht unterstützt. Also z.B. neue DirectX9-Features mit einer DirectX8 - Graphikkarte, was ja heißt, sofern die Information nicht falsch ist, dass diese Sachen auch auf Softwarebasis laufen.
Oder ist das was ich da gelesen habe nun blödsinn? (war glaube ich "spieleprogrammierung mit DirectX von ulrich kaiser" wenn ich mich jetzt nicht täusche, ist schon etwas länger her als ich das las)
-
@Kahino: Du redest hier vom Reference Rasterizer. Dieser ist aber nur aus Debugging-Zwecken entworfen worden und läuft deshalb nur auf Systemen, die das DirectX-SDK installiert haben (meist nur Entwickler).
Hier dazu ein Auszug aus der DX-Doku:Reference Device
Direct3D supports an additional device type called a reference device or reference rasterizer. Unlike a software device, the reference rasterizer supports every Direct3D feature. This device is intended to be used for debugging purposes and is therefore only available on machines where the DirectX SDK has been installed. Because these features are implemented for accuracy rather than speed and are implemented in software, the results are not very fast. The reference rasterizer does make use of special CPU instructions whenever it can, but it is not intended for retail applications. Use the reference rasterizer only for feature testing or demonstration purposes. To create a reference device, call IDirect3D9::CreateDevice method using D3DDEVTYPE_REF as the device type.Gruß
Don06
-
Danke für die Info, dann hatte ich das wohl falsch verstanden gehabt.