diff --git a/WickedEngine/wiBULLET.cpp b/WickedEngine/wiBULLET.cpp index 7e196e021..d4c597faa 100644 --- a/WickedEngine/wiBULLET.cpp +++ b/WickedEngine/wiBULLET.cpp @@ -316,11 +316,11 @@ void wiBULLET::addCapsule(float rad, float hei, const XMFLOAT4& rot, const XMFLO } -void wiBULLET::addConvexHull(const vector& vertices, const XMFLOAT3& sca, const XMFLOAT4& rot, const XMFLOAT3& pos +void wiBULLET::addConvexHull(const vector& vertices, const XMFLOAT3& sca, const XMFLOAT4& rot, const XMFLOAT3& pos , float newMass, float newFriction, float newRestitution, float newDamping, bool kinematic){ btCollisionShape* shape = new btConvexHullShape(); for (unsigned int i = 0; iaddPoint(btVector3(vertices[i].pos.x,vertices[i].pos.y,vertices[i].pos.z)); + ((btConvexHullShape*)shape)->addPoint(btVector3(vertices[i].x,vertices[i].y,vertices[i].z)); shape->setLocalScaling(btVector3(sca.x,sca.y,sca.z)); shape->setMargin(btScalar(0.05)); @@ -374,7 +374,7 @@ void wiBULLET::addConvexHull(const vector& vertices, const XMFLOA } -void wiBULLET::addTriangleMesh(const vector& vertices, const vector& indices, const XMFLOAT3& sca, const XMFLOAT4& rot, const XMFLOAT3& pos +void wiBULLET::addTriangleMesh(const vector& vertices, const vector& indices, const XMFLOAT3& sca, const XMFLOAT4& rot, const XMFLOAT3& pos , float newMass, float newFriction, float newRestitution, float newDamping, bool kinematic){ int totalVerts = (int)vertices.size(); @@ -382,7 +382,7 @@ void wiBULLET::addTriangleMesh(const vector& vertices, const vect btVector3* btVerts = new btVector3[totalVerts]; for (unsigned int i = 0; im_nodes); int gvg = mesh->goalVG; - for (unsigned int i = 0; ivertices_Complete.size(); ++i) + for (unsigned int i = 0; ivertices[VPROP_POS].size(); ++i) { int indexP = mesh->physicalmapGP[i]; float weight = mesh->vertexGroups[gvg].vertices[indexP]; - mesh->vertices_Complete[i].pre=mesh->vertices_Complete[i].pos; - mesh->vertices_Complete[i].pos = XMFLOAT4(nodes[indexP].m_x.getX(), nodes[indexP].m_x.getY(), nodes[indexP].m_x.getZ(), 1); - mesh->vertices_Complete[i].nor.x = -nodes[indexP].m_n.getX(); - mesh->vertices_Complete[i].nor.y = -nodes[indexP].m_n.getY(); - mesh->vertices_Complete[i].nor.z = -nodes[indexP].m_n.getZ(); - mesh->vertices_Complete[i].tex=mesh->vertices[i].tex; + mesh->vertices[VPROP_PRE][i] = mesh->vertices[VPROP_POS][i]; + mesh->vertices[VPROP_POS][i] = XMFLOAT4(nodes[indexP].m_x.getX(), nodes[indexP].m_x.getY(), nodes[indexP].m_x.getZ(), 1); + mesh->vertices[VPROP_NOR][i].x = -nodes[indexP].m_n.getX(); + mesh->vertices[VPROP_NOR][i].y = -nodes[indexP].m_n.getY(); + mesh->vertices[VPROP_NOR][i].z = -nodes[indexP].m_n.getZ(); + mesh->vertices[VPROP_TEX][i] = mesh->vertices[VPROP_TEX][i]; } } } @@ -702,7 +702,7 @@ void wiBULLET::registerObject(Object* object){ } if(!object->collisionShape.compare("CONVEX_HULL")){ addConvexHull( - object->mesh->vertices, + object->mesh->vertices[VPROP_POS], S,R,T ,object->mass,object->friction,object->restitution ,object->damping,object->kinematic @@ -711,7 +711,7 @@ void wiBULLET::registerObject(Object* object){ } if(!object->collisionShape.compare("MESH")){ addTriangleMesh( - object->mesh->vertices,object->mesh->indices, + object->mesh->vertices[VPROP_POS],object->mesh->indices, S,R,T ,object->mass,object->friction,object->restitution ,object->damping,object->kinematic diff --git a/WickedEngine/wiBULLET.h b/WickedEngine/wiBULLET.h index 0e2b618ce..4dd1d4107 100644 --- a/WickedEngine/wiBULLET.h +++ b/WickedEngine/wiBULLET.h @@ -43,9 +43,9 @@ public: , float newMass, float newFriction, float newRestitution, float newDamping, bool kinematic); void addCapsule(float rad, float hei, const XMFLOAT4& rot, const XMFLOAT3& pos , float newMass, float newFriction, float newRestitution, float newDamping, bool kinematic); - void addConvexHull(const vector& vertices, const XMFLOAT3& sca, const XMFLOAT4& rot, const XMFLOAT3& pos + void addConvexHull(const vector& vertices, const XMFLOAT3& sca, const XMFLOAT4& rot, const XMFLOAT3& pos , float newMass, float newFriction, float newRestitution, float newDamping, bool kinematic); - void addTriangleMesh(const vector& vertices, const vector& indices, const XMFLOAT3& sca, const XMFLOAT4& rot, const XMFLOAT3& pos + void addTriangleMesh(const vector& vertices, const vector& indices, const XMFLOAT3& sca, const XMFLOAT4& rot, const XMFLOAT3& pos , float newMass, float newFriction, float newRestitution, float newDamping, bool kinematic); void addSoftBodyTriangleMesh(const Mesh* mesh, const XMFLOAT3& sca, const XMFLOAT4& rot, const XMFLOAT3& pos diff --git a/WickedEngine/wiEmittedParticle.cpp b/WickedEngine/wiEmittedParticle.cpp index 4a8b5162c..24df48195 100644 --- a/WickedEngine/wiEmittedParticle.cpp +++ b/WickedEngine/wiEmittedParticle.cpp @@ -114,7 +114,6 @@ void wiEmittedParticle::CreateLight() void wiEmittedParticle::addPoint(const XMMATRIX& t4, const XMMATRIX& t3) { - vector& emitterVertexList = object->mesh->vertices; int gen[3]; gen[0] = getRandomPointOnEmitter(); switch(gen[0]%3) @@ -146,16 +145,16 @@ void wiEmittedParticle::addPoint(const XMMATRIX& t4, const XMMATRIX& t3) XMFLOAT3 pos; XMFLOAT3 vel; XMVECTOR& vbar=XMVectorBaryCentric( - XMLoadFloat4(&emitterVertexList[object->mesh->indices[gen[0]]].pos) - , XMLoadFloat4(&emitterVertexList[object->mesh->indices[gen[1]]].pos) - , XMLoadFloat4(&emitterVertexList[object->mesh->indices[gen[2]]].pos) + XMLoadFloat4(&object->mesh->vertices[VPROP_POS][object->mesh->indices[gen[0]]]) + , XMLoadFloat4(&object->mesh->vertices[VPROP_POS][object->mesh->indices[gen[1]]]) + , XMLoadFloat4(&object->mesh->vertices[VPROP_POS][object->mesh->indices[gen[2]]]) , f , g ); XMVECTOR& nbar=XMVectorBaryCentric( - XMLoadFloat4(&emitterVertexList[object->mesh->indices[gen[0]]].nor) - , XMLoadFloat4(&emitterVertexList[object->mesh->indices[gen[1]]].nor) - , XMLoadFloat4(&emitterVertexList[object->mesh->indices[gen[2]]].nor) + XMLoadFloat4(&object->mesh->vertices[VPROP_NOR][object->mesh->indices[gen[0]]]) + , XMLoadFloat4(&object->mesh->vertices[VPROP_NOR][object->mesh->indices[gen[1]]]) + , XMLoadFloat4(&object->mesh->vertices[VPROP_NOR][object->mesh->indices[gen[2]]]) , f , g ); diff --git a/WickedEngine/wiGraphicsDevice.h b/WickedEngine/wiGraphicsDevice.h index 33851d0ed..cb2636707 100644 --- a/WickedEngine/wiGraphicsDevice.h +++ b/WickedEngine/wiGraphicsDevice.h @@ -113,7 +113,7 @@ namespace wiGraphicsTypes virtual void BindConstantBufferHS(const GPUBuffer* buffer, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0; virtual void BindConstantBufferCS(const GPUBuffer* buffer, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0; virtual void BindVertexBuffer(const GPUBuffer* vertexBuffer, int slot, UINT stride, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0; - virtual void BindVertexBuffers(const GPUBuffer** vertexBuffers, int slot, UINT count, const UINT* strides, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0; + virtual void BindVertexBuffers(GPUBuffer* const *vertexBuffers, int slot, UINT count, const UINT* strides, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0; virtual void BindIndexBuffer(const GPUBuffer* indexBuffer, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0; virtual void BindPrimitiveTopology(PRIMITIVETOPOLOGY type, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0; virtual void BindVertexLayout(const VertexLayout* layout, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0; @@ -122,7 +122,7 @@ namespace wiGraphicsTypes virtual void BindDepthStencilState(const DepthStencilState* state, UINT stencilRef, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0; virtual void BindRasterizerState(const RasterizerState* state, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0; virtual void BindStreamOutTarget(const GPUBuffer* buffer, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0; - virtual void BindStreamOutTargets(const GPUBuffer** buffers, UINT count, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0; + virtual void BindStreamOutTargets(GPUBuffer* const *buffers, UINT count, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0; virtual void BindPS(const PixelShader* shader, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0; virtual void BindVS(const VertexShader* shader, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0; virtual void BindGS(const GeometryShader* shader, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0; diff --git a/WickedEngine/wiGraphicsDevice_DX11.cpp b/WickedEngine/wiGraphicsDevice_DX11.cpp index e0e62e781..57c23c08b 100644 --- a/WickedEngine/wiGraphicsDevice_DX11.cpp +++ b/WickedEngine/wiGraphicsDevice_DX11.cpp @@ -1399,7 +1399,7 @@ GraphicsDevice_DX11::GraphicsDevice_DX11(wiWindowRegistration::window_type windo } UINT createDeviceFlags = 0; - //createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; + createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; D3D_DRIVER_TYPE driverTypes[] = { @@ -2942,12 +2942,12 @@ void GraphicsDevice_DX11::BindVertexBuffer(const GPUBuffer* vertexBuffer, int sl ID3D11Buffer* res = vertexBuffer ? vertexBuffer->resource_DX11 : nullptr; deviceContexts[threadID]->IASetVertexBuffers(slot, 1, &res, &stride, &offset); } -void GraphicsDevice_DX11::BindVertexBuffers(const GPUBuffer** vertexBuffers, int slot, UINT count, const UINT* strides, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) +void GraphicsDevice_DX11::BindVertexBuffers(GPUBuffer* const *vertexBuffers, int slot, UINT count, const UINT* strides, GRAPHICSTHREAD threadID) { assert(count <= 8); UINT offsets[8] = { 0 }; ID3D11Buffer* res[8] = { 0 }; - for (int i = 0; i < count; ++i) + for (UINT i = 0; i < count; ++i) { res[i] = vertexBuffers[i]->resource_DX11; } @@ -3013,12 +3013,12 @@ void GraphicsDevice_DX11::BindStreamOutTarget(const GPUBuffer* buffer, GRAPHICST ID3D11Buffer* res = buffer ? buffer->resource_DX11 : nullptr; deviceContexts[threadID]->SOSetTargets(1, &res, offsetSO); } -void GraphicsDevice_DX11::BindStreamOutTargets(const GPUBuffer** buffers, UINT count, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) +void GraphicsDevice_DX11::BindStreamOutTargets(GPUBuffer* const * buffers, UINT count, GRAPHICSTHREAD threadID) { assert(count <= 8); UINT offsetSO[8] = { 0 }; ID3D11Buffer* res[8] = { 0 }; - for (int i = 0; i < count; ++i) + for (UINT i = 0; i < count; ++i) { res[i] = buffers[i]->resource_DX11; } diff --git a/WickedEngine/wiGraphicsDevice_DX11.h b/WickedEngine/wiGraphicsDevice_DX11.h index 831d196cf..cc0fc9ef2 100644 --- a/WickedEngine/wiGraphicsDevice_DX11.h +++ b/WickedEngine/wiGraphicsDevice_DX11.h @@ -95,7 +95,7 @@ namespace wiGraphicsTypes virtual void BindConstantBufferHS(const GPUBuffer* buffer, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) override; virtual void BindConstantBufferCS(const GPUBuffer* buffer, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) override; virtual void BindVertexBuffer(const GPUBuffer* vertexBuffer, int slot, UINT stride, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) override; - virtual void BindVertexBuffers(const GPUBuffer** vertexBuffers, int slot, UINT count, const UINT* strides, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) override; + virtual void BindVertexBuffers(GPUBuffer* const *vertexBuffers, int slot, UINT count, const UINT* strides, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) override; virtual void BindIndexBuffer(const GPUBuffer* indexBuffer, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) override; virtual void BindPrimitiveTopology(PRIMITIVETOPOLOGY type, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) override; virtual void BindVertexLayout(const VertexLayout* layout, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) override; @@ -104,7 +104,7 @@ namespace wiGraphicsTypes virtual void BindDepthStencilState(const DepthStencilState* state, UINT stencilRef, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) override; virtual void BindRasterizerState(const RasterizerState* state, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) override; virtual void BindStreamOutTarget(const GPUBuffer* buffer, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) override; - virtual void BindStreamOutTargets(const GPUBuffer** buffers, UINT count, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) override; + virtual void BindStreamOutTargets(GPUBuffer* const *buffers, UINT count, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) override; virtual void BindPS(const PixelShader* shader, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) override; virtual void BindVS(const VertexShader* shader, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) override; virtual void BindGS(const GeometryShader* shader, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) override; diff --git a/WickedEngine/wiHairParticle.cpp b/WickedEngine/wiHairParticle.cpp index fc4c9cfb5..c8844b531 100644 --- a/WickedEngine/wiHairParticle.cpp +++ b/WickedEngine/wiHairParticle.cpp @@ -286,11 +286,14 @@ void wiHairParticle::Generate() if (lenMod[m] < 0) lenMod[m] = 0; } - SkinnedVertex* v[] = { - &mesh->vertices[vi[0]], - &mesh->vertices[vi[1]], - &mesh->vertices[vi[2]], - }; + Vertex verts[3]; + verts[0].pos = mesh->vertices[VPROP_POS][vi[0]]; + verts[0].nor = mesh->vertices[VPROP_NOR][vi[0]]; + verts[1].pos = mesh->vertices[VPROP_POS][vi[1]]; + verts[1].nor = mesh->vertices[VPROP_NOR][vi[1]]; + verts[2].pos = mesh->vertices[VPROP_POS][vi[2]]; + verts[2].nor = mesh->vertices[VPROP_NOR][vi[2]]; + if( (denMod[0]>FLT_EPSILON || denMod[1]>FLT_EPSILON || denMod[2]>FLT_EPSILON) && (lenMod[0]>FLT_EPSILON || lenMod[1]>FLT_EPSILON || lenMod[2]>FLT_EPSILON) @@ -314,9 +317,9 @@ void wiHairParticle::Generate() g = 1 - g; } XMVECTOR pos[] = { - XMVector3Transform(XMLoadFloat4(&v[0]->pos),matr) - , XMVector3Transform(XMLoadFloat4(&v[1]->pos),matr) - , XMVector3Transform(XMLoadFloat4(&v[2]->pos),matr) + XMVector3Transform(XMLoadFloat4(&verts[0].pos),matr) + , XMVector3Transform(XMLoadFloat4(&verts[1].pos),matr) + , XMVector3Transform(XMLoadFloat4(&verts[2].pos),matr) }; XMVECTOR vbar=XMVectorBaryCentric( pos[0],pos[1],pos[2] @@ -324,9 +327,9 @@ void wiHairParticle::Generate() , g ); XMVECTOR nbar=XMVectorBaryCentric( - XMLoadFloat4(&v[0]->nor) - , XMLoadFloat4(&v[1]->nor) - , XMLoadFloat4(&v[2]->nor) + XMLoadFloat4(&verts[0].nor) + , XMLoadFloat4(&verts[1].nor) + , XMLoadFloat4(&verts[2].nor) , f , g ); diff --git a/WickedEngine/wiPHYSICS.h b/WickedEngine/wiPHYSICS.h index 8ca9819e7..7f5fa4f34 100644 --- a/WickedEngine/wiPHYSICS.h +++ b/WickedEngine/wiPHYSICS.h @@ -1,7 +1,6 @@ #pragma once #include "CommonInclude.h" -struct SkinnedVertex; struct Mesh; struct Object; @@ -47,9 +46,9 @@ public: , float newMass=1, float newFriction=1, float newRestitution=1, float newDamping=1, bool kinematic=false)=0; virtual void addCapsule(float rad, float hei, const XMFLOAT4& rot, const XMFLOAT3& pos , float newMass=1, float newFriction=1, float newRestitution=1, float newDamping=1, bool kinematic=false)=0; - virtual void addConvexHull(const vector& vertices, const XMFLOAT3& sca, const XMFLOAT4& rot, const XMFLOAT3& pos + virtual void addConvexHull(const vector& vertices, const XMFLOAT3& sca, const XMFLOAT4& rot, const XMFLOAT3& pos , float newMass=1, float newFriction=1, float newRestitution=1, float newDamping=1, bool kinematic=false)=0; - virtual void addTriangleMesh(const vector& vertices, const vector& indices, const XMFLOAT3& sca, const XMFLOAT4& rot, const XMFLOAT3& pos + virtual void addTriangleMesh(const vector& vertices, const vector& indices, const XMFLOAT3& sca, const XMFLOAT4& rot, const XMFLOAT3& pos , float newMass=1, float newFriction=1, float newRestitution=1, float newDamping=1, bool kinematic=false)=0; diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index f2706ebc0..6d3667450 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -613,10 +613,10 @@ void wiRenderer::LoadShaders() { "TEXCOORD", 0, FORMAT_R32G32B32A32_FLOAT, VPROP_TEX, APPEND_ALIGNED_ELEMENT, INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 1, FORMAT_R32G32B32A32_FLOAT, VPROP_PRE, APPEND_ALIGNED_ELEMENT, INPUT_PER_VERTEX_DATA, 0 }, - { "MATI", 0, FORMAT_R32G32B32A32_FLOAT, 1, APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, - { "MATI", 1, FORMAT_R32G32B32A32_FLOAT, 1, APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, - { "MATI", 2, FORMAT_R32G32B32A32_FLOAT, 1, APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, - { "COLOR_DITHER", 0, FORMAT_R32G32B32A32_FLOAT, 1, APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, + { "MATI", 0, FORMAT_R32G32B32A32_FLOAT, (VPROP_PRE + 1), APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, + { "MATI", 1, FORMAT_R32G32B32A32_FLOAT, (VPROP_PRE + 1), APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, + { "MATI", 2, FORMAT_R32G32B32A32_FLOAT, (VPROP_PRE + 1), APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, + { "COLOR_DITHER", 0, FORMAT_R32G32B32A32_FLOAT, (VPROP_PRE + 1), APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, }; UINT numElements = ARRAYSIZE(layout); VertexShaderInfo* vsinfo = static_cast(wiResourceManager::GetShaderManager()->add(SHADERPATH + "objectVS10.cso", wiResourceManager::VERTEXSHADER, layout, numElements)); @@ -3665,10 +3665,10 @@ void wiRenderer::RenderMeshes(const XMFLOAT3& eye, const CulledCollection& culle mesh->UpdateRenderableInstances(k, threadID); - GetDevice()->BindVertexBuffer((mesh->streamoutBuffers[VPROP_POS].IsValid() ? &mesh->streamoutBuffers[VPROP_POS] : &mesh->vertexBuffers[VPROP_POS]), 0, sizeof(Vertex), threadID); - GetDevice()->BindVertexBuffer((mesh->streamoutBuffers[VPROP_NOR].IsValid() ? &mesh->streamoutBuffers[VPROP_NOR] : &mesh->vertexBuffers[VPROP_NOR]), 0, sizeof(Vertex), threadID); - GetDevice()->BindVertexBuffer((mesh->streamoutBuffers[VPROP_TEX].IsValid() ? &mesh->streamoutBuffers[VPROP_TEX] : &mesh->vertexBuffers[VPROP_TEX]), 0, sizeof(Vertex), threadID); - GetDevice()->BindVertexBuffer((mesh->streamoutBuffers[VPROP_PRE].IsValid() ? &mesh->streamoutBuffers[VPROP_PRE] : &mesh->vertexBuffers[VPROP_PRE]), 0, sizeof(Vertex), threadID); + GetDevice()->BindVertexBuffer((mesh->streamoutBuffers[VPROP_POS].IsValid() ? &mesh->streamoutBuffers[VPROP_POS] : &mesh->vertexBuffers[VPROP_POS]), VPROP_POS, sizeof(Vertex), threadID); + GetDevice()->BindVertexBuffer((mesh->streamoutBuffers[VPROP_NOR].IsValid() ? &mesh->streamoutBuffers[VPROP_NOR] : &mesh->vertexBuffers[VPROP_NOR]), VPROP_NOR, sizeof(Vertex), threadID); + GetDevice()->BindVertexBuffer((mesh->streamoutBuffers[VPROP_TEX].IsValid() ? &mesh->streamoutBuffers[VPROP_TEX] : &mesh->vertexBuffers[VPROP_TEX]), VPROP_TEX, sizeof(Vertex), threadID); + GetDevice()->BindVertexBuffer((mesh->streamoutBuffers[VPROP_PRE].IsValid() ? &mesh->streamoutBuffers[VPROP_PRE] : &mesh->vertexBuffers[VPROP_PRE]), VPROP_PRE, sizeof(Vertex), threadID); GetDevice()->BindVertexBuffer(&mesh->instanceBuffer, 1, sizeof(Instance), threadID); for (MeshSubset& subset : mesh->subsets) @@ -5012,7 +5012,7 @@ void wiRenderer::RayIntersectMeshes(const RAY& ray, const CulledList& culledObje Vertex v; if (object->isArmatureDeformed() && !object->mesh->armature->boneCollection.empty()) { - v = TransformVertex(mesh, i, objectMat_Inverse); + v = TransformVertex(mesh, (int)i, objectMat_Inverse); _vertices[i] = XMLoadFloat4(&v.pos); _materialIndices[i] = (int)v.tex.z; } @@ -5199,11 +5199,19 @@ void wiRenderer::SynchronizeWithPhysicsEngine(float dt) int gvg = m->goalVG; if (gvg >= 0) { int j = 0; - for (map::iterator it = m->vertexGroups[gvg].vertices.begin(); it != m->vertexGroups[gvg].vertices.end(); ++it) { + for (map::iterator it = m->vertexGroups[gvg].vertices.begin(); it != m->vertexGroups[gvg].vertices.end(); ++it) + { int vi = (*it).first; - Vertex tvert = m->vertices_Complete[vi]; + Vertex tvert; if (m->hasArmature()) + { tvert = TransformVertex(m, vi); + } + else + { + tvert.pos = m->vertices[VPROP_POS][vi]; + tvert.nor = m->vertices[VPROP_NOR][vi]; + } m->goalPositions[j] = XMFLOAT3(tvert.pos.x, tvert.pos.y, tvert.pos.z); m->goalNormals[j] = XMFLOAT3(tvert.nor.x, tvert.nor.y, tvert.nor.z); ++j;