| Index: chrome/browser/android/vr_shell/gltf_asset.h
|
| diff --git a/chrome/browser/android/vr_shell/gltf_asset.h b/chrome/browser/android/vr_shell/gltf_asset.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4c2b753a8f8bf0c813712ad6ab7f390fbf1e53c4
|
| --- /dev/null
|
| +++ b/chrome/browser/android/vr_shell/gltf_asset.h
|
| @@ -0,0 +1,125 @@
|
| +// Copyright 2017 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_GLTF_ASSET_H_
|
| +#define CHROME_BROWSER_ANDROID_VR_SHELL_GLTF_ASSET_H_
|
| +
|
| +#include <map>
|
| +#include <memory>
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +#include "ui/gl/gl_bindings.h"
|
| +
|
| +namespace vr_shell {
|
| +
|
| +namespace gltf {
|
| +
|
| +enum Type {
|
| + UNKNOWN = 0,
|
| + SCALAR,
|
| + VEC2,
|
| + VEC3,
|
| + VEC4,
|
| + MAT2,
|
| + MAT3,
|
| + MAT4,
|
| +};
|
| +
|
| +Type GetType(const std::string& type);
|
| +
|
| +// A Buffer is data stored as binary blob in little-endian format.
|
| +using Buffer = std::string;
|
| +
|
| +// The following structures match the objects defined in glTF 1.0 standard.
|
| +// https://github.com/KhronosGroup/glTF/tree/master/specification/1.0#properties-reference
|
| +
|
| +// A BufferView is subset of data in a buffer.
|
| +struct BufferView {
|
| + const Buffer* buffer;
|
| + int byte_length = 0;
|
| + int byte_offset;
|
| + int target = GL_ARRAY_BUFFER;
|
| +};
|
| +
|
| +// An Accessor is a typed view into a BufferView.
|
| +struct Accessor {
|
| + const BufferView* buffer_view;
|
| + int byte_offset;
|
| + // TODO(acondor): byte_stride is on BufferView in glTF 2.0.
|
| + int byte_stride = 0;
|
| + int component_type;
|
| + int count;
|
| + Type type;
|
| +};
|
| +
|
| +// A Mesh is a set of primitives to be rendered.
|
| +struct Mesh {
|
| + // A Primitive describes a geometry to be rendered.
|
| + struct Primitive {
|
| + std::map<std::string, const Accessor*> attributes;
|
| + const Accessor* indices;
|
| + int mode;
|
| + Primitive();
|
| + ~Primitive();
|
| + };
|
| +
|
| + std::vector<std::unique_ptr<Primitive>> primitives;
|
| + Mesh();
|
| + ~Mesh();
|
| +};
|
| +
|
| +// A Node in the node hierarchy.
|
| +struct Node {
|
| + std::vector<const Node*> children;
|
| + // TODO(acondor): There is only one mesh per node in glTF 2.0.
|
| + std::vector<const Mesh*> meshes;
|
| + Node();
|
| + ~Node();
|
| +};
|
| +
|
| +// The root nodes of a scene.
|
| +struct Scene {
|
| + std::vector<const Node*> nodes;
|
| + Scene();
|
| + ~Scene();
|
| +};
|
| +
|
| +class Asset {
|
| + public:
|
| + Asset();
|
| + virtual ~Asset();
|
| +
|
| + std::size_t AddBuffer(std::unique_ptr<Buffer> buffer);
|
| + std::size_t AddBufferView(std::unique_ptr<BufferView> buffer_view);
|
| + std::size_t AddAccessor(std::unique_ptr<Accessor> accessor);
|
| + std::size_t AddMesh(std::unique_ptr<Mesh> mesh);
|
| + std::size_t AddNode(std::unique_ptr<Node> node);
|
| + std::size_t AddScene(std::unique_ptr<Scene> scene);
|
| + const Buffer* GetBuffer(std::size_t id) const;
|
| + const BufferView* GetBufferView(std::size_t id) const;
|
| + const Accessor* GetAccessor(std::size_t id) const;
|
| + const Mesh* GetMesh(std::size_t id) const;
|
| + const Node* GetNode(std::size_t id) const;
|
| + const Scene* GetScene(std::size_t id) const;
|
| +
|
| + const Scene* GetMainScene() const { return scene_; }
|
| +
|
| + void SetMainScene(const Scene* scene) { scene_ = scene; }
|
| +
|
| + private:
|
| + std::vector<std::unique_ptr<Buffer>> buffers_;
|
| + std::vector<std::unique_ptr<BufferView>> buffer_views_;
|
| + std::vector<std::unique_ptr<Accessor>> accessors_;
|
| + std::vector<std::unique_ptr<Mesh>> meshes_;
|
| + std::vector<std::unique_ptr<Node>> nodes_;
|
| + std::vector<std::unique_ptr<Scene>> scenes_;
|
| + const Scene* scene_;
|
| +};
|
| +
|
| +} // namespace gltf
|
| +
|
| +} // namespace vr_shell
|
| +
|
| +#endif // CHROME_BROWSER_ANDROID_VR_SHELL_GLTF_ASSET_H_
|
|
|