1 /*
2  * Copyright 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #pragma once
17 
18 #include <GLES3/gl3.h>
19 #include <android/asset_manager.h>
20 
21 #include <memory>
22 #include <string>
23 #include <vector>
24 
25 class TextureAsset {
26 public:
27     /*!
28      * Loads a texture asset from the assets/ directory
29      * @param assetManager Asset manager to use
30      * @param assetPath The path to the asset
31      * @return a shared pointer to a texture asset, resources will be reclaimed when it's cleaned up
32      */
33     static std::shared_ptr<TextureAsset> loadAsset(AAssetManager *assetManager,
34                                                    const std::string &assetPath);
35 
36     ~TextureAsset();
37 
38     /*!
39      * @return the texture id for use with OpenGL
40      */
getTextureID()41     constexpr GLuint getTextureID() const { return textureID_; }
42 
43 private:
TextureAsset(GLuint textureId)44     inline TextureAsset(GLuint textureId) : textureID_(textureId) {}
45 
46     GLuint textureID_;
47 };
48