Ensure we have a valid vfs when loading a spec.
PiperOrigin-RevId: 882503274 Change-Id: Iddbd6f00c0344bb34d68bb72a640c0a8e81076a2
This commit is contained in:
committed by
Copybara-Service
parent
99af6fb9a5
commit
16d618e7b9
@@ -61,6 +61,10 @@ std::unique_ptr<ModelHolder> ModelHolder::FromBuffer(
|
|||||||
return mh;
|
return mh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ModelHolder::ModelHolder() {
|
||||||
|
mj_defaultVFS(&vfs_);
|
||||||
|
}
|
||||||
|
|
||||||
ModelHolder::~ModelHolder() {
|
ModelHolder::~ModelHolder() {
|
||||||
if (data_) {
|
if (data_) {
|
||||||
mj_deleteData(data_);
|
mj_deleteData(data_);
|
||||||
@@ -94,7 +98,6 @@ void ModelHolder::InitFromSpec(mjSpec* spec) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ModelHolder::InitFromFile(std::string_view filepath) {
|
void ModelHolder::InitFromFile(std::string_view filepath) {
|
||||||
mj_defaultVFS(&vfs_);
|
|
||||||
if (filepath.ends_with(".mjb")) {
|
if (filepath.ends_with(".mjb")) {
|
||||||
model_ = mj_loadModel(filepath.data(), &vfs_);
|
model_ = mj_loadModel(filepath.data(), &vfs_);
|
||||||
} else {
|
} else {
|
||||||
@@ -108,8 +111,6 @@ void ModelHolder::InitFromFile(std::string_view filepath) {
|
|||||||
void ModelHolder::InitFromBuffer(std::span<const std::byte> buffer,
|
void ModelHolder::InitFromBuffer(std::span<const std::byte> buffer,
|
||||||
std::string_view content_type,
|
std::string_view content_type,
|
||||||
std::string_view filename) {
|
std::string_view filename) {
|
||||||
mj_defaultVFS(&vfs_);
|
|
||||||
|
|
||||||
if (content_type == "text/xml") {
|
if (content_type == "text/xml") {
|
||||||
const char* ptr = reinterpret_cast<const char*>(buffer.data());
|
const char* ptr = reinterpret_cast<const char*>(buffer.data());
|
||||||
spec_ = mj_parseXMLString(ptr, nullptr, error_, sizeof(error_));
|
spec_ = mj_parseXMLString(ptr, nullptr, error_, sizeof(error_));
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ class ModelHolder {
|
|||||||
mjModel* ReleaseModel();
|
mjModel* ReleaseModel();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ModelHolder() = default;
|
ModelHolder();
|
||||||
void InitFromSpec(mjSpec* spec);
|
void InitFromSpec(mjSpec* spec);
|
||||||
void InitFromFile(std::string_view filepath);
|
void InitFromFile(std::string_view filepath);
|
||||||
void InitFromBuffer(std::span<const std::byte> buffer,
|
void InitFromBuffer(std::span<const std::byte> buffer,
|
||||||
|
|||||||
Reference in New Issue
Block a user