From d059cd6d57e1c341ec4d2aa00f12d7c1d316df06 Mon Sep 17 00:00:00 2001 From: turanszkij Date: Tue, 5 Mar 2019 23:01:18 +0000 Subject: [PATCH] scripting updates; added new sample scripts; const updates; --- Documentation/ScriptingAPI-Documentation.md | 91 ++-- Editor/ModelImporter_GLTF.cpp | 2 +- WickedEngine/WickedEngine_SHARED.vcxitems | 2 + .../WickedEngine_SHARED.vcxitems.filters | 6 + WickedEngine/wiEmittedParticle.cpp | 64 +-- WickedEngine/wiFFTGenerator.cpp | 8 +- WickedEngine/wiFont.cpp | 18 +- WickedEngine/wiGPUBVH.cpp | 14 +- WickedEngine/wiGPUSortLib.cpp | 42 +- WickedEngine/wiGraphicsDescriptors.h | 32 +- WickedEngine/wiHairParticle.cpp | 22 +- WickedEngine/wiImage.cpp | 96 ++--- WickedEngine/wiIntersect.cpp | 4 + WickedEngine/wiIntersect.h | 1 + WickedEngine/wiIntersect_BindLua.cpp | 283 +++++++++++++ WickedEngine/wiIntersect_BindLua.h | 66 +++ WickedEngine/wiLensFlare.cpp | 37 +- WickedEngine/wiLua.cpp | 2 + WickedEngine/wiOcean.cpp | 24 +- WickedEngine/wiRenderer.cpp | 400 ++++++++---------- WickedEngine/wiRenderer.h | 26 +- WickedEngine/wiRenderer_BindLua.cpp | 153 ++++--- WickedEngine/wiResourceManager.cpp | 111 ++--- WickedEngine/wiResourceManager.h | 18 +- WickedEngine/wiResourceManager_BindLua.cpp | 12 +- WickedEngine/wiSceneSystem_BindLua.cpp | 101 +++++ WickedEngine/wiSceneSystem_BindLua.h | 19 + WickedEngine/wiVersion.cpp | 2 +- models/teapot.wiscene | Bin 645065 -> 645312 bytes scripts/debug_draw.lua | 20 + scripts/pick.lua | 30 ++ scripts/set_material_color.lua | 23 + scripts/set_material_emissive.lua | 23 + 33 files changed, 1199 insertions(+), 553 deletions(-) create mode 100644 WickedEngine/wiIntersect_BindLua.cpp create mode 100644 WickedEngine/wiIntersect_BindLua.h create mode 100644 scripts/debug_draw.lua create mode 100644 scripts/pick.lua create mode 100644 scripts/set_material_color.lua create mode 100644 scripts/set_material_emissive.lua 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(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)); - pixelShaders[PSTYPE_OBJECT_DEFERRED] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_deferred.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_DEFERRED_NORMALMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_deferred_normalmap.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_DEFERRED_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_deferred_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_DEFERRED_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_deferred_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_DEFERRED_NORMALMAP_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_deferred_normalmap_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_DEFERRED_NORMALMAP_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_deferred_normalmap_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_IMPOSTOR_DEFERRED] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorPS_deferred.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_DEFERRED] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_deferred.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_DEFERRED_NORMALMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_deferred_normalmap.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_DEFERRED_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_deferred_pom.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_DEFERRED_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_deferred_planarreflection.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_DEFERRED_NORMALMAP_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_deferred_normalmap_pom.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_DEFERRED_NORMALMAP_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_deferred_normalmap_planarreflection.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_IMPOSTOR_DEFERRED] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorPS_deferred.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_NORMALMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_normalmap.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_transparent.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_NORMALMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_transparent_normalmap.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_NORMALMAP_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_normalmap_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_transparent_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_NORMALMAP_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_transparent_normalmap_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_NORMALMAP_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_normalmap_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_transparent_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_NORMALMAP_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_transparent_normalmap_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_WATER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_water.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_IMPOSTOR_FORWARD] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorPS_forward.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_FORWARD] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_FORWARD_NORMALMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_normalmap.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_transparent.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_NORMALMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_transparent_normalmap.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_FORWARD_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_planarreflection.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_FORWARD_NORMALMAP_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_normalmap_planarreflection.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_transparent_planarreflection.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_NORMALMAP_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_transparent_normalmap_planarreflection.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_FORWARD_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_pom.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_FORWARD_NORMALMAP_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_normalmap_pom.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_transparent_pom.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_NORMALMAP_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_transparent_normalmap_pom.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_FORWARD_WATER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_water.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_IMPOSTOR_FORWARD] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorPS_forward.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_NORMALMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_normalmap.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_transparent.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_NORMALMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_transparent_normalmap.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_NORMALMAP_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_normalmap_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_transparent_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_NORMALMAP_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_transparent_normalmap_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_NORMALMAP_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_normalmap_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_transparent_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_NORMALMAP_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_transparent_normalmap_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_WATER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_water.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_IMPOSTOR_TILEDFORWARD] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorPS_tiledforward.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_TILEDFORWARD] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_NORMALMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_normalmap.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_transparent.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_NORMALMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_transparent_normalmap.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_planarreflection.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_NORMALMAP_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_normalmap_planarreflection.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_transparent_planarreflection.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_NORMALMAP_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_transparent_normalmap_planarreflection.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_pom.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_NORMALMAP_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_normalmap_pom.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_transparent_pom.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_NORMALMAP_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_transparent_normalmap_pom.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_WATER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_water.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_IMPOSTOR_TILEDFORWARD] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorPS_tiledforward.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_HOLOGRAM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_hologram.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_HOLOGRAM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_hologram.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_DEBUG] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_debug.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_SIMPLEST] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_simplest.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_BLACKOUT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_blackout.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TEXTUREONLY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_textureonly.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_ALPHATESTONLY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_alphatestonly.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_IMPOSTOR_ALPHATESTONLY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorPS_alphatestonly.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_IMPOSTOR_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorPS_simple.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_IMPOSTOR_WIRE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorPS_wire.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_ENVIRONMENTALLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "environmentalLightPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_DIRLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "dirLightPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_POINTLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "pointLightPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SPOTLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "spotLightPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SPHERELIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "sphereLightPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_DISCLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "discLightPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_RECTANGLELIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "rectangleLightPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_TUBELIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "tubeLightPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_LIGHTVISUALIZER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "lightVisualizerPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_VOLUMETRICLIGHT_DIRECTIONAL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "volumetricLight_DirectionalPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_VOLUMETRICLIGHT_POINT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "volumetricLight_PointPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_VOLUMETRICLIGHT_SPOT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "volumetricLight_SpotPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_DECAL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "decalPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_ENVMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "envMapPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_ENVMAP_SKY_STATIC] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "envMap_skyPS_static.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_ENVMAP_SKY_DYNAMIC] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "envMap_skyPS_dynamic.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_CAPTUREIMPOSTOR_ALBEDO] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "captureImpostorPS_albedo.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_CAPTUREIMPOSTOR_NORMAL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "captureImpostorPS_normal.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_CAPTUREIMPOSTOR_SURFACE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "captureImpostorPS_surface.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_CUBEMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubemapPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_LINE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "linesPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SKY_STATIC] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "skyPS_static.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SKY_DYNAMIC] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "skyPS_dynamic.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SUN] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "sunPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SHADOW_ALPHATEST] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "shadowPS_alphatest.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SHADOW_TRANSPARENT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "shadowPS_transparent.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SHADOW_WATER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "shadowPS_water.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SHADOWCUBEMAPRENDER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubeShadowPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SHADOWCUBEMAPRENDER_ALPHATEST] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubeShadowPS_alphatest.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_TRAIL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "trailPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_VOXELIZER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_voxelizer.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_VOXEL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_FORCEFIELDVISUALIZER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "forceFieldVisualizerPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_RENDERLIGHTMAP_INDIRECT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "renderlightmapPS_indirect.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_RENDERLIGHTMAP_DIRECT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "renderlightmapPS_direct.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_RAYTRACE_DEBUGBVH] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "raytrace_debugbvhPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_DEBUG] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_debug.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_SIMPLEST] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_simplest.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_BLACKOUT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_blackout.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_TEXTUREONLY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_textureonly.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_OBJECT_ALPHATESTONLY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_alphatestonly.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_IMPOSTOR_ALPHATESTONLY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorPS_alphatestonly.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_IMPOSTOR_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorPS_simple.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_IMPOSTOR_WIRE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorPS_wire.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_ENVIRONMENTALLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "environmentalLightPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_DIRLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "dirLightPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_POINTLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "pointLightPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_SPOTLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "spotLightPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_SPHERELIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "sphereLightPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_DISCLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "discLightPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_RECTANGLELIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "rectangleLightPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_TUBELIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "tubeLightPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_LIGHTVISUALIZER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "lightVisualizerPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_VOLUMETRICLIGHT_DIRECTIONAL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "volumetricLight_DirectionalPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_VOLUMETRICLIGHT_POINT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "volumetricLight_PointPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_VOLUMETRICLIGHT_SPOT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "volumetricLight_SpotPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_DECAL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "decalPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_ENVMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "envMapPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_ENVMAP_SKY_STATIC] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "envMap_skyPS_static.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_ENVMAP_SKY_DYNAMIC] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "envMap_skyPS_dynamic.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_CAPTUREIMPOSTOR_ALBEDO] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "captureImpostorPS_albedo.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_CAPTUREIMPOSTOR_NORMAL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "captureImpostorPS_normal.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_CAPTUREIMPOSTOR_SURFACE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "captureImpostorPS_surface.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_CUBEMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubemapPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_LINE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "linesPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_SKY_STATIC] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "skyPS_static.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_SKY_DYNAMIC] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "skyPS_dynamic.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_SUN] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "sunPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_SHADOW_ALPHATEST] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "shadowPS_alphatest.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_SHADOW_TRANSPARENT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "shadowPS_transparent.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_SHADOW_WATER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "shadowPS_water.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_SHADOWCUBEMAPRENDER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubeShadowPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_SHADOWCUBEMAPRENDER_ALPHATEST] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubeShadowPS_alphatest.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_TRAIL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "trailPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_VOXELIZER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_voxelizer.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_VOXEL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_FORCEFIELDVISUALIZER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "forceFieldVisualizerPS.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_RENDERLIGHTMAP_INDIRECT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "renderlightmapPS_indirect.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_RENDERLIGHTMAP_DIRECT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "renderlightmapPS_direct.cso", wiResourceManager::PIXELSHADER)); + pixelShaders[PSTYPE_RAYTRACE_DEBUGBVH] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "raytrace_debugbvhPS.cso", wiResourceManager::PIXELSHADER)); - geometryShaders[GSTYPE_ENVMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "envMapGS.cso", wiResourceManager::GEOMETRYSHADER)); - geometryShaders[GSTYPE_ENVMAP_SKY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "envMap_skyGS.cso", wiResourceManager::GEOMETRYSHADER)); - geometryShaders[GSTYPE_SHADOWCUBEMAPRENDER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubeShadowGS.cso", wiResourceManager::GEOMETRYSHADER)); - geometryShaders[GSTYPE_SHADOWCUBEMAPRENDER_ALPHATEST] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubeShadowGS_alphatest.cso", wiResourceManager::GEOMETRYSHADER)); - geometryShaders[GSTYPE_VOXELIZER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectGS_voxelizer.cso", wiResourceManager::GEOMETRYSHADER)); - geometryShaders[GSTYPE_VOXEL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelGS.cso", wiResourceManager::GEOMETRYSHADER)); + geometryShaders[GSTYPE_ENVMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "envMapGS.cso", wiResourceManager::GEOMETRYSHADER)); + geometryShaders[GSTYPE_ENVMAP_SKY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "envMap_skyGS.cso", wiResourceManager::GEOMETRYSHADER)); + geometryShaders[GSTYPE_SHADOWCUBEMAPRENDER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubeShadowGS.cso", wiResourceManager::GEOMETRYSHADER)); + geometryShaders[GSTYPE_SHADOWCUBEMAPRENDER_ALPHATEST] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubeShadowGS_alphatest.cso", wiResourceManager::GEOMETRYSHADER)); + geometryShaders[GSTYPE_VOXELIZER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectGS_voxelizer.cso", wiResourceManager::GEOMETRYSHADER)); + geometryShaders[GSTYPE_VOXEL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelGS.cso", wiResourceManager::GEOMETRYSHADER)); - computeShaders[CSTYPE_LUMINANCE_PASS1] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "luminancePass1CS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_LUMINANCE_PASS2] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "luminancePass2CS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_TILEFRUSTUMS] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "tileFrustumsCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_RESOLVEMSAADEPTHSTENCIL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "resolveMSAADepthStencilCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_VOXELSCENECOPYCLEAR] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelSceneCopyClearCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_VOXELSCENECOPYCLEAR_TEMPORALSMOOTHING] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelSceneCopyClear_TemporalSmoothing.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_VOXELRADIANCESECONDARYBOUNCE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelRadianceSecondaryBounceCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_VOXELCLEARONLYNORMAL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelClearOnlyNormalCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAIN2D_UNORM4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain2D_unorm4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain2D_float4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAIN2D_UNORM4_GAUSSIAN] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain2D_unorm4_GaussianCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_GAUSSIAN] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain2D_float4_GaussianCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAIN2D_UNORM4_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain2D_unorm4_BicubicCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain2D_float4_BicubicCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAIN3D_UNORM4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain3D_unorm4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAIN3D_FLOAT4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain3D_float4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAIN3D_UNORM4_GAUSSIAN] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain3D_unorm4_GaussianCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAIN3D_FLOAT4_GAUSSIAN] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain3D_float4_GaussianCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAINCUBE_UNORM4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChainCube_unorm4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAINCUBE_FLOAT4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChainCube_float4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAINCUBEARRAY_UNORM4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChainCubeArray_unorm4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAINCUBEARRAY_FLOAT4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChainCubeArray_float4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_FILTERENVMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "filterEnvMapCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_COPYTEXTURE2D_UNORM4] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "copytexture2D_unorm4CS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_COPYTEXTURE2D_FLOAT4] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "copytexture2D_float4CS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_COPYTEXTURE2D_UNORM4_BORDEREXPAND] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "copytexture2D_unorm4_borderexpandCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_COPYTEXTURE2D_FLOAT4_BORDEREXPAND] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "copytexture2D_float4_borderexpandCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_SKINNING] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "skinningCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_SKINNING_LDS] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "skinningCS_LDS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_CLOUDGENERATOR] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cloudGeneratorCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_RAYTRACE_CLEAR] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "raytrace_clearCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_RAYTRACE_LAUNCH] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "raytrace_launchCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_RAYTRACE_KICKJOBS] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "raytrace_kickjobsCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_RAYTRACE_PRIMARY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "raytrace_primaryCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_RAYTRACE_LIGHTSAMPLING] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "raytrace_lightsamplingCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_LUMINANCE_PASS1] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "luminancePass1CS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_LUMINANCE_PASS2] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "luminancePass2CS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_TILEFRUSTUMS] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "tileFrustumsCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_RESOLVEMSAADEPTHSTENCIL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "resolveMSAADepthStencilCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_VOXELSCENECOPYCLEAR] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelSceneCopyClearCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_VOXELSCENECOPYCLEAR_TEMPORALSMOOTHING] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelSceneCopyClear_TemporalSmoothing.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_VOXELRADIANCESECONDARYBOUNCE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelRadianceSecondaryBounceCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_VOXELCLEARONLYNORMAL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelClearOnlyNormalCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_GENERATEMIPCHAIN2D_UNORM4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain2D_unorm4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain2D_float4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_GENERATEMIPCHAIN2D_UNORM4_GAUSSIAN] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain2D_unorm4_GaussianCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_GAUSSIAN] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain2D_float4_GaussianCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_GENERATEMIPCHAIN2D_UNORM4_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain2D_unorm4_BicubicCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain2D_float4_BicubicCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_GENERATEMIPCHAIN3D_UNORM4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain3D_unorm4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_GENERATEMIPCHAIN3D_FLOAT4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain3D_float4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_GENERATEMIPCHAIN3D_UNORM4_GAUSSIAN] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain3D_unorm4_GaussianCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_GENERATEMIPCHAIN3D_FLOAT4_GAUSSIAN] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain3D_float4_GaussianCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_GENERATEMIPCHAINCUBE_UNORM4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChainCube_unorm4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_GENERATEMIPCHAINCUBE_FLOAT4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChainCube_float4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_GENERATEMIPCHAINCUBEARRAY_UNORM4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChainCubeArray_unorm4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_GENERATEMIPCHAINCUBEARRAY_FLOAT4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChainCubeArray_float4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_FILTERENVMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "filterEnvMapCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_COPYTEXTURE2D_UNORM4] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "copytexture2D_unorm4CS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_COPYTEXTURE2D_FLOAT4] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "copytexture2D_float4CS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_COPYTEXTURE2D_UNORM4_BORDEREXPAND] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "copytexture2D_unorm4_borderexpandCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_COPYTEXTURE2D_FLOAT4_BORDEREXPAND] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "copytexture2D_float4_borderexpandCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_SKINNING] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "skinningCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_SKINNING_LDS] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "skinningCS_LDS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_CLOUDGENERATOR] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cloudGeneratorCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_RAYTRACE_CLEAR] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "raytrace_clearCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_RAYTRACE_LAUNCH] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "raytrace_launchCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_RAYTRACE_KICKJOBS] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "raytrace_kickjobsCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_RAYTRACE_PRIMARY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "raytrace_primaryCS.cso", wiResourceManager::COMPUTESHADER)); + computeShaders[CSTYPE_RAYTRACE_LIGHTSAMPLING] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "raytrace_lightsamplingCS.cso", wiResourceManager::COMPUTESHADER)); - hullShaders[HSTYPE_OBJECT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectHS.cso", wiResourceManager::HULLSHADER)); + hullShaders[HSTYPE_OBJECT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectHS.cso", wiResourceManager::HULLSHADER)); - domainShaders[DSTYPE_OBJECT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectDS.cso", wiResourceManager::DOMAINSHADER)); + domainShaders[DSTYPE_OBJECT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectDS.cso", wiResourceManager::DOMAINSHADER)); // default objectshaders: @@ -2926,7 +2902,7 @@ void LoadShaders() name += ".cso"; ComputePSODesc desc; - desc.cs = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + name, wiResourceManager::COMPUTESHADER)); + desc.cs = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + name, wiResourceManager::COMPUTESHADER)); RECREATE(CPSO_tiledlighting[i][j][k]); device->CreateComputePSO(&desc, CPSO_tiledlighting[i][j][k]); } diff --git a/WickedEngine/wiRenderer.h b/WickedEngine/wiRenderer.h index 052fd3ff1..07ee00115 100644 --- a/WickedEngine/wiRenderer.h +++ b/WickedEngine/wiRenderer.h @@ -32,19 +32,19 @@ namespace wiRenderer static const wiGraphicsTypes::FORMAT DSFormat_small = wiGraphicsTypes::FORMAT_D16_UNORM; static const wiGraphicsTypes::FORMAT DSFormat_small_alias = wiGraphicsTypes::FORMAT_R16_TYPELESS; - wiGraphicsTypes::Sampler* GetSampler(int slot); - wiGraphicsTypes::VertexShader* GetVertexShader(VSTYPES id); - wiGraphicsTypes::HullShader* GetHullShader(VSTYPES id); - wiGraphicsTypes::DomainShader* GetDomainShader(VSTYPES id); - wiGraphicsTypes::GeometryShader* GetGeometryShader(VSTYPES id); - wiGraphicsTypes::PixelShader* GetPixelShader(PSTYPES id); - wiGraphicsTypes::ComputeShader* GetComputeShader(PSTYPES id); - wiGraphicsTypes::VertexLayout* GetVertexLayout(VLTYPES id); - wiGraphicsTypes::RasterizerState* GetRasterizerState(RSTYPES id); - wiGraphicsTypes::DepthStencilState* GetDepthStencilState(DSSTYPES id); - wiGraphicsTypes::BlendState* GetBlendState(BSTYPES id); - wiGraphicsTypes::GPUBuffer* GetConstantBuffer(CBTYPES id); - wiGraphicsTypes::Texture* GetTexture(TEXTYPES id); + const wiGraphicsTypes::Sampler* GetSampler(int slot); + const wiGraphicsTypes::VertexShader* GetVertexShader(VSTYPES id); + const wiGraphicsTypes::HullShader* GetHullShader(VSTYPES id); + const wiGraphicsTypes::DomainShader* GetDomainShader(VSTYPES id); + const wiGraphicsTypes::GeometryShader* GetGeometryShader(VSTYPES id); + const wiGraphicsTypes::PixelShader* GetPixelShader(PSTYPES id); + const wiGraphicsTypes::ComputeShader* GetComputeShader(PSTYPES id); + const wiGraphicsTypes::VertexLayout* GetVertexLayout(VLTYPES id); + const wiGraphicsTypes::RasterizerState* GetRasterizerState(RSTYPES id); + const wiGraphicsTypes::DepthStencilState* GetDepthStencilState(DSSTYPES id); + const wiGraphicsTypes::BlendState* GetBlendState(BSTYPES id); + const wiGraphicsTypes::GPUBuffer* GetConstantBuffer(CBTYPES id); + const wiGraphicsTypes::Texture* GetTexture(TEXTYPES id); void ModifySampler(const wiGraphicsTypes::SamplerDesc& desc, int slot); diff --git a/WickedEngine/wiRenderer_BindLua.cpp b/WickedEngine/wiRenderer_BindLua.cpp index 9109e41a4..e6fc5cd34 100644 --- a/WickedEngine/wiRenderer_BindLua.cpp +++ b/WickedEngine/wiRenderer_BindLua.cpp @@ -3,6 +3,7 @@ #include "wiHelper.h" #include "wiSceneSystem.h" #include "wiSceneSystem_BindLua.h" +#include "wiIntersect_BindLua.h" #include "Vector_BindLua.h" #include "Matrix_BindLua.h" #include "Texture_BindLua.h" @@ -14,6 +15,7 @@ using namespace wiECS; using namespace wiGraphicsTypes; using namespace wiSceneSystem; using namespace wiSceneSystem_BindLua; +using namespace wiIntersect_BindLua; namespace wiRenderer_BindLua { @@ -206,24 +208,6 @@ namespace wiRenderer_BindLua } return 0; } - int SetPhysicsParams(lua_State* L) - { - int argc = wiLua::SGetArgCount(L); - if (argc > 0) - { - assert(0); - //wiRenderer::physicsEngine->rigidBodyPhysicsEnabled = wiLua::SGetBool(L, 1); - //if (argc > 1) - //{ - // wiRenderer::physicsEngine->softBodyPhysicsEnabled = wiLua::SGetBool(L, 2); - // if (argc > 2) - // { - // wiRenderer::physicsEngine->softBodyIterationCount = wiLua::SGetInt(L, 3); - // } - //} - } - return 0; - } int SetResolution(lua_State* L) { int argc = wiLua::SGetArgCount(L); @@ -264,35 +248,42 @@ namespace wiRenderer_BindLua return 0; } - //int Pick(lua_State* L) - //{ - // int argc = wiLua::SGetArgCount(L); - // if (argc > 0) - // { - // Ray_BindLua* ray = Luna::lightcheck(L, 1); - // if (ray != nullptr) - // { - // UINT renderTypeMask = RENDERTYPE_OPAQUE; - // uint32_t layerMask = 0xFFFFFFFF; - // if (argc > 1) - // { - // renderTypeMask = (UINT)wiLua::SGetInt(L, 2); - // if (argc > 2) - // { - // int mask = wiLua::SGetInt(L, 3); - // layerMask = *reinterpret_cast(&mask); - // } - // } - // auto& pick = wiRenderer::RayIntersectWorld(ray->ray, renderTypeMask, layerMask); - // Luna::push(L, new Object_BindLua(pick.object)); - // Luna::push(L, new Vector_BindLua(XMLoadFloat3(&pick.position))); - // Luna::push(L, new Vector_BindLua(XMLoadFloat3(&pick.normal))); - // wiLua::SSetFloat(L, pick.distance); - // return 4; - // } - // } - // return 0; - //} + int Pick(lua_State* L) + { + int argc = wiLua::SGetArgCount(L); + if (argc > 0) + { + Ray_BindLua* ray = Luna::lightcheck(L, 1); + if (ray != nullptr) + { + UINT renderTypeMask = RENDERTYPE_OPAQUE; + uint32_t layerMask = 0xFFFFFFFF; + if (argc > 1) + { + renderTypeMask = (UINT)wiLua::SGetInt(L, 2); + if (argc > 2) + { + int mask = wiLua::SGetInt(L, 3); + layerMask = *reinterpret_cast(&mask); + } + } + auto& pick = wiRenderer::RayIntersectWorld(ray->ray, renderTypeMask, layerMask); + wiLua::SSetInt(L, (int)pick.entity); + Luna::push(L, new Vector_BindLua(XMLoadFloat3(&pick.position))); + Luna::push(L, new Vector_BindLua(XMLoadFloat3(&pick.normal))); + wiLua::SSetFloat(L, pick.distance); + return 4; + } + + wiLua::SError(L, "Pick(Ray ray, opt PICKTYPE pickType, opt uint layerMask) first argument must be of Vector type!"); + } + else + { + wiLua::SError(L, "Pick(Ray ray, opt PICKTYPE pickType, opt uint layerMask) not enough arguments!"); + } + + return 0; + } int DrawLine(lua_State* L) { int argc = wiLua::SGetArgCount(L); @@ -323,6 +314,69 @@ namespace wiRenderer_BindLua return 0; } + int DrawPoint(lua_State* L) + { + int argc = wiLua::SGetArgCount(L); + if (argc > 0) + { + Vector_BindLua* a = Luna::lightcheck(L, 1); + if (a) + { + wiRenderer::RenderablePoint point; + XMStoreFloat3(&point.position, a->vector); + if (argc > 1) + { + point.size = wiLua::SGetFloat(L, 2); + + if (argc > 2) + { + Vector_BindLua* color = Luna::lightcheck(L, 3); + XMStoreFloat4(&point.color, color->vector); + } + } + wiRenderer::AddRenderablePoint(point); + } + else + wiLua::SError(L, "DrawPoint(Vector origin, opt float size, opt Vector color) first argument must be a Vector type!"); + } + else + wiLua::SError(L, "DrawPoint(Vector origin, opt float size, opt Vector color) not enough arguments!"); + + return 0; + } + int DrawBox(lua_State* L) + { + int argc = wiLua::SGetArgCount(L); + if (argc > 0) + { + Matrix_BindLua* m = Luna::lightcheck(L, 1); + if (m) + { + XMFLOAT4X4 mat; + XMStoreFloat4x4(&mat, m->matrix); + + if (argc > 1) + { + Vector_BindLua* color = Luna::lightcheck(L, 2); + if (color) + { + XMFLOAT4 col; + XMStoreFloat4(&col, color->vector); + wiRenderer::AddRenderableBox(mat, col); + return 0; + } + } + + wiRenderer::AddRenderableBox(mat); + } + else + wiLua::SError(L, "DrawBox(Matrix boxMatrix, opt Vector color) first argument must be a Matrix type!"); + } + else + wiLua::SError(L, "DrawBox(Matrix boxMatrix, opt Vector color) not enough arguments!"); + + return 0; + } int PutWaterRipple(lua_State* L) { int argc = wiLua::SGetArgCount(L); @@ -390,13 +444,14 @@ namespace wiRenderer_BindLua wiLua::GetGlobal()->RegisterFunc("SetDebugEmittersEnabled", SetDebugEmittersEnabled); wiLua::GetGlobal()->RegisterFunc("SetDebugForceFieldsEnabled", SetDebugForceFieldsEnabled); wiLua::GetGlobal()->RegisterFunc("SetVSyncEnabled", SetVSyncEnabled); - wiLua::GetGlobal()->RegisterFunc("SetPhysicsParams", SetPhysicsParams); wiLua::GetGlobal()->RegisterFunc("SetResolution", SetResolution); wiLua::GetGlobal()->RegisterFunc("SetDebugLightCulling", SetDebugLightCulling); wiLua::GetGlobal()->RegisterFunc("SetOcclusionCullingEnabled", SetOcclusionCullingEnabled); - //wiLua::GetGlobal()->RegisterFunc("Pick", Pick); + wiLua::GetGlobal()->RegisterFunc("Pick", Pick); wiLua::GetGlobal()->RegisterFunc("DrawLine", DrawLine); + wiLua::GetGlobal()->RegisterFunc("DrawPoint", DrawPoint); + wiLua::GetGlobal()->RegisterFunc("DrawBox", DrawBox); wiLua::GetGlobal()->RegisterFunc("PutWaterRipple", PutWaterRipple); diff --git a/WickedEngine/wiResourceManager.cpp b/WickedEngine/wiResourceManager.cpp index dcf606410..2dce44fd6 100644 --- a/WickedEngine/wiResourceManager.cpp +++ b/WickedEngine/wiResourceManager.cpp @@ -31,26 +31,26 @@ wiResourceManager& wiResourceManager::GetShaderManager() } -const wiResourceManager::Resource* wiResourceManager::get(const wiHashString& name, bool incRefCount) +wiResourceManager::Resource wiResourceManager::get(const wiHashString& name, bool incRefCount) { lock.lock(); auto& it = resources.find(name); if (it != resources.end()) { if(incRefCount) - it->second->refCount++; + it->second.refCount++; lock.unlock(); return it->second; } lock.unlock(); - return nullptr; + return Resource(); } -void* wiResourceManager::add(const wiHashString& name, Data_Type newType) +const void* wiResourceManager::add(const wiHashString& name, Data_Type newType) { - const Resource* res = get(name,true); - if(!res) + Resource res = get(name,true); + if(res.type == EMPTY) { string nameStr = name.GetString(); string ext = wiHelper::toUpper(nameStr.substr(nameStr.length() - 3, nameStr.length())); @@ -351,20 +351,24 @@ void* wiResourceManager::add(const wiHashString& name, Data_Type newType) if (success != nullptr) { lock.lock(); - resources.insert(pair(name, new Resource(success, type))); + Resource resource; + resource.data = success; + resource.type = type; + resource.refCount = 1; + resources.insert(make_pair(name, resource)); lock.unlock(); } return success; } - return res->data; + return res.data; } bool wiResourceManager::del(const wiHashString& name, bool forceDelete) { lock.lock(); - Resource* res = nullptr; + Resource res; auto& it = resources.find(name); if (it != resources.end()) res = it->second; @@ -375,59 +379,60 @@ bool wiResourceManager::del(const wiHashString& name, bool forceDelete) } lock.unlock(); - if(res && (res->refCount<=1 || forceDelete)) + if (res.data != nullptr && (res.refCount <= 1 || forceDelete)) { lock.lock(); bool success = true; - if(res->data) - switch(res->type){ - case Data_Type::IMAGE_1D: - SAFE_DELETE(reinterpret_cast(res->data)); - break; - case Data_Type::IMAGE_2D: - SAFE_DELETE(reinterpret_cast(res->data)); - break; - case Data_Type::IMAGE_3D: - SAFE_DELETE(reinterpret_cast(res->data)); - break; - case Data_Type::VERTEXSHADER: - SAFE_DELETE(reinterpret_cast(res->data)); - break; - case Data_Type::PIXELSHADER: - SAFE_DELETE(reinterpret_cast(res->data)); - break; - case Data_Type::GEOMETRYSHADER: - SAFE_DELETE(reinterpret_cast(res->data)); - break; - case Data_Type::HULLSHADER: - SAFE_DELETE(reinterpret_cast(res->data)); - break; - case Data_Type::DOMAINSHADER: - SAFE_DELETE(reinterpret_cast(res->data)); - break; - case Data_Type::COMPUTESHADER: - SAFE_DELETE(reinterpret_cast(res->data)); - break; - case Data_Type::SOUND: - case Data_Type::MUSIC: - SAFE_DELETE(reinterpret_cast(res->data)); - break; - default: - success=false; - break; - }; + switch (res.type) + { + case Data_Type::IMAGE_1D: + SAFE_DELETE(reinterpret_cast(res.data)); + break; + case Data_Type::IMAGE_2D: + SAFE_DELETE(reinterpret_cast(res.data)); + break; + case Data_Type::IMAGE_3D: + SAFE_DELETE(reinterpret_cast(res.data)); + break; + case Data_Type::VERTEXSHADER: + SAFE_DELETE(reinterpret_cast(res.data)); + break; + case Data_Type::PIXELSHADER: + SAFE_DELETE(reinterpret_cast(res.data)); + break; + case Data_Type::GEOMETRYSHADER: + SAFE_DELETE(reinterpret_cast(res.data)); + break; + case Data_Type::HULLSHADER: + SAFE_DELETE(reinterpret_cast(res.data)); + break; + case Data_Type::DOMAINSHADER: + SAFE_DELETE(reinterpret_cast(res.data)); + break; + case Data_Type::COMPUTESHADER: + SAFE_DELETE(reinterpret_cast(res.data)); + break; + case Data_Type::SOUND: + case Data_Type::MUSIC: + SAFE_DELETE(reinterpret_cast(res.data)); + break; + default: + success = false; + break; + }; - delete res; resources.erase(name); lock.unlock(); return success; } - else if (res) + else if (res.data != nullptr) { - res->refCount--; + lock.lock(); + resources[name].refCount--; + lock.unlock(); } return false; } @@ -437,7 +442,11 @@ bool wiResourceManager::Register(const wiHashString& name, void* resource, Data_ lock.lock(); if (resources.find(name) == resources.end()) { - resources.insert(make_pair(name, new Resource(resource, newType))); + Resource res; + res.data = resource; + res.type = newType; + res.refCount = 1; + resources.insert(make_pair(name, res)); lock.unlock(); return true; } diff --git a/WickedEngine/wiResourceManager.h b/WickedEngine/wiResourceManager.h index 3a88ce543..d8138f74a 100644 --- a/WickedEngine/wiResourceManager.h +++ b/WickedEngine/wiResourceManager.h @@ -23,20 +23,16 @@ public: HULLSHADER, DOMAINSHADER, COMPUTESHADER, + EMPTY, }; struct Resource { - void* data; - Data_Type type; - long refCount; - - Resource(void* newData, Data_Type newType) :data(newData), type(newType) - { - refCount = 1; - }; + const void* data = nullptr; + Data_Type type = EMPTY; + long refCount = 0; }; - std::unordered_map resources; + std::unordered_map resources; public: @@ -44,9 +40,9 @@ public: static wiResourceManager& GetGlobal(); static wiResourceManager& GetShaderManager(); - const Resource* get(const wiHashString& name, bool IncRefCount = false); + Resource get(const wiHashString& name, bool IncRefCount = false); //specify datatype for shaders - void* add(const wiHashString& name, Data_Type newType = Data_Type::DYNAMIC); + const void* add(const wiHashString& name, Data_Type newType = Data_Type::DYNAMIC); bool del(const wiHashString& name, bool forceDelete = false); bool Register(const wiHashString& name, void* resource, Data_Type newType); bool Clear(); diff --git a/WickedEngine/wiResourceManager_BindLua.cpp b/WickedEngine/wiResourceManager_BindLua.cpp index 9d19ddfa8..6ffdf3328 100644 --- a/WickedEngine/wiResourceManager_BindLua.cpp +++ b/WickedEngine/wiResourceManager_BindLua.cpp @@ -44,18 +44,18 @@ int wiResourceManager_BindLua::Get(lua_State *L) if (argc > 0) { string name = wiLua::SGetString(L, 1); - const wiResourceManager::Resource* data = resources->get(name); - if (data != nullptr) + wiResourceManager::Resource data = resources->get(name); + if (data.data != nullptr) { - switch (data->type) + switch (data.type) { case wiResourceManager::Data_Type::IMAGE_2D: - Luna::push(L, new Texture_BindLua((Texture2D*)data->data)); + Luna::push(L, new Texture_BindLua((Texture2D*)data.data)); return 1; break; case wiResourceManager::Data_Type::MUSIC: case wiResourceManager::Data_Type::SOUND: - Luna::push(L, new wiSound_BindLua((wiSound*)data->data)); + Luna::push(L, new wiSound_BindLua((wiSound*)data.data)); return 1; break; default: @@ -95,7 +95,7 @@ int wiResourceManager_BindLua::Add(lua_State *L) else if (!typeStr.compare("MUSIC")) type = wiResourceManager::Data_Type::MUSIC; } - void* data = resources->add(name, type); + const void* data = resources->add(name, type); wiLua::SSetString(L, (data != nullptr ? "ok" : "not found")); return 1; } diff --git a/WickedEngine/wiSceneSystem_BindLua.cpp b/WickedEngine/wiSceneSystem_BindLua.cpp index a5d6c4316..ad118cc71 100644 --- a/WickedEngine/wiSceneSystem_BindLua.cpp +++ b/WickedEngine/wiSceneSystem_BindLua.cpp @@ -37,6 +37,7 @@ void Bind() Luna::Register(L); Luna::Register(L); Luna::Register(L); + Luna::Register(L); } } @@ -57,6 +58,7 @@ Luna::FunctionType Scene_BindLua::methods[] = { lunamethod(Scene_BindLua, Component_GetTransform), lunamethod(Scene_BindLua, Component_GetCamera), lunamethod(Scene_BindLua, Component_GetAnimation), + lunamethod(Scene_BindLua, Component_GetMaterial), lunamethod(Scene_BindLua, Component_Attach), lunamethod(Scene_BindLua, Component_Detach), lunamethod(Scene_BindLua, Component_DetachChildren), @@ -265,6 +267,23 @@ int Scene_BindLua::Component_GetAnimation(lua_State* L) } return 0; } +int Scene_BindLua::Component_GetMaterial(lua_State* L) +{ + int argc = wiLua::SGetArgCount(L); + if (argc > 0) + { + Entity entity = (Entity)wiLua::SGetInt(L, 1); + + MaterialComponent* component = scene->materials.GetComponent(entity); + Luna::push(L, new MaterialComponent_BindLua(component)); + return 1; + } + else + { + wiLua::SError(L, "Scene::Component_GetAnimation(Entity entity) not enough arguments!"); + } + return 0; +} int Scene_BindLua::Component_Attach(lua_State* L) { @@ -771,4 +790,86 @@ int AnimationComponent_BindLua::Stop(lua_State* L) } + + + + + + + + +const char MaterialComponent_BindLua::className[] = "MaterialComponent"; + +Luna::FunctionType MaterialComponent_BindLua::methods[] = { + lunamethod(MaterialComponent_BindLua, SetBaseColor), + lunamethod(MaterialComponent_BindLua, SetEmissiveColor), + { NULL, NULL } +}; +Luna::PropertyType MaterialComponent_BindLua::properties[] = { + { NULL, NULL } +}; + +MaterialComponent_BindLua::MaterialComponent_BindLua(lua_State *L) +{ + owning = true; + component = new MaterialComponent; +} +MaterialComponent_BindLua::~MaterialComponent_BindLua() +{ + if (owning) + { + delete component; + } +} + +int MaterialComponent_BindLua::SetBaseColor(lua_State* L) +{ + int argc = wiLua::SGetArgCount(L); + if (argc > 0) + { + Vector_BindLua* _color = Luna::lightcheck(L, 1); + if (_color) + { + XMFLOAT4 color; + XMStoreFloat4(&color, _color->vector); + component->SetBaseColor(color); + } + else + { + wiLua::SError(L, "SetBaseColor(Vector color) first argument must be of Vector type!"); + } + } + else + { + wiLua::SError(L, "SetBaseColor(Vector color) not enough arguments!"); + } + + return 0; +} +int MaterialComponent_BindLua::SetEmissiveColor(lua_State* L) +{ + int argc = wiLua::SGetArgCount(L); + if (argc > 0) + { + Vector_BindLua* _color = Luna::lightcheck(L, 1); + if (_color) + { + XMFLOAT4 color; + XMStoreFloat4(&color, _color->vector); + component->SetEmissiveColor(color); + } + else + { + wiLua::SError(L, "SetEmissiveColor(Vector color) first argument must be of Vector type!"); + } + } + else + { + wiLua::SError(L, "SetEmissiveColor(Vector color) not enough arguments!"); + } + + return 0; +} + + } diff --git a/WickedEngine/wiSceneSystem_BindLua.h b/WickedEngine/wiSceneSystem_BindLua.h index 804bf539b..59f8c90d6 100644 --- a/WickedEngine/wiSceneSystem_BindLua.h +++ b/WickedEngine/wiSceneSystem_BindLua.h @@ -35,6 +35,7 @@ namespace wiSceneSystem_BindLua int Component_GetTransform(lua_State* L); int Component_GetCamera(lua_State* L); int Component_GetAnimation(lua_State* L); + int Component_GetMaterial(lua_State* L); int Component_Attach(lua_State* L); int Component_Detach(lua_State* L); @@ -142,5 +143,23 @@ namespace wiSceneSystem_BindLua int Stop(lua_State* L); }; + class MaterialComponent_BindLua + { + public: + bool owning = false; + wiSceneSystem::MaterialComponent* component = nullptr; + + static const char className[]; + static Luna::FunctionType methods[]; + static Luna::PropertyType properties[]; + + MaterialComponent_BindLua(wiSceneSystem::MaterialComponent* component) :component(component) {} + MaterialComponent_BindLua(lua_State *L); + ~MaterialComponent_BindLua(); + + int SetBaseColor(lua_State* L); + int SetEmissiveColor(lua_State* L); + }; + } diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index 4a24e90dc..c77ae81ac 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wiVersion // minor features, major updates const int minor = 24; // minor bug fixes, alterations, refactors, updates - const int revision = 47; + const int revision = 48; long GetVersion() diff --git a/models/teapot.wiscene b/models/teapot.wiscene index 0e997179e5b98bd6d7dfe8f0351bc2d0ed915c26..8a8bc522f3b54d53d8e0892253f81aeec83e7ee2 100644 GIT binary patch delta 565 zcmX@PUj4vEbw@+S&H$D2|fiNgP1@B5Fo3YEX8Cw*`JAH zvNw~;|b zm}C3Zxttr!!9vqJuW~Bzz&r->(Db=l%rYz>k?B{ja;i+fd5u$OdVv-*8xJ$YQDASQ z%OSgTy6H7e8y*yqM4*||XI|s%;6VAKf}3Q;~79{`ePn%)2a delta 425 zcmX@GQT^n4bw;s?jN(#K3=rV&z`IlJfR~4Qx8*zEI(O*@r(&R1t5c%Km-sV ztD7vqWI5gM8YkQ2cqXywd^b3GCf70vFg4guUdSZP%LviHzyNY{^8u#z15AuS45FEV zm<5PgftYRk0VZ~t*(@Mc?GNU%12M<;2Xi?$n1h9;Pr1sezytFp$a~WdT;-Hu0f|h1 zaFtVqhZ$-QSPm?L?8fN@*Enr>P(%_tIAo?D=;9EV9Kgsj{lzuT5+3B>n4WPRr~^f0 N<8@B&=?z-UoB;STeJcO} diff --git a/scripts/debug_draw.lua b/scripts/debug_draw.lua new file mode 100644 index 000000000..28db2a4f1 --- /dev/null +++ b/scripts/debug_draw.lua @@ -0,0 +1,20 @@ +-- This script will draw some debug primitives in the world such as line, point, box + +backlog_post("---> START SCRIPT: debug_draw.lua") + +runProcess(function() + while true do + DrawLine(Vector(-10,4,0), Vector(10,1,1), Vector(1,0,1,1)) + DrawPoint(Vector(0,4,0), 3, Vector(1,1,0,1)) + + local S = matrix.Scale(Vector(1,2,3)) + local R = matrix.Rotation(Vector(0.2, 0.6)) + local T = matrix.Translation(Vector(0,2,3)) + local M = S:Multiply(R):Multiply(T) + DrawBox(M, Vector(0,1,1,1)) + + render() + end +end) + +backlog_post("---> END SCRIPT: debug_draw.lua") diff --git a/scripts/pick.lua b/scripts/pick.lua new file mode 100644 index 000000000..5c97723c4 --- /dev/null +++ b/scripts/pick.lua @@ -0,0 +1,30 @@ +-- This script will load a teapot model and demonstrate picking it with a ray + +backlog_post("---> START SCRIPT: pick.lua") + +scene = GetScene() +scene.Clear() +model_entity = LoadModel("../models/teapot.wiscene") + +runProcess(function() + local t = 0 + while true do + t = t + 0.05 + + -- Create a Ray by specifying origin and direction (and also animate the ray origin along sine wave): + local ray = Ray(Vector(math.sin(t) * 4,1,-10), Vector(0,0,1)) + local entity, position, normal, distance = Pick(ray) + + if(entity ~= INVALID_ENTITY) then + -- Draw intersection point as purple X + DrawPoint(position, 1, Vector(1,0,1,1)) + end + + -- Draw ray as yellow line: + DrawLine(ray.GetOrigin(), ray.GetOrigin():Add(ray.GetDirection():Multiply(1000)), Vector(1,1,0,1)) + + render() + end +end) + +backlog_post("---> END SCRIPT: pick.lua") diff --git a/scripts/set_material_color.lua b/scripts/set_material_color.lua new file mode 100644 index 000000000..70ea4091b --- /dev/null +++ b/scripts/set_material_color.lua @@ -0,0 +1,23 @@ +-- This script will load a teapot model and animate its base color between red and green + +backlog_post("---> START SCRIPT: set_material_color.lua") + +scene = GetScene() +scene.Clear() +LoadModel("../models/teapot.wiscene") +material_entity = scene.Entity_FindByName("teapot_material") -- query the teapot's material by name +material_component = scene.Component_GetMaterial(material_entity) + +runProcess(function() + local t = 0 + while true do + t = t + 0.1 + local red = Vector(1,0,0,1) + local green = Vector(0,1,0,1) + local color = vector.Lerp(red, green, math.sin(t) * 0.5 + 0.5) + material_component.SetBaseColor(color) + update() + end +end) + +backlog_post("---> END SCRIPT: set_material_color.lua") diff --git a/scripts/set_material_emissive.lua b/scripts/set_material_emissive.lua new file mode 100644 index 000000000..a7d67ee47 --- /dev/null +++ b/scripts/set_material_emissive.lua @@ -0,0 +1,23 @@ +-- This script will load a teapot model and animate its emissive color and intensity + +backlog_post("---> START SCRIPT: set_material_color.lua") + +scene = GetScene() +scene.Clear() +LoadModel("../models/teapot.wiscene") +material_entity = scene.Entity_FindByName("teapot_material") -- query the teapot's material by name +material_component = scene.Component_GetMaterial(material_entity) + +runProcess(function() + local t = 0 + while true do + t = t + 0.05 + local startcolor = Vector(1,0,1,0) -- pink, but zero intesity emissive + local endcolor = Vector(1,0,1,2) -- 2x intensity pink emissive + local color = vector.Lerp(startcolor, endcolor, math.sin(t) * 0.5 + 0.5) + material_component.SetEmissiveColor(color) + update() + end +end) + +backlog_post("---> END SCRIPT: set_material_color.lua")