Skip to content

Instantly share code, notes, and snippets.

@untodesu
Created March 20, 2020 16:48
Show Gist options
  • Save untodesu/52a0373d86b955af7ca12dc96be4e3b8 to your computer and use it in GitHub Desktop.
Save untodesu/52a0373d86b955af7ca12dc96be4e3b8 to your computer and use it in GitHub Desktop.
// ----------------------------------------------------------------------------
// CHROMATICABERRATION.CPP
//
// This file defines the C++ component of the chromatic aberration post processing shader.
// ----------------------------------------------------------------------------
#include "BaseVSShader.h"
#include "SDK_screenspaceeffect_vs20.inc"
#include "chromatic_aberration_ps20.inc"
#include "chromatic_aberration_ps20b.inc"
BEGIN_SHADER( ChromaticAberration, "Adds a little color displacement at the screen borders" )
BEGIN_SHADER_PARAMS
SHADER_PARAM( FBTEXTURE, SHADER_PARAM_TYPE_TEXTURE, "_rt_FullFrameFB", "Framebuffer texture." )
SHADER_PARAM( AMOUNT, SHADER_PARAM_TYPE_FLOAT, "0.002", "Amount of color displacement" )
END_SHADER_PARAMS
SHADER_INIT
{
if( params[FBTEXTURE]->IsDefined() ) {
LoadTexture( FBTEXTURE );
}
if( !params[AMOUNT]->IsDefined() ) {
params[AMOUNT]->SetFloatValue( 0.002 );
}
}
bool NeedsFullFrameBufferTexture( IMaterialVar **params, bool bCheckSpecificToThisFrame /* = true */ ) const
{
return true;
}
SHADER_FALLBACK
{
// Requires DX9 + above
if( g_pHardwareConfig->GetDXSupportLevel() < 90 ) {
Assert( 0 );
return "Wireframe";
}
return 0;
}
SHADER_DRAW
{
SHADOW_STATE
{
pShaderShadow->EnableDepthWrites( false );
pShaderShadow->EnableTexture( SHADER_SAMPLER0, true );
int fmt = VERTEX_POSITION;
pShaderShadow->VertexShaderVertexFormat( fmt, 1, 0, 0 );
// Pre-cache shaders
DECLARE_STATIC_VERTEX_SHADER( sdk_screenspaceeffect_vs20 );
SET_STATIC_VERTEX_SHADER( sdk_screenspaceeffect_vs20 );
if( g_pHardwareConfig->SupportsPixelShaders_2_b() ) {
DECLARE_STATIC_PIXEL_SHADER( chromatic_aberration_ps20b );
SET_STATIC_PIXEL_SHADER( chromatic_aberration_ps20b );
}
else {
DECLARE_STATIC_PIXEL_SHADER( chromatic_aberration_ps20 );
SET_STATIC_PIXEL_SHADER( chromatic_aberration_ps20 );
}
}
DYNAMIC_STATE
{
// $FBTEXTURE
BindTexture( SHADER_SAMPLER0, FBTEXTURE, -1 );
// $AMOUNT
float c0 = params[AMOUNT]->GetFloatValue();
pShaderAPI->SetPixelShaderConstant( 0, &c0, 1 );
DECLARE_DYNAMIC_VERTEX_SHADER( sdk_screenspaceeffect_vs20 );
SET_DYNAMIC_VERTEX_SHADER( sdk_screenspaceeffect_vs20 );
if( g_pHardwareConfig->SupportsPixelShaders_2_b() ) {
DECLARE_DYNAMIC_PIXEL_SHADER( chromatic_aberration_ps20b );
SET_DYNAMIC_PIXEL_SHADER( chromatic_aberration_ps20b );
}
else {
DECLARE_DYNAMIC_PIXEL_SHADER( chromatic_aberration_ps20 );
SET_DYNAMIC_PIXEL_SHADER( chromatic_aberration_ps20 );
}
}
Draw();
}
END_SHADER
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment