예제 #1
0
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;
}