/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef TNT_FILAMENT_SAMPLE_MESH_ASSIMP_H #define TNT_FILAMENT_SAMPLE_MESH_ASSIMP_H namespace filament { class Engine; class VertexBuffer; class IndexBuffer; class Material; class MaterialInstance; class Renderable; } #include #include #include #include #include #include #include #include #include #include class MeshAssimp { public: using mat4f = math::mat4f; using half4 = math::half4; using short4 = math::short4; using half2 = math::half2; using TargetApi = filamat::MaterialBuilderBase::TargetApi; using Platform = filamat::MaterialBuilderBase::Platform; MeshAssimp(filament::Engine& engine, TargetApi targetApi, Platform platform); ~MeshAssimp(); void addFromFile(const utils::Path& path, std::map& materials, bool overrideMaterial = false); const std::vector getRenderables() const noexcept { return mRenderables; } private: struct Part { size_t offset; size_t count; std::string material; filament::sRGBColor baseColor; float opacity; float metallic; float roughness; float reflectance; }; struct Mesh { size_t offset; size_t count; std::vector parts; filament::Box aabb; mat4f transform; }; bool setFromFile(const utils::Path& file, std::vector& outIndices, std::vector& outPositions, std::vector& outTangents, std::vector& outTexCoords, std::vector& outMeshes, std::vector& outParents); filament::Engine& mEngine; filament::VertexBuffer* mVertexBuffer = nullptr; filament::IndexBuffer* mIndexBuffer = nullptr; filament::Material* mDefaultColorMaterial = nullptr; filament::Material* mDefaultTransparentColorMaterial = nullptr; std::vector mRenderables; TargetApi mTargetApi; Platform mPlatform; }; #endif // TNT_FILAMENT_SAMPLE_MESH_ASSIMP_H