Files
Webcam/include/engine/gpu/gpu_shader_compiler.cpp

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);
}
//------------------------------------------------------------------------------