[DX10] Klonen einer Textur

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
kkrahl
Beiträge: 56
Registriert: 20.10.2008, 13:41

[DX10] Klonen einer Textur

Beitrag von kkrahl »

Hi

Ich versuche gerade eine Textur die als ShaderResourceView vorliegt zu klonen aber das ganze funktioniert irgendwie nicht und CopyResource hängt sich auf.

Hier mein Code:

Code: Alles auswählen

					ID3D10Texture2D* texture = NULL;	
					UINT* textureData = NULL;

					D3D10_SHADER_RESOURCE_VIEW_DESC SRVDesc;
					source->second->TextureResourceView->GetDesc(&SRVDesc);

					textureData = (UINT*) calloc(pOwnerSource.GetXSize()*pOwnerSource.GetYSize(),sizeof(UINT));
					if(!textureData)
						return Core::Logging::LogError(L"Error allocating memory!");
					for(UINT i=0;i<pOwnerSource.GetYSize();i++)
						for(UINT j=0;j<pOwnerSource.GetXSize();j++)
							*(textureData+pOwnerSource.GetXSize()*i+j) = 0xFFFFFFFF;

					D3D10_TEXTURE2D_DESC textureDesc;
					SecureZeroMemory(&textureDesc,sizeof(textureDesc));
					textureDesc.Width = pOwnerSource.GetXSize();
					textureDesc.Height = pOwnerSource.GetYSize();
					textureDesc.Format = DXGI_FORMAT_R8G8B8A8_UINT;
					textureDesc.MipLevels = 1;
					textureDesc.ArraySize = 1;
					textureDesc.SampleDesc.Count = 1;
					textureDesc.SampleDesc.Quality = 0;
					textureDesc.Usage = D3D10_USAGE_DEFAULT;
					textureDesc.BindFlags = D3D10_BIND_SHADER_RESOURCE;
					textureDesc.CPUAccessFlags = 0;
					textureDesc.MiscFlags = 0;

					D3D10_SUBRESOURCE_DATA subResDesc;
					subResDesc.pSysMem = textureData;
					subResDesc.SysMemPitch = pOwnerSource.GetXSize()*sizeof(UINT);
					subResDesc.SysMemSlicePitch = 0;
					if(FAILED(d3DDevice->CreateTexture2D(&textureDesc,NULL,&texture)))
					{
						delete textureData;
						return Core::Logging::LogError(L"CreateTexture2D failed!");
					}
					delete textureData;

					ZeroMemory(&SRVDesc, sizeof(SRVDesc));
					SRVDesc.Format = textureDesc.Format;
					SRVDesc.ViewDimension = D3D10_SRV_DIMENSION_TEXTURE2D;
					SRVDesc.Texture2D.MipLevels = textureDesc.MipLevels;
					if (FAILED(d3DDevice->CreateShaderResourceView(const_cast<ID3D10Texture2D *>(texture), &SRVDesc, &(destination->second->TextureResourceView))))
						return Core::Logging::LogError(L"CreateShaderResourceView for texture failed!");

					d3DDevice->CopyResource((ID3D10Resource*)(destination->second->TextureResourceView), (ID3D10Resource*)(source->second->TextureResourceView));

					destination->second->Texture = source->second->Texture;
Wäre für eure Hilfe sehr dankbar!

Karl

PS: Die Source-Textur wurde ursprünglich aus einer Datei geladen.
Benutzeravatar
exploid
Establishment
Beiträge: 146
Registriert: 21.08.2005, 18:33

Re: [DX10] Klonen einer Textur

Beitrag von exploid »

...
Zuletzt geändert von exploid am 04.11.2010, 12:13, insgesamt 3-mal geändert.
All your base are belong to us! Justice
kkrahl
Beiträge: 56
Registriert: 20.10.2008, 13:41

Re: [DX10] Klonen einer Textur

Beitrag von kkrahl »

@exploid

Der Unterschied liegt darin das du noch eine Textur hast ich aber in meinem Fall nur einen ShaderResourceView. Darum lege ich auch einen ShaderResourceView an um dann die Daten korrekt mit CopyResource kopieren zu können. Das anlegen und alles funktioniert ja auch wunderbar aber beim CopyResource bekomme ich dann eine Exception.

Karl
Benutzeravatar
exploid
Establishment
Beiträge: 146
Registriert: 21.08.2005, 18:33

Re: [DX10] Klonen einer Textur

Beitrag von exploid »

...
Zuletzt geändert von exploid am 04.11.2010, 12:13, insgesamt 1-mal geändert.
All your base are belong to us! Justice
kkrahl
Beiträge: 56
Registriert: 20.10.2008, 13:41

Re: [DX10] Klonen einer Textur

Beitrag von kkrahl »

Kann ich dir leider auch nicht genau sagen, so tief bin ich in der Materie auch noch nicht drinnen. In meinem Fall aber habe ich die Textur aber bereits zuvor frei gegeben um Ressourcen zu sparen denn in meiner App ist es so das ich zu irgend einem Zeitpunkt die Textur lade und dann den ShaderResourceView anlegen und ich dann zu einen beliebigen späteren Zeitpunkt das Ding klonen will.

Für denn Fall das dies grundlegend falsch ist dann klärt mich bitte auf wie die richtige Vorgehensweise ist.

Danke

Karl
Benutzeravatar
exploid
Establishment
Beiträge: 146
Registriert: 21.08.2005, 18:33

Re: [DX10] Klonen einer Textur

Beitrag von exploid »

...
Zuletzt geändert von exploid am 04.11.2010, 12:23, insgesamt 1-mal geändert.
All your base are belong to us! Justice
Benutzeravatar
Krishty
Establishment
Beiträge: 8238
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [DX10] Klonen einer Textur

Beitrag von Krishty »

Mojn,
exploid hat geschrieben:Ist es denn im Sinne des Erfinders von einem View auf eine Resource zu kopieren?
Nein.
kkrahl hat geschrieben:Kann ich dir leider auch nicht genau sagen, so tief bin ich in der Materie auch noch nicht drinnen.
Tief drin oder nicht, man wird doch wohl in die Klassenhierarchie gucken können, oder? Googlen nach shaderresourceview führt zum ID3D10ShaderResourceView-Interface. Das erbt von ID3D10View. Und das hat eine Funktion GetResource() … das Tippen eines -> im Quellcodes müsste das vielversprechende GetResource() außerdem in der Auto-Vervollständigung auflisten.
kkrahl hat geschrieben:In meinem Fall aber habe ich die Textur aber bereits zuvor frei gegeben um Ressourcen zu sparen
In 99% der Fälle ist das überflüssig. Benutzt du eine Textur nicht und brauchst den Platz, wird sie in den RAM und sogar in die Page-File ausgelagert.


… mich würde aber auch interessieren, was das Ziel ist. Geht sicher einfacher :)

Gruß, Ky
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
exploid
Establishment
Beiträge: 146
Registriert: 21.08.2005, 18:33

Re: [DX10] Klonen einer Textur

Beitrag von exploid »

---
All your base are belong to us! Justice
Antworten