summaryrefslogtreecommitdiff
path: root/indra/llmeshoptimizer
diff options
context:
space:
mode:
authorAndrey Kleshchev <andreykproductengine@lindenlab.com>2021-08-04 21:14:00 +0300
committerAndrey Kleshchev <andreykproductengine@lindenlab.com>2021-08-04 21:14:00 +0300
commit1a1793244002effe46cedf63180de60f4bc69a9a (patch)
tree0550c807886ab4bad74620c82edfb8b5bc11a4cd /indra/llmeshoptimizer
parent7235d333ea24388fc13a6d01dbafc707b658a0d4 (diff)
DRTVWR-542 Automated method selection
Normally simplification methods apply for whole upload, but this one selects methods per model or per face.
Diffstat (limited to 'indra/llmeshoptimizer')
-rw-r--r--indra/llmeshoptimizer/llmeshoptimizer.cpp97
-rw-r--r--indra/llmeshoptimizer/llmeshoptimizer.h21
2 files changed, 61 insertions, 57 deletions
diff --git a/indra/llmeshoptimizer/llmeshoptimizer.cpp b/indra/llmeshoptimizer/llmeshoptimizer.cpp
index 8097a05511..a879389c5a 100644
--- a/indra/llmeshoptimizer/llmeshoptimizer.cpp
+++ b/indra/llmeshoptimizer/llmeshoptimizer.cpp
@@ -67,19 +67,36 @@ U64 LLMeshOptimizer::simplifyU32(U32 *destination,
U64 vertex_positions_stride,
U64 target_index_count,
F32 target_error,
+ bool sloppy,
F32* result_error
)
{
- return meshopt_simplify<unsigned int>(destination,
- indices,
- index_count,
- (const float*)vertex_positions,
- vertex_count,
- vertex_positions_stride,
- target_index_count,
- target_error,
- result_error
- );
+ if (sloppy)
+ {
+ return meshopt_simplifySloppy<unsigned int>(destination,
+ indices,
+ index_count,
+ (const float*)vertex_positions,
+ vertex_count,
+ vertex_positions_stride,
+ target_index_count,
+ target_error,
+ result_error
+ );
+ }
+ else
+ {
+ return meshopt_simplify<unsigned int>(destination,
+ indices,
+ index_count,
+ (const float*)vertex_positions,
+ vertex_count,
+ vertex_positions_stride,
+ target_index_count,
+ target_error,
+ result_error
+ );
+ }
}
//static
@@ -91,41 +108,35 @@ U64 LLMeshOptimizer::simplify(U16 *destination,
U64 vertex_positions_stride,
U64 target_index_count,
F32 target_error,
+ bool sloppy,
F32* result_error
)
{
- return meshopt_simplify<unsigned short>(destination,
- indices,
- index_count,
- (const float*)vertex_positions,
- vertex_count,
- vertex_positions_stride,
- target_index_count,
- target_error,
- result_error
- );
+ if (sloppy)
+ {
+ return meshopt_simplifySloppy<unsigned short>(destination,
+ indices,
+ index_count,
+ (const float*)vertex_positions,
+ vertex_count,
+ vertex_positions_stride,
+ target_index_count,
+ target_error,
+ result_error
+ );
+ }
+ else
+ {
+ return meshopt_simplify<unsigned short>(destination,
+ indices,
+ index_count,
+ (const float*)vertex_positions,
+ vertex_count,
+ vertex_positions_stride,
+ target_index_count,
+ target_error,
+ result_error
+ );
+ }
}
-//static
-U64 LLMeshOptimizer::simplifySloppy(U16 *destination,
- const U16 *indices,
- U64 index_count,
- const LLVector4a *vertex_positions,
- U64 vertex_count,
- U64 vertex_positions_stride,
- U64 target_index_count,
- F32 target_error,
- F32* result_error
- )
-{
- return meshopt_simplifySloppy<unsigned short>(destination,
- indices,
- index_count,
- (const float*)vertex_positions,
- vertex_count,
- vertex_positions_stride,
- target_index_count,
- target_error,
- result_error
- );
-}
diff --git a/indra/llmeshoptimizer/llmeshoptimizer.h b/indra/llmeshoptimizer/llmeshoptimizer.h
index e881ec26c5..e8dd16dae9 100644
--- a/indra/llmeshoptimizer/llmeshoptimizer.h
+++ b/indra/llmeshoptimizer/llmeshoptimizer.h
@@ -45,6 +45,8 @@ public:
U64 vertex_positions_stride);
// returns amount of indices in destiantion
+ // sloppy engages a variant of a mechanizm that does not respect topology as much
+ // but is much more efective for simpler models
// result_error returns how far from original the model is in % if not NULL
// Works with U32 indices (LLFace uses U16 indices)
static U64 simplifyU32(
@@ -56,10 +58,13 @@ public:
U64 vertex_positions_stride,
U64 target_index_count,
F32 target_error,
+ bool sloppy,
F32* result_error);
// Returns amount of indices in destiantion
- // Result_error returns how far from original the model is in % if not NULL
+ // sloppy engages a variant of a mechanizm that does not respect topology as much
+ // but is much better for simpler models
+ // result_error returns how far from original the model is in % if not NULL
// Meant for U16 indices (LLFace uses U16 indices)
static U64 simplify(
U16 *destination,
@@ -70,19 +75,7 @@ public:
U64 vertex_positions_stride,
U64 target_index_count,
F32 target_error,
- F32* result_error);
-
- // returns amount of indices in destiantion
- // result_error returns how far from original the model is in % if not NULL
- static U64 simplifySloppy(
- U16 *destination,
- const U16 *indices,
- U64 index_count,
- const LLVector4a *vertex_positions,
- U64 vertex_count,
- U64 vertex_positions_stride,
- U64 target_index_count,
- F32 target_error,
+ bool sloppy,
F32* result_error);
private:
};