//////////////////////////////////////////////////////////////////////////////// // Filename: lightshaderclass.h //////////////////////////////////////////////////////////////////////////////// #ifndef _LIGHTSHADERCLASS_H_ #define _LIGHTSHADERCLASS_H_ ///////////// // GLOBALS // ///////////// const int NUM_LIGHTS = 4; ////////////// // INCLUDES // ////////////// #include "Logger.h" #include #include #include #include using namespace DirectX; using namespace std; //////////////////////////////////////////////////////////////////////////////// // Class name: LightShaderClass //////////////////////////////////////////////////////////////////////////////// class LightShaderClass { private: struct MatrixBufferType { XMMATRIX world; XMMATRIX view; XMMATRIX projection; }; struct CameraBufferType { XMFLOAT3 cameraPosition; float padding; }; struct LightBufferType { XMFLOAT4 ambientColor; XMFLOAT4 diffuseColor; XMFLOAT3 lightDirection; float padding; // Added extra padding so structure is a multiple of 16 for CreateBuffer function requirements. float specularPower; XMFLOAT4 specularColor; }; struct LightColorBufferType { XMFLOAT4 diffuseColor[NUM_LIGHTS]; }; struct LightPositionBufferType { XMFLOAT4 lightPosition[NUM_LIGHTS]; }; public: LightShaderClass(); LightShaderClass(const LightShaderClass&); ~LightShaderClass(); bool Initialize(ID3D11Device*, HWND); void Shutdown(); bool Render(ID3D11DeviceContext*, int, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, XMFLOAT4[], XMFLOAT4[]); private: bool InitializeShader(ID3D11Device*, HWND, WCHAR*, WCHAR*); void ShutdownShader(); void OutputShaderErrorMessage(ID3D10Blob*, HWND, WCHAR*); bool SetShaderParameters(ID3D11DeviceContext*, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, XMFLOAT4[], XMFLOAT4[]); void RenderShader(ID3D11DeviceContext*, int); private: ID3D11VertexShader* m_vertexShader; ID3D11PixelShader* m_pixelShader; ID3D11InputLayout* m_layout; ID3D11SamplerState* m_sampleState; ID3D11Buffer* m_matrixBuffer; ID3D11Buffer* m_cameraBuffer; ID3D11Buffer* m_lightBuffer; ID3D11Buffer* m_lightColorBuffer; ID3D11Buffer* m_lightPositionBuffer; }; #endif