My Project
|
Which DXT Compression to Use? Obviously, there are some trade-offs between the different formats which make them better or worse for different types of images. More...
#include <TextureEntity.h>
Classes | |
struct | AnimatedTextureInfo |
for animated texture More... | |
struct | TextureInfo |
basic texture information More... | |
Public Types | |
enum | _SurfaceType { RenderTarget = 0, StaticTexture, TextureSequence, SysMemoryTexture, BlpTexture, TerrainHighResTexture, CubeTexture, FlashTexture, HTMLTexture, TextureSurface, DEPTHSTENCIL } |
![]() | |
enum | AssetState { ASSET_STATE_NORMAL, ASSET_STATE_LOCAL, ASSET_STATE_REMOTE, ASSET_STATE_CACHE, ASSET_STATE_SYNC_START, ASSET_STATE_SYNC_SUCCEED, ASSET_STATE_SYNC_FAIL, ASSET_STATE_FAILED_TO_LOAD } |
the asset state. More... | |
enum | AssetType { base =0, texture, mesh, multianimation, spritevertex, font, sound, mdx, parax, database, effectfile, dllplugin, datagrid, cadMesh, image } |
each asset type has a unique asset type number | |
![]() | |
typedef ParaEngine::weak_ptr< IObject, IAttributeFields > | WeakPtr_type |
![]() | |
typedef ParaEngine::weak_ptr< IObject > | WeakPtr_type |
Public Member Functions | |
virtual AssetEntity::AssetType | GetType () |
TextureEntity (const AssetKey &key) | |
virtual DeviceTexturePtr_type | GetTexture () |
Get the texture for rendering. | |
virtual HRESULT | InitDeviceObjects () |
virtual HRESULT | RestoreDeviceObjects () |
virtual HRESULT | InvalidateDeviceObjects () |
virtual HRESULT | DeleteDeviceObjects () |
virtual HRESULT | LoadFromMemory (const char *buffer, DWORD nFileSize, UINT nMipLevels, D3DFORMAT dwTextureFormat=D3DFMT_UNKNOWN, void **ppTexture=NULL) |
load from memory buffer. More... | |
virtual bool | LoadFromImage (ImageEntity *image, D3DFORMAT dwTextureFormat=D3DFMT_UNKNOWN, UINT nMipLevels=0, void **ppTexture=NULL) |
Initializes a texture from an ImageEntity object. More... | |
virtual HRESULT | CreateTextureFromFile_Async (void *pContext, RenderDevicePtr pDev=NULL, const char *sFileName=NULL, void **ppTexture=NULL, D3DFORMAT dwTextureFormat=D3DFMT_UNKNOWN, UINT nMipLevels=D3DX_DEFAULT, Color dwColorKey=0) |
this function is mostly used internally. More... | |
bool | IsAsyncLoad () const |
whether to async loading the texture. More... | |
void | SetAsyncLoad (bool val) |
virtual bool | SetRenderTarget (int nIndex=0) |
virtual void | SetSamplerStateBlocky (bool bIsBlocky) |
whether we will use blocky or non-blocky (anti-aliased) texture | |
virtual bool | IsSamplerStateBlocky () |
void | SetColorKey (Color colorKey) |
Color | GetColorKey () |
virtual bool | IsLoaded () |
most assets are loaded asynchronously. More... | |
bool | IsPending () |
whether the asset is being loaded. More... | |
void | SetRawData (char *pData, int nSize) |
set raw texture data from which to load the texture. More... | |
char * | GetRawData () |
get raw data | |
int | GetRawDataSize () |
get raw data size | |
bool | GiveupRawDataOwnership () |
give up raw data ownership and reset raw data to empty | |
virtual void | SetTextureInfo (const TextureInfo &tInfo) |
reset the texture info. More... | |
virtual const TextureInfo * | GetTextureInfo () |
get texture info. More... | |
virtual int32 | GetWidth () |
virtual int32 | GetHeight () |
virtual bool | IsFlipY () |
in most cases this is false, where the image origin is at left, top. More... | |
int | GetHitCount () |
void | SetHitCount (int nHitCount) |
void | MakeInvalid () |
make the current texture an invalid one. More... | |
void | Refresh (const char *sFilename=NULL, bool bLazyLoad=false) |
refresh this texture surface with a local file. More... | |
AnimatedTextureInfo * | GetAnimatedTextureInfo () |
get the animated texture information struct. More... | |
void | SetTextureFPS (float FPS) |
For animated textures. More... | |
void | EnableTextureAutoAnimation (bool bEnable) |
For animated textures. More... | |
void | SetCurrentFrameNumber (int nFrame) |
For animated textures. More... | |
int | GetCurrentFrameNumber () |
For animated textures. More... | |
int | GetFrameCount () |
For animated textures. More... | |
virtual bool | SaveToFile (const char *filename, D3DFORMAT dwFormat, int width, int height, UINT MipLevels=1, DWORD Filter=D3DX_DEFAULT, Color ColorKey=0) |
save any texture to a different texture file format and save with full mipmapping to disk. | |
![]() | |
AssetEntity (const AssetKey &key) | |
ATTRIBUTE_DEFINE_CLASS (AssetEntity) | |
virtual int | InstallFields (CAttributeClass *pClass, bool bOverride) |
this class should be implemented if one wants to add new attribute. More... | |
ATTRIBUTE_METHOD1 (AssetEntity, GetLocalFileName_s, const char **) | |
ATTRIBUTE_METHOD1 (AssetEntity, SetLocalFileName_s, const char *) | |
ATTRIBUTE_METHOD1 (AssetEntity, GetRemoteAssetURL_s, const char **) | |
ATTRIBUTE_METHOD1 (AssetEntity, IsValid_s, bool *) | |
ATTRIBUTE_METHOD1 (AssetEntity, IsLoaded_s, bool *) | |
ATTRIBUTE_METHOD1 (AssetEntity, IsLocked_s, bool *) | |
ATTRIBUTE_METHOD1 (AssetEntity, IsInitialized_s, bool *) | |
ATTRIBUTE_METHOD1 (AssetEntity, GetState_s, int *) | |
ATTRIBUTE_METHOD1 (AssetEntity, SetState_s, int) | |
virtual const std::string & | GetIdentifier () |
virtual bool | AutoSync (bool bForceSync=false, bool bLazyLoading=true) |
call this function to automatically sync with the remote server according to current asset state More... | |
virtual const string & | GetLocalFileName () |
the actual local file name. More... | |
virtual void | SetLocalFileName (const char *sFileName) |
virtual string | GetRemoteAssetURL () |
get the remote server url of this asset. More... | |
virtual CParameterBlock * | GetParamBlock (bool bCreateIfNotExist=false) |
get effect parameter block with this object. More... | |
bool | IsValid () |
whether this is a valid resource object. More... | |
bool | IsInitialized () |
whether initialized. More... | |
virtual int | Release () |
call this function to safely release this asset. More... | |
AssetKey & | GetKey () |
return the key object. More... | |
AssetState | GetState () |
return the asset state. More... | |
void | SetState (AssetState state) |
set the asset state. More... | |
virtual IAttributeFields * | GetAttributeObject () |
get the attribute object of this asset. More... | |
virtual HRESULT | RendererRecreated () |
callback of listening the event that renderer was recreated on Android/WP8 all opengl related id has already become invalid at this time, no need to release them, just recreate them all in this function. | |
virtual void | Cleanup () |
Clean up additional resources. More... | |
void | LoadAsset () |
load asset. More... | |
void | UnloadAsset () |
unload asset. More... | |
void | GarbageCollectMe () |
if its reference count is zero, unload this asset object. More... | |
bool | IsLocked () |
whether this is a locked resource resource. More... | |
virtual bool | Lock (int nMethod=0) |
Lock the object. More... | |
virtual void | UnLock () |
UnLock the object. | |
virtual bool | GetBoundingBox (Vector3 *pMin, Vector3 *pMax) |
Get AABB bounding box of the asset object. More... | |
![]() | |
virtual int | GetAttributeClassID () |
attribute class ID should be identical, unless one knows how overriding rules work. More... | |
virtual const char * | GetAttributeClassName () |
a static string, describing the attribute class object's name | |
virtual const char * | GetAttributeClassDescription () |
a static string, describing the attribute class object | |
virtual int | GetChildAttributeColumnCount () |
we support multi-dimensional child object. More... | |
virtual int | GetChildAttributeObjectCount (int nColumnIndex=0) |
get the number of child objects (row count) in the given column. More... | |
virtual IAttributeFields * | GetChildAttributeObject (int nRowIndex, int nColumnIndex=0) |
virtual IAttributeFields * | GetChildAttributeObject (const std::string &sName) |
get attribute by child object. More... | |
ATTRIBUTE_METHOD1 (IAttributeFields, GetName_s, const char **) | |
ATTRIBUTE_METHOD1 (IAttributeFields, SetName_s, const char *) | |
ATTRIBUTE_METHOD (IAttributeFields, PrintObject_s) | |
ATTRIBUTE_METHOD (IAttributeFields, AddRef_s) | |
ATTRIBUTE_METHOD1 (IAttributeFields, GetRefCount_s, int *) | |
ATTRIBUTE_METHOD1 (IAttributeFields, SetTime_s, int) | |
ATTRIBUTE_METHOD1 (IAttributeFields, GetTime_s, int *) | |
ATTRIBUTE_METHOD (IAttributeFields, Release_s) | |
virtual void | SetIdentifier (const std::string &sID) |
virtual bool | IsModified () |
whether some of the fields are modified.It is up to the implementation class to provide this functionality if necessary. More... | |
virtual void | SetModified (bool bModified) |
set whether any field has been modified. More... | |
virtual bool | ValidateFields () |
validate all fields and return true if validation passed. More... | |
virtual string | GetValidationMessage () |
get the recent validation message due to the most recent call to ValidateFields() | |
virtual bool | ResetField (int nFieldID) |
Reset the field to its initial or default value. More... | |
virtual bool | InvokeEditor (int nFieldID, const std::string &sParameters) |
Invoke an (external) editor for a given field. More... | |
virtual bool | AddChildAttributeObject (IAttributeFields *pChild, int nRowIndex=-1, int nColumnIndex=0) |
add child object. More... | |
virtual void * | QueryObjectByName (const std::string &sObjectType) |
convert to object of a given type. More... | |
virtual void * | QueryObject (int nObjectType) |
convert to object of a given type. More... | |
virtual int | GetTime () |
get the current local time in case it is animated in milli seconds frames. More... | |
virtual void | SetTime (int nTime) |
virtual CDynamicAttributeField * | GetDynamicField (const std::string &sName) |
Get a dynamic field with a given name. More... | |
virtual CDynamicAttributeField * | GetDynamicField (int nIndex) |
Get a dynamic field with a given index. More... | |
virtual const char * | GetDynamicFieldNameByIndex (int nIndex) |
get field name by index | |
virtual int | GetDynamicFieldCount () |
how many dynamic field this object currently have. More... | |
virtual int | SetDynamicField (const std::string &sName, const CVariable &value) |
set a dynamic field with a given name. More... | |
virtual int | AddDynamicField (const std::string &sName, ATTRIBUTE_FIELDTYPE dwType) |
add dynamic field and return field index | |
virtual void | RemoveAllDynamicFields () |
remove all dynamic fields | |
virtual int | SaveDynamicFieldsToString (std::string &output) |
save only text dynamic fields to fieldname = value text strings. More... | |
virtual int | LoadDynamicFieldsFromString (const std::string &input) |
load only text dynamic fields from string More... | |
CAttributeClass * | GetAttributeClass () |
get the main attribute class object. More... | |
void | PrintObject () |
print the content of this object to a text file at temp/doc/[ClassName].txt. More... | |
![]() | |
virtual void | Clone (IObject *obj) const |
Clone the object's contains to a pointer. More... | |
virtual IObject * | Clone () const |
Clone the object's contains and return a pointer to the newly created object. More... | |
virtual bool | Equals (const IObject *obj) const |
Compare the object with another object. More... | |
virtual const IType * | GetType () const |
virtual std::string | ToString () const |
WeakPtr_type & | GetWeakReference () |
get weak reference object. More... | |
virtual int | ProcessObjectEvent (const ObjectEvent &event) |
this function is only used to backward compatibility of ParaObject:AddEvent() function. More... | |
![]() | |
void | addref () const |
add reference count of the object. More... | |
bool | delref () const |
decrease reference count of the object. More... | |
int | GetRefCount () const |
get the reference count | |
CRefCounted * | AddToAutoReleasePool () |
addref and releases the ownership sometime soon automatically (usually at the end of the current frame). More... | |
Static Public Member Functions | |
static int | GetFormatByFileName (const std::string &filename) |
static void | LoadImage (char *sBufMemFile, int sizeBuf, int &width, int &height, byte **ppBuffer, bool bAlpha) |
load image of any format to buffer. More... | |
static bool | LoadImageOfFormat (const std::string &sTextureFileName, char *sBufMemFile, int sizeBuf, int &width, int &height, byte **ppBuffer, int *pBytesPerPixel=NULL, int nFormat=-1) |
this function uses FreeImage lib and support more formats. More... | |
static bool | LoadImageOfFormatEx (const std::string &sTextureFileName, char *sBufMemFile, int sizeBuf, int &width, int &height, byte **ppBuffer, int *pBytesPerPixel=NULL, int nFormat=-1, ImageExtendInfo *info=nullptr) |
static TextureEntity * | CreateTexture (const uint8 *pTexels, int width, int height, int rowLength, int bytesPerPixel, uint32 nMipLevels=0, D3DPOOL dwCreatePool=D3DPOOL_MANAGED, DWORD nFormat=0) |
create a texture entity from memory buffer. More... | |
static TextureEntity * | CreateTexture (const char *pFileName, uint32 nMipLevels=0, D3DPOOL dwCreatePool=D3DPOOL_MANAGED) |
create a texture entity from file path. More... | |
![]() | |
static const string & | GetAssetServerUrl () |
get the asset server url. More... | |
static void | SetAssetServerUrl (const char *pStr) |
set the asset server url. More... | |
![]() | |
static HRESULT | GetAttributeClassID_s (IAttributeFields *cls, int *p1) |
static HRESULT | GetAttributeClassName_s (IAttributeFields *cls, const char **p1) |
static bool | OpenWithDefaultEditor (const char *sFilename, bool bWaitOnReturn=false) |
Open a given file with the default registered editor in the game engine. More... | |
Public Attributes | |
enum ParaEngine::TextureEntity::_SurfaceType | SurfaceType |
union { | |
TextureInfo * m_pTextureInfo | |
currently all surface types except the animated texture use this struct | |
AnimatedTextureInfo * m_pAnimatedTextureInfo | |
only animated texture use this type. | |
}; | |
it may be different struct for different surface type, but all must inherit from TextureInfo virtual base | |
char * | m_pRawData |
raw data | |
int32 | m_nRawDataSize |
raw data size | |
int32 | m_nHitCount |
Color | m_dwColorKey |
bool | m_bAsyncLoad |
whether to async loading the texture. More... | |
![]() | |
AssetKey | m_key |
this is the unique key object. More... | |
bool | m_bIsInitialized |
whether this entity is initialized;Entity is by default lazily initialized | |
bool | m_bIsValid |
whether this is a valid resource object. More... | |
Static Public Attributes | |
static const std::string | DEFAULT_STATIC_TEXTURE = "Texture/whitedot.png" |
default texture to replaced downloading one. More... | |
static int | g_nTextureLOD = 0 |
Most detailed level-of-detail value to set for the mipmap chain. More... | |
static bool | g_bEnable32bitsTexture = true |
whether we will load files whose name ends with _32bits as 32 bits textures. More... | |
Friends | |
class | CTextureProcessor |
Additional Inherited Members | |
![]() | |
virtual CAttributeClass * | CreateAttributeClass () |
initialize fields | |
virtual CDynamicAttributesSet * | GetDynamicAttributes (bool bCreateIfNotExist=false) |
![]() | |
WeakPtr_type | m_weak_reference |
![]() | |
int | m_refcount |
Which DXT Compression to Use? Obviously, there are some trade-offs between the different formats which make them better or worse for different types of images.
Some general rules of thumb for good use of DXT textures are as follows: If your image has no alpha, use DXT1 compression. Using DXT3/5 will double your image size over DXT1 and not gain anything. If your image has 1-bit (on or off) alpha information, use DXT1 with one-bit alpha. If the DXT1 image quality is too low and you don't mind doubling image size, use DXT3 or DXT5 (which one doesn't matter, they'll give the same results). If your image has smooth gradations of alpha (fading in/out slowly), DXT5 is almost certainly your best bet, as it will give you the most accurate transparency representation. If your image has sharp transitions between multiple alpha levels (one pixel is 100%, the next one is 50%, and another neighbor is 12%), DXT3 is probably your best bet. You may want to compare the alpha results in DXT1, DXT3 and DXT5 compression, however, to make sure.
Enumerator | |
---|---|
RenderTarget | render target, call SetTextureInfo() to specify size. if SetTextureInfo() is never called, the back buffer size is used. |
StaticTexture | normal managed texture, with all mip-mapping level created |
TextureSequence | a group of textures, such as xxx_a001.jpg, ..., xxx_a009.jpg |
SysMemoryTexture | texture in memory |
BlpTexture | BLP textures. |
TerrainHighResTexture | detailed terrain texture |
CubeTexture | cube texture for environment mapping, etc. |
FlashTexture | flash textures, such as swf and flv streaming video files, etc. |
HTMLTexture | HTML renderer textures, <html>name:initial page url. |
TextureSurface | a pure texture surface |
DEPTHSTENCIL | depth stencil surface |
|
static |
create a texture entity from memory buffer.
|
static |
create a texture entity from file path.
|
virtual |
this function is mostly used internally.
this function will return immediately. It will append the texture request to AsyncLoaders's IO queue.
pContext | this should be a pointer to CAsyncLoader |
pDev | if NULL, the default render device is used |
sFileName | if NULL, m_asset->GetLocalFileName() is used. |
ppTexture | if this is NULL, the m_asset->m_pTexture is sued. |
dwTextureFormat | the format of the texture, default to D3DFMT_UNKNOWN |
nMipLevels | Mip levels, default to D3DX_DEFAULT |
dwColorKey | color key. default to 0(disabled). Use COLOR_XRGB(0,0,0) if blank is treated transparent. |
void TextureEntity::EnableTextureAutoAnimation | ( | bool | bEnable | ) |
For animated textures.
whether to enable texture animation. this provides a short cut to animated textures
bEnable | default value is true. Set this to false, if one wants to manually animate the texture, such as controlling from the scripting interface. |
TextureEntity::AnimatedTextureInfo * TextureEntity::GetAnimatedTextureInfo | ( | ) |
get the animated texture information struct.
this only return valid pointer if surface type is animated texture.
int TextureEntity::GetCurrentFrameNumber | ( | ) |
For animated textures.
Get the current frame number. this provides a short cut to animated textures
int TextureEntity::GetFrameCount | ( | ) |
For animated textures.
Get the total frames in the animated texture. this provides a short cut to animated textures
|
virtual |
get texture info.
return NULL if the texture has never been set before.
Reimplemented in ParaEngine::TextureEntityDirectX, and ParaEngine::TextureEntityOpenGL.
bool TextureEntity::IsAsyncLoad | ( | ) | const |
whether to async loading the texture.
this is enabled by default.
|
virtual |
in most cases this is false, where the image origin is at left, top.
however, in opengl frame buffer, the frame buffer's origin is at left, bottom.
Reimplemented in ParaEngine::TextureEntityOpenGL.
|
virtual |
most assets are loaded asynchronously.
This allows us to check if an asset is loaded. For example, we can LoadAsset() for a number of assets that need preloading. and then use a timer to check if they are initialized and remove from the uninialized list.
Reimplemented from ParaEngine::AssetEntity.
Reimplemented in ParaEngine::TextureEntityDirectX.
bool TextureEntity::IsPending | ( | ) |
whether the asset is being loaded.
|
virtual |
Initializes a texture from an ImageEntity object.
NOTE: It will not convert the pvr image file.
dwTextureFormat | if 0, we will use the image file format. |
Reimplemented in ParaEngine::TextureEntityOpenGL.
|
inlinevirtual |
load from memory buffer.
ppTexture | if NULL, we will save to current asset, if not we will save to this object. |
Reimplemented in ParaEngine::TextureEntityDirectX, and ParaEngine::TextureEntityOpenGL.
|
static |
load image of any format to buffer.
sBufMemFile | the memory file buffer. |
sizeBuf | size of the memory file buffer |
width | [out] |
height | [out] |
ppBuffer | buffer containing the read data. it may be 4 bytes per pixel or 3 bytes per pixel. this function will allocate buffer using new [] operator, the caller is responsible to delete it using delete [] operator. |
bAlpha | if (bAlpha) D3DFMT_A8R8G8B8 4 bytes per pixel else D3DFMT_R8G8B8 3 bytes per pixel. |
|
static |
this function uses FreeImage lib and support more formats.
and width, height can be any number instead of square of 2.
sTextureFileName | only used for file format deduction. |
nFormat | default to 32bits ARGB. PixelFormat24bppRGB, PixelFormat16bppGrayScale, PixelFormat8bppIndexed, PixelFormat32bppARGB, etc |
void TextureEntity::MakeInvalid | ( | ) |
make the current texture an invalid one.
It will release all resources and change the texture type to static and reference an empty texture path. After calling this function, one will no longer intend to use this entity any more. and other object reference this texture will render a blank image.
|
virtual |
refresh this texture surface with a local file.
sFilename | if NULL or empty the old texture file(sTextureFileName) will be used. |
bLazyLoad | if true it will be lazy loaded. |
Reimplemented from ParaEngine::AssetEntity.
void TextureEntity::SetCurrentFrameNumber | ( | int | nFrame | ) |
For animated textures.
set the current frame number. this provides a short cut to animated textures
nFrame |
void TextureEntity::SetRawData | ( | char * | pData, |
int | nSize | ||
) |
set raw texture data from which to load the texture.
data ownership is transfered to this entity. the caller should never delete the data. instead this entity will delete the data.
void TextureEntity::SetTextureFPS | ( | float | FPS | ) |
For animated textures.
set the FPS for animation textures. this provides a short cut to animated textures
nFPS | frames per seconds. default value is 15 FPS |
|
virtual |
reset the texture info.
One do not need to set the texture info if they intend to load texture from file if the texture is already initialized, calling this function will cause the texture be recreated using the new texture information. If the texture is not initialized, calling this function will set the creation parameters E.g. one can call this function to create a render target of arbitrary size.
|
static |
default texture to replaced downloading one.
|
static |
whether we will load files whose name ends with _32bits as 32 bits textures.
disabling this will reduce memory usage by 6 times, but the rendered image will not be as sharp. since DXT5 or DXT3 compression is used instead.
|
static |
Most detailed level-of-detail value to set for the mipmap chain.
Default value is 0 More specifically, if the texture was created with the dimensions of 256x256, setting the most detailed level to 0 indicates that 256 x 256 is the largest mipmap available, setting the most detailed level to 1 indicates that 128 x 128 is the largest mipmap available, and so on, up to the most detailed mip level (the smallest texture size) for the chain.
bool ParaEngine::TextureEntity::m_bAsyncLoad |
whether to async loading the texture.
this is enabled by default.