Exemple #1
0
std::unique_ptr<DXShader> DXShader::CreateFromBinary(ShaderStage stage, const void* data,
                                                     size_t length)
{
  D3DBlob* bytecode = new D3DBlob(static_cast<unsigned int>(length), static_cast<const u8*>(data));
  std::unique_ptr<DXShader> shader = CreateFromBlob(stage, bytecode);
  if (!shader)
  {
    bytecode->Release();
    return nullptr;
  }

  return shader;
}
Exemple #2
0
std::unique_ptr<DXShader> DXShader::CreateFromSource(ShaderStage stage, const char* source,
                                                     size_t length)
{
  D3DBlob* bytecode;
  switch (stage)
  {
  case ShaderStage::Vertex:
  {
    if (!D3D::CompileVertexShader(std::string(source, length), &bytecode))
      return nullptr;
  }
  break;

  case ShaderStage::Geometry:
  {
    if (!D3D::CompileGeometryShader(std::string(source, length), &bytecode))
      return nullptr;
  }
  break;

  case ShaderStage::Pixel:
  {
    if (!D3D::CompilePixelShader(std::string(source, length), &bytecode))
      return nullptr;
  }
  break;

  case ShaderStage::Compute:
  {
    if (!D3D::CompileComputeShader(std::string(source, length), &bytecode))
      return nullptr;
  }

  default:
    return nullptr;
  }

  std::unique_ptr<DXShader> shader = CreateFromBlob(stage, bytecode);
  if (!shader)
  {
    bytecode->Release();
    return nullptr;
  }

  return shader;
}
Exemple #3
0
	std::shared_ptr<Shader> Shader::CreateFromMemory(RenderDevice* device, ShaderType type, const char* shaderText, const char* sourceFileName)
	{
		std::shared_ptr<Shader> shader;
		CComPtr<ID3DBlob> errorBlob;
		CComPtr<ID3DBlob> shaderBlob;

		if (SUCCEEDED(D3DCompile(shaderText, strlen(shaderText), sourceFileName != nullptr ? sourceFileName : "Talon Internal",
			nullptr, nullptr, D3D11::ToShaderEntryPoint(type), D3D11::ToShaderLevel(type), 0, 0, &shaderBlob, &errorBlob)))
		{
			std::string debugName = sourceFileName != nullptr ? sourceFileName : "Talon Internal";
			shader = CreateFromBlob(device, type, shaderBlob, "Shader: " + debugName);
		}
		else
		{
			const char* errorText = (const char*)errorBlob->GetBufferPointer();
			TalonLog(errorText);
		}

		return shader;
	}