fix int64->int32 conversion bug for morph indices
This commit is contained in:
@@ -390,9 +390,16 @@ void AssetManager::setMorphTargetWeights(EntityId entityId, const char* const en
|
|||||||
}
|
}
|
||||||
|
|
||||||
RenderableManager &rm = _engine->getRenderableManager();
|
RenderableManager &rm = _engine->getRenderableManager();
|
||||||
|
|
||||||
|
auto renderableInstance = rm.getInstance(entity);
|
||||||
|
|
||||||
|
if(!renderableInstance.isValid()) {
|
||||||
|
Log("Warning: failed to find renderable instance for entity %s", entityName);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
rm.setMorphWeights(
|
rm.setMorphWeights(
|
||||||
rm.getInstance(entity),
|
renderableInstance,
|
||||||
weights,
|
weights,
|
||||||
count
|
count
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -191,6 +191,8 @@ extern "C" {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FLUTTER_PLUGIN_EXPORT bool set_morph_animation(
|
FLUTTER_PLUGIN_EXPORT bool set_morph_animation(
|
||||||
void* assetManager,
|
void* assetManager,
|
||||||
EntityId asset,
|
EntityId asset,
|
||||||
|
|||||||
@@ -89,9 +89,9 @@ class FilamentController {
|
|||||||
|
|
||||||
await _channel.invokeMethod("updateViewportAndCameraProjection",
|
await _channel.invokeMethod("updateViewportAndCameraProjection",
|
||||||
[size.width.toInt(), size.height.toInt(), 1.0]);
|
[size.width.toInt(), size.height.toInt(), 1.0]);
|
||||||
|
|
||||||
_initialized.complete(true);
|
|
||||||
_assetManager = await _channel.invokeMethod("getAssetManager");
|
_assetManager = await _channel.invokeMethod("getAssetManager");
|
||||||
|
_initialized.complete(true);
|
||||||
|
|
||||||
_textureIdController.add(_textureId);
|
_textureIdController.add(_textureId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -540,15 +540,23 @@ static FlMethodResponse* _set_morph_target_weights(PolyvoxFilamentPlugin* self,
|
|||||||
auto assetManager = (void*)fl_value_get_int(fl_value_get_list_value(args, 0));
|
auto assetManager = (void*)fl_value_get_int(fl_value_get_list_value(args, 0));
|
||||||
auto asset = (EntityId)fl_value_get_int(fl_value_get_list_value(args, 1));
|
auto asset = (EntityId)fl_value_get_int(fl_value_get_list_value(args, 1));
|
||||||
auto entityName = fl_value_get_string(fl_value_get_list_value(args, 2));
|
auto entityName = fl_value_get_string(fl_value_get_list_value(args, 2));
|
||||||
auto weightsValue = fl_value_get_list_value(args, 3);
|
auto flWeights = fl_value_get_list_value(args, 3);
|
||||||
float weight = fl_value_get_float(fl_value_get_list_value(weightsValue, 0));
|
size_t numWeights = fl_value_get_length(flWeights);
|
||||||
size_t len = fl_value_get_length(weightsValue);
|
|
||||||
set_morph_target_weights(assetManager, asset, entityName, &weight, (int)len);
|
std::vector<float> weights(numWeights);
|
||||||
|
for(int i =0; i < numWeights; i++) {
|
||||||
|
float val = fl_value_get_float(fl_value_get_list_value(flWeights, i));
|
||||||
|
weights[i] = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_morph_target_weights(assetManager, asset, entityName, weights.data(), (int)numWeights);
|
||||||
|
|
||||||
g_autoptr(FlValue) result = fl_value_new_string("OK");
|
g_autoptr(FlValue) result = fl_value_new_string("OK");
|
||||||
return FL_METHOD_RESPONSE(fl_method_success_response_new(result));
|
return FL_METHOD_RESPONSE(fl_method_success_response_new(result));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template class std::vector<int>;
|
||||||
|
|
||||||
static FlMethodResponse* _set_morph_animation(PolyvoxFilamentPlugin* self, FlMethodCall* method_call) {
|
static FlMethodResponse* _set_morph_animation(PolyvoxFilamentPlugin* self, FlMethodCall* method_call) {
|
||||||
FlValue* args = fl_method_call_get_args(method_call);
|
FlValue* args = fl_method_call_get_args(method_call);
|
||||||
auto assetManager = (void*)fl_value_get_int(fl_value_get_list_value(args, 0));
|
auto assetManager = (void*)fl_value_get_int(fl_value_get_list_value(args, 0));
|
||||||
@@ -565,10 +573,11 @@ static FlMethodResponse* _set_morph_animation(PolyvoxFilamentPlugin* self, FlMet
|
|||||||
|
|
||||||
auto morphIndicesList = fl_value_get_list_value(args, 4);
|
auto morphIndicesList = fl_value_get_list_value(args, 4);
|
||||||
auto morphIndicesListLength = fl_value_get_length(morphIndicesList);
|
auto morphIndicesListLength = fl_value_get_length(morphIndicesList);
|
||||||
auto indices = std::vector<int64_t>(morphIndicesListLength);
|
auto indices = std::vector<int32_t>(morphIndicesListLength);
|
||||||
|
|
||||||
for(int i =0; i < morphIndicesListLength; i++) {
|
for(int i =0; i < morphIndicesListLength; i++) {
|
||||||
indices[i] = fl_value_get_int(fl_value_get_list_value(morphIndicesList, i));
|
FlValue* flMorphIndex = fl_value_get_list_value(morphIndicesList, i);
|
||||||
|
indices[i] = static_cast<int32_t>(fl_value_get_int(flMorphIndex));
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t numMorphTargets = fl_value_get_int(fl_value_get_list_value(args, 5));
|
int64_t numMorphTargets = fl_value_get_int(fl_value_get_list_value(args, 5));
|
||||||
|
|||||||
Reference in New Issue
Block a user