commit x64 compilation from lulu cause the other branch dont seems to compile properly at home
This commit is contained in:
148
include/engine/gpu/gpu_core_shader.cpp
Normal file
148
include/engine/gpu/gpu_core_shader.cpp
Normal file
@ -0,0 +1,148 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
GSFramework
|
||||
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
||||
----------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#include "gpu/gpu_renderer.h"
|
||||
#include "metafile/nml_object.h"
|
||||
#include "log/log.h"
|
||||
|
||||
using namespace GS::GPU;
|
||||
using GS::NML::Tag;
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
Tag *Renderer::GetPCFShaderTag() const
|
||||
{
|
||||
const char *pcf_tag[] = { "PCF:3x3GaussianDithered;", "PCF:3x3;", "PCF:2x2;", "PCF:1x1;" };
|
||||
int pcf_q = GS::Types::Clamp(registry.GetInteger("ShadowMapping:PCF:Quality", 1), 0, 3);
|
||||
return shader_dict.GetTag(pcf_tag[pcf_q]);
|
||||
}
|
||||
Tag *Renderer::GetPSMShaderTag() const
|
||||
{ return shader_dict.GetTag("PSM;"); }
|
||||
Tag *Renderer::GetPSSMShaderTag() const
|
||||
{
|
||||
const char *pssm_tag[] = { "PSSM:2Split;", "PSSM:3Split;", "PSSM:4Split;" };
|
||||
int split_count = GS::Types::Clamp(registry.GetInteger("ShadowMapping:PSSM:Split", 3), 2, 4);
|
||||
return shader_dict.GetTag(pssm_tag[split_count - 2]);
|
||||
}
|
||||
void Renderer::MarshallCoreShader(GS::String &source)
|
||||
{
|
||||
if (Tag *t = shader_dict.GetTag("UnpackGBuffer:Float;"))
|
||||
source.Replace("#(UnpackNormalDepth)", t->GetString());
|
||||
if (Tag *t = GetPCFShaderTag())
|
||||
source.Replace("#(ComputePCF)", t->GetString());
|
||||
if (Tag *t = GetPSSMShaderTag())
|
||||
source.Replace("#(DispatchPSSM)", t->GetString());
|
||||
}
|
||||
Shader *Renderer::SetupCoreShader(const char *name)
|
||||
{
|
||||
Core::Shader shader;
|
||||
if (!NML::LoadFromFile(shader, name))
|
||||
return NULL;
|
||||
|
||||
shader.name = name;
|
||||
|
||||
// Note: Marshalling is only done on core shaders.
|
||||
MarshallCoreShader(shader.vertex);
|
||||
MarshallCoreShader(shader.pixel);
|
||||
|
||||
AutoPtr <Shader> gpu_shader((Shader *)NewShader());
|
||||
if (gpu_shader.IsNull() || !gpu_shader->Create(*core_resource_factory, shader))
|
||||
return NULL;
|
||||
return gpu_shader.Detach();
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
bool Renderer::LoadCoreShaders(bool support_3d)
|
||||
{
|
||||
__LOG_FUNC__
|
||||
|
||||
// Load the shader dictionaries.
|
||||
if (!NML::Parser::Load("@core/shaders/gpu/dict.txt", shader_dict))
|
||||
__ERR__(__LOG_E__ << "Shader dictionnary missing.\n", false)
|
||||
if (!NML::Parser::Load("@core/shaders/gpu/dict_material.txt", material_dict))
|
||||
__ERR__(__LOG_E__ << "Material dictionnary missing.\n", false)
|
||||
|
||||
// Load core shaders.
|
||||
single_texture_color_program = SetupCoreShader("@core/shaders/gpu/single_texture_color.nsa");
|
||||
single_texture_program = SetupCoreShader("@core/shaders/gpu/single_texture.nsa");
|
||||
single_color_program = SetupCoreShader("@core/shaders/gpu/single_color.nsa");
|
||||
simple_program = SetupCoreShader("@core/shaders/gpu/simple.nsa");
|
||||
|
||||
if (support_3d)
|
||||
{
|
||||
single_texture_cutoff_program = SetupCoreShader("@core/shaders/gpu/single_texture_cutoff.nsa");
|
||||
single_texture_fx_program = SetupCoreShader("@core/shaders/gpu/single_texture_fx.nsa");
|
||||
tone_mapping_program = SetupCoreShader("@core/shaders/gpu/tone_mapping.nsa");
|
||||
|
||||
ambient_program = SetupCoreShader("@core/shaders/gpu/ambient.nsa");
|
||||
|
||||
spotlight_program = SetupCoreShader("@core/shaders/gpu/deferred/spotlight.nsa");
|
||||
spotlight_shadow_program = SetupCoreShader("@core/shaders/gpu/deferred/spotlight_shadow.nsa");
|
||||
pointlight_program = SetupCoreShader("@core/shaders/gpu/deferred/pointlight.nsa");
|
||||
pointlight_shadow_program = SetupCoreShader("@core/shaders/gpu/deferred/pointlight_shadow.nsa");
|
||||
linearlight_program = SetupCoreShader("@core/shaders/gpu/deferred/linearlight.nsa");
|
||||
linearlight_shadow_program = SetupCoreShader("@core/shaders/gpu/deferred/linearlight_shadow.nsa");
|
||||
ds_fog_program = SetupCoreShader("@core/shaders/gpu/deferred/ds_fog.nsa");
|
||||
|
||||
fx_blur_program = SetupCoreShader("@core/shaders/gpu/fx_blur.nsa");
|
||||
noise_program = SetupCoreShader("@core/shaders/gpu/noise.nsa");
|
||||
sharpen_program = SetupCoreShader("@core/shaders/gpu/sharpen.nsa");
|
||||
hsl_program = SetupCoreShader("@core/shaders/gpu/hsl.nsa");
|
||||
chromatic_dispersion_program = SetupCoreShader("@core/shaders/gpu/chromatic_dispersion.nsa");
|
||||
|
||||
ssaa_program = SetupCoreShader("@core/shaders/gpu/ssaa.nsa");
|
||||
ssao_program = SetupCoreShader("@core/shaders/gpu/ssao.nsa");
|
||||
ssao_blur_program = SetupCoreShader("@core/shaders/gpu/ssao_blur.nsa");
|
||||
|
||||
motion_blur_program = SetupCoreShader("@core/shaders/gpu/motion_blur.nsa");
|
||||
radial_blur_program = SetupCoreShader("@core/shaders/gpu/radial_blur.nsa");
|
||||
|
||||
resolve_msaa_depth_program = SetupCoreShader("@core/shaders/gpu/resolve_msaa_depth.nsa");
|
||||
|
||||
skybox_program = SetupCoreShader("@core/shaders/gpu/skybox.nsa");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
void Renderer::UnloadCoreShaders()
|
||||
{
|
||||
single_texture_color_program = NULL;
|
||||
single_texture_program = NULL;
|
||||
single_color_program = NULL;
|
||||
simple_program = NULL;
|
||||
|
||||
single_texture_cutoff_program = NULL;
|
||||
single_texture_fx_program = NULL;
|
||||
tone_mapping_program = NULL;
|
||||
|
||||
ambient_program = NULL;
|
||||
|
||||
spotlight_program = NULL;
|
||||
spotlight_shadow_program = NULL;
|
||||
pointlight_program = NULL;
|
||||
pointlight_shadow_program = NULL;
|
||||
linearlight_program = NULL;
|
||||
linearlight_shadow_program = NULL;
|
||||
ds_fog_program = NULL;
|
||||
|
||||
fx_blur_program = NULL;
|
||||
noise_program = NULL;
|
||||
sharpen_program = NULL;
|
||||
hsl_program = NULL;
|
||||
chromatic_dispersion_program = NULL;
|
||||
|
||||
ssaa_program = NULL;
|
||||
ssao_program = NULL;
|
||||
ssao_blur_program = NULL;
|
||||
|
||||
motion_blur_program = NULL;
|
||||
radial_blur_program = NULL;
|
||||
|
||||
resolve_msaa_depth_program = NULL;
|
||||
|
||||
skybox_program = NULL;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user