Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(285)

Side by Side Diff: chrome/browser/android/vr_shell/gltf_parser.cc

Issue 2816513002: Revert of Change base::Value::ListStorage to std::vector<base::Value> (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/android/vr_shell/gltf_parser.h" 5 #include "chrome/browser/android/vr_shell/gltf_parser.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/callback_helpers.h" 9 #include "base/callback_helpers.h"
10 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) { 199 for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) {
200 const base::DictionaryValue* mesh_dict; 200 const base::DictionaryValue* mesh_dict;
201 if (!it.value().GetAsDictionary(&mesh_dict)) 201 if (!it.value().GetAsDictionary(&mesh_dict))
202 return false; 202 return false;
203 203
204 auto mesh = base::MakeUnique<gltf::Mesh>(); 204 auto mesh = base::MakeUnique<gltf::Mesh>();
205 const base::ListValue* list; 205 const base::ListValue* list;
206 if (mesh_dict->GetList("primitives", &list)) { 206 if (mesh_dict->GetList("primitives", &list)) {
207 for (const auto& primitive_value : *list) { 207 for (const auto& primitive_value : *list) {
208 const base::DictionaryValue* primitive_dict; 208 const base::DictionaryValue* primitive_dict;
209 if (!primitive_value.GetAsDictionary(&primitive_dict)) 209 if (!primitive_value->GetAsDictionary(&primitive_dict))
210 return false; 210 return false;
211 211
212 auto primitive = ProcessPrimitive(*primitive_dict); 212 auto primitive = ProcessPrimitive(*primitive_dict);
213 if (!primitive) 213 if (!primitive)
214 return false; 214 return false;
215 mesh->primitives.push_back(std::move(primitive)); 215 mesh->primitives.push_back(std::move(primitive));
216 } 216 }
217 } 217 }
218 218
219 mesh_ids_[it.key()] = asset_->AddMesh(std::move(mesh)); 219 mesh_ids_[it.key()] = asset_->AddMesh(std::move(mesh));
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) { 254 for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) {
255 const base::DictionaryValue* node_dict; 255 const base::DictionaryValue* node_dict;
256 if (!it.value().GetAsDictionary(&node_dict)) 256 if (!it.value().GetAsDictionary(&node_dict))
257 return false; 257 return false;
258 258
259 auto node = base::MakeUnique<gltf::Node>(); 259 auto node = base::MakeUnique<gltf::Node>();
260 const base::ListValue* list; 260 const base::ListValue* list;
261 if (node_dict->GetList("meshes", &list)) { 261 if (node_dict->GetList("meshes", &list)) {
262 std::string mesh_key; 262 std::string mesh_key;
263 for (const auto& mesh_value : *list) { 263 for (const auto& mesh_value : *list) {
264 if (!mesh_value.GetAsString(&mesh_key)) 264 if (!mesh_value->GetAsString(&mesh_key))
265 return false; 265 return false;
266 auto mesh_it = mesh_ids_.find(mesh_key); 266 auto mesh_it = mesh_ids_.find(mesh_key);
267 if (mesh_it == mesh_ids_.end()) 267 if (mesh_it == mesh_ids_.end())
268 return false; 268 return false;
269 node->meshes.push_back(asset_->GetMesh(mesh_it->second)); 269 node->meshes.push_back(asset_->GetMesh(mesh_it->second));
270 } 270 }
271 } 271 }
272 272
273 nodes[it.key()] = node.get(); 273 nodes[it.key()] = node.get();
274 node_ids_[it.key()] = asset_->AddNode(std::move(node)); 274 node_ids_[it.key()] = asset_->AddNode(std::move(node));
275 } 275 }
276 276
277 // Processing children after all nodes have been added to the asset. 277 // Processing children after all nodes have been added to the asset.
278 for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) { 278 for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) {
279 const base::DictionaryValue* node_dict; 279 const base::DictionaryValue* node_dict;
280 it.value().GetAsDictionary(&node_dict); 280 it.value().GetAsDictionary(&node_dict);
281 281
282 gltf::Node* node = nodes[it.key()]; 282 gltf::Node* node = nodes[it.key()];
283 const base::ListValue* list; 283 const base::ListValue* list;
284 if (node_dict->GetList("children", &list)) { 284 if (node_dict->GetList("children", &list)) {
285 std::string node_key; 285 std::string node_key;
286 for (const auto& mesh_value : *list) { 286 for (const auto& mesh_value : *list) {
287 if (!mesh_value.GetAsString(&node_key)) 287 if (!mesh_value->GetAsString(&node_key))
288 return false; 288 return false;
289 auto node_it = nodes.find(node_key); 289 auto node_it = nodes.find(node_key);
290 if (node_it == nodes.end()) 290 if (node_it == nodes.end())
291 return false; 291 return false;
292 node->children.push_back(node_it->second); 292 node->children.push_back(node_it->second);
293 } 293 }
294 } 294 }
295 } 295 }
296 296
297 return true; 297 return true;
298 } 298 }
299 299
300 bool GltfParser::SetScenes(const base::DictionaryValue& dict) { 300 bool GltfParser::SetScenes(const base::DictionaryValue& dict) {
301 for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) { 301 for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) {
302 const base::DictionaryValue* scene_dict; 302 const base::DictionaryValue* scene_dict;
303 if (!it.value().GetAsDictionary(&scene_dict)) 303 if (!it.value().GetAsDictionary(&scene_dict))
304 return false; 304 return false;
305 305
306 auto scene = base::MakeUnique<gltf::Scene>(); 306 auto scene = base::MakeUnique<gltf::Scene>();
307 const base::ListValue* list; 307 const base::ListValue* list;
308 if (scene_dict->GetList("nodes", &list)) { 308 if (scene_dict->GetList("nodes", &list)) {
309 std::string node_key; 309 std::string node_key;
310 for (const auto& node_value : *list) { 310 for (const auto& node_value : *list) {
311 if (!node_value.GetAsString(&node_key)) 311 if (!node_value->GetAsString(&node_key))
312 return false; 312 return false;
313 auto node_it = node_ids_.find(node_key); 313 auto node_it = node_ids_.find(node_key);
314 if (node_it == node_ids_.end()) 314 if (node_it == node_ids_.end())
315 return false; 315 return false;
316 scene->nodes.push_back(asset_->GetNode(node_it->second)); 316 scene->nodes.push_back(asset_->GetNode(node_it->second));
317 } 317 }
318 } 318 }
319 319
320 scene_ids_[it.key()] = asset_->AddScene(std::move(scene)); 320 scene_ids_[it.key()] = asset_->AddScene(std::move(scene));
321 } 321 }
322 return true; 322 return true;
323 } 323 }
324 324
325 void GltfParser::Clear() { 325 void GltfParser::Clear() {
326 asset_.reset(); 326 asset_.reset();
327 path_.clear(); 327 path_.clear();
328 buffer_ids_.clear(); 328 buffer_ids_.clear();
329 buffer_view_ids_.clear(); 329 buffer_view_ids_.clear();
330 accessor_ids_.clear(); 330 accessor_ids_.clear();
331 node_ids_.clear(); 331 node_ids_.clear();
332 mesh_ids_.clear(); 332 mesh_ids_.clear();
333 scene_ids_.clear(); 333 scene_ids_.clear();
334 } 334 }
335 335
336 } // namespace vr_shell 336 } // namespace vr_shell
OLDNEW
« no previous file with comments | « chrome/browser/android/bookmarks/partner_bookmarks_shim.cc ('k') | chrome/browser/android/vr_shell/ui_scene.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698