00001 //------------------------------------------------------------------------------ 00002 // Lamp : Open source game middleware 00003 // Copyright (C) 2004 Junpei Ohtani ( Email : junpee@users.sourceforge.jp ) 00004 // 00005 // This library is free software; you can redistribute it and/or 00006 // modify it under the terms of the GNU Lesser General Public 00007 // License as published by the Free Software Foundation; either 00008 // version 2.1 of the License, or (at your option) any later version. 00009 // 00010 // This library is distributed in the hope that it will be useful, 00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 // Lesser General Public License for more details. 00014 // 00015 // You should have received a copy of the GNU Lesser General Public 00016 // License along with this library; if not, write to the Free Software 00017 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00018 //------------------------------------------------------------------------------ 00019 00020 /** @file 00021 * テクスチャヘッダ 00022 * @author Junpee 00023 */ 00024 00025 #ifndef TEXTURE_H_ 00026 #define TEXTURE_H_ 00027 00028 #include <Graphics/Scene/SceneObject.h> 00029 #include <Core/Container/ArrayList.h> 00030 00031 namespace Lamp{ 00032 00033 class Picture; 00034 class SurfaceTexture; 00035 00036 //------------------------------------------------------------------------------ 00037 /** 00038 * テクスチャ 00039 */ 00040 class Texture : public SceneObject{ 00041 friend class SceneObjectManagerTemplate<Texture>; 00042 friend class TextureManager; 00043 friend class Material; 00044 friend class RenderingDevice; 00045 public: 00046 /** 00047 * リファレンスカウントの取得 00048 * @return リファレンスカウント 00049 */ 00050 virtual int getReferenceCount() const{ return parents_.getCount(); } 00051 00052 //-------------------------------------------------------------------------- 00053 /** 00054 * コピー 00055 * @param copyMask コピーマスク 00056 * @return コピーされたテクスチャ 00057 */ 00058 virtual Texture* copy(u_int copyMask = 0) const = 0; 00059 00060 /** 00061 * 再帰的破棄 00062 * @param texture 破棄するテクスチャ 00063 * @return 破棄したオブジェクト数 00064 */ 00065 static int recursiveDestroy(Texture* texture); 00066 00067 //-------------------------------------------------------------------------- 00068 /** 00069 * ステート変更フラグを立てる 00070 */ 00071 virtual void stateChanged(); 00072 00073 //-------------------------------------------------------------------------- 00074 /** 00075 * 親のサイズ取得 00076 * @return 親のサイズ 00077 */ 00078 virtual int getParentCount() const{ return parents_.getCount(); } 00079 00080 /** 00081 * 親の取得 00082 * @param index 親のインデックス 00083 * @return 親 00084 */ 00085 virtual Material* getParent(int index) const{ 00086 Assert(index >= 0); 00087 Assert(index < getParentCount()); 00088 return parents_.get(index); 00089 } 00090 00091 //-------------------------------------------------------------------------- 00092 // アドレスモード 00093 //-------------------------------------------------------------------------- 00094 /// アドレスモード 00095 enum AddressMode{ 00096 addressModeWrap = 0, 00097 addressModeClamp, 00098 addressModeMirror, 00099 addressModeMax, 00100 }; 00101 00102 /** 00103 * アドレスモードから文字列への変換 00104 * @param addressMode アドレスモード 00105 * @return アドレスモード文字列 00106 */ 00107 static const String& addressModeToString(AddressMode addressMode); 00108 00109 /** 00110 * 文字列からアドレスモードへの変換 00111 * @param addressModeString アドレスモード文字列 00112 * @return アドレスモード 00113 */ 00114 static AddressMode addressModeFromString(const String& addressModeString); 00115 00116 //-------------------------------------------------------------------------- 00117 // ピクチャインターフェース 00118 //-------------------------------------------------------------------------- 00119 /** 00120 * ピクチャの追加 00121 * @param picture 追加するピクチャ 00122 */ 00123 virtual void addPicture(Picture* picture) = 0; 00124 00125 /** 00126 * ピクチャの削除 00127 * @param picture 削除するピクチャ 00128 */ 00129 virtual void removePicture(Picture* picture) = 0; 00130 00131 /** 00132 * ピクチャ数の取得 00133 * @return ピクチャ数 00134 */ 00135 virtual int getPictureCount() const = 0; 00136 00137 /** 00138 * ピクチャの取得 00139 * @param index インデックス 00140 * @return ピクチャ 00141 */ 00142 virtual Picture* getPicture(int index) const = 0; 00143 00144 //-------------------------------------------------------------------------- 00145 // RTTI 00146 //-------------------------------------------------------------------------- 00147 /** 00148 * テクスチャかどうか 00149 * @return テクスチャならtrue 00150 */ 00151 virtual bool isTexture() const{ return true; } 00152 00153 //-------------------------------------------------------------------------- 00154 /** 00155 * サーフェーステクスチャかどうか 00156 * @return サーフェーステクスチャならtrue 00157 */ 00158 virtual bool isSurfaceTexture() const{ return false; } 00159 00160 /** 00161 * サーフェーステクスチャへのキャスト 00162 * @return サーフェーステクスチャ。型が違えばNULLを返す。 00163 */ 00164 virtual SurfaceTexture* castSurfaceTexture() const{ 00165 if(isSurfaceTexture()){ return (SurfaceTexture*)this; } 00166 return NULL; 00167 } 00168 00169 //-------------------------------------------------------------------------- 00170 protected: 00171 /** 00172 * コンストラクタ 00173 * @param name 名前 00174 * @param scene シーン 00175 */ 00176 Texture(const String& name, Scene* scene); 00177 00178 /** 00179 * デストラクタ 00180 */ 00181 virtual ~Texture(); 00182 00183 /** 00184 * テクスチャの値コピー 00185 * @param destination コピー先テクスチャ 00186 * @param copyMask コピーマスク 00187 */ 00188 virtual void copyTextureValue(Texture* destination, u_int copyMask) const; 00189 00190 /** 00191 * 参照の追加 00192 * @param parent 親 00193 * @return 参照カウント 00194 */ 00195 virtual int addReference(Material* parent){ 00196 parents_.add(parent); 00197 return getParentCount(); 00198 } 00199 00200 /** 00201 * 参照の削除 00202 * @param parent 親 00203 * @return 参照カウント 00204 */ 00205 virtual int removeReference(Material* parent){ 00206 parents_.removeByValue(parent); 00207 return getParentCount(); 00208 } 00209 00210 /** 00211 * ピクチャリファレンスの追加 00212 * @param picture リファレンスを追加するピクチャ 00213 */ 00214 virtual void addPictureReference(Picture* picture); 00215 00216 /** 00217 * ピクチャリファレンスの削除 00218 * @param picture リファレンスを削除するピクチャ 00219 */ 00220 virtual void removePictureReference(Picture* picture); 00221 00222 /** 00223 * D3Dテクスチャの取得 00224 * @return D3Dテクスチャの取得 00225 */ 00226 virtual Direct3DTexture* getD3DTexture() = 0; 00227 00228 //-------------------------------------------------------------------------- 00229 private: 00230 // 親配列 00231 ArrayList<Material*> parents_; 00232 00233 // アドレスモード文字列テーブル 00234 static const String addressModeStringTable[]; 00235 00236 }; 00237 00238 //------------------------------------------------------------------------------ 00239 } // End of namespace Lamp 00240 #endif // End of TEXTURE_H_ 00241 //------------------------------------------------------------------------------ 00242