diff --git a/Documentation/ScriptingAPI-Documentation.md b/Documentation/ScriptingAPI-Documentation.md
index 205d93a3f..f31f91daa 100644
--- a/Documentation/ScriptingAPI-Documentation.md
+++ b/Documentation/ScriptingAPI-Documentation.md
@@ -60,22 +60,22 @@ getprops(YourObject) on them (where YourObject is the object which is to be insp
## Common Tools
This section describes the common tools for scripting which are not necessarily engine features.
-- signal(string name)
-- waitSignal(string name)
-- runProcess(function func)
-- killProcesses()
-- waitSeconds(float seconds)
-- getprops(table object)
-- len(table object)
-- backlog_post_list(table list)
-- fixedupdate()
-- update()
-- render()
-- getDeltaTime()
-- math.lerp(float a,b,t)
-- math.clamp(float x,min,max)
-- math.saturate(float x)
-- math.round(float x)
+- signal(string name) -- send a signal globally. This can wake up processes if there are any waiting on the same signal name
+- waitSignal(string name) -- wait until a specified signal arrives
+- runProcess(function func) -- start a new process
+- killProcesses() -- stop and remove all processes
+- waitSeconds(float seconds) -- wait until some time has passed (to be used from inside a process)
+- getprops(table object) -- get reflection data from object
+- len(table object) -- get the length of a table
+- backlog_post_list(table list) -- post table contents to the backlog
+- fixedupdate() -- wait for a fixed update step to be called (to be used from inside a process)
+- update() -- wait for variable update step to be called (to be used from inside a process)
+- render() -- wait for a render step to be called (to be used from inside a process)
+- getDeltaTime() -- returns the delta time in seconds (time passed sice previous update())
+- math.lerp(float a,b,t) -- linear interpolation
+- math.clamp(float x,min,max) -- clamp x between min and max
+- math.saturate(float x) -- clamp x between 0 and 1
+- math.round(float x) -- round x to nearest integer
## Engine manipulation
The scripting API provides functions for the developer to manipulate engine behaviour or query it for information.
@@ -84,11 +84,11 @@ The scripting API provides functions for the developer to manipulate engine beha
The scripting console of the engine. Input text with the keyboard, run the input with the RETURN key. The script errors
are also displayed here.
The scripting API provides some functions which manipulate the BackLog. These functions are in he global scope:
-- backlog_clear()
-- backlog_post(string params,,,)
-- backlog_fontsize(int size)
-- backlog_isactive() : boolean result
-- backlog_fontrowspacing(int spacing)
+- backlog_clear() -- remove all entries from the backlog
+- backlog_post(string params,,,) -- post a string to the backlog
+- backlog_fontsize(int size) -- modify the fint size of the backlog
+- backlog_isactive() : boolean result -- returns true if the backlog is active, false otherwise
+- backlog_fontrowspacing(int spacing) -- set a row spacing to the backlog
### Renderer
This is the graphics renderer, which is also responsible for managing the scene graph which consists of keeping track of
@@ -117,9 +117,10 @@ You can use the Renderer with the following functions, all of which are in the g
- SetDebugForceFieldsEnabled(bool enabled)
- SetVSyncEnabled(opt bool enabled)
- SetOcclusionCullingEnabled(bool enabled)
-- SetPhysicsParams(opt bool rigidBodyPhysicsEnabled, opt bool softBodyPhysicsEnabled, opt int softBodyIterationCount)
-- Pick(Ray ray, opt PICKTYPE pickType, opt uint layerMask) : Object? object, Vector position,normal, float distance -- Perform ray-picking in the scene. pickType is a bitmask specifying object types to check against. layerMask is a bitmask specifying which layers to check against
+- Pick(Ray ray, opt PICKTYPE pickType, opt uint layerMask) : int entity, Vector position,normal, float distance -- Perform ray-picking in the scene. pickType is a bitmask specifying object types to check against. layerMask is a bitmask specifying which layers to check against
- DrawLine(Vector origin,end, opt Vector color)
+- DrawPoint(Vector origin, opt float size, opt Vector color)
+- DrawBox(Matrix boxMatrix, opt Vector color)
- PutWaterRipple(String imagename, Vector position)
- PutDecal(Decal decal)
- PutEnvProbe(Vector pos)
@@ -336,6 +337,14 @@ Describes an orientation in 3D space.
- UpdateCamera() -- update the camera matrices
- TransformCamera(TransformComponent transform) -- copies the transform's orientation to the camera. Camera matrices are not updated immediately. They will be updated by the Scene::Update() (if the camera is part of the scene), or by manually calling UpdateCamera()
+#### AnimationComponent
+- Play()
+- Stop()
+- Pause()
+
+#### MaterialComponent
+- SetBaseColor()
+- SetEmissiveColor()
## High Level Interface
### MainComponent
@@ -440,6 +449,36 @@ It inherits functions from RenderPath2D.
- AddLoadingTask(string taskScript)
- OnFinished(string taskScript)
+### Intersects
+
+#### Ray
+A ray is defined by an origin Vector and a normalized direction Vector. It can be used to intersect with other primitives or the scene
+- [constructor]Ray(Vector origin,direction)
+- Intersects(AABB aabb) : bool result
+- Intersects(Sphere sphere) : bool result
+- GetOrigin() : Vector result
+- GetDirection() : Vector result
+
+#### AABB
+Axis Aligned Bounding Box. Can be intersected with other primitives.
+- [constructor]AABB(Vector min,max)
+- Intersects(AABB aabb) : int result -- result can be 0 (outside, no intersection), 1 (intersection), 2 (completely inside)
+- Intersects(Sphere sphere) : bool result
+- Intersects(Ray ray) : bool result
+- GetMin() : Vector result
+- GetMax() : Vector result
+- GetCenter() : Vector result
+- GetHalfExtents() : Vector result
+
+#### Sphere
+Sphere defined by center Vector and radius. Can be intersected with other primitives.
+- [constructor]Sphere(Vector center, float radius)
+- Intersects(AABB aabb) : bool result
+- Intersects(Sphere sphere) : bool result
+- Intersects(Ray ray) : bool result
+- GetCenter() : Vector result
+- GetRadius() : float result
+
### Network
Here are the network communication features.
- TODO
@@ -459,9 +498,9 @@ These provide functions to check the state of the input devices.
Query input devices
- [outer]input : InputManager
- [void-constructor]InputManager()
-- Down(int code, opt int type = KEYBOARD)
-- Press(int code, opt int type = KEYBOARD)
-- Hold(int code, opt int duration = 30, opt boolean continuous = false, opt int type = KEYBOARD)
+- Down(int code, opt int type = KEYBOARD) : bool result -- Check whether a button is currently being held down
+- Press(int code, opt int type = KEYBOARD) : bool result -- Check whether a button has just been pushed that wasn't before
+- Hold(int code, opt int duration = 30, opt boolean continuous = false, opt int type = KEYBOARD) : bool result -- Check whether a button was being held down for a specific duration (nunmber of frames). If continuous == true, than it will also return true after the duration was reached
- GetPointer() : Vector result
- SetPointer(Vector pos)
- HidePointer(bool visible)
diff --git a/Editor/ModelImporter_GLTF.cpp b/Editor/ModelImporter_GLTF.cpp
index 37f4470a6..d86d99ae5 100644
--- a/Editor/ModelImporter_GLTF.cpp
+++ b/Editor/ModelImporter_GLTF.cpp
@@ -94,7 +94,7 @@ namespace tinygltf
void RegisterTexture2D(tinygltf::Image *image, const string& type_name)
{
// We will load the texture2d by hand here and register to the resource manager (if it was not already registered)
- if (wiResourceManager::GetGlobal().get(wiHashString(image->uri)) == nullptr)
+ if (wiResourceManager::GetGlobal().get(wiHashString(image->uri)).data == nullptr)
{
int width = image->width;
int height = image->height;
diff --git a/WickedEngine/WickedEngine_SHARED.vcxitems b/WickedEngine/WickedEngine_SHARED.vcxitems
index 20bce4488..6b85fe841 100644
--- a/WickedEngine/WickedEngine_SHARED.vcxitems
+++ b/WickedEngine/WickedEngine_SHARED.vcxitems
@@ -336,6 +336,7 @@
+
@@ -670,6 +671,7 @@
+
diff --git a/WickedEngine/WickedEngine_SHARED.vcxitems.filters b/WickedEngine/WickedEngine_SHARED.vcxitems.filters
index b056c9d82..effda27fc 100644
--- a/WickedEngine/WickedEngine_SHARED.vcxitems.filters
+++ b/WickedEngine/WickedEngine_SHARED.vcxitems.filters
@@ -1137,6 +1137,9 @@
ENGINE\Helpers
+
+ ENGINE\Scripting\LuaBindings
+
@@ -1916,6 +1919,9 @@
ENGINE\Helpers
+
+ ENGINE\Scripting\LuaBindings
+
diff --git a/WickedEngine/wiEmittedParticle.cpp b/WickedEngine/wiEmittedParticle.cpp
index ea1ab2be4..608c73cbf 100644
--- a/WickedEngine/wiEmittedParticle.cpp
+++ b/WickedEngine/wiEmittedParticle.cpp
@@ -18,21 +18,21 @@ using namespace wiGraphicsTypes;
namespace wiSceneSystem
{
-static VertexShader* vertexShader = nullptr;
-static PixelShader* pixelShader[wiEmittedParticle::PARTICLESHADERTYPE_COUNT] = {};
-static ComputeShader* kickoffUpdateCS = nullptr;
-static ComputeShader* finishUpdateCS = nullptr;
-static ComputeShader* emitCS = nullptr;
-static ComputeShader* emitCS_FROMMESH = nullptr;
-static ComputeShader* sphpartitionCS = nullptr;
-static ComputeShader* sphpartitionoffsetsCS = nullptr;
-static ComputeShader* sphpartitionoffsetsresetCS = nullptr;
-static ComputeShader* sphdensityCS = nullptr;
-static ComputeShader* sphforceCS = nullptr;
-static ComputeShader* simulateCS = nullptr;
-static ComputeShader* simulateCS_SORTING = nullptr;
-static ComputeShader* simulateCS_DEPTHCOLLISIONS = nullptr;
-static ComputeShader* simulateCS_SORTING_DEPTHCOLLISIONS = nullptr;
+static const VertexShader* vertexShader = nullptr;
+static const PixelShader* pixelShader[wiEmittedParticle::PARTICLESHADERTYPE_COUNT] = {};
+static const ComputeShader* kickoffUpdateCS = nullptr;
+static const ComputeShader* finishUpdateCS = nullptr;
+static const ComputeShader* emitCS = nullptr;
+static const ComputeShader* emitCS_FROMMESH = nullptr;
+static const ComputeShader* sphpartitionCS = nullptr;
+static const ComputeShader* sphpartitionoffsetsCS = nullptr;
+static const ComputeShader* sphpartitionoffsetsresetCS = nullptr;
+static const ComputeShader* sphdensityCS = nullptr;
+static const ComputeShader* sphforceCS = nullptr;
+static const ComputeShader* simulateCS = nullptr;
+static const ComputeShader* simulateCS_SORTING = nullptr;
+static const ComputeShader* simulateCS_DEPTHCOLLISIONS = nullptr;
+static const ComputeShader* simulateCS_SORTING_DEPTHCOLLISIONS = nullptr;
static BlendState blendStates[BLENDMODE_COUNT];
static RasterizerState rasterizerState;
@@ -621,25 +621,25 @@ void wiEmittedParticle::LoadShaders()
{
std::string path = wiRenderer::GetShaderPath();
- vertexShader = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticleVS.cso", wiResourceManager::VERTEXSHADER));
+ vertexShader = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticleVS.cso", wiResourceManager::VERTEXSHADER));
- pixelShader[SOFT] = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticlePS_soft.cso", wiResourceManager::PIXELSHADER));
- pixelShader[SOFT_DISTORTION] = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticlePS_soft_distortion.cso", wiResourceManager::PIXELSHADER));
- pixelShader[SIMPLEST] = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticlePS_simplest.cso", wiResourceManager::PIXELSHADER));
+ pixelShader[SOFT] = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticlePS_soft.cso", wiResourceManager::PIXELSHADER));
+ pixelShader[SOFT_DISTORTION] = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticlePS_soft_distortion.cso", wiResourceManager::PIXELSHADER));
+ pixelShader[SIMPLEST] = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticlePS_simplest.cso", wiResourceManager::PIXELSHADER));
- kickoffUpdateCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_kickoffUpdateCS.cso", wiResourceManager::COMPUTESHADER));
- finishUpdateCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_finishUpdateCS.cso", wiResourceManager::COMPUTESHADER));
- emitCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_emitCS.cso", wiResourceManager::COMPUTESHADER));
- emitCS_FROMMESH = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_emitCS_FROMMESH.cso", wiResourceManager::COMPUTESHADER));
- sphpartitionCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_sphpartitionCS.cso", wiResourceManager::COMPUTESHADER));
- sphpartitionoffsetsCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_sphpartitionoffsetsCS.cso", wiResourceManager::COMPUTESHADER));
- sphpartitionoffsetsresetCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_sphpartitionoffsetsresetCS.cso", wiResourceManager::COMPUTESHADER));
- sphdensityCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_sphdensityCS.cso", wiResourceManager::COMPUTESHADER));
- sphforceCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_sphforceCS.cso", wiResourceManager::COMPUTESHADER));
- simulateCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_simulateCS.cso", wiResourceManager::COMPUTESHADER));
- simulateCS_SORTING = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_simulateCS_SORTING.cso", wiResourceManager::COMPUTESHADER));
- simulateCS_DEPTHCOLLISIONS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_simulateCS_DEPTHCOLLISIONS.cso", wiResourceManager::COMPUTESHADER));
- simulateCS_SORTING_DEPTHCOLLISIONS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_simulateCS_SORTING_DEPTHCOLLISIONS.cso", wiResourceManager::COMPUTESHADER));
+ kickoffUpdateCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_kickoffUpdateCS.cso", wiResourceManager::COMPUTESHADER));
+ finishUpdateCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_finishUpdateCS.cso", wiResourceManager::COMPUTESHADER));
+ emitCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_emitCS.cso", wiResourceManager::COMPUTESHADER));
+ emitCS_FROMMESH = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_emitCS_FROMMESH.cso", wiResourceManager::COMPUTESHADER));
+ sphpartitionCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_sphpartitionCS.cso", wiResourceManager::COMPUTESHADER));
+ sphpartitionoffsetsCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_sphpartitionoffsetsCS.cso", wiResourceManager::COMPUTESHADER));
+ sphpartitionoffsetsresetCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_sphpartitionoffsetsresetCS.cso", wiResourceManager::COMPUTESHADER));
+ sphdensityCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_sphdensityCS.cso", wiResourceManager::COMPUTESHADER));
+ sphforceCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_sphforceCS.cso", wiResourceManager::COMPUTESHADER));
+ simulateCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_simulateCS.cso", wiResourceManager::COMPUTESHADER));
+ simulateCS_SORTING = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_simulateCS_SORTING.cso", wiResourceManager::COMPUTESHADER));
+ simulateCS_DEPTHCOLLISIONS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_simulateCS_DEPTHCOLLISIONS.cso", wiResourceManager::COMPUTESHADER));
+ simulateCS_SORTING_DEPTHCOLLISIONS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_simulateCS_SORTING_DEPTHCOLLISIONS.cso", wiResourceManager::COMPUTESHADER));
GraphicsDevice* device = wiRenderer::GetDevice();
diff --git a/WickedEngine/wiFFTGenerator.cpp b/WickedEngine/wiFFTGenerator.cpp
index c252cc04c..af149e43a 100644
--- a/WickedEngine/wiFFTGenerator.cpp
+++ b/WickedEngine/wiFFTGenerator.cpp
@@ -9,8 +9,8 @@
using namespace wiGraphicsTypes;
-static ComputeShader* pRadix008A_CS = nullptr;
-static ComputeShader* pRadix008A_CS2 = nullptr;
+static const ComputeShader* pRadix008A_CS = nullptr;
+static const ComputeShader* pRadix008A_CS2 = nullptr;
static ComputePSO PSO1;
static ComputePSO PSO2;
@@ -231,8 +231,8 @@ void CSFFT_512x512_Data_t::LoadShaders()
{
std::string path = wiRenderer::GetShaderPath();
- pRadix008A_CS = static_cast(wiResourceManager::GetShaderManager().add(path+ "fft_512x512_c2c_CS.cso", wiResourceManager::COMPUTESHADER));
- pRadix008A_CS2 = static_cast(wiResourceManager::GetShaderManager().add(path + "fft_512x512_c2c_v2_CS.cso", wiResourceManager::COMPUTESHADER));
+ pRadix008A_CS = static_cast(wiResourceManager::GetShaderManager().add(path+ "fft_512x512_c2c_CS.cso", wiResourceManager::COMPUTESHADER));
+ pRadix008A_CS2 = static_cast(wiResourceManager::GetShaderManager().add(path + "fft_512x512_c2c_v2_CS.cso", wiResourceManager::COMPUTESHADER));
GraphicsDevice* device = wiRenderer::GetDevice();
diff --git a/WickedEngine/wiFont.cpp b/WickedEngine/wiFont.cpp
index 9418dfb03..d923f7ce0 100644
--- a/WickedEngine/wiFont.cpp
+++ b/WickedEngine/wiFont.cpp
@@ -37,9 +37,9 @@ namespace wiFont_Internal
DepthStencilState depthStencilState;
Sampler sampler;
- VertexLayout *vertexLayout = nullptr;
- VertexShader *vertexShader = nullptr;
- PixelShader *pixelShader = nullptr;
+ std::unique_ptr vertexLayout;
+ const VertexShader *vertexShader = nullptr;
+ const PixelShader *pixelShader = nullptr;
GraphicsPSO *PSO = nullptr;
atomic_bool initialized = false;
@@ -293,8 +293,6 @@ void wiFont::Initialize()
void wiFont::CleanUp()
{
fontStyles.clear();
- SAFE_DELETE(vertexShader);
- SAFE_DELETE(pixelShader);
}
void wiFont::LoadShaders()
@@ -306,19 +304,19 @@ void wiFont::LoadShaders()
{ "POSITION", 0, FORMAT_R16G16_SINT, 0, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_VERTEX_DATA, 0 },
{ "TEXCOORD", 0, FORMAT_R16G16_FLOAT, 0, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_VERTEX_DATA, 0 },
};
- vertexShader = static_cast(wiResourceManager::GetShaderManager().add(path + "fontVS.cso", wiResourceManager::VERTEXSHADER));
+ vertexShader = static_cast(wiResourceManager::GetShaderManager().add(path + "fontVS.cso", wiResourceManager::VERTEXSHADER));
- vertexLayout = new VertexLayout;
- wiRenderer::GetDevice()->CreateInputLayout(layout, ARRAYSIZE(layout), &vertexShader->code, vertexLayout);
+ vertexLayout.reset(new VertexLayout);
+ wiRenderer::GetDevice()->CreateInputLayout(layout, ARRAYSIZE(layout), &vertexShader->code, vertexLayout.get());
- pixelShader = static_cast(wiResourceManager::GetShaderManager().add(path + "fontPS.cso", wiResourceManager::PIXELSHADER));
+ pixelShader = static_cast(wiResourceManager::GetShaderManager().add(path + "fontPS.cso", wiResourceManager::PIXELSHADER));
GraphicsPSODesc desc;
desc.vs = vertexShader;
desc.ps = pixelShader;
- desc.il = vertexLayout;
+ desc.il = vertexLayout.get();
desc.bs = &blendState;
desc.rs = &rasterizerState;
desc.dss = &depthStencilState;
diff --git a/WickedEngine/wiGPUBVH.cpp b/WickedEngine/wiGPUBVH.cpp
index 623a4d219..0b1f924ae 100644
--- a/WickedEngine/wiGPUBVH.cpp
+++ b/WickedEngine/wiGPUBVH.cpp
@@ -25,7 +25,7 @@ enum CSTYPES_BVH
CSTYPE_BVH_PROPAGATEAABB,
CSTYPE_BVH_COUNT
};
-static ComputeShader* computeShaders[CSTYPE_BVH_COUNT] = {};
+static const ComputeShader* computeShaders[CSTYPE_BVH_COUNT] = {};
static ComputePSO* CPSO[CSTYPE_BVH_COUNT] = {};
static GPUBuffer* constantBuffer = nullptr;
@@ -510,12 +510,12 @@ void wiGPUBVH::LoadShaders()
GraphicsDevice* device = wiRenderer::GetDevice();
string SHADERPATH = wiRenderer::GetShaderPath();
- computeShaders[CSTYPE_BVH_RESET] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "bvh_resetCS.cso", wiResourceManager::COMPUTESHADER));
- computeShaders[CSTYPE_BVH_CLASSIFICATION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "bvh_classificationCS.cso", wiResourceManager::COMPUTESHADER));
- computeShaders[CSTYPE_BVH_KICKJOBS] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "bvh_kickjobsCS.cso", wiResourceManager::COMPUTESHADER));
- computeShaders[CSTYPE_BVH_CLUSTERPROCESSOR] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "bvh_clusterprocessorCS.cso", wiResourceManager::COMPUTESHADER));
- computeShaders[CSTYPE_BVH_HIERARCHY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "bvh_hierarchyCS.cso", wiResourceManager::COMPUTESHADER));
- computeShaders[CSTYPE_BVH_PROPAGATEAABB] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "bvh_propagateaabbCS.cso", wiResourceManager::COMPUTESHADER));
+ computeShaders[CSTYPE_BVH_RESET] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "bvh_resetCS.cso", wiResourceManager::COMPUTESHADER));
+ computeShaders[CSTYPE_BVH_CLASSIFICATION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "bvh_classificationCS.cso", wiResourceManager::COMPUTESHADER));
+ computeShaders[CSTYPE_BVH_KICKJOBS] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "bvh_kickjobsCS.cso", wiResourceManager::COMPUTESHADER));
+ computeShaders[CSTYPE_BVH_CLUSTERPROCESSOR] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "bvh_clusterprocessorCS.cso", wiResourceManager::COMPUTESHADER));
+ computeShaders[CSTYPE_BVH_HIERARCHY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "bvh_hierarchyCS.cso", wiResourceManager::COMPUTESHADER));
+ computeShaders[CSTYPE_BVH_PROPAGATEAABB] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "bvh_propagateaabbCS.cso", wiResourceManager::COMPUTESHADER));
for (int i = 0; i < CSTYPE_BVH_COUNT; ++i)
diff --git a/WickedEngine/wiGPUSortLib.cpp b/WickedEngine/wiGPUSortLib.cpp
index dee954753..adbbea499 100644
--- a/WickedEngine/wiGPUSortLib.cpp
+++ b/WickedEngine/wiGPUSortLib.cpp
@@ -7,12 +7,12 @@ using namespace wiGraphicsTypes;
namespace wiGPUSortLib
{
- static GPUBuffer* indirectBuffer = nullptr;
- static GPUBuffer* sortCB = nullptr;
- static ComputeShader* kickoffSortCS = nullptr;
- static ComputeShader* sortCS = nullptr;
- static ComputeShader* sortInnerCS = nullptr;
- static ComputeShader* sortStepCS = nullptr;
+ static std::unique_ptr indirectBuffer;
+ static std::unique_ptr sortCB;
+ static const ComputeShader* kickoffSortCS = nullptr;
+ static const ComputeShader* sortCS = nullptr;
+ static const ComputeShader* sortInnerCS = nullptr;
+ static const ComputeShader* sortStepCS = nullptr;
static ComputePSO CPSO_kickoffSort;
static ComputePSO CPSO_sort;
static ComputePSO CPSO_sortInner;
@@ -27,8 +27,8 @@ namespace wiGPUSortLib
bd.BindFlags = BIND_CONSTANT_BUFFER;
bd.MiscFlags = 0;
bd.ByteWidth = sizeof(SortConstants);
- sortCB = new GPUBuffer;
- wiRenderer::GetDevice()->CreateBuffer(&bd, nullptr, sortCB);
+ sortCB.reset(new GPUBuffer);
+ wiRenderer::GetDevice()->CreateBuffer(&bd, nullptr, sortCB.get());
bd.Usage = USAGE_DEFAULT;
@@ -36,8 +36,8 @@ namespace wiGPUSortLib
bd.BindFlags = BIND_UNORDERED_ACCESS;
bd.MiscFlags = RESOURCE_MISC_DRAWINDIRECT_ARGS | RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS;
bd.ByteWidth = sizeof(IndirectDispatchArgs);
- indirectBuffer = new GPUBuffer;
- wiRenderer::GetDevice()->CreateBuffer(&bd, nullptr, indirectBuffer);
+ indirectBuffer.reset(new GPUBuffer);
+ wiRenderer::GetDevice()->CreateBuffer(&bd, nullptr, indirectBuffer.get());
}
@@ -45,10 +45,10 @@ namespace wiGPUSortLib
{
std::string path = wiRenderer::GetShaderPath();
- kickoffSortCS = static_cast(wiResourceManager::GetShaderManager().add(path + "gpusortlib_kickoffSortCS.cso", wiResourceManager::COMPUTESHADER));
- sortCS = static_cast(wiResourceManager::GetShaderManager().add(path + "gpusortlib_sortCS.cso", wiResourceManager::COMPUTESHADER));
- sortInnerCS = static_cast(wiResourceManager::GetShaderManager().add(path + "gpusortlib_sortInnerCS.cso", wiResourceManager::COMPUTESHADER));
- sortStepCS = static_cast(wiResourceManager::GetShaderManager().add(path + "gpusortlib_sortStepCS.cso", wiResourceManager::COMPUTESHADER));
+ kickoffSortCS = static_cast(wiResourceManager::GetShaderManager().add(path + "gpusortlib_kickoffSortCS.cso", wiResourceManager::COMPUTESHADER));
+ sortCS = static_cast(wiResourceManager::GetShaderManager().add(path + "gpusortlib_sortCS.cso", wiResourceManager::COMPUTESHADER));
+ sortInnerCS = static_cast(wiResourceManager::GetShaderManager().add(path + "gpusortlib_sortInnerCS.cso", wiResourceManager::COMPUTESHADER));
+ sortStepCS = static_cast(wiResourceManager::GetShaderManager().add(path + "gpusortlib_sortStepCS.cso", wiResourceManager::COMPUTESHADER));
GraphicsDevice* device = wiRenderer::GetDevice();
@@ -70,8 +70,6 @@ namespace wiGPUSortLib
void CleanUp()
{
- SAFE_DELETE(indirectBuffer);
- SAFE_DELETE(sortCB);
}
@@ -92,8 +90,8 @@ namespace wiGPUSortLib
SortConstants sc;
sc.counterReadOffset = counterReadOffset;
- device->UpdateBuffer(sortCB, &sc, threadID);
- device->BindConstantBuffer(CS, sortCB, CB_GETBINDSLOT(SortConstants), threadID);
+ device->UpdateBuffer(sortCB.get(), &sc, threadID);
+ device->BindConstantBuffer(CS, sortCB.get(), CB_GETBINDSLOT(SortConstants), threadID);
device->UnbindUAVs(0, 8, threadID);
@@ -107,7 +105,7 @@ namespace wiGPUSortLib
device->BindResources(CS, res, 0, ARRAYSIZE(res), threadID);
GPUResource* uavs[] = {
- indirectBuffer,
+ indirectBuffer.get(),
};
device->BindUAVs(CS, uavs, 0, ARRAYSIZE(uavs), threadID);
@@ -148,7 +146,7 @@ namespace wiGPUSortLib
// sort all buffers of size 512 (and presort bigger ones)
device->BindComputePSO(&CPSO_sort, threadID);
- device->DispatchIndirect(indirectBuffer, 0, threadID);
+ device->DispatchIndirect(indirectBuffer.get(), 0, threadID);
device->UAVBarrier(uavs, ARRAYSIZE(uavs), threadID);
}
@@ -191,8 +189,8 @@ namespace wiGPUSortLib
}
sc.counterReadOffset = counterReadOffset;
- device->UpdateBuffer(sortCB, &sc, threadID);
- device->BindConstantBuffer(CS, sortCB, CB_GETBINDSLOT(SortConstants), threadID);
+ device->UpdateBuffer(sortCB.get(), &sc, threadID);
+ device->BindConstantBuffer(CS, sortCB.get(), CB_GETBINDSLOT(SortConstants), threadID);
device->Dispatch(numThreadGroups, 1, 1, threadID);
device->UAVBarrier(uavs, ARRAYSIZE(uavs), threadID);
diff --git a/WickedEngine/wiGraphicsDescriptors.h b/WickedEngine/wiGraphicsDescriptors.h
index c73c695a7..6b8b0d607 100644
--- a/WickedEngine/wiGraphicsDescriptors.h
+++ b/WickedEngine/wiGraphicsDescriptors.h
@@ -489,25 +489,25 @@ namespace wiGraphicsTypes
};
struct GraphicsPSODesc
{
- VertexShader* vs = nullptr;
- PixelShader* ps = nullptr;
- HullShader* hs = nullptr;
- DomainShader* ds = nullptr;
- GeometryShader* gs = nullptr;
- BlendState* bs = nullptr;
- RasterizerState* rs = nullptr;
- DepthStencilState* dss = nullptr;
- VertexLayout* il = nullptr;
- PRIMITIVETOPOLOGY pt = TRIANGLELIST;
- UINT numRTs = 0;
- FORMAT RTFormats[8] = {};
- FORMAT DSFormat = FORMAT_UNKNOWN;
- SampleDesc sampleDesc;
- UINT sampleMask = 0xFFFFFFFF;
+ const VertexShader* vs = nullptr;
+ const PixelShader* ps = nullptr;
+ const HullShader* hs = nullptr;
+ const DomainShader* ds = nullptr;
+ const GeometryShader* gs = nullptr;
+ const BlendState* bs = nullptr;
+ const RasterizerState* rs = nullptr;
+ const DepthStencilState* dss = nullptr;
+ const VertexLayout* il = nullptr;
+ PRIMITIVETOPOLOGY pt = TRIANGLELIST;
+ UINT numRTs = 0;
+ FORMAT RTFormats[8] = {};
+ FORMAT DSFormat = FORMAT_UNKNOWN;
+ SampleDesc sampleDesc;
+ UINT sampleMask = 0xFFFFFFFF;
};
struct ComputePSODesc
{
- ComputeShader* cs = nullptr;
+ const ComputeShader* cs = nullptr;
};
struct IndirectDrawArgsInstanced
{
diff --git a/WickedEngine/wiHairParticle.cpp b/WickedEngine/wiHairParticle.cpp
index f24f64773..432e17660 100644
--- a/WickedEngine/wiHairParticle.cpp
+++ b/WickedEngine/wiHairParticle.cpp
@@ -18,10 +18,10 @@ using namespace wiGraphicsTypes;
namespace wiSceneSystem
{
-static VertexShader *vs = nullptr;
-static PixelShader *ps[RENDERPASS_COUNT] = {};
-static PixelShader *ps_simplest = nullptr;
-static ComputeShader *cs_simulate = nullptr;
+static const VertexShader *vs = nullptr;
+static const PixelShader *ps[RENDERPASS_COUNT] = {};
+static const PixelShader *ps_simplest = nullptr;
+static const ComputeShader *cs_simulate = nullptr;
static DepthStencilState dss_default, dss_equal, dss_rejectopaque_keeptransparent;
static RasterizerState rs, ncrs, wirers;
static BlendState bs[2];
@@ -209,12 +209,12 @@ void wiHairParticle::LoadShaders()
{
std::string path = wiRenderer::GetShaderPath();
- vs = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticleVS.cso", wiResourceManager::VERTEXSHADER));
+ vs = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticleVS.cso", wiResourceManager::VERTEXSHADER));
- ps[RENDERPASS_DEPTHONLY] = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticlePS_alphatestonly.cso", wiResourceManager::PIXELSHADER));
- ps[RENDERPASS_DEFERRED] = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticlePS_deferred.cso", wiResourceManager::PIXELSHADER));
- ps[RENDERPASS_FORWARD] = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticlePS_forward.cso", wiResourceManager::PIXELSHADER));
- ps[RENDERPASS_TILEDFORWARD] = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticlePS_tiledforward.cso", wiResourceManager::PIXELSHADER));
+ ps[RENDERPASS_DEPTHONLY] = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticlePS_alphatestonly.cso", wiResourceManager::PIXELSHADER));
+ ps[RENDERPASS_DEFERRED] = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticlePS_deferred.cso", wiResourceManager::PIXELSHADER));
+ ps[RENDERPASS_FORWARD] = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticlePS_forward.cso", wiResourceManager::PIXELSHADER));
+ ps[RENDERPASS_TILEDFORWARD] = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticlePS_tiledforward.cso", wiResourceManager::PIXELSHADER));
GraphicsDevice* device = wiRenderer::GetDevice();
@@ -278,7 +278,7 @@ void wiHairParticle::LoadShaders()
}
}
- ps_simplest = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticlePS_simplest.cso", wiResourceManager::PIXELSHADER));
+ ps_simplest = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticlePS_simplest.cso", wiResourceManager::PIXELSHADER));
{
GraphicsPSODesc desc;
@@ -293,7 +293,7 @@ void wiHairParticle::LoadShaders()
device->CreateGraphicsPSO(&desc, &PSO_wire);
}
- cs_simulate = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticle_simulateCS.cso", wiResourceManager::COMPUTESHADER));
+ cs_simulate = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticle_simulateCS.cso", wiResourceManager::COMPUTESHADER));
{
ComputePSODesc desc;
diff --git a/WickedEngine/wiImage.cpp b/WickedEngine/wiImage.cpp
index 47a57041e..e5767ecb0 100644
--- a/WickedEngine/wiImage.cpp
+++ b/WickedEngine/wiImage.cpp
@@ -39,21 +39,21 @@ namespace wiImage
IMAGE_SAMPLING_COUNT,
};
- GPUBuffer constantBuffer;
- GPUBuffer processCb;
- VertexShader* vertexShader = nullptr;
- VertexShader* screenVS = nullptr;
- PixelShader* imagePS[IMAGE_SHADER_COUNT][IMAGE_SAMPLING_COUNT];
- PixelShader* postprocessPS[wiImageParams::PostProcess::POSTPROCESS_COUNT];
- PixelShader* deferredPS = nullptr;
- BlendState blendStates[BLENDMODE_COUNT];
- RasterizerState rasterizerState;
- DepthStencilState depthStencilStates[STENCILMODE_COUNT];
- BlendState blendStateDisableColor;
- DepthStencilState depthStencilStateDepthWrite;
- GraphicsPSO imagePSO[IMAGE_SHADER_COUNT][BLENDMODE_COUNT][STENCILMODE_COUNT][IMAGE_HDR_COUNT][IMAGE_SAMPLING_COUNT];
- GraphicsPSO postprocessPSO[wiImageParams::PostProcess::POSTPROCESS_COUNT];
- GraphicsPSO deferredPSO;
+ GPUBuffer constantBuffer;
+ GPUBuffer processCb;
+ const VertexShader* vertexShader = nullptr;
+ const VertexShader* screenVS = nullptr;
+ const PixelShader* imagePS[IMAGE_SHADER_COUNT][IMAGE_SAMPLING_COUNT];
+ const PixelShader* postprocessPS[wiImageParams::PostProcess::POSTPROCESS_COUNT];
+ const PixelShader* deferredPS = nullptr;
+ BlendState blendStates[BLENDMODE_COUNT];
+ RasterizerState rasterizerState;
+ DepthStencilState depthStencilStates[STENCILMODE_COUNT];
+ BlendState blendStateDisableColor;
+ DepthStencilState depthStencilStateDepthWrite;
+ GraphicsPSO imagePSO[IMAGE_SHADER_COUNT][BLENDMODE_COUNT][STENCILMODE_COUNT][IMAGE_HDR_COUNT][IMAGE_SAMPLING_COUNT];
+ GraphicsPSO postprocessPSO[wiImageParams::PostProcess::POSTPROCESS_COUNT];
+ GraphicsPSO deferredPSO;
std::atomic_bool initialized = false;
@@ -358,43 +358,43 @@ namespace wiImage
{
std::string path = wiRenderer::GetShaderPath();
- vertexShader = static_cast(wiResourceManager::GetShaderManager().add(path + "imageVS.cso", wiResourceManager::VERTEXSHADER));
- screenVS = static_cast(wiResourceManager::GetShaderManager().add(path + "screenVS.cso", wiResourceManager::VERTEXSHADER));
+ vertexShader = static_cast(wiResourceManager::GetShaderManager().add(path + "imageVS.cso", wiResourceManager::VERTEXSHADER));
+ screenVS = static_cast(wiResourceManager::GetShaderManager().add(path + "screenVS.cso", wiResourceManager::VERTEXSHADER));
- imagePS[IMAGE_SHADER_STANDARD][IMAGE_SAMPLING_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS.cso", wiResourceManager::PIXELSHADER));
- imagePS[IMAGE_SHADER_SEPARATENORMALMAP][IMAGE_SAMPLING_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_separatenormalmap.cso", wiResourceManager::PIXELSHADER));
- imagePS[IMAGE_SHADER_DISTORTION][IMAGE_SAMPLING_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_distortion.cso", wiResourceManager::PIXELSHADER));
- imagePS[IMAGE_SHADER_DISTORTION_MASKED][IMAGE_SAMPLING_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_distortion_masked.cso", wiResourceManager::PIXELSHADER));
- imagePS[IMAGE_SHADER_MASKED][IMAGE_SAMPLING_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_masked.cso", wiResourceManager::PIXELSHADER));
- imagePS[IMAGE_SHADER_FULLSCREEN][IMAGE_SAMPLING_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(path + "screenPS.cso", wiResourceManager::PIXELSHADER));
+ imagePS[IMAGE_SHADER_STANDARD][IMAGE_SAMPLING_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS.cso", wiResourceManager::PIXELSHADER));
+ imagePS[IMAGE_SHADER_SEPARATENORMALMAP][IMAGE_SAMPLING_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_separatenormalmap.cso", wiResourceManager::PIXELSHADER));
+ imagePS[IMAGE_SHADER_DISTORTION][IMAGE_SAMPLING_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_distortion.cso", wiResourceManager::PIXELSHADER));
+ imagePS[IMAGE_SHADER_DISTORTION_MASKED][IMAGE_SAMPLING_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_distortion_masked.cso", wiResourceManager::PIXELSHADER));
+ imagePS[IMAGE_SHADER_MASKED][IMAGE_SAMPLING_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_masked.cso", wiResourceManager::PIXELSHADER));
+ imagePS[IMAGE_SHADER_FULLSCREEN][IMAGE_SAMPLING_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(path + "screenPS.cso", wiResourceManager::PIXELSHADER));
- imagePS[IMAGE_SHADER_STANDARD][IMAGE_SAMPLING_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_bicubic.cso", wiResourceManager::PIXELSHADER));
- imagePS[IMAGE_SHADER_SEPARATENORMALMAP][IMAGE_SAMPLING_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_separatenormalmap_bicubic.cso", wiResourceManager::PIXELSHADER));
- imagePS[IMAGE_SHADER_DISTORTION][IMAGE_SAMPLING_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_distortion_bicubic.cso", wiResourceManager::PIXELSHADER));
- imagePS[IMAGE_SHADER_DISTORTION_MASKED][IMAGE_SAMPLING_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_distortion_masked_bicubic.cso", wiResourceManager::PIXELSHADER));
- imagePS[IMAGE_SHADER_MASKED][IMAGE_SAMPLING_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_masked_bicubic.cso", wiResourceManager::PIXELSHADER));
- imagePS[IMAGE_SHADER_FULLSCREEN][IMAGE_SAMPLING_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(path + "screenPS_bicubic.cso", wiResourceManager::PIXELSHADER));
+ imagePS[IMAGE_SHADER_STANDARD][IMAGE_SAMPLING_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_bicubic.cso", wiResourceManager::PIXELSHADER));
+ imagePS[IMAGE_SHADER_SEPARATENORMALMAP][IMAGE_SAMPLING_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_separatenormalmap_bicubic.cso", wiResourceManager::PIXELSHADER));
+ imagePS[IMAGE_SHADER_DISTORTION][IMAGE_SAMPLING_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_distortion_bicubic.cso", wiResourceManager::PIXELSHADER));
+ imagePS[IMAGE_SHADER_DISTORTION_MASKED][IMAGE_SAMPLING_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_distortion_masked_bicubic.cso", wiResourceManager::PIXELSHADER));
+ imagePS[IMAGE_SHADER_MASKED][IMAGE_SAMPLING_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_masked_bicubic.cso", wiResourceManager::PIXELSHADER));
+ imagePS[IMAGE_SHADER_FULLSCREEN][IMAGE_SAMPLING_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(path + "screenPS_bicubic.cso", wiResourceManager::PIXELSHADER));
- postprocessPS[wiImageParams::PostProcess::BLUR] = static_cast(wiResourceManager::GetShaderManager().add(path + "blurPS.cso", wiResourceManager::PIXELSHADER));
- postprocessPS[wiImageParams::PostProcess::LIGHTSHAFT] = static_cast(wiResourceManager::GetShaderManager().add(path + "lightShaftPS.cso", wiResourceManager::PIXELSHADER));
- postprocessPS[wiImageParams::PostProcess::OUTLINE] = static_cast(wiResourceManager::GetShaderManager().add(path + "outlinePS.cso", wiResourceManager::PIXELSHADER));
- postprocessPS[wiImageParams::PostProcess::DEPTHOFFIELD] = static_cast(wiResourceManager::GetShaderManager().add(path + "depthofFieldPS.cso", wiResourceManager::PIXELSHADER));
- postprocessPS[wiImageParams::PostProcess::MOTIONBLUR] = static_cast(wiResourceManager::GetShaderManager().add(path + "motionBlurPS.cso", wiResourceManager::PIXELSHADER));
- postprocessPS[wiImageParams::PostProcess::BLOOMSEPARATE] = static_cast(wiResourceManager::GetShaderManager().add(path + "bloomSeparatePS.cso", wiResourceManager::PIXELSHADER));
- postprocessPS[wiImageParams::PostProcess::FXAA] = static_cast(wiResourceManager::GetShaderManager().add(path + "fxaa.cso", wiResourceManager::PIXELSHADER));
- postprocessPS[wiImageParams::PostProcess::SSAO] = static_cast(wiResourceManager::GetShaderManager().add(path + "ssao.cso", wiResourceManager::PIXELSHADER));
- postprocessPS[wiImageParams::PostProcess::SSSS] = static_cast(wiResourceManager::GetShaderManager().add(path + "ssss.cso", wiResourceManager::PIXELSHADER));
- postprocessPS[wiImageParams::PostProcess::LINEARDEPTH] = static_cast(wiResourceManager::GetShaderManager().add(path + "linDepthPS.cso", wiResourceManager::PIXELSHADER));
- postprocessPS[wiImageParams::PostProcess::COLORGRADE] = static_cast(wiResourceManager::GetShaderManager().add(path + "colorGradePS.cso", wiResourceManager::PIXELSHADER));
- postprocessPS[wiImageParams::PostProcess::SSR] = static_cast(wiResourceManager::GetShaderManager().add(path + "ssr.cso", wiResourceManager::PIXELSHADER));
- postprocessPS[wiImageParams::PostProcess::STEREOGRAM] = static_cast(wiResourceManager::GetShaderManager().add(path + "stereogramPS.cso", wiResourceManager::PIXELSHADER));
- postprocessPS[wiImageParams::PostProcess::TONEMAP] = static_cast(wiResourceManager::GetShaderManager().add(path + "toneMapPS.cso", wiResourceManager::PIXELSHADER));
- postprocessPS[wiImageParams::PostProcess::REPROJECTDEPTHBUFFER] = static_cast(wiResourceManager::GetShaderManager().add(path + "reprojectDepthBufferPS.cso", wiResourceManager::PIXELSHADER));
- postprocessPS[wiImageParams::PostProcess::DOWNSAMPLEDEPTHBUFFER] = static_cast(wiResourceManager::GetShaderManager().add(path + "downsampleDepthBuffer4xPS.cso", wiResourceManager::PIXELSHADER));
- postprocessPS[wiImageParams::PostProcess::TEMPORALAA] = static_cast(wiResourceManager::GetShaderManager().add(path + "temporalAAResolvePS.cso", wiResourceManager::PIXELSHADER));
- postprocessPS[wiImageParams::PostProcess::SHARPEN] = static_cast(wiResourceManager::GetShaderManager().add(path + "sharpenPS.cso", wiResourceManager::PIXELSHADER));
+ postprocessPS[wiImageParams::PostProcess::BLUR] = static_cast(wiResourceManager::GetShaderManager().add(path + "blurPS.cso", wiResourceManager::PIXELSHADER));
+ postprocessPS[wiImageParams::PostProcess::LIGHTSHAFT] = static_cast(wiResourceManager::GetShaderManager().add(path + "lightShaftPS.cso", wiResourceManager::PIXELSHADER));
+ postprocessPS[wiImageParams::PostProcess::OUTLINE] = static_cast(wiResourceManager::GetShaderManager().add(path + "outlinePS.cso", wiResourceManager::PIXELSHADER));
+ postprocessPS[wiImageParams::PostProcess::DEPTHOFFIELD] = static_cast(wiResourceManager::GetShaderManager().add(path + "depthofFieldPS.cso", wiResourceManager::PIXELSHADER));
+ postprocessPS[wiImageParams::PostProcess::MOTIONBLUR] = static_cast(wiResourceManager::GetShaderManager().add(path + "motionBlurPS.cso", wiResourceManager::PIXELSHADER));
+ postprocessPS[wiImageParams::PostProcess::BLOOMSEPARATE] = static_cast(wiResourceManager::GetShaderManager().add(path + "bloomSeparatePS.cso", wiResourceManager::PIXELSHADER));
+ postprocessPS[wiImageParams::PostProcess::FXAA] = static_cast(wiResourceManager::GetShaderManager().add(path + "fxaa.cso", wiResourceManager::PIXELSHADER));
+ postprocessPS[wiImageParams::PostProcess::SSAO] = static_cast(wiResourceManager::GetShaderManager().add(path + "ssao.cso", wiResourceManager::PIXELSHADER));
+ postprocessPS[wiImageParams::PostProcess::SSSS] = static_cast(wiResourceManager::GetShaderManager().add(path + "ssss.cso", wiResourceManager::PIXELSHADER));
+ postprocessPS[wiImageParams::PostProcess::LINEARDEPTH] = static_cast(wiResourceManager::GetShaderManager().add(path + "linDepthPS.cso", wiResourceManager::PIXELSHADER));
+ postprocessPS[wiImageParams::PostProcess::COLORGRADE] = static_cast(wiResourceManager::GetShaderManager().add(path + "colorGradePS.cso", wiResourceManager::PIXELSHADER));
+ postprocessPS[wiImageParams::PostProcess::SSR] = static_cast(wiResourceManager::GetShaderManager().add(path + "ssr.cso", wiResourceManager::PIXELSHADER));
+ postprocessPS[wiImageParams::PostProcess::STEREOGRAM] = static_cast(wiResourceManager::GetShaderManager().add(path + "stereogramPS.cso", wiResourceManager::PIXELSHADER));
+ postprocessPS[wiImageParams::PostProcess::TONEMAP] = static_cast(wiResourceManager::GetShaderManager().add(path + "toneMapPS.cso", wiResourceManager::PIXELSHADER));
+ postprocessPS[wiImageParams::PostProcess::REPROJECTDEPTHBUFFER] = static_cast(wiResourceManager::GetShaderManager().add(path + "reprojectDepthBufferPS.cso", wiResourceManager::PIXELSHADER));
+ postprocessPS[wiImageParams::PostProcess::DOWNSAMPLEDEPTHBUFFER] = static_cast(wiResourceManager::GetShaderManager().add(path + "downsampleDepthBuffer4xPS.cso", wiResourceManager::PIXELSHADER));
+ postprocessPS[wiImageParams::PostProcess::TEMPORALAA] = static_cast(wiResourceManager::GetShaderManager().add(path + "temporalAAResolvePS.cso", wiResourceManager::PIXELSHADER));
+ postprocessPS[wiImageParams::PostProcess::SHARPEN] = static_cast(wiResourceManager::GetShaderManager().add(path + "sharpenPS.cso", wiResourceManager::PIXELSHADER));
- deferredPS = static_cast(wiResourceManager::GetShaderManager().add(path + "deferredPS.cso", wiResourceManager::PIXELSHADER));
+ deferredPS = static_cast(wiResourceManager::GetShaderManager().add(path + "deferredPS.cso", wiResourceManager::PIXELSHADER));
GraphicsDevice* device = wiRenderer::GetDevice();
diff --git a/WickedEngine/wiIntersect.cpp b/WickedEngine/wiIntersect.cpp
index 821772a9d..670a08586 100644
--- a/WickedEngine/wiIntersect.cpp
+++ b/WickedEngine/wiIntersect.cpp
@@ -124,6 +124,10 @@ bool AABB::intersects(const RAY& ray) const {
return tmax >= tmin;
}
+bool AABB::intersects(const SPHERE& sphere) const
+{
+ return sphere.intersects(*this);
+}
AABB AABB::operator* (float a)
{
XMFLOAT3 min = getMin();
diff --git a/WickedEngine/wiIntersect.h b/WickedEngine/wiIntersect.h
index c992c22a5..120559170 100644
--- a/WickedEngine/wiIntersect.h
+++ b/WickedEngine/wiIntersect.h
@@ -33,6 +33,7 @@ struct AABB
INTERSECTION_TYPE intersects(const AABB& b) const;
bool intersects(const XMFLOAT3& p) const;
bool intersects(const RAY& ray) const;
+ bool intersects(const SPHERE& sphere) const;
AABB operator* (float a);
static AABB Merge(const AABB& a, const AABB& b);
diff --git a/WickedEngine/wiIntersect_BindLua.cpp b/WickedEngine/wiIntersect_BindLua.cpp
new file mode 100644
index 000000000..772499087
--- /dev/null
+++ b/WickedEngine/wiIntersect_BindLua.cpp
@@ -0,0 +1,283 @@
+#include "wiIntersect_BindLua.h"
+#include "Vector_BindLua.h"
+
+namespace wiIntersect_BindLua
+{
+ void Bind()
+ {
+ static bool initialized = false;
+ if (!initialized)
+ {
+ initialized = true;
+
+ lua_State* L = wiLua::GetGlobal()->GetLuaState();
+
+ Luna::Register(L);
+ Luna::Register(L);
+ Luna::Register(L);
+ }
+ }
+
+
+
+
+ const char Ray_BindLua::className[] = "Ray";
+
+ Luna::FunctionType Ray_BindLua::methods[] = {
+ lunamethod(Ray_BindLua, Intersects),
+ lunamethod(Ray_BindLua, GetOrigin),
+ lunamethod(Ray_BindLua, GetDirection),
+ { NULL, NULL }
+ };
+ Luna::PropertyType Ray_BindLua::properties[] = {
+ { NULL, NULL }
+ };
+
+ Ray_BindLua::Ray_BindLua(lua_State *L)
+ {
+ int argc = wiLua::SGetArgCount(L);
+ if (argc > 1)
+ {
+ Vector_BindLua* o = Luna::lightcheck(L, 1);
+ Vector_BindLua* d = Luna::lightcheck(L, 2);
+ if (o && d)
+ {
+ ray = RAY(o->vector, d->vector);
+ }
+ else
+ {
+ wiLua::SError(L, "Ray(Vector origin,direction) requires two arguments of Vector type!");
+ }
+ }
+ else
+ {
+ wiLua::SError(L, "Ray(Vector origin,direction) not enough arguments!");
+ }
+ }
+ Ray_BindLua::~Ray_BindLua()
+ {
+ }
+
+ int Ray_BindLua::Intersects(lua_State* L)
+ {
+ int argc = wiLua::SGetArgCount(L);
+ if (argc > 0)
+ {
+ AABB_BindLua* aabb = Luna::lightcheck(L, 1);
+ if (aabb)
+ {
+ bool intersects = ray.intersects(aabb->aabb);
+ wiLua::SSetBool(L, intersects);
+ return 1;
+ }
+
+ Sphere_BindLua* sphere = Luna::lightcheck(L, 1);
+ if (sphere)
+ {
+ bool intersects = ray.intersects(sphere->sphere);
+ wiLua::SSetBool(L, intersects);
+ return 1;
+ }
+
+ }
+ wiLua::SError(L, "[Intersects(AABB), Intersects(Sphere)] no matching arguments! ");
+ return 0;
+ }
+ int Ray_BindLua::GetOrigin(lua_State* L)
+ {
+ Luna::push(L, new Vector_BindLua(XMLoadFloat3(&ray.origin)));
+ return 1;
+ }
+ int Ray_BindLua::GetDirection(lua_State* L)
+ {
+ Luna::push(L, new Vector_BindLua(XMLoadFloat3(&ray.direction)));
+ return 1;
+ }
+
+
+
+ const char AABB_BindLua::className[] = "AABB";
+
+ Luna::FunctionType AABB_BindLua::methods[] = {
+ lunamethod(AABB_BindLua, Intersects),
+ lunamethod(AABB_BindLua, GetMin),
+ lunamethod(AABB_BindLua, GetMax),
+ lunamethod(AABB_BindLua, GetCenter),
+ lunamethod(AABB_BindLua, GetHalfExtents),
+ { NULL, NULL }
+ };
+ Luna::PropertyType AABB_BindLua::properties[] = {
+ { NULL, NULL }
+ };
+
+ AABB_BindLua::AABB_BindLua(lua_State *L)
+ {
+ int argc = wiLua::SGetArgCount(L);
+ if (argc > 1)
+ {
+ Vector_BindLua* _minV = Luna::lightcheck(L, 1);
+ Vector_BindLua* _maxV = Luna::lightcheck(L, 2);
+ if (_minV && _maxV)
+ {
+ XMFLOAT3 _min, _max;
+ XMStoreFloat3(&_min, _minV->vector);
+ XMStoreFloat3(&_max, _maxV->vector);
+
+ aabb = AABB(_min, _max);
+ }
+ else
+ {
+ wiLua::SError(L, "AABB(Vector min,max) requires two arguments of Vector type!");
+ }
+ }
+ else
+ {
+ wiLua::SError(L, "AABB(Vector min,max) not enough arguments!");
+ }
+ }
+ AABB_BindLua::~AABB_BindLua()
+ {
+ }
+
+ int AABB_BindLua::Intersects(lua_State* L)
+ {
+ int argc = wiLua::SGetArgCount(L);
+ if (argc > 0)
+ {
+ AABB_BindLua* _aabb = Luna::lightcheck(L, 1);
+ if (_aabb)
+ {
+ int intersects = (int)aabb.intersects(_aabb->aabb);
+ wiLua::SSetInt(L, intersects);
+ return 1;
+ }
+
+ Sphere_BindLua* _sphere = Luna::lightcheck(L, 1);
+ if (_sphere)
+ {
+ bool intersects = aabb.intersects(_sphere->sphere);
+ wiLua::SSetBool(L, intersects);
+ return 1;
+ }
+
+ Ray_BindLua* ray = Luna::lightcheck(L, 1);
+ if (ray)
+ {
+ bool intersects = ray->ray.intersects(aabb);
+ wiLua::SSetBool(L, intersects);
+ return 1;
+ }
+
+ }
+ wiLua::SError(L, "[Intersects(AABB), Intersects(Sphere), Intersects(Ray)] no matching arguments! ");
+ return 0;
+ }
+ int AABB_BindLua::GetMin(lua_State* L)
+ {
+ Luna::push(L, new Vector_BindLua(XMLoadFloat3(&aabb.getMin())));
+ return 1;
+ }
+ int AABB_BindLua::GetMax(lua_State* L)
+ {
+ Luna::push(L, new Vector_BindLua(XMLoadFloat3(&aabb.getMax())));
+ return 1;
+ }
+ int AABB_BindLua::GetCenter(lua_State* L)
+ {
+ Luna::push(L, new Vector_BindLua(XMLoadFloat3(&aabb.getCenter())));
+ return 1;
+ }
+ int AABB_BindLua::GetHalfExtents(lua_State* L)
+ {
+ Luna::push(L, new Vector_BindLua(XMLoadFloat3(&aabb.getHalfWidth())));
+ return 1;
+ }
+
+
+
+ const char Sphere_BindLua::className[] = "Sphere";
+
+ Luna::FunctionType Sphere_BindLua::methods[] = {
+ lunamethod(Sphere_BindLua, Intersects),
+ lunamethod(Sphere_BindLua, GetCenter),
+ lunamethod(Sphere_BindLua, GetRadius),
+ { NULL, NULL }
+ };
+ Luna::PropertyType Sphere_BindLua::properties[] = {
+ { NULL, NULL }
+ };
+
+ Sphere_BindLua::Sphere_BindLua(lua_State *L)
+ {
+ int argc = wiLua::SGetArgCount(L);
+ if (argc > 1)
+ {
+ Vector_BindLua* cV = Luna::lightcheck(L, 1);
+ if (cV)
+ {
+ XMFLOAT3 c;
+ XMStoreFloat3(&c, cV->vector);
+
+ float r = wiLua::SGetFloat(L, 2);
+
+ sphere = SPHERE(c, r);
+ }
+ else
+ {
+ wiLua::SError(L, "Sphere(Vector center, float radius) requires first argument to be of Vector type!");
+ }
+ }
+ else
+ {
+ wiLua::SError(L, "Sphere(Vector center, float radius) not enough arguments!");
+ }
+ }
+ Sphere_BindLua::~Sphere_BindLua()
+ {
+ }
+
+ int Sphere_BindLua::Intersects(lua_State* L)
+ {
+ int argc = wiLua::SGetArgCount(L);
+ if (argc > 0)
+ {
+ AABB_BindLua* _aabb = Luna::lightcheck(L, 1);
+ if (_aabb)
+ {
+ bool intersects = sphere.intersects(_aabb->aabb);
+ wiLua::SSetInt(L, intersects);
+ return 1;
+ }
+
+ Sphere_BindLua* _sphere = Luna::lightcheck(L, 1);
+ if (_sphere)
+ {
+ bool intersects = sphere.intersects(_sphere->sphere);
+ wiLua::SSetBool(L, intersects);
+ return 1;
+ }
+
+ Ray_BindLua* ray = Luna::lightcheck(L, 1);
+ if (ray)
+ {
+ bool intersects = ray->ray.intersects(sphere);
+ wiLua::SSetBool(L, intersects);
+ return 1;
+ }
+
+ }
+ wiLua::SError(L, "[Intersects(AABB), Intersects(Sphere), Intersects(Ray)] no matching arguments! ");
+ return 0;
+ }
+ int Sphere_BindLua::GetCenter(lua_State* L)
+ {
+ Luna::push(L, new Vector_BindLua(XMLoadFloat3(&sphere.center)));
+ return 1;
+ }
+ int Sphere_BindLua::GetRadius(lua_State* L)
+ {
+ wiLua::SSetFloat(L, sphere.radius);
+ return 1;
+ }
+
+}
diff --git a/WickedEngine/wiIntersect_BindLua.h b/WickedEngine/wiIntersect_BindLua.h
new file mode 100644
index 000000000..aea72fd1f
--- /dev/null
+++ b/WickedEngine/wiIntersect_BindLua.h
@@ -0,0 +1,66 @@
+#pragma once
+#include "wiLua.h"
+#include "wiLuna.h"
+#include "wiIntersect.h"
+
+namespace wiIntersect_BindLua
+{
+ void Bind();
+
+
+ class Ray_BindLua
+ {
+ public:
+ RAY ray;
+
+ static const char className[];
+ static Luna::FunctionType methods[];
+ static Luna::PropertyType properties[];
+
+ Ray_BindLua(const RAY& ray) : ray(ray) {}
+ Ray_BindLua(lua_State *L);
+ ~Ray_BindLua();
+
+ int Intersects(lua_State* L);
+ int GetOrigin(lua_State* L);
+ int GetDirection(lua_State* L);
+ };
+
+ class AABB_BindLua
+ {
+ public:
+ AABB aabb;
+
+ static const char className[];
+ static Luna::FunctionType methods[];
+ static Luna::PropertyType properties[];
+
+ AABB_BindLua(const AABB& aabb) : aabb(aabb) {}
+ AABB_BindLua(lua_State *L);
+ ~AABB_BindLua();
+
+ int Intersects(lua_State* L);
+ int GetMin(lua_State* L);
+ int GetMax(lua_State* L);
+ int GetCenter(lua_State* L);
+ int GetHalfExtents(lua_State* L);
+ };
+
+ class Sphere_BindLua
+ {
+ public:
+ SPHERE sphere;
+
+ static const char className[];
+ static Luna::FunctionType methods[];
+ static Luna::PropertyType properties[];
+
+ Sphere_BindLua(const SPHERE& sphere) : sphere(sphere) {}
+ Sphere_BindLua(lua_State *L);
+ ~Sphere_BindLua();
+
+ int Intersects(lua_State* L);
+ int GetCenter(lua_State* L);
+ int GetRadius(lua_State* L);
+ };
+}
diff --git a/WickedEngine/wiLensFlare.cpp b/WickedEngine/wiLensFlare.cpp
index ff2fd7a9d..bdbc12be0 100644
--- a/WickedEngine/wiLensFlare.cpp
+++ b/WickedEngine/wiLensFlare.cpp
@@ -9,11 +9,11 @@ using namespace wiGraphicsTypes;
namespace wiLensFlare
{
- static GPUBuffer *constantBuffer = nullptr;
- static PixelShader *pixelShader = nullptr;
- static GeometryShader *geometryShader = nullptr;
- static VertexShader *vertexShader = nullptr;
- static Sampler *samplercmp = nullptr;
+ static std::unique_ptr constantBuffer;
+ static const PixelShader *pixelShader = nullptr;
+ static const GeometryShader *geometryShader = nullptr;
+ static const VertexShader *vertexShader = nullptr;
+ static Sampler samplercmp;
static RasterizerState rasterizerState;
static DepthStencilState depthStencilState;
static BlendState blendState;
@@ -32,8 +32,8 @@ namespace wiLensFlare
XMStoreFloat4(&cb.xSunPos, lightPos / XMVectorSet((float)wiRenderer::GetInternalResolution().x, (float)wiRenderer::GetInternalResolution().y, 1, 1));
cb.xScreen = XMFLOAT4((float)wiRenderer::GetInternalResolution().x, (float)wiRenderer::GetInternalResolution().y, 0, 0);
- device->UpdateBuffer(constantBuffer, &cb, threadID);
- device->BindConstantBuffer(GS, constantBuffer, CB_GETBINDSLOT(LensFlareCB), threadID);
+ device->UpdateBuffer(constantBuffer.get(), &cb, threadID);
+ device->BindConstantBuffer(GS, constantBuffer.get(), CB_GETBINDSLOT(LensFlareCB), threadID);
int i = 0;
@@ -47,7 +47,7 @@ namespace wiLensFlare
}
}
- device->BindSampler(GS, samplercmp, SSLOT_ONDEMAND0, threadID);
+ device->BindSampler(GS, &samplercmp, SSLOT_ONDEMAND0, threadID);
device->Draw(i, 0, threadID);
@@ -61,11 +61,11 @@ namespace wiLensFlare
{
std::string path = wiRenderer::GetShaderPath();
- vertexShader = static_cast(wiResourceManager::GetShaderManager().add(path + "lensFlareVS.cso", wiResourceManager::VERTEXSHADER));
+ vertexShader = static_cast(wiResourceManager::GetShaderManager().add(path + "lensFlareVS.cso", wiResourceManager::VERTEXSHADER));
- pixelShader = static_cast(wiResourceManager::GetShaderManager().add(path + "lensFlarePS.cso", wiResourceManager::PIXELSHADER));
+ pixelShader = static_cast(wiResourceManager::GetShaderManager().add(path + "lensFlarePS.cso", wiResourceManager::PIXELSHADER));
- geometryShader = static_cast(wiResourceManager::GetShaderManager().add(path + "lensFlareGS.cso", wiResourceManager::GEOMETRYSHADER));
+ geometryShader = static_cast(wiResourceManager::GetShaderManager().add(path + "lensFlareGS.cso", wiResourceManager::GEOMETRYSHADER));
GraphicsDevice* device = wiRenderer::GetDevice();
@@ -90,8 +90,8 @@ namespace wiLensFlare
bd.ByteWidth = sizeof(LensFlareCB);
bd.BindFlags = BIND_CONSTANT_BUFFER;
bd.CPUAccessFlags = CPU_ACCESS_WRITE;
- constantBuffer = new GPUBuffer;
- wiRenderer::GetDevice()->CreateBuffer(&bd, nullptr, constantBuffer);
+ constantBuffer.reset(new GPUBuffer);
+ wiRenderer::GetDevice()->CreateBuffer(&bd, nullptr, constantBuffer.get());
RasterizerStateDesc rs;
@@ -157,8 +157,7 @@ namespace wiLensFlare
samplerDesc.MipLODBias = 0.0f;
samplerDesc.MaxAnisotropy = 0;
samplerDesc.ComparisonFunc = COMPARISON_GREATER_EQUAL;
- samplercmp = new Sampler;
- wiRenderer::GetDevice()->CreateSamplerState(&samplerDesc, samplercmp);
+ wiRenderer::GetDevice()->CreateSamplerState(&samplerDesc, &samplercmp);
}
@@ -167,12 +166,8 @@ namespace wiLensFlare
wiBackLog::post("wiLensFlare Initialized");
}
- void CleanUp() {
- SAFE_DELETE(constantBuffer);
- SAFE_DELETE(pixelShader);
- SAFE_DELETE(geometryShader);
- SAFE_DELETE(vertexShader);
- SAFE_DELETE(samplercmp);
+ void CleanUp()
+ {
}
}
diff --git a/WickedEngine/wiLua.cpp b/WickedEngine/wiLua.cpp
index 5862d22df..7bee4015b 100644
--- a/WickedEngine/wiLua.cpp
+++ b/WickedEngine/wiLua.cpp
@@ -24,6 +24,7 @@
#include "wiFont_BindLua.h"
#include "wiBackLog_BindLua.h"
#include "wiNetwork_BindLua.h"
+#include "wiIntersect_BindLua.h"
#include
@@ -78,6 +79,7 @@ wiLua* wiLua::GetGlobal()
wiBackLog_BindLua::Bind();
wiClient_BindLua::Bind();
wiServer_BindLua::Bind();
+ wiIntersect_BindLua::Bind();
}
return globalLua;
diff --git a/WickedEngine/wiOcean.cpp b/WickedEngine/wiOcean.cpp
index 3ecafd4a9..e7421ddd7 100644
--- a/WickedEngine/wiOcean.cpp
+++ b/WickedEngine/wiOcean.cpp
@@ -11,12 +11,12 @@ using namespace wiSceneSystem;
namespace wiOcean_Internal
{
- ComputeShader* m_pUpdateSpectrumCS = nullptr;
- ComputeShader* m_pUpdateDisplacementMapCS = nullptr;
- ComputeShader* m_pUpdateGradientFoldingCS = nullptr;
- VertexShader* g_pOceanSurfVS = nullptr;
- PixelShader* g_pWireframePS = nullptr;
- PixelShader* g_pOceanSurfPS = nullptr;
+ const ComputeShader* m_pUpdateSpectrumCS = nullptr;
+ const ComputeShader* m_pUpdateDisplacementMapCS = nullptr;
+ const ComputeShader* m_pUpdateGradientFoldingCS = nullptr;
+ const VertexShader* g_pOceanSurfVS = nullptr;
+ const PixelShader* g_pWireframePS = nullptr;
+ const PixelShader* g_pOceanSurfPS = nullptr;
GPUBuffer g_pShadingCB;
RasterizerState rasterizerState;
@@ -367,15 +367,15 @@ void wiOcean::LoadShaders()
std::string path = wiRenderer::GetShaderPath();
- m_pUpdateSpectrumCS = static_cast(wiResourceManager::GetShaderManager().add(path + "oceanSimulatorCS.cso", wiResourceManager::COMPUTESHADER));
- m_pUpdateDisplacementMapCS = static_cast(wiResourceManager::GetShaderManager().add(path + "oceanUpdateDisplacementMapCS.cso", wiResourceManager::COMPUTESHADER));
- m_pUpdateGradientFoldingCS = static_cast(wiResourceManager::GetShaderManager().add(path + "oceanUpdateGradientFoldingCS.cso", wiResourceManager::COMPUTESHADER));
+ m_pUpdateSpectrumCS = static_cast(wiResourceManager::GetShaderManager().add(path + "oceanSimulatorCS.cso", wiResourceManager::COMPUTESHADER));
+ m_pUpdateDisplacementMapCS = static_cast(wiResourceManager::GetShaderManager().add(path + "oceanUpdateDisplacementMapCS.cso", wiResourceManager::COMPUTESHADER));
+ m_pUpdateGradientFoldingCS = static_cast(wiResourceManager::GetShaderManager().add(path + "oceanUpdateGradientFoldingCS.cso", wiResourceManager::COMPUTESHADER));
- g_pOceanSurfVS = static_cast(wiResourceManager::GetShaderManager().add(path + "oceanSurfaceVS.cso", wiResourceManager::VERTEXSHADER));
+ g_pOceanSurfVS = static_cast(wiResourceManager::GetShaderManager().add(path + "oceanSurfaceVS.cso", wiResourceManager::VERTEXSHADER));
- g_pOceanSurfPS = static_cast(wiResourceManager::GetShaderManager().add(path + "oceanSurfacePS.cso", wiResourceManager::PIXELSHADER));
- g_pWireframePS = static_cast(wiResourceManager::GetShaderManager().add(path + "oceanSurfaceSimplePS.cso", wiResourceManager::PIXELSHADER));
+ g_pOceanSurfPS = static_cast(wiResourceManager::GetShaderManager().add(path + "oceanSurfacePS.cso", wiResourceManager::PIXELSHADER));
+ g_pWireframePS = static_cast(wiResourceManager::GetShaderManager().add(path + "oceanSurfaceSimplePS.cso", wiResourceManager::PIXELSHADER));
GraphicsDevice* device = wiRenderer::GetDevice();
diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp
index 2d61fba5e..0eb7fe3f8 100644
--- a/WickedEngine/wiRenderer.cpp
+++ b/WickedEngine/wiRenderer.cpp
@@ -49,21 +49,21 @@ namespace wiRenderer
GraphicsDevice* graphicsDevice = nullptr;
-Sampler *samplers[SSLOT_COUNT] = {};
-VertexShader *vertexShaders[VSTYPE_LAST] = {};
-PixelShader *pixelShaders[PSTYPE_LAST] = {};
-GeometryShader *geometryShaders[GSTYPE_LAST] = {};
-HullShader *hullShaders[HSTYPE_LAST] = {};
-DomainShader *domainShaders[DSTYPE_LAST] = {};
-ComputeShader *computeShaders[CSTYPE_LAST] = {};
-VertexLayout *vertexLayouts[VLTYPE_LAST] = {};
-RasterizerState *rasterizers[RSTYPE_LAST] = {};
-DepthStencilState *depthStencils[DSSTYPE_LAST] = {};
-BlendState *blendStates[BSTYPE_LAST] = {};
-GPUBuffer *constantBuffers[CBTYPE_LAST] = {};
-GPUBuffer *resourceBuffers[RBTYPE_LAST] = {};
-Texture *textures[TEXTYPE_LAST] = {};
-Sampler *customsamplers[SSTYPE_LAST] = {};
+Sampler *samplers[SSLOT_COUNT] = {};
+const VertexShader *vertexShaders[VSTYPE_LAST] = {};
+const PixelShader *pixelShaders[PSTYPE_LAST] = {};
+const GeometryShader *geometryShaders[GSTYPE_LAST] = {};
+const HullShader *hullShaders[HSTYPE_LAST] = {};
+const DomainShader *domainShaders[DSTYPE_LAST] = {};
+const ComputeShader *computeShaders[CSTYPE_LAST] = {};
+VertexLayout *vertexLayouts[VLTYPE_LAST] = {};
+RasterizerState *rasterizers[RSTYPE_LAST] = {};
+DepthStencilState *depthStencils[DSSTYPE_LAST] = {};
+BlendState *blendStates[BSTYPE_LAST] = {};
+GPUBuffer *constantBuffers[CBTYPE_LAST] = {};
+GPUBuffer *resourceBuffers[RBTYPE_LAST] = {};
+Texture *textures[TEXTYPE_LAST] = {};
+Sampler *customsamplers[SSTYPE_LAST] = {};
string SHADERPATH = "shaders/";
@@ -366,55 +366,55 @@ GFX_STRUCT InstanceAtlas
};
-Sampler* GetSampler(int slot)
+const Sampler* GetSampler(int slot)
{
return samplers[slot];
}
-VertexShader* GetVertexShader(VSTYPES id)
+const VertexShader* GetVertexShader(VSTYPES id)
{
return vertexShaders[id];
}
-HullShader* GetHullShader(VSTYPES id)
+const HullShader* GetHullShader(VSTYPES id)
{
return hullShaders[id];
}
-DomainShader* GetDomainShader(VSTYPES id)
+const DomainShader* GetDomainShader(VSTYPES id)
{
return domainShaders[id];
}
-GeometryShader* GetGeometryShader(VSTYPES id)
+const GeometryShader* GetGeometryShader(VSTYPES id)
{
return geometryShaders[id];
}
-PixelShader* GetPixelShader(PSTYPES id)
+const PixelShader* GetPixelShader(PSTYPES id)
{
return pixelShaders[id];
}
-ComputeShader* GetComputeShader(VSTYPES id)
+const ComputeShader* GetComputeShader(VSTYPES id)
{
return computeShaders[id];
}
-VertexLayout* GetVertexLayout(VLTYPES id)
+const VertexLayout* GetVertexLayout(VLTYPES id)
{
return vertexLayouts[id];
}
-RasterizerState* GetRasterizerState(RSTYPES id)
+const RasterizerState* GetRasterizerState(RSTYPES id)
{
return rasterizers[id];
}
-DepthStencilState* GetDepthStencilState(DSSTYPES id)
+const DepthStencilState* GetDepthStencilState(DSSTYPES id)
{
return depthStencils[id];
}
-BlendState* GetBlendState(BSTYPES id)
+const BlendState* GetBlendState(BSTYPES id)
{
return blendStates[id];
}
-GPUBuffer* GetConstantBuffer(CBTYPES id)
+const GPUBuffer* GetConstantBuffer(CBTYPES id)
{
return constantBuffers[id];
}
-Texture* GetTexture(TEXTYPES id)
+const Texture* GetTexture(TEXTYPES id)
{
return textures[id];
}
@@ -502,30 +502,6 @@ void CleanUp()
wiEmittedParticle::CleanUp();
wiCube::CleanUp();
- for (int i = 0; i < VSTYPE_LAST; ++i)
- {
- SAFE_DELETE(vertexShaders[i]);
- }
- for (int i = 0; i < PSTYPE_LAST; ++i)
- {
- SAFE_DELETE(pixelShaders[i]);
- }
- for (int i = 0; i < GSTYPE_LAST; ++i)
- {
- SAFE_DELETE(geometryShaders[i]);
- }
- for (int i = 0; i < HSTYPE_LAST; ++i)
- {
- SAFE_DELETE(hullShaders[i]);
- }
- for (int i = 0; i < DSTYPE_LAST; ++i)
- {
- SAFE_DELETE(domainShaders[i]);
- }
- for (int i = 0; i < CSTYPE_LAST; ++i)
- {
- SAFE_DELETE(computeShaders[i]);
- }
for (int i = 0; i < VLTYPE_LAST; ++i)
{
SAFE_DELETE(vertexLayouts[i]);
@@ -1871,7 +1847,7 @@ void LoadShaders()
{
{ "POSITION_NORMAL_SUBSETINDEX", 0, MeshComponent::Vertex_POS::FORMAT, 0, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_VERTEX_DATA, 0 },
};
- vertexShaders[VSTYPE_OBJECT_DEBUG] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_debug.cso", wiResourceManager::VERTEXSHADER));
+ vertexShaders[VSTYPE_OBJECT_DEBUG] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_debug.cso", wiResourceManager::VERTEXSHADER));
device->CreateInputLayout(layout, ARRAYSIZE(layout), &vertexShaders[VSTYPE_OBJECT_DEBUG]->code, vertexLayouts[VLTYPE_OBJECT_DEBUG]);
}
{
@@ -1891,7 +1867,7 @@ void LoadShaders()
{ "MATIPREV", 2, FORMAT_R32G32B32A32_FLOAT, 4, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 },
{ "INSTANCEATLAS", 0, FORMAT_R32G32B32A32_FLOAT, 4, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 },
};
- vertexShaders[VSTYPE_OBJECT_COMMON] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_common.cso", wiResourceManager::VERTEXSHADER));
+ vertexShaders[VSTYPE_OBJECT_COMMON] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_common.cso", wiResourceManager::VERTEXSHADER));
device->CreateInputLayout(layout, ARRAYSIZE(layout), &vertexShaders[VSTYPE_OBJECT_COMMON]->code, vertexLayouts[VLTYPE_OBJECT_ALL]);
}
@@ -1905,7 +1881,7 @@ void LoadShaders()
{ "MATI", 2, FORMAT_R32G32B32A32_FLOAT, 1, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 },
{ "COLOR_DITHER", 0, FORMAT_R32G32B32A32_FLOAT, 1, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 },
};
- vertexShaders[VSTYPE_OBJECT_POSITIONSTREAM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_positionstream.cso", wiResourceManager::VERTEXSHADER));
+ vertexShaders[VSTYPE_OBJECT_POSITIONSTREAM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_positionstream.cso", wiResourceManager::VERTEXSHADER));
device->CreateInputLayout(layout, ARRAYSIZE(layout), &vertexShaders[VSTYPE_OBJECT_POSITIONSTREAM]->code, vertexLayouts[VLTYPE_OBJECT_POS]);
}
@@ -1920,7 +1896,7 @@ void LoadShaders()
{ "MATI", 2, FORMAT_R32G32B32A32_FLOAT, 2, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 },
{ "COLOR_DITHER", 0, FORMAT_R32G32B32A32_FLOAT, 2, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 },
};
- vertexShaders[VSTYPE_OBJECT_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_simple.cso", wiResourceManager::VERTEXSHADER));
+ vertexShaders[VSTYPE_OBJECT_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_simple.cso", wiResourceManager::VERTEXSHADER));
device->CreateInputLayout(layout, ARRAYSIZE(layout), &vertexShaders[VSTYPE_OBJECT_SIMPLE]->code, vertexLayouts[VLTYPE_OBJECT_POS_TEX]);
}
@@ -1934,7 +1910,7 @@ void LoadShaders()
{ "MATI", 2, FORMAT_R32G32B32A32_FLOAT, 1, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 },
{ "COLOR_DITHER", 0, FORMAT_R32G32B32A32_FLOAT, 1, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 },
};
- vertexShaders[VSTYPE_SHADOW] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "shadowVS.cso", wiResourceManager::VERTEXSHADER));
+ vertexShaders[VSTYPE_SHADOW] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "shadowVS.cso", wiResourceManager::VERTEXSHADER));
device->CreateInputLayout(layout, ARRAYSIZE(layout), &vertexShaders[VSTYPE_SHADOW]->code, vertexLayouts[VLTYPE_SHADOW_POS]);
}
@@ -1949,11 +1925,11 @@ void LoadShaders()
{ "MATI", 2, FORMAT_R32G32B32A32_FLOAT, 2, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 },
{ "COLOR_DITHER", 0, FORMAT_R32G32B32A32_FLOAT, 2, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 },
};
- vertexShaders[VSTYPE_SHADOW_ALPHATEST] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "shadowVS_alphatest.cso", wiResourceManager::VERTEXSHADER));
+ vertexShaders[VSTYPE_SHADOW_ALPHATEST] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "shadowVS_alphatest.cso", wiResourceManager::VERTEXSHADER));
device->CreateInputLayout(layout, ARRAYSIZE(layout), &vertexShaders[VSTYPE_SHADOW_ALPHATEST]->code, vertexLayouts[VLTYPE_SHADOW_POS_TEX]);
- vertexShaders[VSTYPE_SHADOW_TRANSPARENT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "shadowVS_transparent.cso", wiResourceManager::VERTEXSHADER));
+ vertexShaders[VSTYPE_SHADOW_TRANSPARENT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "shadowVS_transparent.cso", wiResourceManager::VERTEXSHADER));
}
@@ -1963,7 +1939,7 @@ void LoadShaders()
{ "POSITION", 0, FORMAT_R32G32B32A32_FLOAT, 0, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_VERTEX_DATA, 0 },
{ "TEXCOORD", 0, FORMAT_R32G32B32A32_FLOAT, 0, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_VERTEX_DATA, 0 },
};
- vertexShaders[VSTYPE_LINE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "linesVS.cso", wiResourceManager::VERTEXSHADER));
+ vertexShaders[VSTYPE_LINE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "linesVS.cso", wiResourceManager::VERTEXSHADER));
device->CreateInputLayout(layout, ARRAYSIZE(layout), &vertexShaders[VSTYPE_LINE]->code, vertexLayouts[VLTYPE_LINE]);
}
@@ -1975,7 +1951,7 @@ void LoadShaders()
{ "TEXCOORD", 0, FORMAT_R32G32_FLOAT, 0, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_VERTEX_DATA, 0 },
{ "TEXCOORD", 1, FORMAT_R32G32B32A32_FLOAT, 0, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_VERTEX_DATA, 0 },
};
- vertexShaders[VSTYPE_TRAIL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "trailVS.cso", wiResourceManager::VERTEXSHADER));
+ vertexShaders[VSTYPE_TRAIL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "trailVS.cso", wiResourceManager::VERTEXSHADER));
device->CreateInputLayout(layout, ARRAYSIZE(layout), &vertexShaders[VSTYPE_TRAIL]->code, vertexLayouts[VLTYPE_TRAIL]);
}
@@ -1990,174 +1966,174 @@ void LoadShaders()
{ "MATIPREV", 1, FORMAT_R32G32B32A32_FLOAT, 2, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 },
{ "MATIPREV", 2, FORMAT_R32G32B32A32_FLOAT, 2, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 },
};
- vertexShaders[VSTYPE_RENDERLIGHTMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "renderlightmapVS.cso", wiResourceManager::VERTEXSHADER));
+ vertexShaders[VSTYPE_RENDERLIGHTMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "renderlightmapVS.cso", wiResourceManager::VERTEXSHADER));
device->CreateInputLayout(layout, ARRAYSIZE(layout), &vertexShaders[VSTYPE_RENDERLIGHTMAP]->code, vertexLayouts[VLTYPE_RENDERLIGHTMAP]);
}
- vertexShaders[VSTYPE_OBJECT_COMMON_TESSELLATION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_common_tessellation.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_OBJECT_SIMPLE_TESSELLATION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_simple_tessellation.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_IMPOSTOR] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_DIRLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "dirLightVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_POINTLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "pointLightVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_SPOTLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "spotLightVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_LIGHTVISUALIZER_SPOTLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "vSpotLightVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_LIGHTVISUALIZER_POINTLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "vPointLightVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_LIGHTVISUALIZER_SPHERELIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "vSphereLightVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_LIGHTVISUALIZER_DISCLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "vDiscLightVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_LIGHTVISUALIZER_RECTANGLELIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "vRectangleLightVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_LIGHTVISUALIZER_TUBELIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "vTubeLightVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_DECAL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "decalVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_ENVMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "envMapVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_ENVMAP_SKY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "envMap_skyVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_SPHERE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "sphereVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_CUBE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubeVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_SHADOWCUBEMAPRENDER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubeShadowVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_SHADOWCUBEMAPRENDER_ALPHATEST] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubeShadowVS_alphatest.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_SKY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "skyVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_WATER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "waterVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_VOXELIZER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_voxelizer.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_VOXEL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_FORCEFIELDVISUALIZER_POINT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "forceFieldPointVisualizerVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_FORCEFIELDVISUALIZER_PLANE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "forceFieldPlaneVisualizerVS.cso", wiResourceManager::VERTEXSHADER));
- vertexShaders[VSTYPE_RAYTRACE_SCREEN] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "raytrace_screenVS.cso", wiResourceManager::VERTEXSHADER));
+ vertexShaders[VSTYPE_OBJECT_COMMON_TESSELLATION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_common_tessellation.cso", wiResourceManager::VERTEXSHADER));
+ vertexShaders[VSTYPE_OBJECT_SIMPLE_TESSELLATION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_simple_tessellation.cso", wiResourceManager::VERTEXSHADER));
+ vertexShaders[VSTYPE_IMPOSTOR] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorVS.cso", wiResourceManager::VERTEXSHADER));
+ vertexShaders[VSTYPE_DIRLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "dirLightVS.cso", wiResourceManager::VERTEXSHADER));
+ vertexShaders[VSTYPE_POINTLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "pointLightVS.cso", wiResourceManager::VERTEXSHADER));
+ vertexShaders[VSTYPE_SPOTLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "spotLightVS.cso", wiResourceManager::VERTEXSHADER));
+ vertexShaders[VSTYPE_LIGHTVISUALIZER_SPOTLIGHT] = static_cast