Is This normal behavior for a ID3D10ShaderResourceView bound to a rendertarget

Started by
-1 comments, last by ankhd 9 years, 4 months ago

Hi.

I have 2 image boxes I created for a UI system they both have there mesh material and a over ride material.

this over ride material gets set when setmaterial 1 button and set material 2 buttons are pressed.

I have a render target set for rendering meshes and that targts ID3D10ShaderResourceView gets copyed to the image boxes material.

Now picture this there is 2 image boxes on the screen 1 on the left and one on the right with a button under each.

The only time the render target is invoked is when one of the 2 button are pressed(its not a real time render)

after rendering depending if it was button 1 or 2 I set there materials ID3D10ShaderResourceView to the render targets ID3D10ShaderResourceView

thats ok the mesh is there and it works. but if I press button 2 and have a different mesh both the image boxes display the same view.

It's like when I set the ID3D10ShaderResourceView its a pointer to the current render target.

heres the code that I use to copy and create the view I also delete the view.

This code in a function when it ends it no longer has focus


///////////////////////////////////////////////////////////////////////////////////////
//we need to create a resource and copy the rt to it 
				// Create the shader-resource view
				D3D10_SHADER_RESOURCE_VIEW_DESC srDesc;
				srDesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
				srDesc.ViewDimension = D3D10_SRV_DIMENSION_TEXTURE2D;
				srDesc.Texture2D.MostDetailedMip = 0;
				srDesc.Texture2D.MipLevels = 1;
				

				ID3D10ShaderResourceView *pShaderResView = NULL;
				ID3D10Resource *pResource = NULL;

				RenderTargetMesh.colorMap()->GetResource(&pResource);
				HRESULT hr = c3DDevice::m_pd3dDevice->CreateShaderResourceView( pResource, &srDesc, &pShaderResView );
				if(FAILED(hr))
				{
					OutPutDebugText("RenderLibraryToMapDefinedObjects(Failed T Create ResourceView",//TCHAR *errormsg,//the message to display
					"cRTSAssetUIManager::RenderLibraryToMapDefinedObjects()",//TCHAR *locmsg,//the location the message was called Eg. what function
					true);// bool Usewindowmsgbox = false);
				}


				SAFE_RELEASE(pResource);
				//now copy it over
				//c3DDevice::m_pd3dDevice->CopyResource(RenderTargetMesh.colorMap(), &imagebox->mat[0].m_pTextureRV)

				//now set the new one DialogBox_Objects->ImageBox[0].
				imagebox->mat[0].m_pTextureRV = pShaderResView;
				//imagebox->mat[0].m_pTextureRV->AddRef();
				//SAFE_RELEASE(pShaderResView);

////////////////////////////////////////////////////////

But if I do it like this it works It involes creating a texture but




	ID3D10Texture2D* colMap = 0;
	ID3D10ShaderResourceView *newresource = NULL;

	D3D10_TEXTURE2D_DESC texDesc;
	
	texDesc.Width     = mWidth;
	texDesc.Height    = mHeight;
	texDesc.MipLevels = 1;//0 will set them to autao generate mip maps
	texDesc.ArraySize = 1;
	texDesc.Format    = mColorMapFormat;
	texDesc.SampleDesc.Count   = 1;  
	texDesc.SampleDesc.Quality = 0;  
	texDesc.Usage          = D3D10_USAGE_DEFAULT;
	texDesc.BindFlags      = D3D10_BIND_RENDER_TARGET | D3D10_BIND_SHADER_RESOURCE;
	texDesc.CPUAccessFlags = 0; 
	texDesc.MiscFlags      = D3D10_RESOURCE_MISC_GENERATE_MIPS;

	if(FAILED(md3dDevice->CreateTexture2D(&texDesc, 0, &colMap)))
	{
		OutPutDebugText("CreateTexture2D FAILED TO CREATE",//the message to display
						"DrawableTex2D->CopyRenderTarget()",//the location the message was called Eg. what function
						 true);//bool Usewindowmsgbox = false);//true if you also want to display it in a messagebox
		return NULL;//error
	}//end error


	//now we want to copy the rendertarget to this new colourmap 
	ID3D10Resource *pResource = NULL;

	colorMap()->GetResource(&pResource);

	md3dDevice->CopyResource(colMap, pResource);

	if(FAILED(md3dDevice->CreateShaderResourceView(colMap, 0, &newresource)))
	{
		OutPutDebugText("CreateShaderResourceView FAILED TO CREATE",//the message to display
						"DrawableTex2D->CopyRenderTarget()",//the location the message was called Eg. what function
						 true);//bool Usewindowmsgbox = false);//true if you also want to display it in a messagebox
		return NULL;//error
	}//end error

	// View saves a reference to the texture so we can release our reference.
	SAFE_RELEASE(colMap);
	SAFE_RELEASE(pResource);




This topic is closed to new replies.

Advertisement