| 24 | namespace TEN::Renderer |
| 25 | { |
| 26 | void Renderer::Initialize(const std::string& gameDir, int w, int h, bool windowed, HWND handle) |
| 27 | { |
| 28 | TENLog("Initializing DX11...", LogLevel::Info); |
| 29 | |
| 30 | _screenWidth = w; |
| 31 | _screenHeight = h; |
| 32 | _isWindowed = windowed; |
| 33 | |
| 34 | InitializeScreen(w, h, handle, false); |
| 35 | InitializeCommonTextures(); |
| 36 | |
| 37 | // Load shaders. |
| 38 | _shaders.LoadShaders(w, h); |
| 39 | |
| 40 | // Initialize render states. |
| 41 | _renderStates = std::make_unique<CommonStates>(_device.Get()); |
| 42 | |
| 43 | // Initialize input layout using first vertex shader. |
| 44 | D3D11_INPUT_ELEMENT_DESC inputLayoutItems[] = |
| 45 | { |
| 46 | { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, |
| 47 | { "NORMAL", 0, DXGI_FORMAT_R8G8B8A8_SNORM, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, |
| 48 | { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, |
| 49 | { "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, |
| 50 | { "TANGENT", 0, DXGI_FORMAT_R8G8B8A8_SNORM, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, |
| 51 | { "NORMAL", 1, DXGI_FORMAT_R8G8B8A8_SNORM, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, |
| 52 | { "BONEINDICES", 0, DXGI_FORMAT_R8G8B8A8_UINT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, |
| 53 | { "BONEWEIGHTS", 0, DXGI_FORMAT_R8G8B8A8_UINT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, |
| 54 | { "EFFECTS", 0, DXGI_FORMAT_R32_UINT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, |
| 55 | { "EFFECTS", 1, DXGI_FORMAT_R32_UINT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, |
| 56 | }; |
| 57 | |
| 58 | const auto& roomShader = _shaders.Get(Shader::Rooms); |
| 59 | Utils::throwIfFailed(_device->CreateInputLayout(inputLayoutItems, 10, roomShader.Vertex.Blob->GetBufferPointer(), roomShader.Vertex.Blob->GetBufferSize(), &_inputLayout)); |
| 60 | |
| 61 | // Initialize constant buffers. |
| 62 | _cbCameraMatrices = CreateConstantBuffer<CCameraMatrixBuffer>(); |
| 63 | _cbItem = CreateConstantBuffer<CItemBuffer>(); |
| 64 | _cbSky = CreateConstantBuffer<CSkyBuffer>(); |
| 65 | _cbLights = CreateConstantBuffer<CLightBuffer>(); |
| 66 | _cbShadowMap = CreateConstantBuffer<CShadowLightBuffer>(); |
| 67 | _cbRoom = CreateConstantBuffer<CRoomBuffer>(); |
| 68 | _cbAnimated = CreateConstantBuffer<CAnimatedBuffer>(); |
| 69 | _cbPostProcessBuffer = CreateConstantBuffer<CPostProcessBuffer>(); |
| 70 | _cbBlending = CreateConstantBuffer<CBlendingBuffer>(); |
| 71 | _cbInstancedSpriteBuffer = CreateConstantBuffer<CInstancedSpriteBuffer>(); |
| 72 | _cbInstancedStaticMeshBuffer = CreateConstantBuffer<CInstancedStaticMeshBuffer>(); |
| 73 | _cbSMAABuffer = CreateConstantBuffer<CSMAABuffer>(); |
| 74 | _cbMaterial = CreateConstantBuffer<CMaterialBuffer>(); |
| 75 | |
| 76 | // Prepare HUD Constant buffer. |
| 77 | _cbHUDBar = CreateConstantBuffer<CHUDBarBuffer>(); |
| 78 | _cbHUD = CreateConstantBuffer<CHUDBuffer>(); |
| 79 | _stHUD.View = Matrix::CreateLookAt(Vector3::Zero, Vector3(0, 0, 1), Vector3(0, -1, 0)); |
| 80 | _stHUD.Projection = Matrix::CreateOrthographicOffCenter(0, DISPLAY_SPACE_RES.x, 0, DISPLAY_SPACE_RES.y, 0, 1.0f); |
| 81 | UpdateConstantBuffer(_stHUD, _cbHUD); |
| 82 | _currentCausticsFrame = 0; |
| 83 |
no test coverage detected