Index: chrome/browser/android/vr_shell/gltf_parser.cc |
diff --git a/chrome/browser/android/vr_shell/gltf_parser.cc b/chrome/browser/android/vr_shell/gltf_parser.cc |
index fbb59dce1f76e84409062cfa1fa28df866f03c4e..b8f5bd7ec6296698448dafda41a5ecdc0c663f61 100644 |
--- a/chrome/browser/android/vr_shell/gltf_parser.cc |
+++ b/chrome/browser/android/vr_shell/gltf_parser.cc |
@@ -23,6 +23,7 @@ GltfParser::~GltfParser() = default; |
std::unique_ptr<gltf::Asset> GltfParser::Parse( |
const base::DictionaryValue& dict, |
+ std::vector<std::unique_ptr<gltf::Buffer>>* buffers, |
const base::FilePath& path) { |
path_ = path; |
asset_ = base::MakeUnique<gltf::Asset>(); |
@@ -30,14 +31,15 @@ std::unique_ptr<gltf::Asset> GltfParser::Parse( |
base::ScopedClosureRunner runner( |
base::Bind(&GltfParser::Clear, base::Unretained(this))); |
- if (!ParseInternal(dict)) |
+ if (!ParseInternal(dict, buffers)) |
return nullptr; |
return std::move(asset_); |
} |
std::unique_ptr<gltf::Asset> GltfParser::Parse( |
- const base::FilePath& gltf_path) { |
+ const base::FilePath& gltf_path, |
+ std::vector<std::unique_ptr<gltf::Buffer>>* buffers) { |
JSONFileValueDeserializer json_deserializer(gltf_path); |
int error_code; |
std::string error_msg; |
@@ -47,16 +49,19 @@ std::unique_ptr<gltf::Asset> GltfParser::Parse( |
base::DictionaryValue* asset; |
if (!asset_value->GetAsDictionary(&asset)) |
return nullptr; |
- return Parse(*asset, gltf_path); |
+ return Parse(*asset, buffers, gltf_path); |
} |
-bool GltfParser::ParseInternal(const base::DictionaryValue& dict) { |
+bool GltfParser::ParseInternal( |
+ const base::DictionaryValue& dict, |
+ std::vector<std::unique_ptr<gltf::Buffer>>* buffers) { |
std::string gltf_version; |
if (!dict.GetString("asset.version", &gltf_version) || gltf_version != "1.0") |
return false; |
const base::DictionaryValue* sub_dict; |
- if (dict.GetDictionary("buffers", &sub_dict) && !SetBuffers(*sub_dict)) |
+ if (dict.GetDictionary("buffers", &sub_dict) && |
+ !SetBuffers(*sub_dict, buffers)) |
return false; |
if (dict.GetDictionary("bufferViews", &sub_dict) && |
!SetBufferViews(*sub_dict)) |
@@ -81,7 +86,10 @@ bool GltfParser::ParseInternal(const base::DictionaryValue& dict) { |
return true; |
} |
-bool GltfParser::SetBuffers(const base::DictionaryValue& dict) { |
+bool GltfParser::SetBuffers( |
+ const base::DictionaryValue& dict, |
+ std::vector<std::unique_ptr<gltf::Buffer>>* buffers) { |
+ buffers->clear(); |
for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) { |
const base::DictionaryValue* buffer_dict; |
if (!it.value().GetAsDictionary(&buffer_dict)) |
@@ -99,7 +107,8 @@ bool GltfParser::SetBuffers(const base::DictionaryValue& dict) { |
static_cast<int>(buffer->length()) != byte_length) |
return false; |
- buffer_ids_[it.key()] = asset_->AddBuffer(std::move(buffer)); |
+ buffer_ids_[it.key()] = buffers->size(); |
+ buffers->push_back(std::move(buffer)); |
} |
return true; |
} |
@@ -141,7 +150,7 @@ bool GltfParser::SetBufferViews(const base::DictionaryValue& dict) { |
auto buffer_it = buffer_ids_.find(buffer_key); |
if (buffer_it == buffer_ids_.end()) |
return false; |
- buffer_view->buffer = asset_->GetBuffer(buffer_it->second); |
+ buffer_view->buffer = buffer_it->second; |
if (!buffer_view_dict->GetInteger("byteOffset", &buffer_view->byte_offset)) |
return false; |
buffer_view_dict->GetInteger("byteLength", &buffer_view->byte_length); |