FCDocument/FCDEffectParameterSurface.h

Go to the documentation of this file.
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_

Generated on Fri May 12 16:44:38 2006 for FCollada by  doxygen 1.4.6-NO