Files
cool-source-archive/materialsystem/stdshadersdx11/sky_dx11.cpp
Totterynine 2773eae4d7 shaderapidx11
use -dxlevel 110 to use it
2021-09-22 18:56:56 +05:00

120 lines
3.0 KiB
C++

//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $Header: $
// $NoKeywords: $
//=============================================================================//
#include "BaseVSShader.h"
#include "sky_vs40.inc"
#include "sky_ps40.inc"
#include "ConVar.h"
CREATE_CONSTANT_BUFFER( Sky )
{
// Vertex shader
Vector4D vTextureSizeInfo;
Vector4D mBaseTexCoordTransform[2];
// Pixel shadere
Vector4D vInputScale;
};
BEGIN_VS_SHADER( Sky_DX11, "Help for Sky_DX11 shader" )
BEGIN_SHADER_PARAMS
SHADER_PARAM_OVERRIDE( COLOR, SHADER_PARAM_TYPE_VEC3, "[ 1 1 1]", "color multiplier", SHADER_PARAM_NOT_EDITABLE )
SHADER_PARAM_OVERRIDE( ALPHA, SHADER_PARAM_TYPE_FLOAT, "1.0", "unused", SHADER_PARAM_NOT_EDITABLE )
END_SHADER_PARAMS
DECLARE_CONSTANT_BUFFER( Sky )
SHADER_FALLBACK
{
return 0;
}
SHADER_INIT_PARAMS()
{
SET_FLAGS( MATERIAL_VAR_NOFOG );
SET_FLAGS( MATERIAL_VAR_IGNOREZ );
}
SHADER_INIT
{
if (params[BASETEXTURE]->IsDefined())
{
LoadTexture( BASETEXTURE );
}
}
SHADER_INIT_GLOBAL
{
INIT_CONSTANT_BUFFER( Sky );
}
SHADER_DRAW
{
SHADOW_STATE
{
SetInitialShadowState();
pShaderShadow->VertexShaderVertexFormat( VERTEX_POSITION, 1, NULL, 0 );
SetVertexShaderConstantBuffer( 0, SHADER_CONSTANTBUFFER_PERMODEL );
SetVertexShaderConstantBuffer( 1, SHADER_CONSTANTBUFFER_PERFRAME );
SetVertexShaderConstantBuffer( 2, SHADER_CONSTANTBUFFER_PERSCENE );
SetVertexShaderConstantBuffer( 3, CONSTANT_BUFFER( Sky ) );
SetPixelShaderConstantBuffer( 0, SHADER_CONSTANTBUFFER_PERFRAME );
SetPixelShaderConstantBuffer( 1, CONSTANT_BUFFER( Sky ) );
DECLARE_STATIC_VERTEX_SHADER( sky_vs40 );
SET_STATIC_VERTEX_SHADER( sky_vs40 );
DECLARE_STATIC_PIXEL_SHADER( sky_ps40 );
SET_STATIC_PIXEL_SHADER( sky_ps40 );
pShaderShadow->EnableAlphaWrites( true );
}
DYNAMIC_STATE
{
BindTexture( SHADER_SAMPLER0, BASETEXTURE, FRAME );
ALIGN16 Sky_CBuffer_t constants;
memset( &constants, 0, sizeof( Sky_CBuffer_t ) );
// Texture coord transform
StoreVertexShaderTextureTransform( constants.mBaseTexCoordTransform, BASETEXTURETRANSFORM );
if (params[COLOR]->IsDefined())
{
params[COLOR]->GetVecValue( constants.vInputScale.Base(), 3 );
}
ITexture *txtr = params[BASETEXTURE]->GetTextureValue();
ImageFormat fmt = txtr->GetImageFormat();
if (
( fmt == IMAGE_FORMAT_RGBA16161616 ) ||
( ( fmt == IMAGE_FORMAT_RGBA16161616F ) &&
( g_pHardwareConfig->GetHDRType() == HDR_TYPE_INTEGER ) )
)
{
constants.vInputScale[0]*=16.0;
constants.vInputScale[1]*=16.0;
constants.vInputScale[2]*=16.0;
}
UPDATE_CONSTANT_BUFFER( Sky, constants );
DECLARE_DYNAMIC_VERTEX_SHADER( sky_vs40 );
SET_DYNAMIC_VERTEX_SHADER( sky_vs40 );
DECLARE_DYNAMIC_PIXEL_SHADER( sky_ps40 );
SET_DYNAMIC_PIXEL_SHADER_COMBO( WRITE_DEPTH_TO_DESTALPHA, pShaderAPI->ShouldWriteDepthToDestAlpha() );
SET_DYNAMIC_PIXEL_SHADER( sky_ps40 );
}
Draw( );
}
END_SHADER