00001 /* 00002 Copyright (C) 2006 Feeling Software Inc. 00003 MIT License: http://www.opensource.org/licenses/mit-license.php 00004 */ 00005 00012 #ifndef _FCD_EFFECT_PARAMETER_SURFACE_H_ 00013 #define _FCD_EFFECT_PARAMETER_SURFACE_H_ 00014 00015 #include "FCDocument/FCDEffectParameter.h" 00016 00017 class FCDEffectParameterSurfaceInit; 00018 00020 typedef vector<FCDImage*> FCDImageList; 00021 00031 class FCOLLADA_EXPORT FCDEffectParameterSurface : public FCDEffectParameter 00032 { 00033 private: 00034 DeclareObjectType; 00035 StringList names; 00036 FCDImageList images; 00037 FCDEffectParameterSurfaceInit* initMethod; 00038 FMVector3 size; 00039 float viewportRatio; 00040 uint16 mipLevelCount; 00041 bool generateMipmaps; 00042 00043 public: 00047 FCDEffectParameterSurface(FCDocument* document); 00048 00053 virtual ~FCDEffectParameterSurface(); 00054 00057 virtual Type GetType() const { return SURFACE; } 00058 00065 FCDEffectParameterSurfaceInit* GetInitMethod() { return initMethod; } 00066 const FCDEffectParameterSurfaceInit* GetInitMethod() const { return initMethod; } 00076 void SetInitMethod(FCDEffectParameterSurfaceInit* method); 00077 00082 size_t GetImageCount() const { return images.size(); } 00083 00088 FCDImageList& GetImages() { return images; } 00089 const FCDImageList& GetImages() const { return images; } 00094 FCDImage* GetImage(size_t index = 0) { return index < images.size() ? images.at(index) : NULL; } 00095 const FCDImage* GetImage(size_t index = 0) const { return index < images.size() ? images.at(index) : NULL; } 00101 size_t FindImage(const FCDImage* image) const; 00102 00109 size_t AddImage(FCDImage* image); 00110 00116 void RemoveImage(FCDImage* image); 00117 00122 const FMVector3& GetSize() const { return size; } 00123 00128 void SetSize(const FMVector3& dimensions) { size = dimensions; } 00129 00132 float GetViewportRatio() const { return viewportRatio; } 00133 00136 void SetViewportRatio(float ratio) { viewportRatio = ratio; } 00137 00144 uint16 GetMipLevelCount() const { return mipLevelCount; } 00145 00151 void SetMipLevelCount(uint16 levelCount) { mipLevelCount = levelCount; } 00152 00156 bool IsGenerateMipMaps() const { return generateMipmaps; } 00157 00161 void SetGenerateMipMaps(bool _generateMipmaps) { generateMipmaps = _generateMipmaps; } 00162 00169 const char* GetName(size_t index = 0) const { return (index < names.size()) ? names[index].c_str() : NULL; } 00170 00174 virtual FCDEffectParameter* Clone(); 00175 00179 virtual void Overwrite(FCDEffectParameter* target); 00180 00185 virtual FUStatus LoadFromXML(xmlNode* parameterNode); 00186 00190 virtual xmlNode* WriteToXML(xmlNode* parentNode) const; 00191 }; 00192 00193 00199 class FCOLLADA_EXPORT FCDEffectParameterSurfaceInitFactory 00200 { 00201 private: 00202 // Never instantiate: this is a static class 00203 FCDEffectParameterSurfaceInitFactory() {} 00204 00205 public: 00206 00208 enum InitType 00209 { 00210 FROM, 00211 AS_NULL, 00212 AS_TARGET, 00213 CUBE, 00214 VOLUME, 00215 PLANAR 00216 }; 00217 00220 static FCDEffectParameterSurfaceInit* Create(InitType type); 00221 }; 00222 00223 00232 class FCOLLADA_EXPORT FCDEffectParameterSurfaceInit 00233 { 00234 public: 00236 FCDEffectParameterSurfaceInit() {} 00237 00239 virtual ~FCDEffectParameterSurfaceInit() {} 00240 00245 virtual FCDEffectParameterSurfaceInitFactory::InitType GetInitType() const = 0; 00246 00249 void Clone(FCDEffectParameterSurfaceInit* clone); 00250 00253 virtual FCDEffectParameterSurfaceInit* Clone() = 0; 00254 }; 00255 00259 class FCOLLADA_EXPORT FCDEffectParameterSurfaceInitCube : public FCDEffectParameterSurfaceInit 00260 { 00261 public: 00263 enum CubeType 00264 { 00265 ALL, 00266 PRIMARY, 00267 FACE 00268 }; 00269 00270 public: 00272 FCDEffectParameterSurfaceInitCube(); 00273 00275 virtual ~FCDEffectParameterSurfaceInitCube() {} 00276 00281 virtual FCDEffectParameterSurfaceInitFactory::InitType GetInitType() const {return FCDEffectParameterSurfaceInitFactory::CUBE;} 00282 00285 virtual FCDEffectParameterSurfaceInit* Clone(); 00286 00288 CubeType cubeType; 00289 00294 UInt16List order; 00295 }; 00296 00300 class FCOLLADA_EXPORT FCDEffectParameterSurfaceInitVolume : public FCDEffectParameterSurfaceInit 00301 { 00302 public: 00304 enum VolumeType 00305 { 00306 ALL, 00307 PRIMARY 00308 }; 00309 00310 public: 00312 FCDEffectParameterSurfaceInitVolume(); 00313 00315 virtual ~FCDEffectParameterSurfaceInitVolume() {} 00316 00321 virtual FCDEffectParameterSurfaceInitFactory::InitType GetInitType() const {return FCDEffectParameterSurfaceInitFactory::VOLUME;} 00322 00325 virtual FCDEffectParameterSurfaceInit* Clone(); 00326 00328 VolumeType volumeType; 00329 }; 00330 00335 class FCOLLADA_EXPORT FCDEffectParameterSurfaceInitFrom : public FCDEffectParameterSurfaceInit 00336 { 00337 public: 00339 FCDEffectParameterSurfaceInitFrom() {} 00340 00342 virtual ~FCDEffectParameterSurfaceInitFrom() {} 00343 00348 virtual FCDEffectParameterSurfaceInitFactory::InitType GetInitType() const {return FCDEffectParameterSurfaceInitFactory::FROM;} 00349 00352 virtual FCDEffectParameterSurfaceInit* Clone(); 00353 00355 StringList mip; 00356 00358 StringList slice; 00359 00361 StringList face; 00362 }; 00363 00367 class FCOLLADA_EXPORT FCDEffectParameterSurfaceInitAsNull : public FCDEffectParameterSurfaceInit 00368 { 00369 public: 00371 FCDEffectParameterSurfaceInitAsNull() {} 00372 00374 virtual ~FCDEffectParameterSurfaceInitAsNull() {} 00375 00380 virtual FCDEffectParameterSurfaceInitFactory::InitType GetInitType() const {return FCDEffectParameterSurfaceInitFactory::AS_NULL;} 00381 00384 virtual FCDEffectParameterSurfaceInit* Clone(); 00385 }; 00386 00390 class FCOLLADA_EXPORT FCDEffectParameterSurfaceInitAsTarget : public FCDEffectParameterSurfaceInit 00391 { 00392 public: 00394 FCDEffectParameterSurfaceInitAsTarget() {}; 00395 00397 virtual ~FCDEffectParameterSurfaceInitAsTarget() {} 00398 00403 virtual FCDEffectParameterSurfaceInitFactory::InitType GetInitType() const {return FCDEffectParameterSurfaceInitFactory::AS_TARGET;} 00404 00407 virtual FCDEffectParameterSurfaceInit* Clone(); 00408 }; 00409 00413 class FCOLLADA_EXPORT FCDEffectParameterSurfaceInitPlanar : public FCDEffectParameterSurfaceInit 00414 { 00415 public: 00417 FCDEffectParameterSurfaceInitPlanar() {}; 00418 00420 virtual ~FCDEffectParameterSurfaceInitPlanar() {} 00421 00426 virtual FCDEffectParameterSurfaceInitFactory::InitType GetInitType() const {return FCDEffectParameterSurfaceInitFactory::PLANAR;} 00427 00430 virtual FCDEffectParameterSurfaceInit* Clone(); 00431 }; 00432 00433 00434 00435 #endif // _FCD_EFFECT_PARAMETER_SURFACE_H_