Utility/Mesh: Add index and vertex buffer flags in MeshParams
This commit is contained in:
parent
9c97ec45c6
commit
b47b89ed8b
|
|
@ -29,6 +29,8 @@ namespace Nz
|
||||||
{
|
{
|
||||||
MeshParams();
|
MeshParams();
|
||||||
|
|
||||||
|
BufferUsageFlags indexBufferFlags = 0; ///< Buffer usage flags used to build the index buffers
|
||||||
|
BufferUsageFlags vertexBufferFlags = 0; ///< Buffer usage flags used to build the vertex buffers
|
||||||
Matrix4f matrix = Matrix4f::Identity(); ///< A matrix which will transform every vertex position
|
Matrix4f matrix = Matrix4f::Identity(); ///< A matrix which will transform every vertex position
|
||||||
DataStorage storage = DataStorage_Hardware; ///< The place where the buffers will be allocated
|
DataStorage storage = DataStorage_Hardware; ///< The place where the buffers will be allocated
|
||||||
Vector2f texCoordOffset = {0.f, 0.f}; ///< Offset to apply on the texture coordinates (not scaled)
|
Vector2f texCoordOffset = {0.f, 0.f}; ///< Offset to apply on the texture coordinates (not scaled)
|
||||||
|
|
|
||||||
|
|
@ -186,7 +186,7 @@ bool Load(Mesh* mesh, Stream& stream, const MeshParams& parameters)
|
||||||
// Index buffer
|
// Index buffer
|
||||||
bool largeIndices = (vertexCount > std::numeric_limits<UInt16>::max());
|
bool largeIndices = (vertexCount > std::numeric_limits<UInt16>::max());
|
||||||
|
|
||||||
IndexBufferRef indexBuffer = IndexBuffer::New(largeIndices, indexCount, parameters.storage, 0);
|
IndexBufferRef indexBuffer = IndexBuffer::New(largeIndices, indexCount, parameters.storage, parameters.indexBufferFlags);
|
||||||
|
|
||||||
IndexMapper indexMapper(indexBuffer, BufferAccess_DiscardAndWrite);
|
IndexMapper indexMapper(indexBuffer, BufferAccess_DiscardAndWrite);
|
||||||
IndexIterator index = indexMapper.begin();
|
IndexIterator index = indexMapper.begin();
|
||||||
|
|
@ -210,7 +210,7 @@ bool Load(Mesh* mesh, Stream& stream, const MeshParams& parameters)
|
||||||
if (normalTangentMatrix.HasScale())
|
if (normalTangentMatrix.HasScale())
|
||||||
normalTangentMatrix.ApplyScale(1.f / normalTangentMatrix.GetScale());
|
normalTangentMatrix.ApplyScale(1.f / normalTangentMatrix.GetScale());
|
||||||
|
|
||||||
VertexBufferRef vertexBuffer = VertexBuffer::New(VertexDeclaration::Get(VertexLayout_XYZ_Normal_UV_Tangent), vertexCount, parameters.storage, 0);
|
VertexBufferRef vertexBuffer = VertexBuffer::New(VertexDeclaration::Get(VertexLayout_XYZ_Normal_UV_Tangent), vertexCount, parameters.storage, parameters.vertexBufferFlags);
|
||||||
BufferMapper<VertexBuffer> vertexMapper(vertexBuffer, BufferAccess_WriteOnly);
|
BufferMapper<VertexBuffer> vertexMapper(vertexBuffer, BufferAccess_WriteOnly);
|
||||||
|
|
||||||
MeshVertex* vertex = static_cast<MeshVertex*>(vertexMapper.GetPointer());
|
MeshVertex* vertex = static_cast<MeshVertex*>(vertexMapper.GetPointer());
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ namespace Nz
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IndexBufferRef indexBuffer = IndexBuffer::New(false, header.num_tris*3, parameters.storage, 0);
|
IndexBufferRef indexBuffer = IndexBuffer::New(false, header.num_tris*3, parameters.storage, parameters.indexBufferFlags);
|
||||||
|
|
||||||
// Extract triangles data
|
// Extract triangles data
|
||||||
std::vector<MD2_Triangle> triangles(header.num_tris);
|
std::vector<MD2_Triangle> triangles(header.num_tris);
|
||||||
|
|
@ -156,7 +156,7 @@ namespace Nz
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
VertexBufferRef vertexBuffer = VertexBuffer::New(VertexDeclaration::Get(VertexLayout_XYZ_Normal_UV_Tangent), header.num_vertices, parameters.storage, 0);
|
VertexBufferRef vertexBuffer = VertexBuffer::New(VertexDeclaration::Get(VertexLayout_XYZ_Normal_UV_Tangent), header.num_vertices, parameters.storage, parameters.vertexBufferFlags);
|
||||||
StaticMeshRef subMesh = StaticMesh::New(mesh);
|
StaticMeshRef subMesh = StaticMesh::New(mesh);
|
||||||
if (!subMesh->Create(vertexBuffer))
|
if (!subMesh->Create(vertexBuffer))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -94,8 +94,8 @@ namespace Nz
|
||||||
|
|
||||||
bool largeIndices = (vertexCount > std::numeric_limits<UInt16>::max());
|
bool largeIndices = (vertexCount > std::numeric_limits<UInt16>::max());
|
||||||
|
|
||||||
IndexBufferRef indexBuffer = IndexBuffer::New(largeIndices, UInt32(indexCount), parameters.storage, 0);
|
IndexBufferRef indexBuffer = IndexBuffer::New(largeIndices, UInt32(indexCount), parameters.storage, parameters.indexBufferFlags);
|
||||||
VertexBufferRef vertexBuffer = VertexBuffer::New(VertexDeclaration::Get(VertexLayout_XYZ_Normal_UV_Tangent_Skinning), UInt32(vertexCount), parameters.storage, 0);
|
VertexBufferRef vertexBuffer = VertexBuffer::New(VertexDeclaration::Get(VertexLayout_XYZ_Normal_UV_Tangent_Skinning), UInt32(vertexCount), parameters.storage, parameters.vertexBufferFlags | BufferUsage_Dynamic);
|
||||||
|
|
||||||
// Index buffer
|
// Index buffer
|
||||||
IndexMapper indexMapper(indexBuffer, BufferAccess_DiscardAndWrite);
|
IndexMapper indexMapper(indexBuffer, BufferAccess_DiscardAndWrite);
|
||||||
|
|
@ -239,7 +239,7 @@ namespace Nz
|
||||||
// Index buffer
|
// Index buffer
|
||||||
bool largeIndices = (vertexCount > std::numeric_limits<UInt16>::max());
|
bool largeIndices = (vertexCount > std::numeric_limits<UInt16>::max());
|
||||||
|
|
||||||
IndexBufferRef indexBuffer = IndexBuffer::New(largeIndices, UInt32(indexCount), parameters.storage, 0);
|
IndexBufferRef indexBuffer = IndexBuffer::New(largeIndices, UInt32(indexCount), parameters.storage, parameters.indexBufferFlags);
|
||||||
|
|
||||||
IndexMapper indexMapper(indexBuffer, BufferAccess_DiscardAndWrite);
|
IndexMapper indexMapper(indexBuffer, BufferAccess_DiscardAndWrite);
|
||||||
IndexIterator index = indexMapper.begin();
|
IndexIterator index = indexMapper.begin();
|
||||||
|
|
@ -254,7 +254,7 @@ namespace Nz
|
||||||
indexMapper.Unmap();
|
indexMapper.Unmap();
|
||||||
|
|
||||||
// Vertex buffer
|
// Vertex buffer
|
||||||
VertexBufferRef vertexBuffer = VertexBuffer::New(VertexDeclaration::Get(VertexLayout_XYZ_Normal_UV_Tangent), UInt32(vertexCount), parameters.storage, 0);
|
VertexBufferRef vertexBuffer = VertexBuffer::New(VertexDeclaration::Get(VertexLayout_XYZ_Normal_UV_Tangent), UInt32(vertexCount), parameters.storage, parameters.vertexBufferFlags);
|
||||||
BufferMapper<VertexBuffer> vertexMapper(vertexBuffer, BufferAccess_WriteOnly);
|
BufferMapper<VertexBuffer> vertexMapper(vertexBuffer, BufferAccess_WriteOnly);
|
||||||
|
|
||||||
MeshVertex* vertices = static_cast<MeshVertex*>(vertexMapper.GetPointer());
|
MeshVertex* vertices = static_cast<MeshVertex*>(vertexMapper.GetPointer());
|
||||||
|
|
|
||||||
|
|
@ -231,8 +231,8 @@ namespace Nz
|
||||||
}
|
}
|
||||||
|
|
||||||
// Création des buffers
|
// Création des buffers
|
||||||
IndexBufferRef indexBuffer = IndexBuffer::New(vertexCount > std::numeric_limits<UInt16>::max(), UInt32(indices.size()), parameters.storage, 0);
|
IndexBufferRef indexBuffer = IndexBuffer::New(vertexCount > std::numeric_limits<UInt16>::max(), UInt32(indices.size()), parameters.storage, parameters.indexBufferFlags);
|
||||||
VertexBufferRef vertexBuffer = VertexBuffer::New(VertexDeclaration::Get(VertexLayout_XYZ_Normal_UV_Tangent), UInt32(vertexCount), parameters.storage, 0);
|
VertexBufferRef vertexBuffer = VertexBuffer::New(VertexDeclaration::Get(VertexLayout_XYZ_Normal_UV_Tangent), UInt32(vertexCount), parameters.storage, parameters.vertexBufferFlags);
|
||||||
|
|
||||||
// Remplissage des indices
|
// Remplissage des indices
|
||||||
IndexMapper indexMapper(indexBuffer, BufferAccess_WriteOnly);
|
IndexMapper indexMapper(indexBuffer, BufferAccess_WriteOnly);
|
||||||
|
|
|
||||||
|
|
@ -126,8 +126,8 @@ namespace Nz
|
||||||
unsigned int vertexCount;
|
unsigned int vertexCount;
|
||||||
ComputeBoxIndexVertexCount(primitive.box.subdivision, &indexCount, &vertexCount);
|
ComputeBoxIndexVertexCount(primitive.box.subdivision, &indexCount, &vertexCount);
|
||||||
|
|
||||||
indexBuffer = IndexBuffer::New(vertexCount > std::numeric_limits<UInt16>::max(), indexCount, params.storage, 0);
|
indexBuffer = IndexBuffer::New(vertexCount > std::numeric_limits<UInt16>::max(), indexCount, params.storage, params.indexBufferFlags);
|
||||||
vertexBuffer = VertexBuffer::New(declaration, vertexCount, params.storage, 0);
|
vertexBuffer = VertexBuffer::New(declaration, vertexCount, params.storage, params.vertexBufferFlags);
|
||||||
|
|
||||||
VertexMapper vertexMapper(vertexBuffer, BufferAccess_WriteOnly);
|
VertexMapper vertexMapper(vertexBuffer, BufferAccess_WriteOnly);
|
||||||
|
|
||||||
|
|
@ -148,8 +148,8 @@ namespace Nz
|
||||||
unsigned int vertexCount;
|
unsigned int vertexCount;
|
||||||
ComputeConeIndexVertexCount(primitive.cone.subdivision, &indexCount, &vertexCount);
|
ComputeConeIndexVertexCount(primitive.cone.subdivision, &indexCount, &vertexCount);
|
||||||
|
|
||||||
indexBuffer = IndexBuffer::New(vertexCount > std::numeric_limits<UInt16>::max(), indexCount, params.storage, 0);
|
indexBuffer = IndexBuffer::New(vertexCount > std::numeric_limits<UInt16>::max(), indexCount, params.storage, params.indexBufferFlags);
|
||||||
vertexBuffer = VertexBuffer::New(declaration, vertexCount, params.storage, 0);
|
vertexBuffer = VertexBuffer::New(declaration, vertexCount, params.storage, params.vertexBufferFlags);
|
||||||
|
|
||||||
VertexMapper vertexMapper(vertexBuffer, BufferAccess_WriteOnly);
|
VertexMapper vertexMapper(vertexBuffer, BufferAccess_WriteOnly);
|
||||||
|
|
||||||
|
|
@ -170,8 +170,8 @@ namespace Nz
|
||||||
unsigned int vertexCount;
|
unsigned int vertexCount;
|
||||||
ComputePlaneIndexVertexCount(primitive.plane.subdivision, &indexCount, &vertexCount);
|
ComputePlaneIndexVertexCount(primitive.plane.subdivision, &indexCount, &vertexCount);
|
||||||
|
|
||||||
indexBuffer = IndexBuffer::New(vertexCount > std::numeric_limits<UInt16>::max(), indexCount, params.storage, 0);
|
indexBuffer = IndexBuffer::New(vertexCount > std::numeric_limits<UInt16>::max(), indexCount, params.storage, params.indexBufferFlags);
|
||||||
vertexBuffer = VertexBuffer::New(declaration, vertexCount, params.storage, 0);
|
vertexBuffer = VertexBuffer::New(declaration, vertexCount, params.storage, params.vertexBufferFlags);
|
||||||
|
|
||||||
VertexMapper vertexMapper(vertexBuffer, BufferAccess_WriteOnly);
|
VertexMapper vertexMapper(vertexBuffer, BufferAccess_WriteOnly);
|
||||||
|
|
||||||
|
|
@ -196,8 +196,8 @@ namespace Nz
|
||||||
unsigned int vertexCount;
|
unsigned int vertexCount;
|
||||||
ComputeCubicSphereIndexVertexCount(primitive.sphere.cubic.subdivision, &indexCount, &vertexCount);
|
ComputeCubicSphereIndexVertexCount(primitive.sphere.cubic.subdivision, &indexCount, &vertexCount);
|
||||||
|
|
||||||
indexBuffer = IndexBuffer::New(vertexCount > std::numeric_limits<UInt16>::max(), indexCount, params.storage, 0);
|
indexBuffer = IndexBuffer::New(vertexCount > std::numeric_limits<UInt16>::max(), indexCount, params.storage, params.indexBufferFlags);
|
||||||
vertexBuffer = VertexBuffer::New(declaration, vertexCount, params.storage, 0);
|
vertexBuffer = VertexBuffer::New(declaration, vertexCount, params.storage, params.vertexBufferFlags);
|
||||||
|
|
||||||
VertexMapper vertexMapper(vertexBuffer, BufferAccess_ReadWrite);
|
VertexMapper vertexMapper(vertexBuffer, BufferAccess_ReadWrite);
|
||||||
|
|
||||||
|
|
@ -218,8 +218,8 @@ namespace Nz
|
||||||
unsigned int vertexCount;
|
unsigned int vertexCount;
|
||||||
ComputeIcoSphereIndexVertexCount(primitive.sphere.ico.recursionLevel, &indexCount, &vertexCount);
|
ComputeIcoSphereIndexVertexCount(primitive.sphere.ico.recursionLevel, &indexCount, &vertexCount);
|
||||||
|
|
||||||
indexBuffer = IndexBuffer::New(vertexCount > std::numeric_limits<UInt16>::max(), indexCount, params.storage, 0);
|
indexBuffer = IndexBuffer::New(vertexCount > std::numeric_limits<UInt16>::max(), indexCount, params.storage, params.indexBufferFlags);
|
||||||
vertexBuffer = VertexBuffer::New(declaration, vertexCount, params.storage, 0);
|
vertexBuffer = VertexBuffer::New(declaration, vertexCount, params.storage, params.vertexBufferFlags);
|
||||||
|
|
||||||
VertexMapper vertexMapper(vertexBuffer, BufferAccess_WriteOnly);
|
VertexMapper vertexMapper(vertexBuffer, BufferAccess_WriteOnly);
|
||||||
|
|
||||||
|
|
@ -240,8 +240,8 @@ namespace Nz
|
||||||
unsigned int vertexCount;
|
unsigned int vertexCount;
|
||||||
ComputeUvSphereIndexVertexCount(primitive.sphere.uv.sliceCount, primitive.sphere.uv.stackCount, &indexCount, &vertexCount);
|
ComputeUvSphereIndexVertexCount(primitive.sphere.uv.sliceCount, primitive.sphere.uv.stackCount, &indexCount, &vertexCount);
|
||||||
|
|
||||||
indexBuffer = IndexBuffer::New(vertexCount > std::numeric_limits<UInt16>::max(), indexCount, params.storage, 0);
|
indexBuffer = IndexBuffer::New(vertexCount > std::numeric_limits<UInt16>::max(), indexCount, params.storage, params.indexBufferFlags);
|
||||||
vertexBuffer = VertexBuffer::New(declaration, vertexCount, params.storage, 0);
|
vertexBuffer = VertexBuffer::New(declaration, vertexCount, params.storage, params.vertexBufferFlags);
|
||||||
|
|
||||||
VertexMapper vertexMapper(vertexBuffer, BufferAccess_WriteOnly);
|
VertexMapper vertexMapper(vertexBuffer, BufferAccess_WriteOnly);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue