#include "genesis.h"#include "basetype.h"#include "extbox.h"#include "bitmap.h"Go to the source code of this file.
Typedefs | |
| typedef geSprite | geSprite |
Functions | |
| GENESISAPI geSprite *GENESISCC | geSprite_Create (geBitmap *SpriteBitmap, geBitmap *SpriteBackfaceBitmap) |
| GENESISAPI void GENESISCC | geSprite_CreateRef (geSprite *Sprite) |
| GENESISAPI void GENESISCC | geSprite_Destroy (geSprite **pS) |
| GENESISAPI int32 GENESISCC | geSprite_GetCount () |
| GENESISAPI geBoolean GENESISCC | geSprite_IsValid (const geSprite *S) |
| GENESISAPI geBitmap *GENESISCC | geSprite_GetBitmap (const geSprite *S) |
| GENESISAPI geBitmap *GENESISCC | geSprite_GetBackfaceBitmap (const geSprite *S) |
| GENESISAPI void GENESISCC | geSprite_GetBackface (const geSprite *S, geBoolean *Enabled, geBoolean *MirrorImage) |
| GENESISAPI void GENESISCC | geSprite_SetBackface (geSprite *S, const geBoolean Enabled, const geBoolean MirrorImage) |
| GENESISAPI void GENESISCC | geSprite_GetFaceCamera (const geSprite *S, geBoolean *Enabled) |
| GENESISAPI void GENESISCC | geSprite_SetFaceCamera (geSprite *S, geBoolean Enabled) |
| GENESISAPI void GENESISCC | geSprite_GetPosition (const geSprite *S, geVec3d *Pos) |
| GENESISAPI void GENESISCC | geSprite_SetPosition (geSprite *S, const geVec3d *Pos) |
| GENESISAPI void GENESISCC | geSprite_GetTransform (const geSprite *S, geXForm3d *Transform) |
| GENESISAPI void GENESISCC | geSprite_SetTransform (geSprite *S, const geXForm3d *Transform) |
| GENESISAPI void GENESISCC | geSprite_GetInternalTransform (const geSprite *S, geXForm3d *Transform) |
| GENESISAPI void GENESISCC | geSprite_SetInternalTransform (geSprite *S, const geXForm3d *Transform) |
| GENESISAPI void GENESISCC | geSprite_GetScale (const geSprite *S, geFloat *ScaleX, geFloat *ScaleY) |
| GENESISAPI void GENESISCC | geSprite_SetScale (geSprite *S, geFloat ScaleX, geFloat ScaleY) |
| GENESISAPI void GENESISCC | geSprite_GetExtBox (const geSprite *S, geExtBox *ExtBox) |
| GENESISAPI void GENESISCC | geSprite_GetNonWorldExtBox (const geSprite *S, geExtBox *ExtBox) |
| GENESISAPI void GENESISCC | geSprite_SetExtBox (geSprite *S, const geExtBox *ExtBox) |
| GENESISAPI void GENESISCC | geSprite_GetTextureParameters (const geSprite *S, geFloat *OffsetX, geFloat *OffsetY, geFloat *ScaleX, geFloat *ScaleY) |
| GENESISAPI void GENESISCC | geSprite_SetTextureParameters (geSprite *S, geFloat OffsetX, geFloat OffsetY, geFloat ScaleX, geFloat ScaleY) |
| GENESISAPI void GENESISCC | geSprite_GetLightingOptions (const geSprite *S, geFloat *AmbientLightRed, geFloat *AmbientLightGreen, geFloat *AmbientLightBlue, geBoolean *UseFillLight, geVec3d *FillLightNormal, geFloat *FillLightRed, geFloat *FillLightGreen, geFloat *FillLightBlue, geBoolean *UseLightFromFloor, int32 *MaximumDynamicLightsToUse) |
| GENESISAPI void GENESISCC | geSprite_SetLightingOptions (geSprite *S, geFloat AmbientLightRed, geFloat AmbientLightGreen, geFloat AmbientLightBlue, geBoolean UseFillLight, const geVec3d *FillLightNormal, geFloat FillLightRed, geFloat FillLightGreen, geFloat FillLightBlue, geBoolean UseLightFromFloor, int32 MaximumDynamicLightsToUse) |
| GENESISAPI void GENESISCC | geSprite_GetAlpha (const geSprite *S, geFloat *Alpha, geFloat *BackfaceAlpha) |
| GENESISAPI void GENESISCC | geSprite_SetAlpha (geSprite *S, geFloat Alpha, geFloat BackfaceAlpha) |
| GENESISAPI void *GENESISCC | geSprite_GetUserData (const geSprite *S) |
| GENESISAPI void GENESISCC | geSprite_SetUserData (geSprite *S, void *UserData) |
|
|
|
|
||||||||||||
|
|
Definition at line 887 of file sprite.c. References GENESISAPI, GENESISCC, geSprite_IsValid(), geSprite_RefCount, and geSprite::RefCount. Referenced by geWorld_AddSprite().
00888 {
00889 assert( geSprite_IsValid(S) );
00890
00891 S->RefCount++;
00892 geSprite_RefCount++;
00893 }
|
|
|
Definition at line 896 of file sprite.c. References geSprite::BackfaceBitmap, geSprite::Bitmap, geBitmap_Destroy(), GENESISAPI, GENESISCC, geRam_Free, geSprite_Count, geSprite_IsValid(), geSprite_RefCount, NULL, and geSprite::RefCount. Referenced by geWorld_Free(), and geWorld_RemoveSprite().
00897 {
00898 geSprite *S;
00899 assert( pS != NULL );
00900 assert( *pS != NULL );
00901 assert( geSprite_IsValid(*pS) );
00902
00903 S = *pS;
00904 if (S->RefCount > 0)
00905 {
00906 S->RefCount --;
00907 geSprite_RefCount--;
00908 return;
00909 }
00910
00911 if (S->Bitmap)
00912 {
00913 geBitmap_Destroy(&(S->Bitmap));
00914 }
00915
00916 if ( (S->BackfaceBitmap) && (S->BackfaceBitmap != S->Bitmap) )
00917 {
00918 geBitmap_Destroy(&(S->BackfaceBitmap));
00919 }
00920
00921 geRam_Free(*pS);
00922 geSprite_Count--;
00923 *pS = NULL;
00924 }
|
|
||||||||||||||||
|
Definition at line 1252 of file sprite.c. References GE_RGBA::a, geSprite::BackfaceRGBA, GENESISAPI, GENESISCC, geSprite_IsValid(), and geSprite::RGBA.
01253 {
01254 assert( geSprite_IsValid(S) );
01255 assert( Alpha );
01256 assert( BackfaceAlpha );
01257
01258 *Alpha = S->RGBA.a;
01259 *BackfaceAlpha = S->BackfaceRGBA.a;
01260 }
|
|
||||||||||||||||
|
Definition at line 952 of file sprite.c. References geSprite::BackfaceEnabled, geSprite::BackfaceMirrorImage, GENESISAPI, and GENESISCC.
00953 {
00954 assert ( Enabled );
00955 assert ( MirrorImage );
00956
00957 *Enabled = S->BackfaceEnabled;
00958 *MirrorImage = S->BackfaceMirrorImage;
00959 }
|
|
|
Definition at line 944 of file sprite.c. References geSprite::BackfaceBitmap, geBitmap_IsValid(), GENESISAPI, GENESISCC, and NULL.
00945 {
00946 assert ( (S->BackfaceBitmap == NULL) || (geBitmap_IsValid(S->BackfaceBitmap)) );
00947
00948 return S->BackfaceBitmap;
00949 }
|
|
|
Definition at line 936 of file sprite.c. References geSprite::Bitmap, geBitmap_IsValid(), GENESISAPI, GENESISCC, and NULL.
00937 {
00938 assert ( (S->Bitmap == NULL) || (geBitmap_IsValid(S->Bitmap)) );
00939
00940 return S->Bitmap;
00941 }
|
|
|
Definition at line 791 of file sprite.c. References GENESISAPI, GENESISCC, geSprite_Count, and int32.
00792 {
00793 return geSprite_Count;
00794 }
|
|
||||||||||||
|
Definition at line 1102 of file sprite.c. References geSprite::BoundingBoxMaxCorner, geSprite::BoundingBoxMinCorner, GENESISAPI, GENESISCC, geSprite_IsValid(), geVec3d_Add(), geXForm3d_IsOrthonormal(), geExtBox::Max, geExtBox::Min, NULL, geSprite::Transform, and geXForm3d::Translation.
01103 {
01104 assert( geSprite_IsValid(S) );
01105 assert( ExtBox != NULL );
01106 assert( geXForm3d_IsOrthonormal(&(S->Transform)) );
01107
01108 geVec3d_Add( &(S->Transform.Translation), &(S->BoundingBoxMinCorner), &(ExtBox->Min));
01109 geVec3d_Add( &(S->Transform.Translation), &(S->BoundingBoxMaxCorner), &(ExtBox->Max));
01110 }
|
|
||||||||||||
|
Definition at line 982 of file sprite.c. References geSprite::AlwaysFaceCamera, GENESISAPI, GENESISCC, geSprite_IsValid(), and NULL.
00983 {
00984 assert( geSprite_IsValid(S) );
00985 assert( Enabled != NULL );
00986
00987 *Enabled = S->AlwaysFaceCamera;
00988 }
|
|
||||||||||||
|
Definition at line 1054 of file sprite.c. References GENESISAPI, GENESISCC, geSprite_IsValid(), and geSprite::InternalTransform.
01055 {
01056 assert( geSprite_IsValid(S) );
01057 assert( Transform );
01058
01059 *Transform = S->InternalTransform;
01060 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 1169 of file sprite.c. References geSprite::AmbientLight, geColor::b, geSprite::FillLight, geSprite::FillLightNormal, geColor::g, GENESISAPI, GENESISCC, geSprite_IsValid(), geSprite::MaximumDynamicLightsToUse, NULL, geColor::r, geSprite::UseFillLight, and geSprite::UseLightFromFloor.
01180 {
01181 assert( geSprite_IsValid(S) );
01182
01183 assert( AmbientLightRed != NULL );
01184 assert( AmbientLightGreen != NULL );
01185 assert( AmbientLightBlue != NULL );
01186 assert( UseFillLight != NULL );
01187 assert( FillLightNormal != NULL );
01188 assert( FillLightRed != NULL );
01189 assert( FillLightGreen != NULL );
01190 assert( FillLightBlue != NULL );
01191 assert( UseLightFromFloor != NULL );
01192 assert( MaximumDynamicLightsToUse != NULL );
01193
01194 *AmbientLightRed = S->AmbientLight.r;
01195 *AmbientLightGreen = S->AmbientLight.g;
01196 *AmbientLightBlue = S->AmbientLight.b;
01197 *UseFillLight = S->UseFillLight;
01198 *FillLightNormal = S->FillLightNormal;
01199 *FillLightRed = S->FillLight.r;
01200 *FillLightGreen = S->FillLight.g;
01201 *FillLightBlue = S->FillLight.b;
01202 *UseLightFromFloor = S->UseLightFromFloor;
01203 *MaximumDynamicLightsToUse = S->MaximumDynamicLightsToUse;
01204 }
|
|
||||||||||||
|
Definition at line 1113 of file sprite.c. References geSprite::BoundingBoxMaxCorner, geSprite::BoundingBoxMinCorner, GENESISAPI, GENESISCC, geSprite_IsValid(), geExtBox::Max, geExtBox::Min, and NULL.
01114 {
01115 assert( geSprite_IsValid(S) );
01116 assert( ExtBox != NULL );
01117
01118 ExtBox->Min = S->BoundingBoxMinCorner;
01119 ExtBox->Max = S->BoundingBoxMaxCorner;
01120 }
|
|
||||||||||||
|
Definition at line 1008 of file sprite.c. References GENESISAPI, GENESISCC, geSprite_IsValid(), geXForm3d_IsOrthonormal(), NULL, geSprite::Transform, and geXForm3d::Translation. Referenced by geWorld_IsSpritePotentiallyVisible(), and RenderScene().
01009 {
01010 assert( geSprite_IsValid(S) );
01011 assert( Pos != NULL );
01012 assert( geXForm3d_IsOrthonormal(&(S->Transform)) );
01013
01014 *Pos = S->Transform.Translation;
01015 }
|
|
||||||||||||||||
|
Definition at line 1077 of file sprite.c. References GE_FALSE, GENESISAPI, GENESISCC, geSprite_IsValid(), geSprite::ScaleX, and geSprite::ScaleY.
01078 {
01079 assert( geSprite_IsValid(S)!=GE_FALSE );
01080
01081 *ScaleX = S->ScaleX;
01082 *ScaleY = S->ScaleY;
01083 }
|
|
||||||||||||||||||||||||
|
Definition at line 1133 of file sprite.c. References GENESISAPI, GENESISCC, geSprite_IsValid(), NULL, geSprite::TextureOffsetX, geSprite::TextureOffsetY, geSprite::TextureScaleX, and geSprite::TextureScaleY.
01138 {
01139 assert( geSprite_IsValid(S) );
01140 assert( OffsetX != NULL );
01141 assert( OffsetY != NULL );
01142 assert( ScaleX != NULL );
01143 assert( ScaleY != NULL );
01144
01145 *OffsetX = S->TextureOffsetX;
01146 *OffsetY = S->TextureOffsetY;
01147 *ScaleX = S->TextureScaleX;
01148 *ScaleY = S->TextureScaleY;
01149 }
|
|
||||||||||||
|
Definition at line 1032 of file sprite.c. References GENESISAPI, GENESISCC, geSprite_IsValid(), NULL, and geSprite::Transform.
01033 {
01034 assert( geSprite_IsValid(S) );
01035 assert( Transform!= NULL );
01036
01037 *Transform = S->Transform;
01038 }
|
|
|
Definition at line 1282 of file sprite.c. References GENESISAPI, GENESISCC, geSprite_IsValid(), and geSprite::UserData.
01283 {
01284 assert( geSprite_IsValid(S) );
01285
01286 return S->UserData;
01287 }
|
|
|
||||||||||||||||
|
Definition at line 1263 of file sprite.c. References GE_RGBA::a, geSprite::BackfaceRGBA, GENESISAPI, GENESISCC, geSprite_IsValid(), and geSprite::RGBA.
01264 {
01265 assert( geSprite_IsValid(S) );
01266
01267 S->RGBA.a = Alpha;
01268 S->BackfaceRGBA.a = BackfaceAlpha;
01269
01270 // alphas cannot be less than 0 or greater than 255
01271 if (S->RGBA.a < 0)
01272 S->RGBA.a = 0.0f;
01273 else if (S->RGBA.a > 255.0f)
01274 S->RGBA.a = 255.0f;
01275 if (S->BackfaceRGBA.a < 0)
01276 S->BackfaceRGBA.a = 0.0f;
01277 else if (S->BackfaceRGBA.a > 255.0f)
01278 S->BackfaceRGBA.a = 255.0f;
01279 }
|
|
||||||||||||||||
|
Definition at line 962 of file sprite.c. References geSprite::BackfaceEnabled, geSprite::BackfaceMirrorImage, GENESISAPI, GENESISCC, geSprite_IsValid(), geSprite_UpdateBackfaceTextureMap(), and geSprite::LightingChanged.
00963 {
00964 assert( geSprite_IsValid(S) );
00965
00966 // because lighting the backface requires a lot of extra calculations, the
00967 // backface doesn't have correct lighting if it has been turned off. so, if it
00968 // is turned on, lighting needs to be updated
00969 S->LightingChanged = (S->LightingChanged || ((Enabled) && (!S->BackfaceEnabled)) );
00970
00971 // if the mirror imaging is changed, then update the texture map for the backface
00972 if (S->BackfaceMirrorImage != MirrorImage)
00973 {
00974 S->BackfaceMirrorImage = MirrorImage;
00975 geSprite_UpdateBackfaceTextureMap(S);
00976 }
00977
00978 S->BackfaceEnabled = Enabled;
00979 }
|
|
||||||||||||
|
Definition at line 1123 of file sprite.c. References geSprite::BoundingBoxMaxCorner, geSprite::BoundingBoxMinCorner, geExtBox_IsValid(), GENESISAPI, GENESISCC, geSprite_IsValid(), geExtBox::Max, and geExtBox::Min.
01124 {
01125 assert( geSprite_IsValid(S) );
01126 assert( geExtBox_IsValid(ExtBox) );
01127
01128 S->BoundingBoxMinCorner = ExtBox->Min;
01129 S->BoundingBoxMaxCorner = ExtBox->Max;
01130 }
|
|
||||||||||||
|
Definition at line 991 of file sprite.c. References geSprite::AlwaysFaceCamera, GE_TRUE, GENESISAPI, GENESISCC, geSprite_IsValid(), geSprite_UpdatePosition(), and geSprite::TransformChanged.
00992 {
00993 assert( geSprite_IsValid(S) );
00994
00995 // if facing the camera is being disabled, then force an
00996 // update on everything the transform affects
00997 if ( (S->AlwaysFaceCamera) && (!Enabled) )
00998 {
00999 S->TransformChanged = GE_TRUE;
01000 }
01001
01002 S->AlwaysFaceCamera = Enabled;
01003
01004 geSprite_UpdatePosition(S);
01005 }
|
|
||||||||||||
|
Definition at line 1063 of file sprite.c. References GE_TRUE, GENESISAPI, GENESISCC, geSprite_IsValid(), geSprite_UpdatePosition(), geXForm3d_IsIdentity(), geSprite::InternalTransform, geSprite::InternalTransformUsed, and geSprite::TransformChanged.
01064 {
01065 assert( geSprite_IsValid(S) );
01066 assert( Transform );
01067
01068 S->InternalTransform = *Transform;
01069 S->InternalTransformUsed = !( geXForm3d_IsIdentity(Transform) );
01070
01071 geSprite_UpdatePosition(S);
01072
01073 S->TransformChanged = GE_TRUE;
01074 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 1207 of file sprite.c. References geSprite::AlwaysFaceCamera, geSprite::AmbientLight, geColor::b, geSprite::FillLight, geSprite::FillLightNormal, geColor::g, GENESISAPI, GENESISCC, geSprite_IsValid(), geSprite_UpdateSurfaceNormal(), geVec3d_IsValid(), geSprite::LightingUsesSurfaceNormal, geSprite::MaximumDynamicLightsToUse, geColor::r, geSprite::TransformChanged, geSprite::UseFillLight, and geSprite::UseLightFromFloor.
01219 {
01220 assert( geSprite_IsValid(S) );
01221 assert( geVec3d_IsValid(FillLightNormal) );
01222
01223 S->AmbientLight.r = AmbientLightRed;
01224 S->AmbientLight.g = AmbientLightGreen;
01225 S->AmbientLight.b = AmbientLightBlue;
01226 S->UseFillLight = UseFillLight;
01227 S->FillLightNormal = *FillLightNormal;
01228 S->FillLight.r = FillLightRed;
01229 S->FillLight.g = FillLightGreen;
01230 S->FillLight.b = FillLightBlue;
01231 S->UseLightFromFloor = UseLightFromFloor;
01232 S->MaximumDynamicLightsToUse = MaximumDynamicLightsToUse;
01233
01234 // if fill light or dynamic lights are now used, and they weren't before,
01235 // then the surface normal will be needed.
01236 //
01237 // if the transform has changed, then it will be updated next render, so
01238 // don't do it now
01239 //
01240 // if the camera always faces the camera, then this will be updated every
01241 // render (and using a different normal), so don't do it now.
01242 if ( (!S->TransformChanged) &&
01243 (!S->AlwaysFaceCamera) &&
01244 (!S->LightingUsesSurfaceNormal) && ((UseFillLight) || (MaximumDynamicLightsToUse > 0)) )
01245 geSprite_UpdateSurfaceNormal(S);
01246
01247 // store whether vertexes are required for lighting (only for fill lights and dynamic lights)
01248 S->LightingUsesSurfaceNormal = (S->UseFillLight) || (S->MaximumDynamicLightsToUse > 0);
01249 }
|
|
||||||||||||
|
Definition at line 1018 of file sprite.c. References GE_TRUE, GENESISAPI, GENESISCC, geSprite_IsValid(), geSprite_UpdatePosition(), geXForm3d_IsOrthonormal(), NULL, geSprite::Transform, geSprite::TransformChanged, and geXForm3d::Translation.
01019 {
01020 assert( geSprite_IsValid(S) );
01021 assert( Pos != NULL );
01022 assert( geXForm3d_IsOrthonormal(&(S->Transform)) );
01023
01024 S->Transform.Translation = *Pos;
01025
01026 geSprite_UpdatePosition(S);
01027
01028 S->TransformChanged = GE_TRUE;
01029 }
|
|
||||||||||||||||
|
Definition at line 1086 of file sprite.c. References GE_FALSE, GE_TRUE, GENESISAPI, GENESISCC, geSprite_IsValid(), geSprite_UpdateCorners(), geSprite::ScaleX, geSprite::ScaleY, and geSprite::TransformChanged.
01087 {
01088 assert( geSprite_IsValid(S)!=GE_FALSE );
01089
01090 if ( (S->ScaleX != ScaleX) || (S->ScaleY != ScaleY) )
01091 {
01092 S->ScaleX = ScaleX;
01093 S->ScaleY = ScaleY;
01094
01095 geSprite_UpdateCorners(S);
01096
01097 S->TransformChanged = GE_TRUE;
01098 }
01099 }
|
|
||||||||||||||||||||||||
|
Definition at line 1152 of file sprite.c. References GENESISAPI, GENESISCC, geSprite_IsValid(), geSprite_UpdateTextureMap(), geSprite::TextureOffsetX, geSprite::TextureOffsetY, geSprite::TextureScaleX, and geSprite::TextureScaleY.
01157 {
01158 assert( geSprite_IsValid(S) );
01159
01160 S->TextureOffsetX = OffsetX;
01161 S->TextureOffsetY = OffsetY;
01162 S->TextureScaleX = ScaleX;
01163 S->TextureScaleY = ScaleY;
01164
01165 geSprite_UpdateTextureMap(S);
01166 }
|
|
||||||||||||
|
Definition at line 1041 of file sprite.c. References GE_TRUE, GENESISAPI, GENESISCC, geSprite_IsValid(), geSprite_UpdatePosition(), geSprite::Transform, and geSprite::TransformChanged.
01042 {
01043 assert( geSprite_IsValid(S) );
01044 assert( Transform );
01045
01046 S->Transform = *Transform;
01047
01048 geSprite_UpdatePosition(S);
01049
01050 S->TransformChanged = GE_TRUE;
01051 }
|
|
||||||||||||
|
Definition at line 1290 of file sprite.c. References GENESISAPI, GENESISCC, geSprite_IsValid(), and geSprite::UserData.
01291 {
01292 assert( geSprite_IsValid(S) );
01293
01294 S->UserData = UserData;
01295 }
|
1.3.2