Commit e903f2ca authored by lukeph's avatar lukeph

-Made drivers update vertex and index VBOs independently. Massive speed up for...

-Made drivers update vertex and index VBOs independently. Massive speed up for terrain nodes. Interface isn’t so clean yet, but will be when vertex and index buffers are separated.

-fixed a rendering state bug, in openGL and directx drivers, while changing from 3d to 2d rendering.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@1403 dfc29bdd-3216-0410-991c-e03cc46cb475
parent c661079e
...@@ -18,7 +18,7 @@ namespace scene ...@@ -18,7 +18,7 @@ namespace scene
{ {
public: public:
//! Default constructor for empty meshbuffer //! Default constructor for empty meshbuffer
CMeshBuffer():ChangedID(1),MappingHint(EHM_NEVER) // everything's default constructed CMeshBuffer():ChangedID_Vertex(1),ChangedID_Index(1),MappingHint(EHM_NEVER) // everything's default constructed
{ {
#ifdef _DEBUG #ifdef _DEBUG
setDebugName("SMeshBuffer"); setDebugName("SMeshBuffer");
...@@ -223,12 +223,24 @@ namespace scene ...@@ -223,12 +223,24 @@ namespace scene
} }
//! flags the mesh as changed, reloads hardware buffers //! flags the mesh as changed, reloads hardware buffers
virtual void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) {ChangedID++;} virtual void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX)
{
virtual const u32 getChangedID() const {return ChangedID;} if (Buffer==EBT_VERTEX_AND_INDEX ||Buffer==EBT_VERTEX)
ChangedID_Vertex++;
else if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX)
u32 ChangedID; ChangedID_Index++;
}
//! Get the currently used ID for identification of changes.
/** This shouldn't be used for anything outside the VideoDriver. */
virtual const u32 getChangedID_Vertex() const {return ChangedID_Vertex;}
//! Get the currently used ID for identification of changes.
/** This shouldn't be used for anything outside the VideoDriver. */
virtual const u32 getChangedID_Index() const {return ChangedID_Index;}
u32 ChangedID_Vertex;
u32 ChangedID_Index;
//! hardware mapping hint //! hardware mapping hint
E_HARDWARE_MAPPING MappingHint; E_HARDWARE_MAPPING MappingHint;
......
...@@ -154,9 +154,17 @@ namespace scene ...@@ -154,9 +154,17 @@ namespace scene
virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) = 0; virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) = 0;
//! flags the meshbuffer as changed, reloads hardware buffers //! flags the meshbuffer as changed, reloads hardware buffers
virtual void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) = 0; virtual void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) = 0;
virtual const u32 getChangedID() const = 0; //to be spit into vertex and index buffers:
//! Get the currently used ID for identification of changes.
/** This shouldn't be used for anything outside the VideoDriver. */
virtual const u32 getChangedID_Vertex() const = 0;
//! Get the currently used ID for identification of changes.
/** This shouldn't be used for anything outside the VideoDriver. */
virtual const u32 getChangedID_Index() const = 0;
u32 HardwareHint; u32 HardwareHint;
}; };
......
...@@ -16,7 +16,7 @@ namespace scene ...@@ -16,7 +16,7 @@ namespace scene
struct SSharedMeshBuffer : public IMeshBuffer struct SSharedMeshBuffer : public IMeshBuffer
{ {
//! constructor //! constructor
SSharedMeshBuffer() : IMeshBuffer(), ChangedID(1), MappingHint(Never), Vertices(0) SSharedMeshBuffer() : IMeshBuffer(), ChangedID_Vertex(1), ChangedID_Index(1), MappingHint(Never), Vertices(0)
{ {
#ifdef _DEBUG #ifdef _DEBUG
setDebugName("SSharedMeshBuffer"); setDebugName("SSharedMeshBuffer");
...@@ -140,13 +140,30 @@ namespace scene ...@@ -140,13 +140,30 @@ namespace scene
{ {
MappingHint=NewMappingHint; MappingHint=NewMappingHint;
} }
//! flags the mesh as changed, reloads hardware buffers
virtual void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) {ChangedID++;} //! flags the mesh as changed, reloads hardware buffers
virtual void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX)
//! Get the currently used ID for identification of changes. {
/** This shouldn't be used for anything outside the VideoDriver. */ if (E_BUFFER_TYPE Buffer==EBT_VERTEX_AND_INDEX || E_BUFFER_TYPE Buffer==EBT_VERTEX)
virtual const u32 getChangedID() const {return ChangedID;} ChangedID_Vertex++;
else if (E_BUFFER_TYPE Buffer==EBT_VERTEX_AND_INDEX || E_BUFFER_TYPE Buffer==EBT_INDEX)
ChangedID_Index++;
}
//! Get the currently used ID for identification of changes.
/** This shouldn't be used for anything outside the VideoDriver. */
virtual const u32 getChangedID_Vertex() const {return ChangedID_Vertex;}
//! Get the currently used ID for identification of changes.
/** This shouldn't be used for anything outside the VideoDriver. */
virtual const u32 getChangedID_Index() const {return ChangedID_Index;}
//! ID used for hardware buffer management
u32 ChangedID_Vertex;
//! ID used for hardware buffer management
u32 ChangedID_Index;
//! Material of this meshBuffer //! Material of this meshBuffer
video::SMaterial Material; video::SMaterial Material;
...@@ -158,8 +175,7 @@ namespace scene ...@@ -158,8 +175,7 @@ namespace scene
core::aabbox3df BoundingBox; core::aabbox3df BoundingBox;
//! hardware mapping hint //! hardware mapping hint
E_HARDWARE_MAPPING MappingHint; E_HARDWARE_MAPPING MappingHint;
//! ID used for hardware buffer management
u32 ChangedID;
}; };
......
...@@ -19,7 +19,7 @@ namespace scene ...@@ -19,7 +19,7 @@ namespace scene
struct SSkinMeshBuffer : public IMeshBuffer struct SSkinMeshBuffer : public IMeshBuffer
{ {
//! Default constructor //! Default constructor
SSkinMeshBuffer(video::E_VERTEX_TYPE vt=video::EVT_STANDARD) : ChangedID(1),MappingHint(EHM_NEVER),VertexType(vt) SSkinMeshBuffer(video::E_VERTEX_TYPE vt=video::EVT_STANDARD) : ChangedID_Vertex(1),ChangedID_Index(1),MappingHint(EHM_NEVER),VertexType(vt)
{ {
#ifdef _DEBUG #ifdef _DEBUG
setDebugName("SSkinMeshBuffer"); setDebugName("SSkinMeshBuffer");
...@@ -305,14 +305,21 @@ struct SSkinMeshBuffer : public IMeshBuffer ...@@ -305,14 +305,21 @@ struct SSkinMeshBuffer : public IMeshBuffer
MappingHint=NewMappingHint; MappingHint=NewMappingHint;
} }
//! flags the mesh as changed, reloads hardware buffers
virtual void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX)
{
if (Buffer==EBT_VERTEX_AND_INDEX ||Buffer==EBT_VERTEX)
ChangedID_Vertex++;
else if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX)
ChangedID_Index++;
}
virtual const u32 getChangedID_Vertex() const {return ChangedID_Vertex;}
virtual const u32 getChangedID_Index() const {return ChangedID_Index;}
u32 ChangedID_Vertex;
u32 ChangedID_Index;
//! flags the mesh as changed, reloads hardware buffers
virtual void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) {ChangedID++;}
virtual const u32 getChangedID() const {return ChangedID;}
u32 ChangedID;
// hardware mapping hint // hardware mapping hint
E_HARDWARE_MAPPING MappingHint; E_HARDWARE_MAPPING MappingHint;
......
...@@ -1621,8 +1621,8 @@ void CD3D8Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaChan ...@@ -1621,8 +1621,8 @@ void CD3D8Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaChan
// unset last 3d material // unset last 3d material
if (CurrentRenderMode == ERM_3D && if (CurrentRenderMode == ERM_3D &&
Material.MaterialType >= 0 && Material.MaterialType < (s32)MaterialRenderers.size()) Material.MaterialType >= 0 && LastMaterial.MaterialType < (s32)MaterialRenderers.size())
MaterialRenderers[Material.MaterialType].Renderer->OnUnsetMaterial(); MaterialRenderers[LastMaterial.MaterialType].Renderer->OnUnsetMaterial();
} }
if (texture) if (texture)
......
...@@ -208,7 +208,7 @@ bool CD3D9Driver::initDriver(const core::dimension2d<s32>& screenSize, HWND hwnd ...@@ -208,7 +208,7 @@ bool CD3D9Driver::initDriver(const core::dimension2d<s32>& screenSize, HWND hwnd
{ {
case 0x1002 : vendorName = "ATI Technologies Inc."; break; case 0x1002 : vendorName = "ATI Technologies Inc."; break;
case 0x10DE : vendorName = "NVIDIA Corporation"; break; case 0x10DE : vendorName = "NVIDIA Corporation"; break;
case 0x102B : vendorName = "Matrox Electronic Systems Ltd."; break; case 0x102B : vendorName = "Matrox Electronic Systems Ltd."; break;
case 0x121A : vendorName = "3dfx Interactive Inc"; break; case 0x121A : vendorName = "3dfx Interactive Inc"; break;
case 0x5333 : vendorName = "S3 Graphics Co., Ltd."; break; case 0x5333 : vendorName = "S3 Graphics Co., Ltd."; break;
case 0x8086 : vendorName = "Intel Corporation"; break; case 0x8086 : vendorName = "Intel Corporation"; break;
...@@ -842,28 +842,28 @@ bool CD3D9Driver::updateVertexHardwareBuffer(SHWBufferLink_d3d9 *HWBuffer) ...@@ -842,28 +842,28 @@ bool CD3D9Driver::updateVertexHardwareBuffer(SHWBufferLink_d3d9 *HWBuffer)
// Get the vertex sizes and cvf // Get the vertex sizes and cvf
switch (vType) switch (vType)
{ {
case EVT_STANDARD: case EVT_STANDARD:
vertexSize = sizeof(S3DVertex); vertexSize = sizeof(S3DVertex);
FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE | D3DFVF_TEX1; FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE | D3DFVF_TEX1;
break; break;
case EVT_2TCOORDS: case EVT_2TCOORDS:
vertexSize = sizeof(S3DVertex2TCoords); vertexSize = sizeof(S3DVertex2TCoords);
FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE | D3DFVF_TEX2; FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE | D3DFVF_TEX2;
break; break;
case EVT_TANGENTS: case EVT_TANGENTS:
vertexSize = sizeof(S3DVertexTangents); vertexSize = sizeof(S3DVertexTangents);
FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE | D3DFVF_TEX3; FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE | D3DFVF_TEX3;
break; break;
default: default:
return false; return false;
} }
flags = D3DUSAGE_WRITEONLY; // SIO2: Default to D3DUSAGE_WRITEONLY flags = D3DUSAGE_WRITEONLY; // SIO2: Default to D3DUSAGE_WRITEONLY
if(HWBuffer->Mapped != scene::EHM_STATIC) if(HWBuffer->Mapped != scene::EHM_STATIC)
flags |= D3DUSAGE_DYNAMIC; flags |= D3DUSAGE_DYNAMIC;
pID3DDevice->CreateVertexBuffer(vertexCount * vertexSize, flags, FVF, D3DPOOL_DEFAULT, &HWBuffer->vertexBuffer, NULL); pID3DDevice->CreateVertexBuffer(vertexCount * vertexSize, flags, FVF, D3DPOOL_DEFAULT, &HWBuffer->vertexBuffer, NULL);
if(!HWBuffer->vertexBuffer) if(!HWBuffer->vertexBuffer)
return false; return false;
...@@ -878,7 +878,7 @@ bool CD3D9Driver::updateVertexHardwareBuffer(SHWBufferLink_d3d9 *HWBuffer) ...@@ -878,7 +878,7 @@ bool CD3D9Driver::updateVertexHardwareBuffer(SHWBufferLink_d3d9 *HWBuffer)
HWBuffer->vertexBufferSize = vertexCount * vertexSize; HWBuffer->vertexBufferSize = vertexCount * vertexSize;
} }
else else
{ {
HWBuffer->vertexBuffer->Lock(0, vertexCount * vertexSize, (void**)&pLockedBuffer, D3DLOCK_DISCARD); HWBuffer->vertexBuffer->Lock(0, vertexCount * vertexSize, (void**)&pLockedBuffer, D3DLOCK_DISCARD);
memcpy(pLockedBuffer, vertices, vertexCount * vertexSize); memcpy(pLockedBuffer, vertices, vertexCount * vertexSize);
HWBuffer->vertexBuffer->Unlock(); HWBuffer->vertexBuffer->Unlock();
...@@ -944,17 +944,30 @@ bool CD3D9Driver::updateHardwareBuffer(SHWBufferLink *HWBuffer) ...@@ -944,17 +944,30 @@ bool CD3D9Driver::updateHardwareBuffer(SHWBufferLink *HWBuffer)
if (!HWBuffer) if (!HWBuffer)
return false; return false;
if (HWBuffer->ChangedID != HWBuffer->MeshBuffer->getChangedID() if (HWBuffer->ChangedID_Vertex != HWBuffer->MeshBuffer->getChangedID_Vertex()
|| !((SHWBufferLink_d3d9*)HWBuffer)->vertexBuffer || !((SHWBufferLink_d3d9*)HWBuffer)->vertexBuffer)
|| !((SHWBufferLink_d3d9*)HWBuffer)->indexBuffer)
{ {
HWBuffer->ChangedID = HWBuffer->MeshBuffer->getChangedID();
HWBuffer->ChangedID_Vertex = HWBuffer->MeshBuffer->getChangedID_Vertex();
if (!updateVertexHardwareBuffer((SHWBufferLink_d3d9*)HWBuffer)) if (!updateVertexHardwareBuffer((SHWBufferLink_d3d9*)HWBuffer))
return false; return false;
}
if (HWBuffer->ChangedID_Index != HWBuffer->MeshBuffer->getChangedID_Index()
|| !((SHWBufferLink_d3d9*)HWBuffer)->indexBuffer)
{
HWBuffer->ChangedID_Index = HWBuffer->MeshBuffer->getChangedID_Index();
if (!updateIndexHardwareBuffer((SHWBufferLink_d3d9*)HWBuffer)) if (!updateIndexHardwareBuffer((SHWBufferLink_d3d9*)HWBuffer))
return false; return false;
} }
return true; return true;
} }
...@@ -970,7 +983,8 @@ CD3D9Driver::SHWBufferLink *CD3D9Driver::createHardwareBuffer(const scene::IMesh ...@@ -970,7 +983,8 @@ CD3D9Driver::SHWBufferLink *CD3D9Driver::createHardwareBuffer(const scene::IMesh
//add to map //add to map
HWBufferMap.insert(HWBuffer->MeshBuffer, HWBuffer); HWBufferMap.insert(HWBuffer->MeshBuffer, HWBuffer);
HWBuffer->ChangedID=HWBuffer->MeshBuffer->getChangedID(); HWBuffer->ChangedID_Vertex=HWBuffer->MeshBuffer->getChangedID_Vertex();
HWBuffer->ChangedID_Index=HWBuffer->MeshBuffer->getChangedID_Index();
HWBuffer->Mapped=mb->getHardwareMappingHint(); HWBuffer->Mapped=mb->getHardwareMappingHint();
HWBuffer->LastUsed=0; HWBuffer->LastUsed=0;
HWBuffer->vertexBuffer=0; HWBuffer->vertexBuffer=0;
...@@ -1108,7 +1122,7 @@ void CD3D9Driver::drawVertexPrimitiveList(const void* vertices, u32 vertexCount, ...@@ -1108,7 +1122,7 @@ void CD3D9Driver::drawVertexPrimitiveList(const void* vertices, u32 vertexCount,
{ {
pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_LINESTRIP, 0, vertexCount, pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_LINESTRIP, 0, vertexCount,
primitiveCount, indexList, D3DFMT_INDEX16, vertices, stride); primitiveCount, indexList, D3DFMT_INDEX16, vertices, stride);
u16 tmpIndices[] = {0, primitiveCount}; u16 tmpIndices[] = {0, primitiveCount};
pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_LINELIST, 0, vertexCount, pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_LINELIST, 0, vertexCount,
...@@ -1154,7 +1168,7 @@ void CD3D9Driver::drawVertexPrimitiveList(const void* vertices, u32 vertexCount, ...@@ -1154,7 +1168,7 @@ void CD3D9Driver::drawVertexPrimitiveList(const void* vertices, u32 vertexCount,
pID3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, vertexCount, 0, primitiveCount); pID3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, vertexCount, 0, primitiveCount);
} }
else else
{ {
pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST, 0, vertexCount, pID3DDevice->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST, 0, vertexCount,
primitiveCount, indexList, D3DFMT_INDEX16, vertices, stride); primitiveCount, indexList, D3DFMT_INDEX16, vertices, stride);
} }
...@@ -1870,8 +1884,8 @@ void CD3D9Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaChan ...@@ -1870,8 +1884,8 @@ void CD3D9Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaChan
// unset last 3d material // unset last 3d material
if (CurrentRenderMode != ERM_2D) if (CurrentRenderMode != ERM_2D)
{ {
if (static_cast<u32>(Material.MaterialType) < MaterialRenderers.size()) if (static_cast<u32>(LastMaterial.MaterialType) < MaterialRenderers.size())
MaterialRenderers[Material.MaterialType].Renderer->OnUnsetMaterial(); MaterialRenderers[LastMaterial.MaterialType].Renderer->OnUnsetMaterial();
setBasicRenderStates(SMaterial(), SMaterial(), true); setBasicRenderStates(SMaterial(), SMaterial(), true);
// everything that is wrongly set by SMaterial default // everything that is wrongly set by SMaterial default
pID3DDevice->SetRenderState(D3DRS_ZENABLE, FALSE); pID3DDevice->SetRenderState(D3DRS_ZENABLE, FALSE);
......
...@@ -299,7 +299,7 @@ namespace video ...@@ -299,7 +299,7 @@ namespace video
protected: protected:
struct SHWBufferLink struct SHWBufferLink
{ {
SHWBufferLink(const scene::IMeshBuffer *_MeshBuffer):MeshBuffer(_MeshBuffer),ChangedID(0),LastUsed(0),Mapped(scene::EHM_NEVER) SHWBufferLink(const scene::IMeshBuffer *_MeshBuffer):MeshBuffer(_MeshBuffer),ChangedID_Vertex(0),ChangedID_Index(0),LastUsed(0),Mapped(scene::EHM_NEVER)
{ {
if (MeshBuffer) if (MeshBuffer)
MeshBuffer->grab(); MeshBuffer->grab();
...@@ -313,7 +313,8 @@ namespace video ...@@ -313,7 +313,8 @@ namespace video
scene::E_BUFFER_TYPE Contains; scene::E_BUFFER_TYPE Contains;
const scene::IMeshBuffer *MeshBuffer; const scene::IMeshBuffer *MeshBuffer;
u32 ChangedID; u32 ChangedID_Vertex;
u32 ChangedID_Index;
u32 LastUsed; u32 LastUsed;
scene::E_HARDWARE_MAPPING Mapped; scene::E_HARDWARE_MAPPING Mapped;
......
...@@ -713,19 +713,30 @@ bool COpenGLDriver::updateHardwareBuffer(SHWBufferLink *HWBuffer) ...@@ -713,19 +713,30 @@ bool COpenGLDriver::updateHardwareBuffer(SHWBufferLink *HWBuffer)
{ {
if (!HWBuffer) if (!HWBuffer)
return false; return false;
if (HWBuffer->ChangedID_Vertex != HWBuffer->MeshBuffer->getChangedID_Vertex()
|| !((SHWBufferLink_opengl*)HWBuffer)->vbo_verticesID)
{
HWBuffer->ChangedID_Vertex = HWBuffer->MeshBuffer->getChangedID_Vertex();
if (!updateVertexHardwareBuffer((SHWBufferLink_opengl*)HWBuffer))
return false;
}
if (HWBuffer->ChangedID_Index != HWBuffer->MeshBuffer->getChangedID_Index()
|| !((SHWBufferLink_opengl*)HWBuffer)->vbo_indicesID)
{
HWBuffer->ChangedID_Index = HWBuffer->MeshBuffer->getChangedID_Index();
if (!updateIndexHardwareBuffer((SHWBufferLink_opengl*)HWBuffer))
return false;
}
if (HWBuffer->ChangedID != HWBuffer->MeshBuffer->getChangedID()
|| !((SHWBufferLink_opengl*)HWBuffer)->vbo_indicesID
|| !((SHWBufferLink_opengl*)HWBuffer)->vbo_verticesID)
{
HWBuffer->ChangedID = HWBuffer->MeshBuffer->getChangedID();
if (!updateVertexHardwareBuffer((SHWBufferLink_opengl*)HWBuffer))
return false;
if (!updateIndexHardwareBuffer((SHWBufferLink_opengl*)HWBuffer))
return false;
}
return true; return true;
} }
...@@ -743,7 +754,8 @@ COpenGLDriver::SHWBufferLink *COpenGLDriver::createHardwareBuffer(const scene::I ...@@ -743,7 +754,8 @@ COpenGLDriver::SHWBufferLink *COpenGLDriver::createHardwareBuffer(const scene::I
//add to map //add to map
HWBufferMap.insert(HWBuffer->MeshBuffer, HWBuffer); HWBufferMap.insert(HWBuffer->MeshBuffer, HWBuffer);
HWBuffer->ChangedID=HWBuffer->MeshBuffer->getChangedID(); HWBuffer->ChangedID_Vertex=HWBuffer->MeshBuffer->getChangedID_Vertex();
HWBuffer->ChangedID_Index=HWBuffer->MeshBuffer->getChangedID_Index();
HWBuffer->Mapped=mb->getHardwareMappingHint(); HWBuffer->Mapped=mb->getHardwareMappingHint();
HWBuffer->LastUsed=0; HWBuffer->LastUsed=0;
HWBuffer->vbo_verticesID=0; HWBuffer->vbo_verticesID=0;
...@@ -1880,8 +1892,8 @@ void COpenGLDriver::setRenderStates2DMode(bool alpha, bool texture, bool alphaCh ...@@ -1880,8 +1892,8 @@ void COpenGLDriver::setRenderStates2DMode(bool alpha, bool texture, bool alphaCh
// unset last 3d material // unset last 3d material
if (CurrentRenderMode == ERM_3D) if (CurrentRenderMode == ERM_3D)
{ {
if (static_cast<u32>(Material.MaterialType) < MaterialRenderers.size()) if (static_cast<u32>(LastMaterial.MaterialType) < MaterialRenderers.size())
MaterialRenderers[Material.MaterialType].Renderer->OnUnsetMaterial(); MaterialRenderers[LastMaterial.MaterialType].Renderer->OnUnsetMaterial();
SMaterial mat; SMaterial mat;
mat.ZBuffer=0; mat.ZBuffer=0;
mat.Lighting=false; mat.Lighting=false;
......
...@@ -458,7 +458,7 @@ void CSkinnedMesh::skinMesh() ...@@ -458,7 +458,7 @@ void CSkinnedMesh::skinMesh()
SkinJoint(RootJoints[i], 0); SkinJoint(RootJoints[i], 0);
for (i=0; i<SkinningBuffers->size(); ++i) for (i=0; i<SkinningBuffers->size(); ++i)
(*SkinningBuffers)[i]->setDirty(); (*SkinningBuffers)[i]->setDirty(EBT_VERTEX);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment