bool FShaderProgramInfo::Compile(ID3DBlob** CodeBlob) const { TVector<D3D_SHADER_MACRO> NullTerminatedDefines; NullTerminatedDefines.Resize(ShaderDefines.Size() + 1); for (size_t i = 0; i < ShaderDefines.Size(); i++) { NullTerminatedDefines[i] = ShaderDefines[i]; } size_t LastIndex = NullTerminatedDefines.Size() - 1; NullTerminatedDefines[LastIndex].Name = NullTerminatedDefines[LastIndex].Definition = nullptr; ID3DBlob* ErrorBlob = nullptr; HRESULT Result = D3DCompileFromFile(SourcePath.c_str(), NullTerminatedDefines.Data(), D3D_COMPILE_STANDARD_FILE_INCLUDE, EntryPoint.c_str(), ShaderTarget.c_str(), 0, 0, CodeBlob, &ErrorBlob); if (Result != S_OK) { OutputDebugString("ERROR COMPILING SHADER: "); if (ErrorBlob != nullptr) { OutputDebugString((LPCSTR)ErrorBlob->GetBufferPointer()); ErrorBlob->Release(); } } return Result == S_OK; }