fbsdk/fbtexture.h Source File
 
 
 
fbsdk/fbtexture.h
Go to the documentation of this file.
00001 #ifndef __FBTEXTURE_H__
00002 #define __FBTEXTURE_H__
00003 /**************************************************************************
00004  Copyright (c) 1994 - 2009 Autodesk, Inc. and/or its licensors.
00005  All Rights Reserved.
00006  
00007  The coded instructions, statements, computer programs, and/or related 
00008  material (collectively the "Data") in these files contain unpublished 
00009  information proprietary to Autodesk, Inc. and/or its licensors, which is 
00010  protected by Canada and United States of America federal copyright law 
00011  and by international treaties.
00012  
00013  The Data may not be disclosed or distributed to third parties, in whole 
00014  or in part, without the prior written consent of Autodesk, Inc. 
00015  ("Autodesk").
00016  
00017  THE DATA IS PROVIDED "AS IS" AND WITHOUT WARRANTY.
00018  ALL WARRANTIES ARE EXPRESSLY EXCLUDED AND DISCLAIMED. AUTODESK MAKES NO 
00019  WARRANTY OF ANY KIND WITH RESPECT TO THE DATA, EXPRESS, IMPLIED OR 
00020  ARISING BY CUSTOM OR TRADE USAGE, AND DISCLAIMS ANY IMPLIED WARRANTIES 
00021  OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR 
00022  PURPOSE OR USE. WITHOUT LIMITING THE FOREGOING, AUTODESK DOES NOT 
00023  WARRANT THAT THE OPERATION OF THE DATA WILL BE UNINTERRUPTED OR ERROR 
00024  FREE.
00025  
00026  IN NO EVENT SHALL AUTODESK, ITS AFFILIATES, PARENT COMPANIES, LICENSORS 
00027  OR SUPPLIERS ("AUTODESK GROUP") BE LIABLE FOR ANY LOSSES, DAMAGES OR 
00028  EXPENSES OF ANY KIND (INCLUDING WITHOUT LIMITATION PUNITIVE OR MULTIPLE 
00029  DAMAGES OR OTHER SPECIAL, DIRECT, INDIRECT, EXEMPLARY, INCIDENTAL, LOSS 
00030  OF PROFITS, REVENUE OR DATA, COST OF COVER OR CONSEQUENTIAL LOSSES OR 
00031  DAMAGES OF ANY KIND), HOWEVER CAUSED, AND REGARDLESS OF THE THEORY OF 
00032  LIABILITY, WHETHER DERIVED FROM CONTRACT, TORT (INCLUDING, BUT NOT 
00033  LIMITED TO, NEGLIGENCE), OR OTHERWISE, ARISING OUT OF OR RELATING TO THE 
00034  DATA OR ITS USE OR ANY OTHER PERFORMANCE, WHETHER OR NOT AUTODESK HAS 
00035  BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS OR DAMAGE.
00036  
00037 **************************************************************************/
00038 
00043 #include <kaydaradef.h>
00044 #ifndef FBSDK_DLL 
00045 
00048         #define FBSDK_DLL K_DLLIMPORT
00049 #endif
00050 
00051 #include <fbsdk/fbcomponent.h>
00052 #include <fbsdk/fbcore.h>
00053 #include <fbsdk/fbproperties.h>
00054 #include <fbsdk/fbvideo.h>
00055 
00056 #ifdef FBSDKUseNamespace
00057 namespace FBSDKNamespace {
00058 #endif
00059 
00060 
00062 // FBTexture
00064 __FB_FORWARD( FBTexture );
00065 
00070 enum FBTextureUseType    {
00071     kFBTextureUseAll,                                   
00072     kFBTextureUseColor,                                 
00073     kFBTextureUseShadowMap,                             
00074     kFBTextureUseLightMap,                              
00075     kFBTextureUseSphericalReflexionMap, 
00076     kFBTextureUseSphereReflexionMap,    
00077     kFBTextureUseBumpNormalMap              
00078 };
00079 
00083 enum FBTextureMapping    {
00084     kFBTextureNoMapping,                        
00085     kFBTextureMappingUV,                        
00086     kFBTextureMappingXY,                        
00087     kFBTextureMappingYZ,                        
00088     kFBTextureMappingXZ,                        
00089     kFBTextureMappingSpherical,     
00090     kFBTextureMappingCylindrical,   
00091     kFBTextureMappingEnvironment,       
00092     kFBTextureMappingProjection     
00093 };
00094 
00098 enum FBTextureBlendMode    { 
00099     kFBTextureBlendTranslucent,     
00100     kFBTextureBlendAdditive,        
00101     kFBTextureBlendModulate,        
00102     kFBTextureBlendModulate2,       
00103 };
00104 
00105 FB_DEFINE_ENUM( FBSDK_DLL, TextureUseType    );
00106 FB_DEFINE_ENUM( FBSDK_DLL, TextureMapping    );
00107 FB_DEFINE_ENUM( FBSDK_DLL, TextureBlendMode    );
00108 
00110 // This class is used to encapsulate an underlying media that is used to texture a model.
00111 //
00112 FB_FORWARD(FBRenderOptions);
00113 
00114 FB_DEFINE_COMPONENT( FBSDK_DLL, Texture );
00115 
00116 class FBSDK_DLL FBTexture : public FBBox {
00117     __FBClassDeclare( FBTexture,FBBox );
00118 public:
00123     FBTexture(const char* pName, HIObject pObject=NULL);
00124     virtual void FBDelete();
00125 
00130     FBTexture* Clone();
00131 
00132     FBPropertyInt               Width;           
00133     FBPropertyInt               Height;          
00134     FBPropertyTextureUseType    UseType;         
00135     FBPropertyTextureMapping    Mapping;         
00136     FBPropertyTextureBlendMode  BlendMode;       
00137     FBPropertyAnimatableVector3d    Translation; 
00138     FBPropertyAnimatableVector3d    Rotation;    
00139     FBPropertyAnimatableVector3d    Scaling;     
00140     FBPropertyAnimatableDouble      Alpha;       
00141     FBPropertyBool              SwapUV;          
00142     FBPropertyInt               CroppingX[2];    
00143     FBPropertyInt               CroppingY[2];    
00144     FBPropertyVideo             Video;           
00145     FBPropertyBool              TakeBased;       
00146     FBPropertyInt                   TextureOGLId;        
00147 
00148     void    OGLInit(FBRenderOptions* pRenderOptions = NULL);
00149     unsigned int GetTextureObject();
00150     double* GetMatrix();
00151 };
00152 
00154 // FBPropertyListTexture
00157 
00158 class FBSDK_DLL FBPropertyListTexture : public FBPropertyListComponent
00159 {
00160 public:
00161     FBPropertyListTexture();
00168     virtual int Add( FBTexture* pItem );
00173     FBTexture* operator[](int pIndex);
00174 
00175 private:
00176     inline virtual int Add    ( FBComponent* pItem ) { return Add((FBTexture*)pItem); }
00177 };
00178 
00180 // FBLayeredTexture
00182 __FB_FORWARD( FBLayeredTexture );
00183 
00189 class FBSDK_DLL FBLayeredTexture : public FBTexture {
00190     __FBClassDeclare( FBLayeredTexture,FBTexture );
00191 public:
00196     FBLayeredTexture(const char* pName, HIObject pObject=NULL);
00197     virtual void FBDelete();
00198 
00203     FBLayeredTexture* Clone();
00204 
00214     virtual void TextureLayerComposition(FBTime pTime,FBTime pTimeInCurrentTimeRef, int pWidth, int pHeight);
00215 
00217     void SetLayerConfigDirty();
00218 
00219     FBPropertyAnimatableColorAndAlpha   BackgroundColor;    
00220     FBPropertyListTexture               Layers;             
00221 };
00222 
00225 #define FBStorableCustomTextureImplementation(ClassName, Type)\
00226     const char* ClassName::FbxGetObjectSubType(){ return #ClassName; }\
00227     HIObject RegisterStorable##ClassName##Create(HIObject /*pOwner*/, const char* pName, void* /*pData*/){\
00228     ClassName* Class = new ClassName(pName);\
00229     Class->mAllocated = true;\
00230     if( Class->FBCreate() ){\
00231     return Class->GetHIObject();\
00232     } else {\
00233     delete Class;\
00234     return NULL;}}\
00235     FBLibraryModule(ClassName##Storable){\
00236     FBString lGroup = "FbxStorable/";\
00237     lGroup += #Type;\
00238     FBRegisterObject(ClassName##R2, lGroup, #ClassName, "", RegisterStorable##ClassName##Create, true, NULL);\
00239     FBSetStoreableCustomTextureRegistered();}\
00240 
00241 
00242 #ifdef FBSDKUseNamespace
00243 }
00244 #endif
00245 
00246 #endif /* this must be the last line of this file */