raSystem  1.0 bata
raResource.cpp
Go to the documentation of this file.
1 #include "..\include\raMain.h"
2 
3 namespace System
4 {
5  DXGI_FORMAT MAKE_SRGB( DXGI_FORMAT format )
6  {
7  switch( format )
8  {
9  case DXGI_FORMAT_R8G8B8A8_TYPELESS:
10  case DXGI_FORMAT_R8G8B8A8_UNORM:
11  case DXGI_FORMAT_R8G8B8A8_UINT:
12  case DXGI_FORMAT_R8G8B8A8_SNORM:
13  case DXGI_FORMAT_R8G8B8A8_SINT:
14  return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
15 
16  case DXGI_FORMAT_BC1_TYPELESS:
17  case DXGI_FORMAT_BC1_UNORM:
18  return DXGI_FORMAT_BC1_UNORM_SRGB;
19  case DXGI_FORMAT_BC2_TYPELESS:
20  case DXGI_FORMAT_BC2_UNORM:
21  return DXGI_FORMAT_BC2_UNORM_SRGB;
22  case DXGI_FORMAT_BC3_TYPELESS:
23  case DXGI_FORMAT_BC3_UNORM:
24  return DXGI_FORMAT_BC3_UNORM_SRGB;
25  };
26 
27  return format;
28  }
30  {
31  memset(this, 0, sizeof(raResource));
32  }
33 
35  {
36  m_TextureCache.RemoveAll();
37  }
39  {
40  static raResource instanz;
41  return instanz;
42  }
44  D3DX11_IMAGE_LOAD_INFO* pLoadInfo, ID3DX11ThreadPump* pPump,
45  ID3D11ShaderResourceView** ppOutputRV, bool bSRGB )
46  {
47  HRESULT hr = S_OK;
48  D3DX11_IMAGE_LOAD_INFO ZeroInfo; //D3DX11_IMAGE_LOAD_INFO has a default constructor
49  D3DX11_IMAGE_INFO SrcInfo;
50 
51  if( !pLoadInfo )
52  {
53  pLoadInfo = &ZeroInfo;
54  }
55 
56  if( !pLoadInfo->pSrcInfo )
57  {
58  D3DX11GetImageInfoFromFile( pSrcFile.c_str(), NULL, &SrcInfo, NULL );
59  pLoadInfo->pSrcInfo = &SrcInfo;
60 
61  pLoadInfo->Format = pLoadInfo->pSrcInfo->Format;
62  }
63  for(int i=0; i < m_TextureCache.GetSize(); i++)
64  {
65  if( !strcmp( m_TextureCache[i].cSource, pSrcFile.c_str() ) &&
66  m_TextureCache[i].Width == pLoadInfo->Width &&
67  m_TextureCache[i].Height == pLoadInfo->Height &&
68  m_TextureCache[i].MipLevels == pLoadInfo->MipLevels &&
69  m_TextureCache[i].Usage11 == pLoadInfo->Usage &&
70  m_TextureCache[i].Format == pLoadInfo->Format &&
71  m_TextureCache[i].CpuAccessFlags == pLoadInfo->CpuAccessFlags &&
72  m_TextureCache[i].BindFlags == pLoadInfo->BindFlags &&
73  m_TextureCache[i].MiscFlags == pLoadInfo->MiscFlags )
74  {
75  return m_TextureCache[i].pSRV11->QueryInterface( __uuidof( ID3D11ShaderResourceView ), ( LPVOID* )ppOutputRV );
76  }
77  }
78 
79  raTexture NewEntry;
80  strcpy_s( NewEntry.cSource, MAX_PATH, pSrcFile.c_str() );
81  NewEntry.Width = pLoadInfo->Width;
82  NewEntry.Height = pLoadInfo->Height;
83  NewEntry.MipLevels = pLoadInfo->MipLevels;
84  NewEntry.Usage11 = pLoadInfo->Usage;
85  NewEntry.Format = pLoadInfo->Format;
86 
87  NewEntry.CpuAccessFlags = pLoadInfo->CpuAccessFlags;
88  NewEntry.BindFlags = pLoadInfo->BindFlags;
89  NewEntry.MiscFlags = pLoadInfo->MiscFlags;
90 
91  //Create the rexture
92  ID3D11Texture2D* pRes = NULL;
93  hr = D3DX11CreateTextureFromFile( dx->GetDevice(), pSrcFile.c_str(), pLoadInfo, pPump, ( ID3D11Resource** )&pRes, NULL );
94 
95  if( FAILED( hr ) )
96  return hr;
97  D3D11_TEXTURE2D_DESC tex_dsc;
98  pRes->GetDesc(&tex_dsc);
99 
100  if (bSRGB )
101  {
102  ID3D11Texture2D* unormStaging = NULL;
103  ID3D11Texture2D* srgbStaging = NULL;
104 
105  D3D11_TEXTURE2D_DESC CopyDesc;
106  pRes->GetDesc( &CopyDesc );
107 
108  pLoadInfo->BindFlags = 0;
109  pLoadInfo->CpuAccessFlags = D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ;
110  pLoadInfo->Depth = 0;
111  pLoadInfo->Filter = D3DX11_FILTER_LINEAR;
112  pLoadInfo->FirstMipLevel = 0;
113  pLoadInfo->Format = CopyDesc.Format;
114  pLoadInfo->Height = CopyDesc.Height;
115  pLoadInfo->MipFilter = D3DX11_FILTER_LINEAR;
116  pLoadInfo->MiscFlags = CopyDesc.MiscFlags;
117  pLoadInfo->Usage = D3D11_USAGE_STAGING;
118  pLoadInfo->Width = CopyDesc.Width;
119 
120  CopyDesc.BindFlags = 0;
121  CopyDesc.Usage = D3D11_USAGE_STAGING;
122  CopyDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ;
123  CopyDesc.Format = MAKE_SRGB(CopyDesc.Format);
124 
125  hr = D3DX11CreateTextureFromFile( dx->GetDevice(), pSrcFile.c_str(), pLoadInfo, pPump, ( ID3D11Resource** )&unormStaging, NULL );
126 
127  hr = dx->GetDevice()->CreateTexture2D(&CopyDesc, NULL, &srgbStaging);
128  dx->GetImmediateContext()->CopyResource( srgbStaging, unormStaging );
129  ID3D11Texture2D* srgbGPU;
130 
131  pRes->GetDesc( &CopyDesc );
132  CopyDesc.Format = MAKE_SRGB(CopyDesc.Format);
133  hr = dx->GetDevice()->CreateTexture2D(&CopyDesc, NULL, &srgbGPU);
134  dx->GetImmediateContext()->CopyResource( srgbGPU, srgbStaging );
135 
136  SAFE_RELEASE(pRes);
137  SAFE_RELEASE(srgbStaging);
138  SAFE_RELEASE(unormStaging);
139  pRes = srgbGPU;
140  }
141 
142  D3D11_SHADER_RESOURCE_VIEW_DESC SRVDesc;
143  if( bSRGB )
144  SRVDesc.Format = MAKE_SRGB( ZeroInfo.Format );
145  else
146  SRVDesc.Format = ZeroInfo.Format;
147  if( pLoadInfo->pSrcInfo->ResourceDimension == D3D11_RESOURCE_DIMENSION_TEXTURE1D )
148  {
149  SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE1D;
150  SRVDesc.Texture1D.MostDetailedMip = 0;
151  SRVDesc.Texture1D.MipLevels = pLoadInfo->pSrcInfo->MipLevels;
152  }
153  else if( pLoadInfo->pSrcInfo->ResourceDimension == D3D11_RESOURCE_DIMENSION_TEXTURE2D )
154  {
155  SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
156  SRVDesc.Texture2D.MostDetailedMip = 0;
157  SRVDesc.Texture2D.MipLevels = pLoadInfo->pSrcInfo->MipLevels;
158 
159  if( pLoadInfo->pSrcInfo->MiscFlags & D3D11_RESOURCE_MISC_TEXTURECUBE )
160  {
161  SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE;
162  SRVDesc.TextureCube.MostDetailedMip = 0;
163  SRVDesc.TextureCube.MipLevels = pLoadInfo->pSrcInfo->MipLevels;
164  }
165  }
166  else if( pLoadInfo->pSrcInfo->ResourceDimension == D3D11_RESOURCE_DIMENSION_TEXTURE3D )
167  {
168  SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D;
169  SRVDesc.Texture3D.MostDetailedMip = 0;
170  SRVDesc.Texture3D.MipLevels = pLoadInfo->pSrcInfo->MipLevels;
171  }
172  if (bSRGB) {
173  SRVDesc.Format = MAKE_SRGB(tex_dsc.Format);
174  }else {
175  SRVDesc.Format = tex_dsc.Format;
176  }
177  SRVDesc.Texture2D.MipLevels = tex_dsc.MipLevels;
178  SRVDesc.Texture2D.MostDetailedMip = 0;
179  hr = dx->GetDevice()->CreateShaderResourceView( pRes, &SRVDesc, ppOutputRV );
180  pRes->Release();
181  if( FAILED( hr ) )
182  return hr;
183 
184  ( *ppOutputRV )->QueryInterface( __uuidof( ID3D11ShaderResourceView ), ( LPVOID* )&NewEntry.pSRV11 );
185 
186  m_TextureCache.Add(NewEntry);
187 
188  return S_OK;
189  }
191  D3DX11_IMAGE_LOAD_INFO* pLoadInfo, ID3DX11ThreadPump* pPump,
192  ID3D11ShaderResourceView** ppOutputRV, bool bSRGB)
193  {
194  HRESULT hr = S_OK;
195  D3DX11_IMAGE_LOAD_INFO ZeroInfo; //D3DX11_IMAGE_LOAD_INFO has a default constructor
196  D3DX11_IMAGE_INFO SrcInfo;
197 
198  if( !pLoadInfo )
199  {
200  pLoadInfo = &ZeroInfo;
201  }
202 
203  if( !pLoadInfo->pSrcInfo )
204  {
205  D3DX11GetImageInfoFromMemory( Data, Size, NULL, &SrcInfo, NULL );
206  pLoadInfo->pSrcInfo = &SrcInfo;
207 
208  pLoadInfo->Format = pLoadInfo->pSrcInfo->Format;
209  }
210  for(int i=0; i < m_TextureCache.GetSize(); i++)
211  {
212  if( !strcmp( m_TextureCache[i].cSource, "" ) &&
213  m_TextureCache[i].Width == pLoadInfo->Width &&
214  m_TextureCache[i].Height == pLoadInfo->Height &&
215  m_TextureCache[i].MipLevels == pLoadInfo->MipLevels &&
216  m_TextureCache[i].Usage11 == pLoadInfo->Usage &&
217  m_TextureCache[i].Format == pLoadInfo->Format &&
218  m_TextureCache[i].CpuAccessFlags == pLoadInfo->CpuAccessFlags &&
219  m_TextureCache[i].BindFlags == pLoadInfo->BindFlags &&
220  m_TextureCache[i].MiscFlags == pLoadInfo->MiscFlags )
221  {
222  // A match is found. Obtain the IDirect3DTexture9 interface and return that.
223  return m_TextureCache[i].pSRV11->QueryInterface( __uuidof( ID3D11ShaderResourceView ), ( LPVOID* )ppOutputRV );
224  }
225  }
226 
227  raTexture NewEntry;
228  strcpy_s( NewEntry.cSource, MAX_PATH, "" );
229  NewEntry.Width = pLoadInfo->Width;
230  NewEntry.Height = pLoadInfo->Height;
231  NewEntry.MipLevels = pLoadInfo->MipLevels;
232  NewEntry.Usage11 = pLoadInfo->Usage;
233  NewEntry.Format = pLoadInfo->Format;
234 
235  NewEntry.CpuAccessFlags = pLoadInfo->CpuAccessFlags;
236  NewEntry.BindFlags = pLoadInfo->BindFlags;
237  NewEntry.MiscFlags = pLoadInfo->MiscFlags;
238 
239  //Create the rexture
240  ID3D11Texture2D* pRes = NULL;
241  hr = D3DX11CreateTextureFromMemory( dx->GetDevice(), Data, Size, pLoadInfo, pPump, ( ID3D11Resource** )&pRes, NULL );
242 
243  if( FAILED( hr ) )
244  return hr;
245  D3D11_TEXTURE2D_DESC tex_dsc;
246  pRes->GetDesc(&tex_dsc);
247 
248  if (bSRGB )
249  {
250  ID3D11Texture2D* unormStaging = NULL;
251  ID3D11Texture2D* srgbStaging = NULL;
252 
253  D3D11_TEXTURE2D_DESC CopyDesc;
254  pRes->GetDesc( &CopyDesc );
255 
256  pLoadInfo->BindFlags = 0;
257  pLoadInfo->CpuAccessFlags = D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ;
258  pLoadInfo->Depth = 0;
259  pLoadInfo->Filter = D3DX11_FILTER_LINEAR;
260  pLoadInfo->FirstMipLevel = 0;
261  pLoadInfo->Format = CopyDesc.Format;
262  pLoadInfo->Height = CopyDesc.Height;
263  pLoadInfo->MipFilter = D3DX11_FILTER_LINEAR;
264  pLoadInfo->MiscFlags = CopyDesc.MiscFlags;
265  pLoadInfo->Usage = D3D11_USAGE_STAGING;
266  pLoadInfo->Width = CopyDesc.Width;
267 
268  CopyDesc.BindFlags = 0;
269  CopyDesc.Usage = D3D11_USAGE_STAGING;
270  CopyDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ;
271  CopyDesc.Format = MAKE_SRGB(CopyDesc.Format);
272 
273  hr = D3DX11CreateTextureFromMemory( dx->GetDevice(), Data, Size, pLoadInfo, pPump, ( ID3D11Resource** )&unormStaging, NULL );
274 
275  hr = dx->GetDevice()->CreateTexture2D(&CopyDesc, NULL, &srgbStaging);
276  dx->GetImmediateContext()->CopyResource( srgbStaging, unormStaging );
277  ID3D11Texture2D* srgbGPU;
278 
279  pRes->GetDesc( &CopyDesc );
280  CopyDesc.Format = MAKE_SRGB(CopyDesc.Format);
281  hr = dx->GetDevice()->CreateTexture2D(&CopyDesc, NULL, &srgbGPU);
282  dx->GetImmediateContext()->CopyResource( srgbGPU, srgbStaging );
283 
284  SAFE_RELEASE(pRes);
285  SAFE_RELEASE(srgbStaging);
286  SAFE_RELEASE(unormStaging);
287  pRes = srgbGPU;
288  }
289 
290  D3D11_SHADER_RESOURCE_VIEW_DESC SRVDesc;
291  if( bSRGB )
292  SRVDesc.Format = MAKE_SRGB( ZeroInfo.Format );
293  else
294  SRVDesc.Format = ZeroInfo.Format;
295  if( pLoadInfo->pSrcInfo->ResourceDimension == D3D11_RESOURCE_DIMENSION_TEXTURE1D )
296  {
297  SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE1D;
298  SRVDesc.Texture1D.MostDetailedMip = 0;
299  SRVDesc.Texture1D.MipLevels = pLoadInfo->pSrcInfo->MipLevels;
300  }
301  else if( pLoadInfo->pSrcInfo->ResourceDimension == D3D11_RESOURCE_DIMENSION_TEXTURE2D )
302  {
303  SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
304  SRVDesc.Texture2D.MostDetailedMip = 0;
305  SRVDesc.Texture2D.MipLevels = pLoadInfo->pSrcInfo->MipLevels;
306 
307  if( pLoadInfo->pSrcInfo->MiscFlags & D3D11_RESOURCE_MISC_TEXTURECUBE )
308  {
309  SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE;
310  SRVDesc.TextureCube.MostDetailedMip = 0;
311  SRVDesc.TextureCube.MipLevels = pLoadInfo->pSrcInfo->MipLevels;
312  }
313  }
314  else if( pLoadInfo->pSrcInfo->ResourceDimension == D3D11_RESOURCE_DIMENSION_TEXTURE3D )
315  {
316  SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D;
317  SRVDesc.Texture3D.MostDetailedMip = 0;
318  SRVDesc.Texture3D.MipLevels = pLoadInfo->pSrcInfo->MipLevels;
319  }
320  if (bSRGB) {
321  SRVDesc.Format = MAKE_SRGB(tex_dsc.Format);
322  }else {
323  SRVDesc.Format = tex_dsc.Format;
324  }
325  SRVDesc.Texture2D.MipLevels = tex_dsc.MipLevels;
326  SRVDesc.Texture2D.MostDetailedMip = 0;
327  hr = dx->GetDevice()->CreateShaderResourceView( pRes, &SRVDesc, ppOutputRV );
328  pRes->Release();
329  if( FAILED( hr ) )
330  return hr;
331 
332  ( *ppOutputRV )->QueryInterface( __uuidof( ID3D11ShaderResourceView ), ( LPVOID* )&NewEntry.pSRV11 );
333 
334  m_TextureCache.Add(NewEntry);
335 
336  return S_OK;
337  }
338  HRESULT raResource::CreateTextureFromResourceEx( raSmartPointer<raDirectX> dx, HMODULE hSrcModule, LPCSTR pSrcResource,
339  D3DX11_IMAGE_LOAD_INFO* pLoadInfo, ID3DX11ThreadPump* pPump,
340  ID3D11ShaderResourceView** ppOutputRV, bool bSRGB)
341  {
342  HRESULT hr = S_OK;
343  D3DX11_IMAGE_LOAD_INFO ZeroInfo; //D3DX11_IMAGE_LOAD_INFO has a default constructor
344  D3DX11_IMAGE_INFO SrcInfo;
345 
346  if( !pLoadInfo )
347  {
348  pLoadInfo = &ZeroInfo;
349  }
350 
351  if( !pLoadInfo->pSrcInfo )
352  {
353  D3DX11GetImageInfoFromResource( hSrcModule, pSrcResource, NULL, &SrcInfo, NULL );
354  pLoadInfo->pSrcInfo = &SrcInfo;
355 
356  pLoadInfo->Format = pLoadInfo->pSrcInfo->Format;
357  }
358  for(int i=0; i < m_TextureCache.GetSize(); i++)
359  {
360  if( !strcmp( m_TextureCache[i].cSource, pSrcResource ) &&
361  m_TextureCache[i].Width == pLoadInfo->Width &&
362  m_TextureCache[i].Height == pLoadInfo->Height &&
363  m_TextureCache[i].MipLevels == pLoadInfo->MipLevels &&
364  m_TextureCache[i].Usage11 == pLoadInfo->Usage &&
365  m_TextureCache[i].Format == pLoadInfo->Format &&
366  m_TextureCache[i].CpuAccessFlags == pLoadInfo->CpuAccessFlags &&
367  m_TextureCache[i].BindFlags == pLoadInfo->BindFlags &&
368  m_TextureCache[i].MiscFlags == pLoadInfo->MiscFlags )
369  {
370  // A match is found. Obtain the IDirect3DTexture9 interface and return that.
371  return m_TextureCache[i].pSRV11->QueryInterface( __uuidof( ID3D11ShaderResourceView ), ( LPVOID* )ppOutputRV );
372  }
373  }
374 
375  raTexture NewEntry;
376  strcpy_s( NewEntry.cSource, MAX_PATH, pSrcResource );
377  NewEntry.Width = pLoadInfo->Width;
378  NewEntry.Height = pLoadInfo->Height;
379  NewEntry.MipLevels = pLoadInfo->MipLevels;
380  NewEntry.Usage11 = pLoadInfo->Usage;
381  NewEntry.Format = pLoadInfo->Format;
382 
383  NewEntry.CpuAccessFlags = pLoadInfo->CpuAccessFlags;
384  NewEntry.BindFlags = pLoadInfo->BindFlags;
385  NewEntry.MiscFlags = pLoadInfo->MiscFlags;
386 
387  //Create the rexture
388  ID3D11Texture2D* pRes = NULL;
389  hr = D3DX11CreateTextureFromResource( dx->GetDevice(), hSrcModule, pSrcResource, pLoadInfo, pPump, ( ID3D11Resource** )&pRes, NULL );
390 
391  if( FAILED( hr ) )
392  return hr;
393  D3D11_TEXTURE2D_DESC tex_dsc;
394  pRes->GetDesc(&tex_dsc);
395 
396  if (bSRGB )
397  {
398  ID3D11Texture2D* unormStaging = NULL;
399  ID3D11Texture2D* srgbStaging = NULL;
400 
401  D3D11_TEXTURE2D_DESC CopyDesc;
402  pRes->GetDesc( &CopyDesc );
403 
404  pLoadInfo->BindFlags = 0;
405  pLoadInfo->CpuAccessFlags = D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ;
406  pLoadInfo->Depth = 0;
407  pLoadInfo->Filter = D3DX11_FILTER_LINEAR;
408  pLoadInfo->FirstMipLevel = 0;
409  pLoadInfo->Format = CopyDesc.Format;
410  pLoadInfo->Height = CopyDesc.Height;
411  pLoadInfo->MipFilter = D3DX11_FILTER_LINEAR;
412  pLoadInfo->MiscFlags = CopyDesc.MiscFlags;
413  pLoadInfo->Usage = D3D11_USAGE_STAGING;
414  pLoadInfo->Width = CopyDesc.Width;
415 
416  CopyDesc.BindFlags = 0;
417  CopyDesc.Usage = D3D11_USAGE_STAGING;
418  CopyDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ;
419  CopyDesc.Format = MAKE_SRGB(CopyDesc.Format);
420 
421  hr = D3DX11CreateTextureFromResource( dx->GetDevice(), hSrcModule, pSrcResource, pLoadInfo, pPump, ( ID3D11Resource** )&unormStaging, NULL );
422 
423  hr = dx->GetDevice()->CreateTexture2D(&CopyDesc, NULL, &srgbStaging);
424  dx->GetImmediateContext()->CopyResource( srgbStaging, unormStaging );
425  ID3D11Texture2D* srgbGPU;
426 
427  pRes->GetDesc( &CopyDesc );
428  CopyDesc.Format = MAKE_SRGB(CopyDesc.Format);
429  hr = dx->GetDevice()->CreateTexture2D(&CopyDesc, NULL, &srgbGPU);
430  dx->GetImmediateContext()->CopyResource( srgbGPU, srgbStaging );
431 
432  SAFE_RELEASE(pRes);
433  SAFE_RELEASE(srgbStaging);
434  SAFE_RELEASE(unormStaging);
435  pRes = srgbGPU;
436  }
437 
438  D3D11_SHADER_RESOURCE_VIEW_DESC SRVDesc;
439  if( bSRGB )
440  SRVDesc.Format = MAKE_SRGB( ZeroInfo.Format );
441  else
442  SRVDesc.Format = ZeroInfo.Format;
443  if( pLoadInfo->pSrcInfo->ResourceDimension == D3D11_RESOURCE_DIMENSION_TEXTURE1D )
444  {
445  SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE1D;
446  SRVDesc.Texture1D.MostDetailedMip = 0;
447  SRVDesc.Texture1D.MipLevels = pLoadInfo->pSrcInfo->MipLevels;
448  }
449  else if( pLoadInfo->pSrcInfo->ResourceDimension == D3D11_RESOURCE_DIMENSION_TEXTURE2D )
450  {
451  SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
452  SRVDesc.Texture2D.MostDetailedMip = 0;
453  SRVDesc.Texture2D.MipLevels = pLoadInfo->pSrcInfo->MipLevels;
454 
455  if( pLoadInfo->pSrcInfo->MiscFlags & D3D11_RESOURCE_MISC_TEXTURECUBE )
456  {
457  SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE;
458  SRVDesc.TextureCube.MostDetailedMip = 0;
459  SRVDesc.TextureCube.MipLevels = pLoadInfo->pSrcInfo->MipLevels;
460  }
461  }
462  else if( pLoadInfo->pSrcInfo->ResourceDimension == D3D11_RESOURCE_DIMENSION_TEXTURE3D )
463  {
464  SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D;
465  SRVDesc.Texture3D.MostDetailedMip = 0;
466  SRVDesc.Texture3D.MipLevels = pLoadInfo->pSrcInfo->MipLevels;
467  }
468  if (bSRGB) {
469  SRVDesc.Format = MAKE_SRGB(tex_dsc.Format);
470  }else {
471  SRVDesc.Format = tex_dsc.Format;
472  }
473  SRVDesc.Texture2D.MipLevels = tex_dsc.MipLevels;
474  SRVDesc.Texture2D.MostDetailedMip = 0;
475  hr = dx->GetDevice()->CreateShaderResourceView( pRes, &SRVDesc, ppOutputRV );
476  pRes->Release();
477  if( FAILED( hr ) )
478  return hr;
479 
480  ( *ppOutputRV )->QueryInterface( __uuidof( ID3D11ShaderResourceView ), ( LPVOID* )&NewEntry.pSRV11 );
481 
482  m_TextureCache.Add(NewEntry);
483 
484  return S_OK;
485  }
486 };
UINT Width
Definition: raResource.h:7
static raResource & Instance()
Definition: raResource.cpp:38
D3D11_USAGE Usage11
Definition: raResource.h:11
ID3D11DeviceContext * GetImmediateContext(void)
Definition: raDirectX.h:31
HRESULT CreateTextureFromResourceEx(raSmartPointer< raDirectX > dx, HMODULE hSrcModule, LPCSTR pSrcResource, D3DX11_IMAGE_LOAD_INFO *pLoadInfo, ID3DX11ThreadPump *pPump, ID3D11ShaderResourceView **ppOutputRV, bool bSRGB=false)
Definition: raResource.cpp:338
ID3D11Device * GetDevice(void)
Definition: raDirectX.h:29
UINT MiscFlags
Definition: raResource.h:10
HRESULT CreateTextureFromMemoryEx(raSmartPointer< raDirectX > dx, LPVOID Data, size_t Size, D3DX11_IMAGE_LOAD_INFO *pLoadInfo, ID3DX11ThreadPump *pPump, ID3D11ShaderResourceView **ppOutputRV, bool bSRGB=false)
Definition: raResource.cpp:190
DXGI_FORMAT Format
Definition: raResource.h:12
UINT MipLevels
Definition: raResource.h:9
std::string raString
Definition: raMain.h:107
UINT BindFlags
Definition: raResource.h:14
DXGI_FORMAT MAKE_SRGB(DXGI_FORMAT format)
Definition: raResource.cpp:5
HRESULT CreateTextureFromFileEx(raSmartPointer< raDirectX > dx, raString pSrcFile, D3DX11_IMAGE_LOAD_INFO *pLoadInfo, ID3DX11ThreadPump *pPump, ID3D11ShaderResourceView **ppOutputRV, bool bSRGB=false)
Definition: raResource.cpp:43
#define SAFE_RELEASE(p)
Definition: d3dxGlobal.h:22
char cSource[MAX_PATH]
Definition: raResource.h:6
UINT Height
Definition: raResource.h:8
ID3D11ShaderResourceView * pSRV11
Definition: raResource.h:15
UINT CpuAccessFlags
Definition: raResource.h:13