Added ResourceRef (Automatic resource reference)

Former-commit-id: 97a0b2732f4dc443b8e1676e68b33b1b53ddf4fb
This commit is contained in:
Lynix
2013-03-15 03:09:58 +01:00
parent 4ee6ca05ed
commit 6c2fb1eb89
29 changed files with 344 additions and 299 deletions

View File

@@ -28,8 +28,6 @@ m_startIndex(startIndex)
throw std::runtime_error("Constructor failed");
}
#endif
m_buffer->AddResourceReference();
}
}
@@ -39,7 +37,6 @@ m_indexCount(length),
m_startIndex(0)
{
m_buffer = new NzBuffer(nzBufferType_Index, length, (largeIndices) ? 4 : 2, storage, usage);
m_buffer->AddResourceReference();
m_buffer->SetPersistent(false);
}
@@ -57,23 +54,15 @@ m_startIndex(indexBuffer.m_startIndex)
NzBuffer* buffer = indexBuffer.m_buffer;
m_buffer = new NzBuffer(nzBufferType_Index, buffer->GetLength(), buffer->GetSize(), buffer->GetStorage(), buffer->GetUsage());
m_buffer->AddResourceReference();
m_buffer->SetPersistent(false);
m_buffer->CopyContent(*indexBuffer.m_buffer);
}
else
{
m_buffer = indexBuffer.m_buffer;
m_buffer->AddResourceReference();
}
}
}
NzIndexBuffer::~NzIndexBuffer()
{
if (m_buffer)
m_buffer->RemoveResourceReference();
}
NzIndexBuffer::~NzIndexBuffer() = default;
bool NzIndexBuffer::Fill(const void* data, unsigned int offset, unsigned int length)
{

View File

@@ -136,7 +136,7 @@ struct NzSkeletalMeshImpl
std::vector<NzWeight> weights;
NzCubef aabb;
nzUInt8* bindPoseBuffer;
const NzIndexBuffer* indexBuffer = nullptr;
NzIndexBufferConstRef indexBuffer;
unsigned int vertexCount;
};
@@ -401,11 +401,5 @@ void NzSkeletalMesh::Skin(NzMeshVertex* outputBuffer, const NzSkeleton* skeleton
void NzSkeletalMesh::SetIndexBuffer(const NzIndexBuffer* indexBuffer)
{
if (m_impl->indexBuffer)
m_impl->indexBuffer->RemoveResourceReference();
if (indexBuffer)
indexBuffer->AddResourceReference();
m_impl->indexBuffer = indexBuffer;
}

View File

@@ -29,9 +29,6 @@ m_vertexCount(vertexCount)
throw std::invalid_argument("Invalid vertex declaration");
}
#endif
m_buffer->AddResourceReference();
m_vertexDeclaration->AddResourceReference();
}
NzVertexBuffer::NzVertexBuffer(const NzVertexDeclaration* vertexDeclaration, unsigned int length, nzBufferStorage storage, nzBufferUsage usage) :
@@ -49,9 +46,7 @@ m_vertexCount(length)
#endif
m_buffer = new NzBuffer(nzBufferType_Vertex, length, vertexDeclaration->GetStride(nzElementStream_VertexData), storage, usage);
m_buffer->AddResourceReference();
m_buffer->SetPersistent(false);
m_vertexDeclaration->AddResourceReference();
}
NzVertexBuffer::NzVertexBuffer(const NzVertexBuffer& vertexBuffer) :
@@ -66,24 +61,14 @@ m_vertexCount(vertexBuffer.m_vertexCount)
NzBuffer* buffer = vertexBuffer.m_buffer;
m_buffer = new NzBuffer(nzBufferType_Vertex, buffer->GetLength(), buffer->GetSize(), buffer->GetStorage(), buffer->GetUsage());
m_buffer->AddResourceReference();
m_buffer->SetPersistent(false);
m_buffer->CopyContent(*vertexBuffer.m_buffer);
}
else
{
m_buffer = vertexBuffer.m_buffer;
m_buffer->AddResourceReference();
}
m_vertexDeclaration->AddResourceReference();
}
NzVertexBuffer::~NzVertexBuffer()
{
m_buffer->RemoveResourceReference();
m_vertexDeclaration->RemoveResourceReference();
}
NzVertexBuffer::~NzVertexBuffer() = default;
bool NzVertexBuffer::Fill(const void* data, unsigned int offset, unsigned int length)
{

View File

@@ -52,7 +52,7 @@ namespace
}
protected:
NzSubMesh* m_subMesh;
NzSubMeshRef m_subMesh;
};
class SkeletalMeshVertexMapper : public SubMeshVertexMapper
@@ -63,13 +63,10 @@ namespace
m_mesh(subMesh)
{
m_vertices = reinterpret_cast<NzMeshVertex*>(m_mesh->GetBindPoseBuffer());
m_mesh->AddResourceReference();
}
virtual ~SkeletalMeshVertexMapper() noexcept
{
m_mesh->RemoveResourceReference();
}
NzVector3f GetNormal(unsigned int i) const