diff --git a/WickedEngine/WickedEngine.vcxproj b/WickedEngine/WickedEngine.vcxproj
index 5cb964cc3..b8f6d5ff8 100644
--- a/WickedEngine/WickedEngine.vcxproj
+++ b/WickedEngine/WickedEngine.vcxproj
@@ -650,6 +650,7 @@
+
diff --git a/WickedEngine/WickedEngine.vcxproj.filters b/WickedEngine/WickedEngine.vcxproj.filters
index bc13dfff4..6bf6d0f85 100644
--- a/WickedEngine/WickedEngine.vcxproj.filters
+++ b/WickedEngine/WickedEngine.vcxproj.filters
@@ -1543,6 +1543,9 @@
shaders\headers
+
+ shaders\headers
+
diff --git a/WickedEngine/decalPS.hlsl b/WickedEngine/decalPS.hlsl
index b7ba5eae4..14719ca8d 100644
--- a/WickedEngine/decalPS.hlsl
+++ b/WickedEngine/decalPS.hlsl
@@ -45,7 +45,7 @@ PixelOutputType main(VertexToPixel PSIn)
float3 projTex;
projTex.x = projPos.x/projPos.w/2.0f +0.5f;
projTex.y = -projPos.y/projPos.w/2.0f +0.5f;
- projTex.z = projPos.z/projPos.w/2.0f +0.5f;
+ projTex.z = projPos.z/projPos.w;
clip( ((saturate(projTex.x) == projTex.x) && (saturate(projTex.y) == projTex.y) && (saturate(projTex.z) == projTex.z))?1:-1 );
if(hasTexNor & 0x0000010){
diff --git a/WickedEngine/deferredPS.hlsl b/WickedEngine/deferredPS.hlsl
index a320fb058..2bbdabcd9 100644
--- a/WickedEngine/deferredPS.hlsl
+++ b/WickedEngine/deferredPS.hlsl
@@ -18,9 +18,7 @@ cbuffer prop:register(b0){
float4 main(VertextoPixel PSIn) : SV_TARGET
{
float4 color=0;
- float2 depthMapSize;
- xSceneDepthMap.GetDimensions(depthMapSize.x,depthMapSize.y);
- float depth = ( xSceneDepthMap.Load(int4(depthMapSize*PSIn.tex.xy,0,0)).r );
+ float depth = ( xSceneDepthMap.Load(int4(PSIn.pos.xy,0,0)).r );
[branch]if(depthfriction>>objects.back()->restitution>>objects.back()->damping>>objects.back()->physicsType>>
objects.back()->kinematic;
break;
+ case 'T':
+ file >> objects.back()->transparency;
+ break;
default: break;
}
}
@@ -2311,7 +2314,7 @@ void Decal::Update(){
XMVECTOR at = XMVectorAdd(eye,frontV);
XMVECTOR up = XMVector3Transform( XMVectorSet(0,1,0,0),rotMat );
XMStoreFloat4x4(&view, XMMatrixLookAtLH(eye,at,up));
- XMStoreFloat4x4(&projection, XMMatrixOrthographicLH(scale.x,scale.y,-scale.z,scale.z));
+ XMStoreFloat4x4(&projection, XMMatrixOrthographicLH(scale.x, scale.y, -scale.z * 0.5f, scale.z * 0.5f));
XMStoreFloat4x4(&world_rest, XMMatrixScalingFromVector(XMLoadFloat3(&scale))*rotMat*XMMatrixTranslationFromVector(eye));
bounds.createFromHalfWidth(XMFLOAT3(0,0,0),XMFLOAT3(scale.x,scale.y,scale.z));
diff --git a/WickedEngine/wiLoader.h b/WickedEngine/wiLoader.h
index f68d190b6..898f74911 100644
--- a/WickedEngine/wiLoader.h
+++ b/WickedEngine/wiLoader.h
@@ -70,30 +70,25 @@ struct Instance
XMFLOAT4A mat0;
XMFLOAT4A mat1;
XMFLOAT4A mat2;
+ float dither;
- Instance(){
+ Instance(float dither = 0.0f) :dither(dither){
mat0 = XMFLOAT4A(1, 0, 0, 0);
mat0 = XMFLOAT4A(0, 1, 0, 0);
mat0 = XMFLOAT4A(0, 0, 1, 0);
}
- Instance(const XMMATRIX& matIn){
- Create(matIn);
+ Instance(const XMMATRIX& matIn, float dither = 0.0f){
+ Create(matIn,dither);
}
- void Create(const XMMATRIX& matIn)
+ void Create(const XMMATRIX& matIn, float dither = 0.0f)
{
XMStoreFloat4A(&mat0, matIn.r[0]);
XMStoreFloat4A(&mat1, matIn.r[1]);
XMStoreFloat4A(&mat2, matIn.r[2]);
+ this->dither = dither;
}
- void* operator new(size_t size)
- {
- return _aligned_malloc(size, 16);
- }
- void operator delete(void* p)
- {
- if (p) _aligned_free(p);
- }
+ ALIGN_16
};
struct Material
{
@@ -485,6 +480,8 @@ struct Object : public Streamable, public Transform
vector< wiEmittedParticle* > eParticleSystems;
vector< wiHairParticle* > hwiParticleSystems;
+ float transparency;
+
//PHYSICS
bool rigidBody, kinematic;
@@ -521,6 +518,7 @@ struct Object : public Streamable, public Transform
mass = friction = restitution = damping = 1.0f;
physicsType="ACTIVE";
physicsObjectI=-1;
+ transparency = 0.0f;
}
void CleanUp(){
diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp
index dd94268e0..910ad02b0 100644
--- a/WickedEngine/wiRenderer.cpp
+++ b/WickedEngine/wiRenderer.cpp
@@ -995,6 +995,7 @@ void wiRenderer::LoadBasicShaders()
{ "MATI", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 },
{ "MATI", 1, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 },
{ "MATI", 2, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 },
+ { "DITHER", 0, DXGI_FORMAT_R32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 },
};
UINT numElements = ARRAYSIZE(layout);
VertexShaderInfo* vsinfo = static_cast(wiResourceManager::add("shaders/effectVS10.cso", wiResourceManager::VERTEXSHADER, layout, numElements));
@@ -2780,9 +2781,9 @@ void wiRenderer::DrawForShadowMap(ID3D11DeviceContext* context)
for (CulledObjectList::iterator viter = visibleInstances.begin(); viter != visibleInstances.end(); ++viter){
if ((*viter)->particleEmitter != Object::wiParticleEmitter::EMITTER_INVISIBLE){
if (mesh->softBody || (*viter)->armatureDeform)
- mesh->AddRenderableInstance(Instance(XMMatrixIdentity()), k, GRAPHICSTHREAD_SHADOWS);
+ mesh->AddRenderableInstance(Instance(XMMatrixIdentity(), (*viter)->transparency), k, GRAPHICSTHREAD_SHADOWS);
else
- mesh->AddRenderableInstance(Instance(XMMatrixTranspose(XMLoadFloat4x4(&(*viter)->world))), k, GRAPHICSTHREAD_SHADOWS);
+ mesh->AddRenderableInstance(Instance(XMMatrixTranspose(XMLoadFloat4x4(&(*viter)->world)), (*viter)->transparency), k, GRAPHICSTHREAD_SHADOWS);
++k;
}
}
@@ -2896,9 +2897,9 @@ void wiRenderer::DrawForShadowMap(ID3D11DeviceContext* context)
for (CulledObjectList::iterator viter = visibleInstances.begin(); viter != visibleInstances.end(); ++viter){
if ((*viter)->particleEmitter != Object::wiParticleEmitter::EMITTER_INVISIBLE){
if (mesh->softBody || (*viter)->armatureDeform)
- mesh->AddRenderableInstance(Instance(XMMatrixIdentity()), k, GRAPHICSTHREAD_SHADOWS);
+ mesh->AddRenderableInstance(Instance(XMMatrixIdentity(), (*viter)->transparency), k, GRAPHICSTHREAD_SHADOWS);
else
- mesh->AddRenderableInstance(Instance(XMMatrixTranspose(XMLoadFloat4x4(&(*viter)->world))), k, GRAPHICSTHREAD_SHADOWS);
+ mesh->AddRenderableInstance(Instance(XMMatrixTranspose(XMLoadFloat4x4(&(*viter)->world)), (*viter)->transparency), k, GRAPHICSTHREAD_SHADOWS);
++k;
}
}
@@ -3086,9 +3087,9 @@ void wiRenderer::DrawWorld(const XMMATRIX& newView, bool DX11Eff, int tessF, ID3
for(CulledObjectList::iterator viter=visibleInstances.begin();viter!=visibleInstances.end();++viter){
if((*viter)->particleEmitter!=Object::wiParticleEmitter::EMITTER_INVISIBLE){
if (mesh->softBody || (*viter)->armatureDeform)
- mesh->AddRenderableInstance(Instance(XMMatrixIdentity()),k,thread);
+ mesh->AddRenderableInstance(Instance(XMMatrixIdentity(),(*viter)->transparency),k,thread);
else
- mesh->AddRenderableInstance(Instance(XMMatrixTranspose(XMLoadFloat4x4(&(*viter)->world))), k, thread);
+ mesh->AddRenderableInstance(Instance(XMMatrixTranspose(XMLoadFloat4x4(&(*viter)->world)), (*viter)->transparency), k, thread);
++k;
}
}
@@ -4074,18 +4075,18 @@ void wiRenderer::SychronizeWithPhysicsEngine()
}
wiRenderer::MaterialCB::MaterialCB(const Material& mat,UINT materialIndex){
- difColor=XMFLOAT4(mat.diffuseColor.x,mat.diffuseColor.y,mat.diffuseColor.z,mat.alpha);
- hasRef=mat.refMap!=nullptr;
- hasNor=mat.normalMap!=nullptr;
- hasTex=mat.texture!=nullptr;
- hasSpe=mat.specularMap!=nullptr;
- specular=mat.specular;
- refractionIndex=mat.refraction_index;
- movingTex=mat.texOffset;
- metallic=mat.enviroReflection;
- shadeless=mat.shadeless;
- specular_power=mat.specular_power;
- toon=mat.toonshading;
- matIndex=materialIndex;
- emit=mat.emit;
+ difColor = XMFLOAT4(mat.diffuseColor.x, mat.diffuseColor.y, mat.diffuseColor.z, mat.alpha);
+ hasRef = mat.refMap != nullptr;
+ hasNor = mat.normalMap != nullptr;
+ hasTex = mat.texture != nullptr;
+ hasSpe = mat.specularMap != nullptr;
+ specular = mat.specular;
+ refractionIndex = mat.refraction_index;
+ movingTex = mat.texOffset;
+ metallic = mat.enviroReflection;
+ shadeless = mat.shadeless;
+ specular_power = mat.specular_power;
+ toon = mat.toonshading;
+ matIndex = materialIndex;
+ emit = mat.emit;
}
\ No newline at end of file