Files
Misaki 7551a85abe first
2026-06-10 00:57:54 +08:00

108 lines
2.7 KiB
C++

/**
* Copyright(c) Live2D Inc. All rights reserved.
*
* Use of this source code is governed by the Live2D Open Software license
* that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html.
*/
#pragma once
#include <string>
#include "LAppOpenGL.hpp"
#include <Type/csmVector.hpp>
/**
* @brief テクスチャ管理クラス
*
* 画像読み込み、管理を行うクラス。
*/
class LAppTextureManager
{
public:
/**
* @brief 画像情報構造体
*/
struct TextureInfo
{
GLuint id; ///< テクスチャID
int width; ///< 横幅
int height; ///< 高さ
std::string fileName; ///< ファイル名
};
/**
* @brief コンストラクタ
*/
LAppTextureManager();
/**
* @brief デストラクタ
*
*/
~LAppTextureManager();
/**
* @brief プリマルチプライ処理
*
* @param[in] red 画像のRed値
* @param[in] green 画像のGreen値
* @param[in] blue 画像のBlue値
* @param[in] alpha 画像のAlpha値
*
* @return プリマルチプライ処理後のカラー値
*/
inline unsigned int Premultiply(unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha)
{
return static_cast<unsigned>(\
(red * (alpha + 1) >> 8) | \
((green * (alpha + 1) >> 8) << 8) | \
((blue * (alpha + 1) >> 8) << 16) | \
(((alpha)) << 24) \
);
}
/**
* @brief 画像読み込み
*
* @param[in] fileName 読み込む画像ファイルパス名
* @return 画像情報。読み込み失敗時はNULLを返す
*/
TextureInfo* CreateTextureFromPngFile(std::string fileName);
/**
* @brief 画像の解放
*
* 配列に存在する画像全てを解放する
*/
void ReleaseTextures();
/**
* @brief 画像の解放
*
* 指定したテクスチャIDの画像を解放する
* @param[in] textureId 解放するテクスチャID
**/
void ReleaseTexture(Csm::csmUint32 textureId);
/**
* @brief 画像の解放
*
* 指定した名前の画像を解放する
* @param[in] fileName 解放する画像ファイルパス名
**/
void ReleaseTexture(std::string fileName);
/**
* @brief テクスチャIDからテクスチャ情報を得る
*
* @param textureId[in] 取得したいテクスチャID
* @return テクスチャが存在していればTextureInfoが返る
*/
TextureInfo* GetTextureInfoById(GLuint textureId) const;
private:
Csm::csmVector<TextureInfo*> _textures;
};