locked
Software Rendering RRS feed

  • Frage

  • Hallo zusammen,

    zunächst mal ein großes Lob für die tolle Idee zu diesem großartigen Projekt!!!

    Da ich nunmal leider nur eine in den Chipsatz integrierte Grafikeinheit besitze, wollte ich dochmal Rocket Commander compilieren mit eingeschaltetem Softwarerenderer.
     Also habe ich die entsprechende Stelle in GraphicsForm.cs gesucht und geändert in:

    device = new Device(0, DeviceType.Software, // vorher: DeviceType.Hardware
                                form,
                                CreateFlags.SoftwareVertexProcessing | 
    // vorher: CreateFlags.HardwareVertexProcessing |
                                CreateFlags.PureDevice, presentParams);

    Nun wird aber device leider zu null.
    Kann mir jemand sagen, was ich falsch mache und was ich ggf. noch beachten müsste, um das Spiel mit Softwarerenderer zu sehen. Ich bin mir durchaus bewußt, dass die Performance eher bescheiden sein wird, aber ich würde es trotzdem gerne ausprobieren.

    Schönen Gruß
        Alex

    Sonntag, 17. September 2006 16:17

Antworten

  • Es gibt leider kein Standard Software Modus in DirectX, man kann sich zwar ueber DirectX plugins Software Renderer schreiben, aber das is ne Menge Arbeit und ich wuesste auch nit, wer das ueberhaupt tut.

    Man kann aber DirectX im Reference Device Modus laufen lassen. Das ist z.b. bei Direct3D 10 nuetzlich um zu sehn was alles geht. Hardware fuer D3D 10 gibt es ja noch nicht.

    Zurueck zum Problem: Du hast ausserdem angegeben, dass Du ein "PureDevice" haben willst, welches natuerlich im Software oder Reference Modus nicht bereitgestellt werden kann. Benutz einfach folgenden Code:

    device = new Device(0, DeviceType.Reference,
    form, CreateFlags.SoftwareVertexProcessing, presentParams);

    Ausserdem noch paar andere Sachen beachten: Kein Multisampling benutzen (extrem lahm) und die Shader werden auch nicht ohne weiteres gehen. In meinem Test hat die Engine das aber selbststaendig gemerkt und macht den Fallback auf Fixed Function. Mit ein bisschen Arbeit kann man sicher auch die Shader in Software laufen lassen, aber das wird extrem langsam. Der DirectX Software Modus wuerde recht schnell laufen, denk ich mal, aber der Reference Modus ist halt by Design nur zum Testen und natuerlich arschlangsam (1fps, wenn du nen schnellen Computer hast)|.

    Dann mal viel Spass im Reference Modus.
    Montag, 18. September 2006 14:49

Alle Antworten

  • Es gibt leider kein Standard Software Modus in DirectX, man kann sich zwar ueber DirectX plugins Software Renderer schreiben, aber das is ne Menge Arbeit und ich wuesste auch nit, wer das ueberhaupt tut.

    Man kann aber DirectX im Reference Device Modus laufen lassen. Das ist z.b. bei Direct3D 10 nuetzlich um zu sehn was alles geht. Hardware fuer D3D 10 gibt es ja noch nicht.

    Zurueck zum Problem: Du hast ausserdem angegeben, dass Du ein "PureDevice" haben willst, welches natuerlich im Software oder Reference Modus nicht bereitgestellt werden kann. Benutz einfach folgenden Code:

    device = new Device(0, DeviceType.Reference,
    form, CreateFlags.SoftwareVertexProcessing, presentParams);

    Ausserdem noch paar andere Sachen beachten: Kein Multisampling benutzen (extrem lahm) und die Shader werden auch nicht ohne weiteres gehen. In meinem Test hat die Engine das aber selbststaendig gemerkt und macht den Fallback auf Fixed Function. Mit ein bisschen Arbeit kann man sicher auch die Shader in Software laufen lassen, aber das wird extrem langsam. Der DirectX Software Modus wuerde recht schnell laufen, denk ich mal, aber der Reference Modus ist halt by Design nur zum Testen und natuerlich arschlangsam (1fps, wenn du nen schnellen Computer hast)|.

    Dann mal viel Spass im Reference Modus.
    Montag, 18. September 2006 14:49
  • Hi abi,

    zunächst mal vielen Dank für deine ausführliche Antwort. Der Reference Mode war das was ich eigentlich wollte (ich hatte nur noch im Kopf, dass DirectX bei Bedarf ALLES in Software berechnen kann). Leider hat das Codeschnipsel noch nicht den gewünschten Erfolg gebracht.

    ich erhalte nachwievor die folgende Fehlermeldung:

    Unable to create DirectX device for this game (software rendering is not supported, it is way to slow).
    Your graphic card does most likely do not support DirectX 7, 8 or 9 (the game works with ps2.0, ps1.1 or no shaders at all).
    Further information can only be determinated in the debug mode.
    Error: Error in the application.
        System.Exception: Unable to create DirectX device for this game (software rendering is not supported, it is way to slow).
        Your graphic card does most likely do not support DirectX 7, 8 or 9 (the game works with ps2.0, ps1.1 or no shaders at all).
        Further information can only be determinated in the debug mode.
        Error: Error in the application. ---> Error in the application.
        -2005530518 (D3DERR_NOTAVAILABLE)
        at Microsoft.DirectX.Direct3D.Device..ctor(Int32 adapter, DeviceType deviceType, Control renderWindow, CreateFlags behaviorFlags, PresentParameters[] presentationParameters)
        E:\Rocket Commander\RocketCommanderSourceCodeV1.1\Rocket Commander\Graphics\GraphicForm.cs(900,0): at RocketCommander.Graphics.GraphicForm.InitializeDirectX(Form form, Size setResolution, Boolean setFullscreen)
           --- End of inner exception stack trace ---
        E:\Rocket Commander\RocketCommanderSourceCodeV1.1\Rocket Commander\Graphics\GraphicForm.cs(1014,0): at RocketCommander.Graphics.GraphicForm.InitializeDirectX(Form form, Size setResolution, Boolean setFullscreen)
        E:\Rocket Commander\RocketCommanderSourceCodeV1.1\Rocket Commander\Game\GameForm.cs(171,0): at RocketCommander.Game.GameForm..ctor(String title, Size resolution, Boolean fullscreen)
        E:\Rocket Commander\RocketCommanderSourceCodeV1.1\Rocket Commander\Game\GameForm.cs(498,0): at RocketCommander.Game.GameForm.StartTest(String title, RenderDelegate initDelegate, RenderDelegate renderDelegate)
        E:\Rocket Commander\RocketCommanderSourceCodeV1.1\Rocket Commander\Game\BaseAsteroidManager.cs(1463,0): at RocketCommander.Game.BaseAsteroidManager.TestRenderingAsteroids()
        E:\Rocket Commander\RocketCommanderSourceCodeV1.1\Rocket Commander\UnitTesting.cs(50,0): at RocketCommander.UnitTesting.StartTest()

    Beim Debuggen fällt auf, dass device trotz neuem Code immer noch null ist. Muss ich vielleicht noch die Settings vorher anpassen?

    Schönen Gruß
        Alex


    Montag, 18. September 2006 17:11
  • Hi,

    ich habe das Problem jetzt gelöst. Alles funktioniert nachdem ich das DirectX SDK nochmal neu installiert habe und ja, es ist eine slideshow bei 1 FPS :-)

    Jedenfalls danke für Hilfe soweit - so kann ich wenigstens mal ein paar Originalbilder sehen...

    Schönen Gruß
        Alex
    Dienstag, 19. September 2006 22:04