Incremental Engine  1.0.6
A 2D Game Engine to create Idle Games
IncrementalEngine::ShaderManager Class Reference

#include <ShaderManager.h>

Classes

struct  MatrixBufferType
 

Public Member Functions

HRESULT Init (D3DImplementation *direct3D, RenderCamera *camera, HWND hWnd)
 
HRESULT RenderTextureShader (int indexCount, ID3D11ShaderResourceView *texture)
 
HRESULT SetupFrame ()
 
void ClearFrame ()
 
void SetWorldMatrix (D3DXMATRIX &worldMatrix)
 
 ShaderManager ()
 
virtual ~ShaderManager ()
 

Private Member Functions

HRESULT InitGlobalBuffer ()
 

Private Attributes

D3DImplementation_direct3D
 
RenderCamera_camera
 
TextureShader_textureShader
 
ID3D11Buffer * _matrixBuffer
 
bool _frameReady
 

Detailed Description

Definition at line 11 of file ShaderManager.h.

Constructor & Destructor Documentation

◆ ShaderManager()

IncrementalEngine::ShaderManager::ShaderManager ( )

Definition at line 7 of file ShaderManager.cpp.

7  :
8  _textureShader(NULL),
9  _matrixBuffer(NULL)
10  {
11  }

◆ ~ShaderManager()

IncrementalEngine::ShaderManager::~ShaderManager ( )
virtual

Definition at line 13 of file ShaderManager.cpp.

14  {
15  CHECKED_DELETE(_textureShader);
16  CHECKED_RELEASE(_matrixBuffer);
17  }

Member Function Documentation

◆ ClearFrame()

void IncrementalEngine::ShaderManager::ClearFrame ( )

Definition at line 121 of file ShaderManager.cpp.

122  {
123  _frameReady = false;
124  }

◆ Init()

HRESULT IncrementalEngine::ShaderManager::Init ( D3DImplementation direct3D,
RenderCamera camera,
HWND  hWnd 
)

Definition at line 19 of file ShaderManager.cpp.

20  {
21  HRESULT result;
22 
23  _direct3D = direct3D;
24  _camera = camera;
25 
26  _textureShader = new TextureShader;
27  if (!_textureShader)
28  {
29  return CO_E_ERRORINAPP;
30  }
31 
32  result = _textureShader->Init(_direct3D->GetDevice(), hWnd);
33  if (FAILED(result))
34  {
35  MessageBox(hWnd, L"Could not initialize the Texture Shader Renderer.", L"Error", MB_OK);
36  return CO_E_ERRORINAPP;
37  }
38 
39  result = InitGlobalBuffer();
40  if (FAILED(result))
41  {
42  MessageBox(hWnd, L"Could not initialize the Global Buffer.", L"Error", MB_OK);
43  return CO_E_ERRORINAPP;
44  }
45 
46  return S_OK;
47  }

◆ InitGlobalBuffer()

HRESULT IncrementalEngine::ShaderManager::InitGlobalBuffer ( )
private

Definition at line 49 of file ShaderManager.cpp.

50  {
51  HRESULT result;
52  D3D11_BUFFER_DESC matrixBufferDesc;
53 
54  matrixBufferDesc.Usage = D3D11_USAGE_DYNAMIC;
55  matrixBufferDesc.ByteWidth = sizeof(MatrixBufferType);
56  matrixBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
57  matrixBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
58  matrixBufferDesc.MiscFlags = 0;
59  matrixBufferDesc.StructureByteStride = 0;
60 
61  result = _direct3D->GetDevice()->CreateBuffer(
62  &matrixBufferDesc,
63  NULL,
65  );
66 
67  if (FAILED(result))
68  {
69  return CO_E_ERRORINAPP;
70  }
71 
72  return S_OK;
73  }

◆ RenderTextureShader()

HRESULT IncrementalEngine::ShaderManager::RenderTextureShader ( int  indexCount,
ID3D11ShaderResourceView *  texture 
)

Definition at line 126 of file ShaderManager.cpp.

130  {
131  assert("SetupFrame() method has to be called before render a Shader." && _frameReady);
132  HRESULT result;
133 
134  result = _textureShader->Draw(
136  indexCount,
137  texture
138  );
139 
140  if (FAILED(result))
141  {
142  return CO_E_ERRORINAPP;
143  }
144 
145  return S_OK;
146  }

◆ SetupFrame()

HRESULT IncrementalEngine::ShaderManager::SetupFrame ( )

Definition at line 75 of file ShaderManager.cpp.

76  {
77  if (!_frameReady)
78  {
79  HRESULT result;
80  D3DXMATRIX worldMatrix, viewMatrix, orthoProjectionMatrix;
81  D3D11_MAPPED_SUBRESOURCE mappedResource;
82  MatrixBufferType* dataPtr;
83 
84  _camera->GetViewMatrix(viewMatrix);
85  _direct3D->GetWorldMatrix(worldMatrix);
86  _direct3D->GetOrthoProjectionMatrix(orthoProjectionMatrix);
87 
88  D3DXMatrixTranspose(&worldMatrix, &worldMatrix);
89  D3DXMatrixTranspose(&viewMatrix, &viewMatrix);
90  D3DXMatrixTranspose(&orthoProjectionMatrix, &orthoProjectionMatrix);
91 
92  auto deviceContext = _direct3D->GetDeviceContext();
93  result = deviceContext->Map(
95  0, //Buffer Index
96  D3D11_MAP_WRITE_DISCARD,
97  0,
98  &mappedResource
99  );
100 
101  if (FAILED(result))
102  {
103  return CO_E_ERRORINAPP;
104  }
105 
106  dataPtr = (MatrixBufferType*)mappedResource.pData;
107 
108  dataPtr->world = worldMatrix;
109  dataPtr->view = viewMatrix;
110  dataPtr->projection = orthoProjectionMatrix;
111 
112  deviceContext->Unmap(_matrixBuffer, 0);
113  deviceContext->VSSetConstantBuffers(0, 1, &_matrixBuffer);
114 
115  _frameReady = true;
116  }
117 
118  return S_OK;
119  }

◆ SetWorldMatrix()

void IncrementalEngine::ShaderManager::SetWorldMatrix ( D3DXMATRIX &  worldMatrix)

Definition at line 148 of file ShaderManager.cpp.

149  {
150  _direct3D->SetWorldMatrix(worldMatrix);
151  }

Member Data Documentation

◆ _camera

RenderCamera* IncrementalEngine::ShaderManager::_camera
private

Definition at line 38 of file ShaderManager.h.

◆ _direct3D

D3DImplementation* IncrementalEngine::ShaderManager::_direct3D
private

Definition at line 37 of file ShaderManager.h.

◆ _frameReady

bool IncrementalEngine::ShaderManager::_frameReady
private

Definition at line 42 of file ShaderManager.h.

◆ _matrixBuffer

ID3D11Buffer* IncrementalEngine::ShaderManager::_matrixBuffer
private

Definition at line 40 of file ShaderManager.h.

◆ _textureShader

TextureShader* IncrementalEngine::ShaderManager::_textureShader
private

Definition at line 39 of file ShaderManager.h.

IncrementalEngine::D3DImplementation::GetDevice
ID3D11Device * GetDevice()
Definition: D3DImplementation.cpp:470
IncrementalEngine::ShaderManager::_textureShader
TextureShader * _textureShader
Definition: ShaderManager.h:39
IncrementalEngine::RenderCamera::GetViewMatrix
void GetViewMatrix(D3DXMATRIX &viewMatrix)
Definition: RenderCamera.cpp:70
IncrementalEngine::ShaderManager::_matrixBuffer
ID3D11Buffer * _matrixBuffer
Definition: ShaderManager.h:40
IncrementalEngine::TextureShader::Init
HRESULT Init(ID3D11Device *device, HWND hwnd)
Definition: TextureShader.cpp:24
IncrementalEngine::ShaderManager::InitGlobalBuffer
HRESULT InitGlobalBuffer()
Definition: ShaderManager.cpp:49
IncrementalEngine::D3DImplementation::GetWorldMatrix
void GetWorldMatrix(D3DXMATRIX &worldMatrix)
Definition: D3DImplementation.cpp:485
IncrementalEngine::TextureShader::Draw
HRESULT Draw(ID3D11DeviceContext *deviceContext, int indexCount, ID3D11ShaderResourceView *texture)
Definition: TextureShader.cpp:43
IncrementalEngine::D3DImplementation::GetDeviceContext
ID3D11DeviceContext * GetDeviceContext()
Definition: D3DImplementation.cpp:475
IncrementalEngine::D3DImplementation::GetOrthoProjectionMatrix
void GetOrthoProjectionMatrix(D3DXMATRIX &orthoMatrix)
Definition: D3DImplementation.cpp:495
IncrementalEngine::ShaderManager::_frameReady
bool _frameReady
Definition: ShaderManager.h:42
IncrementalEngine::ShaderManager::_camera
RenderCamera * _camera
Definition: ShaderManager.h:38
IncrementalEngine::D3DImplementation::SetWorldMatrix
void SetWorldMatrix(D3DXMATRIX &worldMatrix)
Definition: D3DImplementation.cpp:490
IncrementalEngine::ShaderManager::_direct3D
D3DImplementation * _direct3D
Definition: ShaderManager.h:37