CmD3D11MultiRenderTexture.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #include "CmD3D11MultiRenderTexture.h"
  2. #include "CmD3D11Texture.h"
  3. #include "CmD3D11RenderTexture.h"
  4. namespace CamelotEngine
  5. {
  6. D3D11MultiRenderTexture::D3D11MultiRenderTexture()
  7. :MultiRenderTexture(), mDepthStencilView(nullptr)
  8. {
  9. }
  10. D3D11MultiRenderTexture::~D3D11MultiRenderTexture()
  11. {
  12. }
  13. void D3D11MultiRenderTexture::setColorSurfaceImpl(UINT32 surfaceIdx, TexturePtr texture, UINT32 face, UINT32 numFaces, UINT32 mipLevel)
  14. {
  15. if(mRenderTargetViews.size() <= surfaceIdx)
  16. mRenderTargetViews.resize(surfaceIdx + 1, nullptr);
  17. SAFE_RELEASE(mRenderTargetViews[surfaceIdx]);
  18. if(texture != nullptr)
  19. {
  20. mRenderTargetViews[surfaceIdx] = D3D11RenderTexture::createRenderTargetView(mSurfaces[surfaceIdx]);
  21. }
  22. }
  23. void D3D11MultiRenderTexture::setDepthStencilImpl(TexturePtr depthStencilSurface)
  24. {
  25. SAFE_RELEASE(mDepthStencilView);
  26. if(mDepthStencilView != nullptr)
  27. {
  28. mDepthStencilView = D3D11RenderTexture::createDepthStencilView(mDepthStencilSurface);
  29. }
  30. }
  31. void D3D11MultiRenderTexture::getCustomAttribute(const String& name, void* pData)
  32. {
  33. if(name == "RTV")
  34. {
  35. ID3D11RenderTargetView** pRTVs = (ID3D11RenderTargetView **)pData;
  36. for(size_t x = 0; x < mRenderTargetViews.size(); ++x)
  37. pRTVs[x] = mRenderTargetViews[x];
  38. return;
  39. }
  40. else if(name == "DSV")
  41. {
  42. ID3D11DepthStencilView** pDSV = (ID3D11DepthStencilView **)pData;
  43. *pDSV = mDepthStencilView;
  44. return;
  45. }
  46. }
  47. void D3D11MultiRenderTexture::initialize()
  48. {
  49. mRenderTargetViews.resize(CM_MAX_MULTIPLE_RENDER_TARGETS);
  50. }
  51. }