ReloadShaders completed

This commit is contained in:
turanszkij
2015-12-27 18:40:20 +01:00
parent a981ac56dd
commit 57a67e2887
17 changed files with 149 additions and 107 deletions
+1 -1
View File
@@ -124,7 +124,7 @@ You can use the Renderer with the following functions, all of which are in the g
- PutWaterRipple(String imagename, Vector position)
- PutDecal(Decal decal)
- ClearWorld()
- ReloadShaders()
- ReloadShaders(opt string path)
## Utility Tools
The scripting API provides certain engine features to be used in development.
+4 -4
View File
@@ -345,7 +345,7 @@ void wiEmittedParticle::LoadShaders()
{ "VELOCITY", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
};
UINT numElements = ARRAYSIZE(layout);
wiRenderer::VertexShaderInfo* vsinfo = static_cast<wiRenderer::VertexShaderInfo*>(wiResourceManager::GetGlobal()->add("shaders/pointspriteVS.cso", wiResourceManager::VERTEXSHADER, layout, numElements));
wiRenderer::VertexShaderInfo* vsinfo = static_cast<wiRenderer::VertexShaderInfo*>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "pointspriteVS.cso", wiResourceManager::VERTEXSHADER, layout, numElements));
if (vsinfo != nullptr){
vertexShader = vsinfo->vertexShader;
vertexLayout = vsinfo->vertexLayout;
@@ -353,10 +353,10 @@ void wiEmittedParticle::LoadShaders()
delete vsinfo;
pixelShader = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/pointspritePS.cso", wiResourceManager::PIXELSHADER));
simplestPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/pointspritePS_simplest.cso", wiResourceManager::PIXELSHADER));
pixelShader = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "pointspritePS.cso", wiResourceManager::PIXELSHADER));
simplestPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "pointspritePS_simplest.cso", wiResourceManager::PIXELSHADER));
geometryShader = static_cast<wiRenderer::GeometryShader>(wiResourceManager::GetGlobal()->add("shaders/pointspriteGS.cso", wiResourceManager::GEOMETRYSHADER));
geometryShader = static_cast<wiRenderer::GeometryShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "pointspriteGS.cso", wiResourceManager::GEOMETRYSHADER));
+2
View File
@@ -61,7 +61,9 @@ private:
static ID3D11RasterizerState* rasterizerState,*wireFrameRS;
static ID3D11DepthStencilState* depthStencilState;
public:
static void LoadShaders();
private:
static void SetUpCB();
static void SetUpStates();
void LoadVertexBuffer();
+2 -2
View File
@@ -139,7 +139,7 @@ void wiFont::LoadShaders()
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
};
UINT numElements = ARRAYSIZE(layout);
wiRenderer::VertexShaderInfo* vsinfo = static_cast<wiRenderer::VertexShaderInfo*>(wiResourceManager::GetGlobal()->add("shaders/fontVS.cso", wiResourceManager::VERTEXSHADER, layout, numElements));
wiRenderer::VertexShaderInfo* vsinfo = static_cast<wiRenderer::VertexShaderInfo*>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "fontVS.cso", wiResourceManager::VERTEXSHADER, layout, numElements));
if (vsinfo != nullptr){
vertexShader = vsinfo->vertexShader;
vertexLayout = vsinfo->vertexLayout;
@@ -147,7 +147,7 @@ void wiFont::LoadShaders()
delete vsinfo;
pixelShader = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/fontPS.cso", wiResourceManager::PIXELSHADER));
pixelShader = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "fontPS.cso", wiResourceManager::PIXELSHADER));
+2
View File
@@ -63,7 +63,9 @@ protected:
static void SetUpStates();
static void SetUpCB();
public:
static void LoadShaders();
private:
static void LoadVertexBuffer();
static void LoadIndices();
+15 -20
View File
@@ -66,9 +66,8 @@ void wiHairParticle::CleanUpStatic(){
if(ncrs) ncrs->Release(); ncrs=NULL;
}
void wiHairParticle::SetUpStatic(){
Settings(10,25,120);
void wiHairParticle::LoadShaders()
{
D3D11_INPUT_ELEMENT_DESC layout[] =
{
@@ -77,8 +76,8 @@ void wiHairParticle::SetUpStatic(){
{ "TANGENT", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
};
UINT numElements = ARRAYSIZE(layout);
wiRenderer::VertexShaderInfo* vsinfo = static_cast<wiRenderer::VertexShaderInfo*>(wiResourceManager::GetGlobal()->add("shaders/grassVS.cso", wiResourceManager::VERTEXSHADER, layout, numElements));
if (vsinfo != nullptr){
wiRenderer::VertexShaderInfo* vsinfo = static_cast<wiRenderer::VertexShaderInfo*>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "grassVS.cso", wiResourceManager::VERTEXSHADER, layout, numElements));
if (vsinfo != nullptr) {
vs = vsinfo->vertexShader;
il = vsinfo->vertexLayout;
}
@@ -86,25 +85,21 @@ void wiHairParticle::SetUpStatic(){
ps = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/grassPS.cso", wiResourceManager::PIXELSHADER));
qps = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/qGrassPS.cso", wiResourceManager::PIXELSHADER));
gs[0] = static_cast<wiRenderer::GeometryShader>(wiResourceManager::GetGlobal()->add("shaders/grassL0GS.cso", wiResourceManager::GEOMETRYSHADER));
gs[1] = static_cast<wiRenderer::GeometryShader>(wiResourceManager::GetGlobal()->add("shaders/grassL1GS.cso", wiResourceManager::GEOMETRYSHADER));
gs[2] = static_cast<wiRenderer::GeometryShader>(wiResourceManager::GetGlobal()->add("shaders/grassL2GS.cso", wiResourceManager::GEOMETRYSHADER));
qgs[0] = static_cast<wiRenderer::GeometryShader>(wiResourceManager::GetGlobal()->add("shaders/qGrassLCloseGS.cso", wiResourceManager::GEOMETRYSHADER));
qgs[1] = static_cast<wiRenderer::GeometryShader>(wiResourceManager::GetGlobal()->add("shaders/qGrassLDistGS.cso", wiResourceManager::GEOMETRYSHADER));
ps = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "grassPS.cso", wiResourceManager::PIXELSHADER));
qps = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "qGrassPS.cso", wiResourceManager::PIXELSHADER));
gs[0] = static_cast<wiRenderer::GeometryShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "grassL0GS.cso", wiResourceManager::GEOMETRYSHADER));
gs[1] = static_cast<wiRenderer::GeometryShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "grassL1GS.cso", wiResourceManager::GEOMETRYSHADER));
gs[2] = static_cast<wiRenderer::GeometryShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "grassL2GS.cso", wiResourceManager::GEOMETRYSHADER));
qgs[0] = static_cast<wiRenderer::GeometryShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "qGrassLCloseGS.cso", wiResourceManager::GEOMETRYSHADER));
qgs[1] = static_cast<wiRenderer::GeometryShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "qGrassLDistGS.cso", wiResourceManager::GEOMETRYSHADER));
}
void wiHairParticle::SetUpStatic(){
Settings(10,25,120);
LoadShaders();
//
+4
View File
@@ -55,6 +55,10 @@ private:
static ID3D11SamplerState* ss;
static ID3D11BlendState* bs;
static int LOD[3];
public:
static void LoadShaders();
private:
public:
wiHairParticle();
wiHairParticle(const string& newName, float newLen, int newCount
+17 -17
View File
@@ -79,24 +79,24 @@ void wiImage::LoadShaders()
{
vertexShader = static_cast<wiRenderer::VertexShader>(wiResourceManager::GetGlobal()->add("shaders/imageVS.cso", wiResourceManager::VERTEXSHADER));
screenVS = static_cast<wiRenderer::VertexShader>(wiResourceManager::GetGlobal()->add("shaders/screenVS.cso", wiResourceManager::VERTEXSHADER));
vertexShader = static_cast<wiRenderer::VertexShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "imageVS.cso", wiResourceManager::VERTEXSHADER));
screenVS = static_cast<wiRenderer::VertexShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "screenVS.cso", wiResourceManager::VERTEXSHADER));
pixelShader = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/imagePS.cso", wiResourceManager::PIXELSHADER));
blurHPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/horizontalBlurPS.cso", wiResourceManager::PIXELSHADER));
blurVPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/verticalBlurPS.cso", wiResourceManager::PIXELSHADER));
shaftPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/lightShaftPS.cso", wiResourceManager::PIXELSHADER));
outlinePS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/outlinePS.cso", wiResourceManager::PIXELSHADER));
dofPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/depthofFieldPS.cso", wiResourceManager::PIXELSHADER));
motionBlurPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/motionBlurPS.cso", wiResourceManager::PIXELSHADER));
bloomSeparatePS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/bloomSeparatePS.cso", wiResourceManager::PIXELSHADER));
fxaaPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/fxaa.cso", wiResourceManager::PIXELSHADER));
ssaoPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/ssao.cso", wiResourceManager::PIXELSHADER));
ssssPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/ssss.cso", wiResourceManager::PIXELSHADER));
linDepthPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/linDepthPS.cso", wiResourceManager::PIXELSHADER));
colorGradePS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/colorGradePS.cso", wiResourceManager::PIXELSHADER));
deferredPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/deferredPS.cso", wiResourceManager::PIXELSHADER));
ssrPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/ssr.cso", wiResourceManager::PIXELSHADER));
pixelShader = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "imagePS.cso", wiResourceManager::PIXELSHADER));
blurHPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "horizontalBlurPS.cso", wiResourceManager::PIXELSHADER));
blurVPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "verticalBlurPS.cso", wiResourceManager::PIXELSHADER));
shaftPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "lightShaftPS.cso", wiResourceManager::PIXELSHADER));
outlinePS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "outlinePS.cso", wiResourceManager::PIXELSHADER));
dofPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "depthofFieldPS.cso", wiResourceManager::PIXELSHADER));
motionBlurPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "motionBlurPS.cso", wiResourceManager::PIXELSHADER));
bloomSeparatePS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "bloomSeparatePS.cso", wiResourceManager::PIXELSHADER));
fxaaPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "fxaa.cso", wiResourceManager::PIXELSHADER));
ssaoPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "ssao.cso", wiResourceManager::PIXELSHADER));
ssssPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "ssss.cso", wiResourceManager::PIXELSHADER));
linDepthPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "linDepthPS.cso", wiResourceManager::PIXELSHADER));
colorGradePS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "colorGradePS.cso", wiResourceManager::PIXELSHADER));
deferredPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "deferredPS.cso", wiResourceManager::PIXELSHADER));
ssrPS = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "ssr.cso", wiResourceManager::PIXELSHADER));
+2
View File
@@ -74,7 +74,9 @@ protected:
static ID3D11RasterizerState* rasterizerState;
static ID3D11DepthStencilState* depthStencilStateGreater,*depthStencilStateLess,*depthNoStencilState;
public:
static void LoadShaders();
private:
static void LoadBuffers();
static void SetUpStates();
+3 -3
View File
@@ -100,7 +100,7 @@ void wiLensFlare::LoadShaders(){
{ "POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
};
UINT numElements = ARRAYSIZE(layout);
wiRenderer::VertexShaderInfo* vsinfo = static_cast<wiRenderer::VertexShaderInfo*>(wiResourceManager::GetGlobal()->add("shaders/lensFlareVS.cso", wiResourceManager::VERTEXSHADER, layout, numElements));
wiRenderer::VertexShaderInfo* vsinfo = static_cast<wiRenderer::VertexShaderInfo*>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "lensFlareVS.cso", wiResourceManager::VERTEXSHADER, layout, numElements));
if (vsinfo != nullptr){
vertexShader = vsinfo->vertexShader;
inputLayout = vsinfo->vertexLayout;
@@ -108,9 +108,9 @@ void wiLensFlare::LoadShaders(){
delete vsinfo;
pixelShader = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetGlobal()->add("shaders/lensFlarePS.cso", wiResourceManager::PIXELSHADER));
pixelShader = static_cast<wiRenderer::PixelShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "lensFlarePS.cso", wiResourceManager::PIXELSHADER));
geometryShader = static_cast<wiRenderer::GeometryShader>(wiResourceManager::GetGlobal()->add("shaders/lensFlareGS.cso", wiResourceManager::GEOMETRYSHADER));
geometryShader = static_cast<wiRenderer::GeometryShader>(wiResourceManager::GetShaderManager()->add(wiRenderer::SHADERPATH + "lensFlareGS.cso", wiResourceManager::GEOMETRYSHADER));
+2
View File
@@ -23,7 +23,9 @@ private:
ALIGN_16
};
public:
static void LoadShaders();
private:
static void SetUpStates();
static void SetUpCB();
public:
+82 -58
View File
@@ -19,6 +19,7 @@
#include "wiWaterPlane.h"
#include "wiGraphicsThreads.h"
#include "wiRandom.h"
#include "wiFont.h"
#pragma region STATICS
D3D_DRIVER_TYPE wiRenderer::driverType;
@@ -74,6 +75,8 @@ WorldInfo wiRenderer::worldInfo;
vector<wiRenderer::TextureView> wiRenderer::textureSlotsPS(D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT);
wiRenderer::PixelShader wiRenderer::boundPS=nullptr;
string wiRenderer::SHADERPATH = "shaders/";
#pragma endregion
#pragma region STATIC TEMP
@@ -996,7 +999,7 @@ void wiRenderer::LoadBasicShaders()
{ "COLOR_DITHER", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 },
};
UINT numElements = ARRAYSIZE(layout);
VertexShaderInfo* vsinfo = static_cast<VertexShaderInfo*>(wiResourceManager::GetGlobal()->add("shaders/effectVS10.cso", wiResourceManager::VERTEXSHADER, layout, numElements));
VertexShaderInfo* vsinfo = static_cast<VertexShaderInfo*>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "effectVS10.cso", wiResourceManager::VERTEXSHADER, layout, numElements));
if (vsinfo != nullptr){
vertexShader10 = vsinfo->vertexShader;
vertexLayout = vsinfo->vertexLayout;
@@ -1017,7 +1020,7 @@ void wiRenderer::LoadBasicShaders()
UINT numElements = ARRAYSIZE(oslayout);
VertexShaderInfo* vsinfo = static_cast<VertexShaderInfo*>(wiResourceManager::GetGlobal()->add("shaders/sOVS.cso", wiResourceManager::VERTEXSHADER, oslayout, numElements));
VertexShaderInfo* vsinfo = static_cast<VertexShaderInfo*>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "sOVS.cso", wiResourceManager::VERTEXSHADER, oslayout, numElements));
if (vsinfo != nullptr){
sOVS = vsinfo->vertexShader;
sOIL = vsinfo->vertexLayout;
@@ -1035,29 +1038,29 @@ void wiRenderer::LoadBasicShaders()
{ 0, "TEXCOORD", 1, 0, 4, 0 }, // output the first 2 texture coordinates
};
sOGS = static_cast<GeometryShader>(wiResourceManager::GetGlobal()->add("shaders/sOGS.cso", wiResourceManager::GEOMETRYSHADER, nullptr, 4, pDecl));
sOGS = static_cast<GeometryShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "sOGS.cso", wiResourceManager::GEOMETRYSHADER, nullptr, 4, pDecl));
}
vertexShader = static_cast<VertexShader>(wiResourceManager::GetGlobal()->add("shaders/effectVS.cso", wiResourceManager::VERTEXSHADER));
lightVS[0] = static_cast<VertexShader>(wiResourceManager::GetGlobal()->add("shaders/dirLightVS.cso", wiResourceManager::VERTEXSHADER));
lightVS[1] = static_cast<VertexShader>(wiResourceManager::GetGlobal()->add("shaders/pointLightVS.cso", wiResourceManager::VERTEXSHADER));
lightVS[2] = static_cast<VertexShader>(wiResourceManager::GetGlobal()->add("shaders/spotLightVS.cso", wiResourceManager::VERTEXSHADER));
vSpotLightVS = static_cast<VertexShader>(wiResourceManager::GetGlobal()->add("shaders/vSpotLightVS.cso", wiResourceManager::VERTEXSHADER));
vPointLightVS = static_cast<VertexShader>(wiResourceManager::GetGlobal()->add("shaders/vPointLightVS.cso", wiResourceManager::VERTEXSHADER));
decalVS = static_cast<VertexShader>(wiResourceManager::GetGlobal()->add("shaders/decalVS.cso", wiResourceManager::VERTEXSHADER));
vertexShader = static_cast<VertexShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "effectVS.cso", wiResourceManager::VERTEXSHADER));
lightVS[0] = static_cast<VertexShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "dirLightVS.cso", wiResourceManager::VERTEXSHADER));
lightVS[1] = static_cast<VertexShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "pointLightVS.cso", wiResourceManager::VERTEXSHADER));
lightVS[2] = static_cast<VertexShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "spotLightVS.cso", wiResourceManager::VERTEXSHADER));
vSpotLightVS = static_cast<VertexShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "vSpotLightVS.cso", wiResourceManager::VERTEXSHADER));
vPointLightVS = static_cast<VertexShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "vPointLightVS.cso", wiResourceManager::VERTEXSHADER));
decalVS = static_cast<VertexShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "decalVS.cso", wiResourceManager::VERTEXSHADER));
pixelShader = static_cast<PixelShader>(wiResourceManager::GetGlobal()->add("shaders/effectPS.cso", wiResourceManager::PIXELSHADER));
transparentPS = static_cast<PixelShader>(wiResourceManager::GetGlobal()->add("shaders/effectPS_transparent.cso", wiResourceManager::PIXELSHADER));
simplestPS = static_cast<PixelShader>(wiResourceManager::GetGlobal()->add("shaders/effectPS_simplest.cso", wiResourceManager::PIXELSHADER));
fowardSimplePS = static_cast<PixelShader>(wiResourceManager::GetGlobal()->add("shaders/effectPS_forwardSimple.cso", wiResourceManager::PIXELSHADER));
blackoutPS = static_cast<PixelShader>(wiResourceManager::GetGlobal()->add("shaders/effectPS_blackout.cso", wiResourceManager::PIXELSHADER));
textureonlyPS = static_cast<PixelShader>(wiResourceManager::GetGlobal()->add("shaders/effectPS_textureonly.cso", wiResourceManager::PIXELSHADER));
lightPS[0] = static_cast<PixelShader>(wiResourceManager::GetGlobal()->add("shaders/dirLightPS.cso", wiResourceManager::PIXELSHADER));
lightPS[1] = static_cast<PixelShader>(wiResourceManager::GetGlobal()->add("shaders/pointLightPS.cso", wiResourceManager::PIXELSHADER));
lightPS[2] = static_cast<PixelShader>(wiResourceManager::GetGlobal()->add("shaders/spotLightPS.cso", wiResourceManager::PIXELSHADER));
vLightPS = static_cast<PixelShader>(wiResourceManager::GetGlobal()->add("shaders/volumeLightPS.cso", wiResourceManager::PIXELSHADER));
decalPS = static_cast<PixelShader>(wiResourceManager::GetGlobal()->add("shaders/decalPS.cso", wiResourceManager::PIXELSHADER));
pixelShader = static_cast<PixelShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "effectPS.cso", wiResourceManager::PIXELSHADER));
transparentPS = static_cast<PixelShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "effectPS_transparent.cso", wiResourceManager::PIXELSHADER));
simplestPS = static_cast<PixelShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "effectPS_simplest.cso", wiResourceManager::PIXELSHADER));
fowardSimplePS = static_cast<PixelShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "effectPS_forwardSimple.cso", wiResourceManager::PIXELSHADER));
blackoutPS = static_cast<PixelShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "effectPS_blackout.cso", wiResourceManager::PIXELSHADER));
textureonlyPS = static_cast<PixelShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "effectPS_textureonly.cso", wiResourceManager::PIXELSHADER));
lightPS[0] = static_cast<PixelShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "dirLightPS.cso", wiResourceManager::PIXELSHADER));
lightPS[1] = static_cast<PixelShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "pointLightPS.cso", wiResourceManager::PIXELSHADER));
lightPS[2] = static_cast<PixelShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "spotLightPS.cso", wiResourceManager::PIXELSHADER));
vLightPS = static_cast<PixelShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "volumeLightPS.cso", wiResourceManager::PIXELSHADER));
decalPS = static_cast<PixelShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "decalPS.cso", wiResourceManager::PIXELSHADER));
}
void wiRenderer::LoadLineShaders()
{
@@ -1067,7 +1070,7 @@ void wiRenderer::LoadLineShaders()
};
UINT numElements = ARRAYSIZE(layout);
VertexShaderInfo* vsinfo = static_cast<VertexShaderInfo*>(wiResourceManager::GetGlobal()->add("shaders/linesVS.cso", wiResourceManager::VERTEXSHADER, layout, numElements));
VertexShaderInfo* vsinfo = static_cast<VertexShaderInfo*>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "linesVS.cso", wiResourceManager::VERTEXSHADER, layout, numElements));
if (vsinfo != nullptr){
lineVS = vsinfo->vertexShader;
lineIL = vsinfo->vertexLayout;
@@ -1075,38 +1078,38 @@ void wiRenderer::LoadLineShaders()
delete vsinfo;
linePS = static_cast<PixelShader>(wiResourceManager::GetGlobal()->add("shaders/linesPS.cso", wiResourceManager::PIXELSHADER));
linePS = static_cast<PixelShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "linesPS.cso", wiResourceManager::PIXELSHADER));
}
void wiRenderer::LoadTessShaders()
{
hullShader = static_cast<HullShader>(wiResourceManager::GetGlobal()->add("shaders/effectHS.cso", wiResourceManager::HULLSHADER));
domainShader = static_cast<DomainShader>(wiResourceManager::GetGlobal()->add("shaders/effectDS.cso", wiResourceManager::DOMAINSHADER));
hullShader = static_cast<HullShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "effectHS.cso", wiResourceManager::HULLSHADER));
domainShader = static_cast<DomainShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "effectDS.cso", wiResourceManager::DOMAINSHADER));
}
void wiRenderer::LoadSkyShaders()
{
skyVS = static_cast<VertexShader>(wiResourceManager::GetGlobal()->add("shaders/skyVS.cso", wiResourceManager::VERTEXSHADER));
skyPS = static_cast<PixelShader>(wiResourceManager::GetGlobal()->add("shaders/skyPS.cso", wiResourceManager::PIXELSHADER));
skyVS = static_cast<VertexShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "skyVS.cso", wiResourceManager::VERTEXSHADER));
skyPS = static_cast<PixelShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "skyPS.cso", wiResourceManager::PIXELSHADER));
}
void wiRenderer::LoadShadowShaders()
{
shVS = static_cast<VertexShader>(wiResourceManager::GetGlobal()->add("shaders/shadowVS.cso", wiResourceManager::VERTEXSHADER));
cubeShVS = static_cast<VertexShader>(wiResourceManager::GetGlobal()->add("shaders/cubeShadowVS.cso", wiResourceManager::VERTEXSHADER));
shVS = static_cast<VertexShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "shadowVS.cso", wiResourceManager::VERTEXSHADER));
cubeShVS = static_cast<VertexShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "cubeShadowVS.cso", wiResourceManager::VERTEXSHADER));
shPS = static_cast<PixelShader>(wiResourceManager::GetGlobal()->add("shaders/shadowPS.cso", wiResourceManager::PIXELSHADER));
cubeShPS = static_cast<PixelShader>(wiResourceManager::GetGlobal()->add("shaders/cubeShadowPS.cso", wiResourceManager::PIXELSHADER));
shPS = static_cast<PixelShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "shadowPS.cso", wiResourceManager::PIXELSHADER));
cubeShPS = static_cast<PixelShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "cubeShadowPS.cso", wiResourceManager::PIXELSHADER));
cubeShGS = static_cast<GeometryShader>(wiResourceManager::GetGlobal()->add("shaders/cubeShadowGS.cso", wiResourceManager::GEOMETRYSHADER));
cubeShGS = static_cast<GeometryShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "cubeShadowGS.cso", wiResourceManager::GEOMETRYSHADER));
}
void wiRenderer::LoadWaterShaders()
{
waterVS = static_cast<VertexShader>(wiResourceManager::GetGlobal()->add("shaders/waterVS.cso", wiResourceManager::VERTEXSHADER));
waterPS = static_cast<PixelShader>(wiResourceManager::GetGlobal()->add("shaders/waterPS.cso", wiResourceManager::PIXELSHADER));
waterVS = static_cast<VertexShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "waterVS.cso", wiResourceManager::VERTEXSHADER));
waterPS = static_cast<PixelShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "waterPS.cso", wiResourceManager::PIXELSHADER));
}
void wiRenderer::LoadTrailShaders(){
@@ -1118,7 +1121,7 @@ void wiRenderer::LoadTrailShaders(){
};
UINT numElements = ARRAYSIZE(layout);
VertexShaderInfo* vsinfo = static_cast<VertexShaderInfo*>(wiResourceManager::GetGlobal()->add("shaders/trailVS.cso", wiResourceManager::VERTEXSHADER, layout, numElements));
VertexShaderInfo* vsinfo = static_cast<VertexShaderInfo*>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "trailVS.cso", wiResourceManager::VERTEXSHADER, layout, numElements));
if (vsinfo != nullptr){
trailVS = vsinfo->vertexShader;
trailIL = vsinfo->vertexLayout;
@@ -1126,34 +1129,34 @@ void wiRenderer::LoadTrailShaders(){
delete vsinfo;
trailPS = static_cast<PixelShader>(wiResourceManager::GetGlobal()->add("shaders/trailPS.cso", wiResourceManager::PIXELSHADER));
trailPS = static_cast<PixelShader>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "trailPS.cso", wiResourceManager::PIXELSHADER));
}
void wiRenderer::ReloadShaders()
void wiRenderer::ReloadShaders(const string& path)
{
//// TODO : Also delete shaders from resourcemanager!
//wiResourceManager::GetGlobal()->del("shaders/effectVS10.cso");
//wiResourceManager::GetGlobal()->del("shaders/sOVS.cso");
//wiResourceManager::GetGlobal()->del("shaders/sOGS.cso");
//wiResourceManager::GetGlobal()->del("shaders/effectVS.cso");
//wiResourceManager::GetGlobal()->del("shaders/dirLightVS.cso");
//wiResourceManager::GetGlobal()->del("shaders/pointLightVS.cso");
//wiResourceManager::GetGlobal()->del("shaders/spotLightVS.cso");
//wiResourceManager::GetGlobal()->del("shaders/vSpotLightVS.cso");
//wiResourceManager::GetGlobal()->del("shaders/vPointLightVS.cso");
//wiResourceManager::GetGlobal()->del("shaders/decalVS.cso");
//wiResourceManager::GetGlobal()->del("shaders/effectPS.cso");
//wiResourceManager::GetGlobal()->del("shaders/effectPS_transparent.cso");
//wiResourceManager::GetGlobal()->del("shaders/effectPS_simplest.cso");
//wiResourceManager::GetGlobal()->del("shaders/effectPS_forwardSimple.cso");
//wiResourceManager::GetGlobal()->del("shaders/effectPS_blackout.cso");
//wiResourceManager::GetGlobal()->del("shaders/effectPS_textureonly.cso");
//wiResourceManager::GetGlobal()->del("shaders/dirLightPS.cso");
//wiResourceManager::GetGlobal()->del("shaders/pointLightPS.cso");
//wiResourceManager::GetGlobal()->del("shaders/spotLightPS.cso");
//wiResourceManager::GetGlobal()->del("shaders/volumeLightPS.cso");
//wiResourceManager::GetGlobal()->del("shaders/decalPS.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "effectVS10.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "sOVS.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "sOGS.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "effectVS.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "dirLightVS.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "pointLightVS.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "spotLightVS.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "vSpotLightVS.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "vPointLightVS.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "decalVS.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "effectPS.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "effectPS_transparent.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "effectPS_simplest.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "effectPS_forwardSimple.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "effectPS_blackout.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "effectPS_textureonly.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "dirLightPS.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "pointLightPS.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "spotLightPS.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "volumeLightPS.cso");
//wiResourceManager::GetGlobal()->del(SHADERPATH + "decalPS.cso");
//LoadBasicShaders();
@@ -1163,6 +1166,27 @@ void wiRenderer::ReloadShaders()
////LoadShadowShaders();
////LoadWaterShaders();
////LoadTrailShaders();
if (path.length() > 0)
{
SHADERPATH = path;
}
graphicsMutex.lock();
wiResourceManager::GetShaderManager()->CleanUp();
LoadBasicShaders();
LoadLineShaders();
LoadTessShaders();
LoadSkyShaders();
LoadShadowShaders();
LoadWaterShaders();
LoadTrailShaders();
wiHairParticle::LoadShaders();
wiEmittedParticle::LoadShaders();
wiFont::LoadShaders();
wiImage::LoadShaders();
wiLensFlare::LoadShaders();
graphicsMutex.unlock();
}
+2 -1
View File
@@ -361,6 +361,7 @@ protected:
static void RecursiveBoneTransform(Armature* armature, Bone* bone, const XMMATRIX& parentCombinedMat);
static XMVECTOR InterPolateKeyFrames(float currentFrame, const int frameCount,const std::vector<KeyFrame>& keyframes, KeyFrameType type);
public:
static string SHADERPATH;
wiRenderer();
void CleanUp();
@@ -406,7 +407,7 @@ public:
static Object* getObjectByName(const string& name);
static Light* getLightByName(const string& name);
static void ReloadShaders();
static void ReloadShaders(const string& path = "");
static Vertex TransformVertex(const Mesh* mesh, int vertexI, const XMMATRIX& mat = XMMatrixIdentity());
static Vertex TransformVertex(const Mesh* mesh, const SkinnedVertex& vertex, const XMMATRIX& mat = XMMatrixIdentity());
+4
View File
@@ -525,6 +525,10 @@ namespace wiRenderer_BindLua
}
int ReloadShaders(lua_State* L)
{
if (wiLua::SGetArgCount(L) > 0)
{
wiRenderer::ReloadShaders(wiLua::SGetString(L, 1));
}
wiRenderer::ReloadShaders();
return 0;
}
+5
View File
@@ -29,6 +29,11 @@ wiResourceManager* wiResourceManager::GetGlobal()
}
return globalResources;
}
wiResourceManager* wiResourceManager::GetShaderManager()
{
static wiResourceManager* shaderManager = new wiResourceManager;
return shaderManager;
}
void wiResourceManager::SetUp()
{
+1
View File
@@ -40,6 +40,7 @@ public:
wiResourceManager();
~wiResourceManager();
static wiResourceManager* GetGlobal();
static wiResourceManager* GetShaderManager();
const Resource* get(const string& name);
//specify datatype for shaders
+1 -1
View File
@@ -7,7 +7,7 @@ namespace wiVersion
// minor features, major bug fixes
const int minor = 3;
// minor bug fixes, alterations
const int revision = 2;
const int revision = 4;
long GetVersion()