Rise
The Vieneo Province
DeviceObject.cpp
Go to the documentation of this file.
1 #include "DeviceObject.h"
2 
3 DeviceObject::DeviceObject(IDirect3DDevice9* prmPd3dDevice, Logger* prmLogger)
4 {
5  logger = prmLogger;
6  logger->AddToCallStack("DeviceObject::ctor");
7 
8  pd3dDevice = prmPd3dDevice;
9 
10  HRESULT hr;
11  //if (FAILED(hr = D3DX10CreateSprite(pd3dDevice, 1, &pSprite)))
12  if (FAILED(hr = D3DXCreateSprite(pd3dDevice, &pSprite)))
13  {
14  logger->Log("DeviceObject::ctor D3DXCreateSprite failed!", Logger::Error, hr);
15  }
16  else
17  {
18  hasSprite = true;
19  }
20 }
21 
23 {
24  logger->AddToCallStack("DeviceObject::OnResetDevice");
25 
26  if (hasSprite)
27  {
28  HRESULT hr;
29  V(pSprite->OnResetDevice());
30  }
31 
32  logger->AddToCallStack("DeviceObject::OnResetDevice DONE");
33 }
34 
35 HRESULT DeviceObject::SetRenderState(_D3DRENDERSTATETYPE renderStateType, int value) const
36 {
37  logger->AddToCallStack("DeviceObject::SetRenderState");
38  return pd3dDevice->SetRenderState(renderStateType, value);
39 }
40 
41 HRESULT DeviceObject::SetScissorRect(RECT* rect) const
42 {
43  logger->AddToCallStack("DeviceObject::SetScissorRect");
44  return pd3dDevice->SetScissorRect(rect);
45 }
46 
47 HRESULT DeviceObject::GetScissorRect(RECT* rect) const
48 {
49  logger->AddToCallStack("DeviceObject::GetScissorRect");
50  if (!pd3dDevice)
51  logger->Log("DeviceObject::GetScissorRect pd3dDevice is nullptr!", Logger::Level::Error);
52  return pd3dDevice->GetScissorRect(rect);
53 }
54 
56 {
57  logger->AddToCallStack("DeviceObject::OnLostDevice");
58 
59  if (pSprite)
60  {
61  HRESULT hr;
62  V(pSprite->OnLostDevice());
63  }
64 
65  logger->AddToCallStack("DeviceObject::OnLostDevice DONE");
66 }
67 
68 LPDIRECT3DTEXTURE9 DeviceObject::GetTextureSRV(std::string pathAndFilename)
69 {
70  logger->AddToCallStack("DeviceObject::GetTextureSRV");
72  for (UINT i = 0; i < files.size(); i++)
73  {
74  if (_strcmpi(files.at(i).c_str(), pathAndFilename.c_str()) == 0)
75  return textureSRV.at(i);
76  }
77 
78  HRESULT hr;
79  //ID3D10ShaderResourceView* srv;
80  LPDIRECT3DTEXTURE9 srv;
81  //if (FAILED(hr = D3DX10CreateShaderResourceViewFromFileA(pd3dDevice, , NULL, NULL, &srv, NULL)))
82  if (FAILED(hr = D3DXCreateTextureFromFileExA(pd3dDevice, pathAndFilename.c_str(), D3DX_DEFAULT, D3DX_DEFAULT, 1, 0, D3DFMT_A8R8G8B8,
83  D3DPOOL_MANAGED, D3DX_FILTER_NONE, D3DX_FILTER_NONE, 0, nullptr, nullptr, &srv)))
84  {
85  char err[256];
86  sprintf_s(err, "DeviceObject::GetTextureSRV Could not load texture: %s! (%x)", pathAndFilename.c_str(), hr);
87  logger->Log(err, Logger::Fatal, hr);
88  return nullptr;
89  }
90 
91  //char msg[99];
92  //sprintf_s(msg, 99, "textureSRV.at(%i)", textureSRV.size());
93  //game->AddTrackedResource(msg);
94 
95  textureSRV.emplace_back(srv);
96  files.emplace_back(pathAndFilename);
97 
98  return srv;
99 }
100 
102 {
103  logger->AddToCallStack("DeviceObject::DTOR");
104 
105  // @todo this one gets called correctly before the references are counted but should not be handled in DTOR
106  if (hasSprite)
107  {
108  //pSprite = nullptr;
109  SAFE_RELEASE(pSprite);
110  hasSprite = false;
111  }
112 
113  for (UINT i = 0; i < textureSRV.size(); i++)
114  {
115  SAFE_RELEASE(textureSRV.at(i));
116  //char msg[99];
117  //sprintf_s(msg, 99, "textureSRV.at(%i)", i);
118  //game->UpdateTrackedResource(msg);
119  }
120 
121  //SAFE_RELEASE(pd3dDevice); // should not have to release it here?
122 
123  logger->AddToCallStack("DeviceObject::Release DONE");
124 }
DeviceObject(IDirect3DDevice9 *prmPd3dDevice, Logger *prmLogger)
Definition: DeviceObject.cpp:3
Definition: Logger.h:9
IDirect3DDevice9 * pd3dDevice
Definition: DeviceObject.h:10
void OnLostDevice() const
HRESULT SetRenderState(_D3DRENDERSTATETYPE renderStateType, int value) const
std::vector< LPDIRECT3DTEXTURE9 > textureSRV
Definition: DeviceObject.h:15
std::vector< std::string > files
Definition: DeviceObject.h:16
void OnResetDevice() const
HRESULT SetScissorRect(RECT *rect) const
void Log(const char *msg, Level level=Info, int errorCode=0)
Definition: Logger.cpp:11
Logger * logger
Definition: DeviceObject.h:11
void AddToCallStack(const char *msg)
Definition: Logger.cpp:86
LPD3DXSPRITE pSprite
Definition: DeviceObject.h:21
HRESULT GetScissorRect(RECT *rect) const
LPDIRECT3DTEXTURE9 GetTextureSRV(std::string pathAndFilename)