Korrekt in mehrere Swap Chains rendern



  • Ach ja, hier noch der Initialisierungscode, vielleicht hab ich da ja nen dicken Schnitzer drin:

    ZeroMemory(&stPresParms, sizeof(D3DPRESENT_PARAMETERS));
    
    stPresParms.BackBufferWidth	= 0;
    stPresParms.BackBufferHeight	= 0;
    stPresParms.BackBufferFormat	= stBitsPixel;
    stPresParms.BackBufferCount		= 1;
    stPresParms.MultiSampleType		= D3DMULTISAMPLE_NONE;
    stPresParms.SwapEffect		= D3DSWAPEFFECT_COPY;
    stPresParms.hDeviceWindow		= g_h3D;
    stPresParms.Windowed		= true;
    stPresParms.EnableAutoDepthStencil	= false;
    stPresParms.Flags			= D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
    
    if (FAILED(pstD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, NULL, 
    		D3DCREATE_SOFTWARE_VERTEXPROCESSING, &stPresParms, &pstDevice)))
    {	
    	fout << "Kritischer Fehler: Kreierung des Devices fehlgeschlagen!\n";
    
    	return false;
    }
    
    pstDevice->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &pstBackBuffer0);
    
    stPresParms.hDeviceWindow = g_hXYFront;
    
    pstDevice->CreateAdditionalSwapChain(&stPresParms, &pstChain1);
    
    pstChain1->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &pstBackBuffer1);
    
    stPresParms.hDeviceWindow = g_hXZTop;
    
    pstDevice->CreateAdditionalSwapChain(&stPresParms, &pstChain2);
    
    pstChain2->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &pstBackBuffer2);
    
    stPresParms.hDeviceWindow = g_hYZSide;
    
    pstDevice->CreateAdditionalSwapChain(&stPresParms, &pstChain3);
    
    pstChain3->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &pstBackBuffer3);
    

    Grüße

    JensE



  • Hi,

    Du musst die Width und Height nach jedem Aufruf von IDirect3dDevice9::CreateDevice oder IDirect3DDevice9::CreateAdditionalSwapChain jeweils wieder auf 0 setzen, denn diese Funktionen setzen die tatsächliche Höhe und Breite in der Present Parameters Struktur. Deine Fenster habe also alle die Grösse des erstens Fensters. So lange die folgenden drei Fenster eine andere Grösse haben ist das ein Fehler.

    Ciao,
    Stefan



  • Das war auch nicht die Lösung, zuerst hab ich es einfach so gemacht, wie du vorgeschlagen hast, und dann hab ich mir einfach mal ausgeben lassen, ob CreateDevice() oder CreateAdditionalSwapChain() die Werte von Width und Height verändern, was nicht der Fall war.

    Die Lösung war: Man muss auch Clear() für jede SwapChain einzeln aufrufen, nachdem man das Render Target gesetzt hat, so hat es zumindest bei mir funktioniert.

    @Stefan: Danke vor allem für den Tipp mit dem Depth Buffer.

    Sehr gutes Forum! 👍



  • Hi,

    der Wert wird schon neu in die Struktur geschrieben. Nur wenn, wie bereits oben erwähnt, alle vier Fenster bei Dir die gleiche Width/Height haben sieht man das eben nicht. Daher ist es sinnvollen vor jedem Aufruf die Variablen wieder auf 0 zu setzen 😉

    Ciao,
    Stefan



  • JensE schrieb:

    Es soll ein Renderprogramm werden, deshalb die vier Fenster!

    Warum muss ein Renderprogramm 4 Fenster haben?

    Bye, TGGC (Der Held ist zurück)



  • Kannst du mal den vollständigen Code posten? Bei mir hakt da noch was, aber ich weiß nocht nicht was, daher würde ich gerne sehen wie du das gemacht hast... 🙄



  • Hehe, nach 'nem Jahr kann meine Frage immer noch nicht beantwortet werden.

    Bye, TGGC (Keine Macht den Dummen)



  • ? I don't know about what you speak. 🤡



  • Sachmal, gibt es diesen Jens B oder wie er heißt eigentlich noch? 😮

    Oder hat jemand andeses mal aus seiner App nen example wie man das machen kann. Bei mir geht alles gut bis ich eine der Funktionen aufrufe ^^



  • Hat ihn nen Auto überfahren 😮 Hat denn jemand anderes nen Funktionierenden Code? meiner stürzt immer ab.


Anmelden zum Antworten