/*---------------------------------------------------------------------------* Project: NintendoWare File: lyt_TexResource.h Copyright (C)2009-2011 Nintendo/HAL Laboratory, Inc. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo and/or its licensed developers and are protected by national and international copyright laws. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. The content herein is highly confidential and should be handled accordingly. $Revision: 31311 $ *---------------------------------------------------------------------------*/ #ifndef NW_LYT_TEXRESOURCE_H_ #define NW_LYT_TEXRESOURCE_H_ #include #include #include namespace nw { namespace lyt { //--------------------------------------------------------------------------- //! :category リソースアクセサ //! //! @brief テクスチャイメージ・リソースファイルにアクセスするためのクラスです。 //! //! @details //! アーカイブファイル内のテクスチャイメージ・リソースを取得するには //! ArcUtil クラスが利用できます。 //! //! @sa res::Lim //! @sa ArcUtil //! //! @since 2011/02/28 初版。 //--------------------------------------------------------------------------- class TexResource { public: //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @details //! 無効状態で初期化します。 //! //! @since 2011/02/28 初版。 //! TexResource() : m_pTop(NULL) , m_pImage(NULL) , m_pImageSize(NULL) {} //! @brief コンストラクタです。 //! //! @details //! アクセスするリソースファイルを指定します。 //! //! @param[in] pTexRes リソースファイルのアドレスです。 //! @param[in] size リソースファイルのサイズです。 //! //! @sa res::Lim //! //! @since 2011/02/28 初版。 //! TexResource(void* pTexRes, u32 size) { this->Set(pTexRes, size); } //! @brief コンストラクタです。 //! //! @details //! アクセスするリソースファイルを指定します。 //! //! @param[in] fileInfo リソースファイルの ARCFileInfo を指定します。 //! //! @sa res::Lim //! //! @since 2011/02/28 初版。 //! explicit TexResource(ARCFileInfo& fileInfo) { this->Set(fileInfo); } // @} //---------------------------------------- //! @name 設定/取得 //@{ //! @brief 有効なリソースファイルが設定されているかを取得します。 //! //! @return 有効な場合は true を返します。 //! //! @since 2011/02/28 初版。 //! bool IsValid() const { return m_pTop != NULL; } //! @brief アクセスするリソースファイルを指定します。 //! //! @param[in] pTexRes リソースファイルのアドレスです。 //! @param[in] size リソースファイルのサイズです。 //! //! @sa res::Lim //! //! @return 指定に成功した場合は true を返します。 //! //! @since 2011/02/28 初版。 //! bool Set(void* pTexRes, u32 size); //! @brief アクセスするリソースファイルを指定します。 //! //! @param[in] fileInfo リソースファイルの ARCFileInfo を指定します。 //! //! @return 指定に成功した場合は true を返します。 //! //! @sa ArcUtil::ReadTextureDir //! @sa res::Lim //! //! @since 2011/02/28 初版。 //! bool Set(ARCFileInfo& fileInfo) { return this->Set( ARCGetStartAddrInMem(&fileInfo), ARCGetLength(&fileInfo)); } //! @brief テクスチャイメージのアドレスを取得します。 //! //! @return テクスチャイメージのアドレスを返します。 //! //! @since 2011/02/28 初版。 //! const void* GetImageAddress() const { NW_NULL_ASSERT(m_pTop); return m_pTop; } //! @brief テクスチャイメージのアドレスを取得します。 //! //! @return テクスチャイメージのアドレスを返します。 //! //! @since 2011/02/28 初版。 //! void* GetImageAddress() { NW_NULL_ASSERT(m_pTop); return m_pTop; } //! @brief テクスチャイメージのサイズを取得します。 //! //! @return テクスチャイメージのサイズを返します。 //! //! @since 2011/02/28 初版。 //! u32 GetImageSize() const { NW_NULL_ASSERT(m_pImageSize); return m_pImageSize->imageSize; } //! @brief テクスチャイメージのフォーマットを取得します。 //! //! @return テクスチャイメージのフォーマットを返します。 //! //! @since 2011/02/28 初版。 //! lyt::TexFormat GetFormat() const { NW_NULL_ASSERT(m_pImage); return static_cast(m_pImage->format); } //! @brief テクスチャイメージが4bitフォーマットか調べます。 //! //! @return テクスチャイメージが4bitフォーマットの場合は true を返します。 //! //! @details //! 4bitフォーマットのテクスチャは非4bitフォーマットのテクスチャと //! 同時に使用する場合にメモリ配置上の制限があります。 //! //! @since 2011/02/28 初版。 //! bool Is4bitFormat() const { NW_NULL_ASSERT(m_pImage); return m_pImage->format == lyt::TEXFORMAT_L4 || m_pImage->format == lyt::TEXFORMAT_A4; } //! @brief テクスチャイメージの幅(ピクセル数)を取得します。 //! //! @return テクスチャイメージの幅(ピクセル数)を返します。 //! //! @since 2011/02/28 初版。 //! u16 GetWidth() const { NW_NULL_ASSERT(m_pImage); return m_pImage->width; } //! @brief テクスチャイメージの高さ(ピクセル数)を取得します。 //! //! @return テクスチャイメージの高さ(ピクセル数)を返します。 //! //! @since 2011/02/28 初版。 //! u16 GetHeight() const { NW_NULL_ASSERT(m_pImage); return m_pImage->height; } //! @brief テクスチャイメージの配置指定を取得します。 //! //! @return テクスチャイメージの配置指定を返します。 //! //! @sa SetImageArea //! //! @since 2011/02/28 初版。 //! MemArea GetImageArea() const { NW_NULL_ASSERT(m_pImage); return static_cast( internal::GetBits( m_pImage->flag, lyt::IMAGEFLAG_AREA_POS, lyt::IMAGEFLAG_AREA_LEN)); } //! @brief テクスチャイメージの配置を設定します。 //! //! @param[in] area テクスチャイメージの配置を指定します。 //! //! @details //! リソースファイルの内容を書き換えます。 //! //! 4bitフォーマットのテクスチャは非4bitフォーマットのテクスチャと //! 同時に使用する場合にメモリ配置上の制限があります。 //! //! @sa Is4bitFormat //! @sa GetImageArea //! //! @since 2011/02/28 初版。 //! void SetImageArea(lyt::MemArea area) { NW_NULL_ASSERT(m_pImage); m_pImage->flag = internal::SetBits( m_pImage->flag, lyt::IMAGEFLAG_AREA_POS, lyt::IMAGEFLAG_AREA_LEN, static_cast(area)); } //! @brief res::Image を取得します。 //! //! @return res::Image のアドレスを返します。 //! //! @since 2011/02/28 初版。 //! res::Image* GetResImage() { return m_pImage; } //! @brief res::Image を取得します。 //! //! @return res::Image のアドレスを返します。 //! //! @since 2011/02/28 初版。 //! const res::Image* GetResImage() const { return m_pImage; } protected: //! @details :private void* m_pTop; //! @details :private res::Image* m_pImage; //! @details :private res::ImageSize* m_pImageSize; }; } // namespace nw::lyt } // namespace nw #endif // NW_LYT_TEXRESOURCE_H_