66 lines
2.3 KiB
C++
66 lines
2.3 KiB
C++
/* -----------------------------------------------------------------------------
|
|
nEngine - GSFramework
|
|
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
|
----------------------------------------------------------------------------- */
|
|
|
|
|
|
#include "gpu/gpu_shader_compiler.h"
|
|
#include "gpu/gpu_renderer.h"
|
|
#include "log/file_log.h"
|
|
#include "log/log.h"
|
|
|
|
using namespace GS;
|
|
using namespace GPU;
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
bool IShaderCompiler::Compile(const Core::Shader &shader, Shader &gpu_shader, const char *binary_cache_id)
|
|
{
|
|
if (!shader.name.IsEmpty())
|
|
__LOG_V__ << "Creating shader '" << shader.name << "'...\n";
|
|
gpu_shader.name = shader.name;
|
|
|
|
// Compile shader objects.
|
|
String vertex_source, pixel_source;
|
|
if (!renderer.TranslateShader(shader, vertex_source, pixel_source))
|
|
return false;
|
|
|
|
gpu_shader.vertex = renderer.NewGPUShaderObject();
|
|
gpu_shader.pixel = renderer.NewGPUShaderObject();
|
|
if (gpu_shader.vertex.IsNull() || gpu_shader.pixel.IsNull())
|
|
return false;
|
|
|
|
String vertex_error, pixel_error;
|
|
if (
|
|
!CompileObject(vertex_source, *gpu_shader.vertex, ShaderObject::Vertex, shader.name, &vertex_error) ||
|
|
!CompileObject(pixel_source, *gpu_shader.pixel, ShaderObject::Pixel, shader.name, &pixel_error)
|
|
)
|
|
{
|
|
__LOG_E__ << "Shader '" << shader.name << "' failed to compile.\n";
|
|
|
|
//#ifdef _DEBUG
|
|
FileLog file_log("c:/shader_error.log");
|
|
file_log << "--------------------------------------------------------------------------------\n";
|
|
file_log << "Failed to compile shader '" << shader.name << "'.\n\n";
|
|
file_log << "Vertex error:" << vertex_error << "\n\n";
|
|
file_log << "Pixel error:" << pixel_error << "\n\n";
|
|
file_log << "--------------------------------------------------------------------------------\n";
|
|
file_log << "\n";
|
|
file_log << "VERTEX:\n";
|
|
file_log << "\n";
|
|
file_log << vertex_source.NormalizedEOL(String::EOLUnix);
|
|
file_log << "\n";
|
|
file_log << "PIXEL:\n";
|
|
file_log << "\n";
|
|
file_log << pixel_source.NormalizedEOL(String::EOLUnix);
|
|
file_log << "\n";
|
|
file_log << "--------------------------------------------------------------------------------\n";
|
|
file_log << "\n";
|
|
//#endif
|
|
return false;
|
|
}
|
|
|
|
return Link(shader, gpu_shader);
|
|
}
|
|
//------------------------------------------------------------------------------
|