raSystem  1.0 bata
raRenderScreen.cpp
Go to the documentation of this file.
1 #include "..\include\raMain.h"
2 
3 namespace System
4 {
5  raRenderScreen::raRenderScreen(raSmartPointer<raDirectX> dx, int width, int height, int mipLevels,
6  DXGI_FORMAT fmt, UINT arraySize)
7  {
8  m_dx = dx;
9  m_Width = width;
10  m_Height = height;
11  m_Format = fmt;
12 
13  m_pRTView = NULL;
14  m_pDSView = NULL;
15  m_pRenderTarget = NULL;
16  m_pDepth = NULL;
17  m_MipLevels = mipLevels;
18 
19  m_arraySize = arraySize;
20  }
21  bool raRenderScreen::CreateDepthTexture(D3D11_TEXTURE2D_DESC &desc)
22  {
23  desc.BindFlags = D3D11_BIND_DEPTH_STENCIL;
24  desc.Format = DXGI_FORMAT_D32_FLOAT;
25 
26  HRESULT hr = m_dx->GetDevice()->CreateTexture2D( &desc, NULL, &m_pDepth);
27  if(FAILED(hr))
28  {
29  RERROR_DX11("CreateTexture2D", hr);
30  return false;
31  }
32 
33  return true;
34  }
35  bool raRenderScreen::CreateTexture(D3D11_TEXTURE2D_DESC &desc)
36  {
37  desc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE;
38  desc.Format = m_Format;
39 
40  HRESULT hr = m_dx->GetDevice()->CreateTexture2D(&desc, NULL, &m_pRenderTarget);
41  if(FAILED(hr))
42  {
43  RERROR_DX11("CreateTexture2D", hr);
44  return false;
45  }
46 
47  return true;
48  }
50  {
51  D3D11_DEPTH_STENCIL_VIEW_DESC desc;
52  ZeroMemory(&desc, sizeof(desc) );
53  desc.Format = DXGI_FORMAT_D32_FLOAT;
54 
55  if(m_arraySize > 1)
56  {
57  desc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DARRAY;
58  desc.Texture2DArray.FirstArraySlice = 0;
59  desc.Texture2DArray.ArraySize = m_arraySize;
60  desc.Texture2DArray.MipSlice = 0;
61  }
62  else
63  {
64  desc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;
65  }
66 
67  HRESULT hr = m_dx->GetDevice()->CreateDepthStencilView(m_pDepth, &desc, &m_pDSView);
68  if(FAILED(hr))
69  {
70  RERROR_DX11("CreateDepthStencilView", hr);
71  return false;
72  }
73 
74  return true;
75  }
77  {
78  D3D11_RENDER_TARGET_VIEW_DESC desc;
79  memset(&desc, 0, sizeof(desc));
80  desc.Format = m_Format;
81 
82  if(m_arraySize > 1)
83  {
84  desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
85  desc.Texture2DArray.FirstArraySlice = 0;
86  desc.Texture2DArray.ArraySize = m_arraySize;
87  desc.Texture2DArray.MipSlice = 0;
88  }
89  else
90  {
91  desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
92  desc.Texture2D.MipSlice = 0;
93  }
94  HRESULT hr = m_dx->GetDevice()->CreateRenderTargetView(m_pRenderTarget, &desc, &m_pRTView);
95  if(FAILED(hr))
96  {
97  RERROR_DX11("CreateRenderTargetView", hr);
98  return false;
99  }
100  return true;
101  }
103  {
104  D3D11_TEXTURE2D_DESC desc;
105  ZeroMemory(&desc, sizeof(desc));
106  desc.Width = m_Width;
107  desc.Height = m_Height;
108  desc.ArraySize = m_arraySize;
109  desc.Usage = D3D11_USAGE_DEFAULT;
110  desc.SampleDesc.Count = 1;
111  desc.SampleDesc.Quality = 0;
112  desc.CPUAccessFlags = 0;
113  if(m_arraySize == 6)
114  desc.MiscFlags = D3D11_RESOURCE_MISC_TEXTURECUBE;
115 
116  if(!CreateDepthTexture(desc))
117  {
118  RERROR("CreateDepthTexture");
119  return NULL;
120  }
121 
122  desc.MipLevels = m_MipLevels;
123  if(m_MipLevels > 1) //keine Mips für DepthTexture
124  desc.MiscFlags = D3D11_RESOURCE_MISC_GENERATE_MIPS;
125 
126  if(!CreateTexture(desc))
127  {
128  RERROR("CreateTexture");
129  return NULL;
130  }
131  if(!CreateDepthStencilView())
132  {
133  RERROR("CreateDepthStencilView");
134  return NULL;
135  }
136  if(!CreateRenderTargetView())
137  {
138  RERROR("CreateRenderTargetView");
139  return NULL;
140  }
141  m_pRenderTarget->AddRef();
142 
143  return m_pRenderTarget;
144  }
146  {
147  SAFE_RELEASE(m_pRTView);
148  SAFE_RELEASE(m_pDSView);
149  SAFE_RELEASE(m_pRenderTarget);
150  SAFE_RELEASE(m_pDepth);
151  }
153  {
154  return m_dx.get();
155  }
156  ID3D11Texture2D* raRenderScreen::GetTexture()
157  {
158  m_pRenderTarget->AddRef();
159  return m_pRenderTarget;
160  }
162  {
163  return m_Format;
164  }
166  {
167  return m_MipLevels;
168  }
170  {
171  return m_arraySize;
172  }
173 };
ID3D11Texture2D * CreateRenderTarget()
bool CreateDepthStencilView()
bool CreateDepthTexture(D3D11_TEXTURE2D_DESC &desc)
bool CreateTexture(D3D11_TEXTURE2D_DESC &desc)
void RAPI RERROR_DX11(raString x, HRESULT h)
Definition: raMain.cpp:156
raRenderScreen(raSmartPointer< raDirectX > dx, int width, int height, int mipLevels=1, DXGI_FORMAT fmt=DXGI_FORMAT_R16G16B16A16_FLOAT, UINT arraySize=1)
raDirectX * GetDirectX()
ID3D11Texture2D * GetTexture()
bool CreateRenderTargetView()
DXGI_FORMAT GetFormat()
#define SAFE_RELEASE(p)
Definition: d3dxGlobal.h:22
virtual void Destroy()
void RAPI RERROR(raString x)
Definition: raMain.cpp:129