(gelöst)Directx10, Render to Texture, Screenshot machen?

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

(gelöst)Directx10, Render to Texture, Screenshot machen?

Beitrag von witziok »

Hallo Leute, hoffe mir kann jemand helfen

habe folgendes Problem:

Immer wenn ich Screenshots aus (Render to Texture) machen will kommt nur schwarzes Bild.
Ich Render meine Wolken in eine extra RenderTarget Texture 128x128pixel was auch funktioniert ohne Probleme, nur das GetResource wohl nix liefert?

Der Zweck ist: die Pixeldaten auslesen und checken wo die sonne durch Wolken verdeckt ist und wo nicht. (siehe weiter unten Bild)

Code: Alles auswählen

                        m_pRenderTV->GetResource( &pScreen2 ); // (ID3D10RenderTargetView)
                        //m_pSRView->GetResource( &pScreen2 ); // (ID3D10ShaderResourceView) geht auch net

			D3D10_TEXTURE2D_DESC texDesc5;
			texDesc5.ArraySize = 1;
			texDesc5.BindFlags = 0;
			texDesc5.CPUAccessFlags = 0;
			texDesc5.Usage = D3D10_USAGE_DEFAULT;
			texDesc5.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
			texDesc5.Width = m_Viewport.Width;
			texDesc5.Height = m_Viewport.Height;
			texDesc5.MipLevels = 1;
			texDesc5.MiscFlags = 0;
			texDesc5.SampleDesc.Count = 1;
			texDesc5.SampleDesc.Quality = 0;

			ID3D10Texture2D *texture3 = 0;
			if ( FAILED( g_pDevice->CreateTexture2D( &texDesc5, 0, &texture3 ) ) ) {
				writeProtocol("CreateTexture2D FAILED!!!", "a+");
			}
			g_pDevice->CopyResource( texture3, pScreen2 );
			


			if ( FAILED( D3DX10SaveTextureToFileA(texture3, D3DX10_IFF_JPG, "test.jpg") ) ) {
				writeProtocol("D3DX10SaveTextureToFileA FAILED!!!", "a+");
			} else {
				writeProtocol("D3DX10SaveTextureToFileA OK", "a+");
			}

			SAFE_RELEASE(m_pSRView2);

			D3DX10_IMAGE_LOAD_INFO loadinfo;
			if ( FAILED( D3DX10CreateShaderResourceViewFromFileA(g_pDevice, "test.jpg", &loadinfo, NULL, &m_pSRView2, NULL) ) )  {
				writeProtocol("D3DX10CreateShaderResourceViewFromFileA FAILED!!!", "a+");
			} else {
				writeProtocol("D3DX10CreateShaderResourceViewFromFileA OK", "a+");
			}

Dateianhänge
swdxe1.jpg
Zuletzt geändert von witziok am 10.02.2013, 20:51, insgesamt 1-mal geändert.
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: Directx10, Render to Texture, Screenshot machen?

Beitrag von witziok »

hmmmmm hat keiner eine Idee oder schon mal so was gemacht?

Render to Texture ist ja einfach... blos davon ein Screenshot machen geht nicht, was gehen müsste.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Directx10, Render to Texture, Screenshot machen?

Beitrag von dot »

Funktioniert das CopyResource()? Was sagt die Debug Runtime!? Warum kopierst du die Textur überhaupt?
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: Directx10, Render to Texture, Screenshot machen?

Beitrag von witziok »

Hallo,

laut MS hat CopyResource keine return Parameter.
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Code: Alles auswählen

void CopyResource(
  [in]  ID3D10Resource *pDstResource,
  [in]  ID3D10Resource *pSrcResource
);

Ich will an die Pixel Daten aus der Texture wo gerendert wurde.

Wenn ich z.b. Screenshot mache, aus dem haupt RenderTarget funktioniert es.
Aus dem RenderTarget wo ich Render To Texture mache, zeigt immer nur schwarzes Bild an. Gerendert wird aber alles richtig.
RazorX
Establishment
Beiträge: 156
Registriert: 23.12.2010, 14:13
Kontaktdaten:

Re: Directx10, Render to Texture, Screenshot machen?

Beitrag von RazorX »

Also unter der Berücksichtigung das du die "Remarks" Sektion des verlinkten MSDN Artikels gelesen hast (und diese aufgelisteten Fälle ausgeschlossen werden können): Ist das RenderTarget möglicherweise noch als ein aktuelles RenderTarget gesetzt? Ansonsten würde ich empfehlen bei der Erstellung des D3D Devices das Flag D3D10_CREATE_DEVICE_DEBUG anzugeben und im Ausgabefenster deiner IDE den wohl auftretenen Fehler zu lesen.
Ich Render meine Wolken in eine extra RenderTarget Texture 128x128pixel was auch funktioniert ohne Probleme, nur das GetResource wohl nix liefert?
Deswegen prüft man ja auch ob der zurückgegebene Pointer ein nullptr ist, um an der Stelle sicherzustellen weitere Operationen auf eine valide Ressource durchzuführen.
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: Directx10, Render to Texture, Screenshot machen?

Beitrag von witziok »

ok ,danke... werde erstmal alles genau prüfen.
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: Directx10, Render to Texture, Screenshot machen?

Beitrag von witziok »

soooo habe Fehler nun gefunden... :)

ich habe ganze Zeit falsches texture format verwendet ooo man und ich war da 4 Tage am blöd Fehler suchen :(

Der Texture Format muss immer genau gleich sein wie der RenderTarget und bei mir war die ganze zeit falsch!
RenderTarget: DXGI_FORMAT_R32G32B32A32_FLOAT
neue Texture: DXGI_FORMAT_R8G8B8A8_UNORM

jetzt sind beide Texturen auf: DXGI_FORMAT_R32G32B32A32_FLOAT und es geht juuuhuuu :)


Danke RazorX
hast mich, dazu gebracht die Doku's besser durch zu lesen :)
Antworten