#pragma once #include "Logger.h" #include #include #include #include using namespace DirectX; using namespace std; class sunlight_shader_class { private : struct matrix_buffer_type { XMMATRIX world; XMMATRIX view; XMMATRIX projection; }; struct camera_buffer_type { XMFLOAT3 camera_position; float padding; }; struct sun_light_buffer_type { XMFLOAT4 diffuse_color; XMFLOAT4 ambient_color; XMFLOAT3 sun_direction; float intensity; }; struct sun_light_color_buffer_type { XMFLOAT4 sun_color; }; public : sunlight_shader_class(); sunlight_shader_class(const sunlight_shader_class&); ~sunlight_shader_class(); bool initialize(ID3D11Device*, HWND); void shutdown(); bool render(ID3D11DeviceContext*, int, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, XMFLOAT4, XMFLOAT4, XMFLOAT3,float); private: bool initialize_shader(ID3D11Device*, HWND, WCHAR*, WCHAR*); void shutdown_shader(); void output_shader_error_message(ID3D10Blob*, HWND, WCHAR*); bool set_shader_parameters(ID3D11DeviceContext*, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, XMFLOAT4, XMFLOAT4, XMFLOAT3, float); void render_shader(ID3D11DeviceContext*, int); private: ID3D11VertexShader* vertex_shader_; ID3D11PixelShader* pixel_shader_; ID3D11InputLayout* layout_; ID3D11SamplerState* sample_state_; ID3D11Buffer* matrix_buffer_; ID3D11Buffer* camera_buffer_; ID3D11Buffer* sunlight_buffer_; ID3D11Buffer* sunlight_color_buffer_; ID3D11Buffer* sunlight_position_buffer_; };