void CubeDemo::initialize() { SetCurrentDirectory(Utility::ExecutableDirectory().c_str()); UINT shaderFlags = 0; #if defined(DEBUG) || defined(_DEBUG) shaderFlags |= D3DCOMPILE_DEBUG; shaderFlags |= D3DCOMPILE_SKIP_OPTIMIZATION; #endif ID3D10Blob * compiledShader = nullptr; ID3D10Blob * errorMessages = nullptr; HRESULT hr = D3DCompileFromFile(L"Content\\Effects\\BasicEffect.fx", nullptr, nullptr, nullptr, "fx_5_0", shaderFlags, 0, &compiledShader, &errorMessages); //if (errorMessages != nullptr) //{ // char * message = (char*)errorMessages->GetBufferPointer(); // GameException ex((wchar_t*)errorMessages->GetBufferPointer(), hr); // ReleaseObject(errorMessages); // throw ex; // //ReleaseObject(compiledShader); //} if (FAILED(hr)) { throw GameException(L"D3DX11CompileFromFile() failed.", hr); } hr = D3DX11CreateEffectFromMemory(compiledShader->GetBufferPointer(), compiledShader->GetBufferSize(), 0, mGame->device(), &mEffect); if (FAILED(hr)) { throw GameException(L"D3DX11CreateEffectFromMemory() failed", hr); } ReleaseObject(compiledShader); mTechnique = mEffect->GetTechniqueByName("main11"); if (mTechnique == nullptr) { throw GameException(L"ID3D11Effect::GetTechniqueByName() unable to find techique main11.", hr); } mPass = mTechnique->GetPassByName("p0"); if (mPass == nullptr) { throw GameException(L"ID3D11EffectTechnique::GetPassByName() unable to find pass p0", hr); } ID3DX11EffectVariable * variable = mEffect->GetVariableByName("WorldViewProjection"); if (variable == nullptr) { throw GameException(L"ID3DX11Effect::GetVariableByName() unable to find variable WorldViewProjection"); } mWvpVariable = variable->AsMatrix(); if (!mWvpVariable->IsValid()) { throw GameException(L"Invaild effect variable cast"); } D3DX11_PASS_DESC passDesc; mPass->GetDesc(&passDesc); D3D11_INPUT_ELEMENT_DESC inputElementDescriptions[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, }; if (FAILED(hr = mGame->device()->CreateInputLayout(inputElementDescriptions, ARRAYSIZE(inputElementDescriptions), passDesc.pIAInputSignature, passDesc.IAInputSignatureSize, &mInputLayout))) { throw GameException(L"ID3D11Device::CreateInputLayout() failed", hr); } BasicEffectVertex vertices[] = { BasicEffectVertex(XMFLOAT4(-1.0f, 1.0f, -1.0f, 1.0f), XMFLOAT4(reinterpret_cast<float*>(&Colors::RED))), BasicEffectVertex(XMFLOAT4(1.0f, 1.0f, -1.0f, 1.0f), XMFLOAT4(reinterpret_cast<float*>(&Colors::GREEN))), BasicEffectVertex(XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f), XMFLOAT4(reinterpret_cast<float*>(&Colors::BLACK))) , BasicEffectVertex(XMFLOAT4(-1.0f, 1.0f, 1.0f, 1.0f), XMFLOAT4(reinterpret_cast<float*>(&Colors::WHITE))), BasicEffectVertex(XMFLOAT4(-1.0f,- 1.0f, 1.0f, 1.0f), XMFLOAT4(reinterpret_cast<float*>(&Colors::YELLOW))), BasicEffectVertex(XMFLOAT4(+1.0f, -1.0f, +1.0f, 1.0f), XMFLOAT4(reinterpret_cast<float*>(&Colors::BLACK))), BasicEffectVertex(XMFLOAT4(1.0f, -1.0f, -1.0f, 1.0f), XMFLOAT4(reinterpret_cast<float*>(&Colors::CYAN))), BasicEffectVertex(XMFLOAT4(-1.0f, -1.0f, -1.0f, 1.0f), XMFLOAT4(reinterpret_cast<float*>(&Colors::GREEN))) }; D3D11_BUFFER_DESC vertexBufferDesc; ZeroMemory(&vertexBufferDesc, sizeof(vertexBufferDesc)); vertexBufferDesc.ByteWidth = sizeof(BasicEffectVertex)* ARRAYSIZE(vertices); vertexBufferDesc.Usage = D3D11_USAGE_IMMUTABLE; vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; D3D11_SUBRESOURCE_DATA vertexSubResourceData; ZeroMemory(&vertexSubResourceData, sizeof(vertexSubResourceData)); vertexSubResourceData.pSysMem = vertices; if (FAILED(mGame->device()->CreateBuffer(&vertexBufferDesc, &vertexSubResourceData, &mVertexBuffer))) { throw GameException(L"ID3D11Device::CreateBuffer() failed"); } UINT indices[] = { 0,1,2, 0,2,3, 4,5,6, 4,6,7, 3,2,5, 3,5,4, 2,1,6, 2,6,5, 1,7,6, 1,0,7, 0,3,4, 0,4,7, }; D3D11_BUFFER_DESC indexBufferDesc; ZeroMemory(&indexBufferDesc, sizeof(indexBufferDesc)); indexBufferDesc.ByteWidth = sizeof(indices); indexBufferDesc.Usage = D3D11_USAGE_IMMUTABLE; indexBufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER; D3D11_SUBRESOURCE_DATA indexSubResourceData; ZeroMemory(&indexSubResourceData, sizeof(indexSubResourceData)); indexSubResourceData.pSysMem = indices; if (FAILED(mGame->device()->CreateBuffer(&indexBufferDesc, &indexSubResourceData, &mIndexBuffer))) { throw GameException(L"ID3D11Device::CreateBuffer() failed"); } mCamera->setPosition(0.0f, 0.0f, 5.0f); }
void CubeDemo::Initialize() { SetCurrentDirectory(Utility::ExecutableDirectory().c_str()); // Compile the shader UINT shaderFlags = 0; #if defined( DEBUG ) || defined( _DEBUG ) shaderFlags |= D3DCOMPILE_DEBUG; shaderFlags |= D3DCOMPILE_SKIP_OPTIMIZATION; #endif ID3D10Blob* compiledShader = nullptr; ID3D10Blob* errorMessages = nullptr; HRESULT hr = D3DCompileFromFile(L"C:\\Users\\Nick\\Source\\Repos\\DirectXTest\\source\\Library\\Content\\BasicEffect.fx", nullptr, nullptr, nullptr, "fx_5_0", shaderFlags, 0, &compiledShader, &errorMessages); if (FAILED(hr)) { char* errorMessage = (errorMessages != nullptr ? (char*)errorMessages->GetBufferPointer() : "D3DX11CompileFromFile() failed"); GameException ex(errorMessage, hr); ReleaseObject(errorMessages); throw ex; } // Create an effect object from the compiled shader hr = D3DX11CreateEffectFromMemory(compiledShader->GetBufferPointer(), compiledShader->GetBufferSize(), 0, mGame->Direct3DDevice(), &mEffect); if (FAILED(hr)) { throw GameException("D3DX11CreateEffectFromMemory() failed.", hr); } ReleaseObject(compiledShader); // Look up the technique, pass, and WVP variable from the effect mTechnique = mEffect->GetTechniqueByName("main11"); if (mTechnique == nullptr) { throw GameException("ID3DX11Effect::GetTechniqueByName() could not find the specified technique.", hr); } mPass = mTechnique->GetPassByName("p0"); if (mPass == nullptr) { throw GameException("ID3DX11EffectTechnique::GetPassByName() could not find the specified pass.", hr); } ID3DX11EffectVariable* variable = mEffect->GetVariableByName("WorldViewProjection"); if (variable == nullptr) { throw GameException("ID3DX11Effect::GetVariableByName() could not find the specified variable.", hr); } mWvpVariable = variable->AsMatrix(); if (mWvpVariable->IsValid() == false) { throw GameException("Invalid effect variable cast."); } // Create the input layout D3DX11_PASS_DESC passDesc; mPass->GetDesc(&passDesc); D3D11_INPUT_ELEMENT_DESC inputElementDescriptions[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 } }; if (FAILED(hr = mGame->Direct3DDevice()->CreateInputLayout(inputElementDescriptions, ARRAYSIZE(inputElementDescriptions), passDesc.pIAInputSignature, passDesc.IAInputSignatureSize, &mInputLayout))) { throw GameException("ID3D11Device::CreateInputLayout() failed.", hr); } // Create the vertex and index buffers BasicEffectVertex vertices[] = { BasicEffectVertex(XMFLOAT4(-1.0f, +1.0f, -1.0f, 1.0f), XMFLOAT4(reinterpret_cast<const float*>(&ColorHelper::Green))), BasicEffectVertex(XMFLOAT4(+1.0f, +1.0f, -1.0f, 1.0f), XMFLOAT4(reinterpret_cast<const float*>(&ColorHelper::Yellow))), BasicEffectVertex(XMFLOAT4(+1.0f, +1.0f, +1.0f, 1.0f), XMFLOAT4(reinterpret_cast<const float*>(&ColorHelper::White))), BasicEffectVertex(XMFLOAT4(-1.0f, +1.0f, +1.0f, 1.0f), XMFLOAT4(reinterpret_cast<const float*>(&ColorHelper::BlueGreen))), BasicEffectVertex(XMFLOAT4(-1.0f, -1.0f, +1.0f, 1.0f), XMFLOAT4(reinterpret_cast<const float*>(&ColorHelper::Blue))), BasicEffectVertex(XMFLOAT4(+1.0f, -1.0f, +1.0f, 1.0f), XMFLOAT4(reinterpret_cast<const float*>(&ColorHelper::Purple))), BasicEffectVertex(XMFLOAT4(+1.0f, -1.0f, -1.0f, 1.0f), XMFLOAT4(reinterpret_cast<const float*>(&ColorHelper::Red))), BasicEffectVertex(XMFLOAT4(-1.0f, -1.0f, -1.0f, 1.0f), XMFLOAT4(reinterpret_cast<const float*>(&ColorHelper::Black))) }; D3D11_BUFFER_DESC vertexBufferDesc; ZeroMemory(&vertexBufferDesc, sizeof(vertexBufferDesc)); vertexBufferDesc.ByteWidth = sizeof(BasicEffectVertex) * ARRAYSIZE(vertices); vertexBufferDesc.Usage = D3D11_USAGE_IMMUTABLE; vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; D3D11_SUBRESOURCE_DATA vertexSubResourceData; ZeroMemory(&vertexSubResourceData, sizeof(vertexSubResourceData)); vertexSubResourceData.pSysMem = vertices; if (FAILED(mGame->Direct3DDevice()->CreateBuffer(&vertexBufferDesc, &vertexSubResourceData, &mVertexBuffer))) { throw GameException("ID3D11Device::CreateBuffer() failed."); } UINT indices[] = { 0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 3, 2, 5, 3, 5, 4, 2, 1, 6, 2, 6, 5, 1, 7, 6, 1, 0, 7, 0, 3, 4, 0, 4, 7 }; D3D11_BUFFER_DESC indexBufferDesc; ZeroMemory(&indexBufferDesc, sizeof(indexBufferDesc)); indexBufferDesc.ByteWidth = sizeof(UINT) * ARRAYSIZE(indices); indexBufferDesc.Usage = D3D11_USAGE_IMMUTABLE; indexBufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER; D3D11_SUBRESOURCE_DATA indexSubResourceData; ZeroMemory(&indexSubResourceData, sizeof(indexSubResourceData)); indexSubResourceData.pSysMem = indices; if (FAILED(mGame->Direct3DDevice()->CreateBuffer(&indexBufferDesc, &indexSubResourceData, &mIndexBuffer))) { throw GameException("ID3D11Device::CreateBuffer() failed."); } }