DirectX 9: Per RenderToSurface in Surface schreiben klappt nicht



  • Hallo zusammen

    Da ich mir in den Kopf gesetzt habe, meiner 2D-Engine ein Post-Processing per Pixel-Shader zu spendieren, rendere ich meine ganze Szene in einem ersten Schritt in eine Textur. In einem nächsten Schritt soll die Textur dann mit aktiviertem Shader auf den Screen gezeichnet werden.

    Soviel zum Plan. Leider scheitere ich aber schon beim Bearbeiten des Surfaces, in welches ich die Szene rendern will.

    Ich mache sowas:

    //Textur für Szene erstellen
    m_pDev->CreateTexture(resx, resy, 1, D3DUSAGE_RENDERTARGET, D3DFMT_X8R8G8B8, D3DPOOL_DEFAULT, &m_pSceneTexture, 0);
    m_pSceneTexture->GetSurfaceLevel(0, &m_pSceneSurface);
    

    wenn ich danach per

    m_pDev->ColorFill(m_pSceneSurface, 0, D3DCOLOR_XRGB(240,240,240));
    DumpSurface(m_pSceneSurface);
    

    das Surface testweise in eine BMP-Datei schreiben lasse, zeigt er mir aber nur schwarz an (dasselbe, wenn ich über ein Sprite etwas ins Surface rendern will).

    Woran könnte es liegen, dass mein Surface unangetastet bleibt?

    Greez

    PS: Der Vollständigkeit halber die Dump-Methode:

    void BBGD3D::DumpSurface(LPDIRECT3DSURFACE9 surface)
    {
    	if(m_iDumpCount < 10)
    	{
    		IDirect3DSurface9* pDestTarget=NULL;
    		D3DDISPLAYMODE d3ddisplaymode;
    		// get the current adapter display mode.
    		m_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,
    			&d3ddisplaymode);
    		// create a destination surface.
    		m_pDev->CreateOffscreenPlainSurface(m_iResX,
    			m_iResY,
    			d3ddisplaymode.Format,
    			D3DPOOL_SYSTEMMEM,
    			&pDestTarget,
    			NULL);
    		//copy the render target to the destination surface.
    		m_pDev->GetRenderTargetData(surface,
    			pDestTarget);
    		//save its contents to a bitmap file.
    		char file[100];
    		sprintf(file, "C:\\temp\\debugoutput\\%d.bmp", ++m_iDumpCount);
    		D3DXSaveSurfaceToFile(file,
    			D3DXIFF_BMP,
    			pDestTarget,
    			NULL,
    			NULL);
    
    		// clean up.
    		pDestTarget->Release();
    	}
    }
    


  • Hat sich erledigt! War ein völlig anderer Fehler.

    => kann geschlossen werden.


Anmelden zum Antworten