- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files
- Directories
- Examples

- File List
- File Members

# EdgeBleeding.h

Go to the documentation of this file.

    00001 #ifndef __EDGEBLEEDING_H
    00002 #define __EDGEBLEEDING_H
    00003
    00004 #include <math.h>
    00005
    00006 // force inline functions to be inline to achieve max speed
    00007 #ifndef _DEBUG
    00008     #ifdef _MSC_VER
    00009         #define inline __forceinline
    00010     #endif
    00011 #endif
    00012
    00013 #if defined(JAMBUILD)
    00014     #include <Mudbox/mudbox.h>
    00015     #include <Mudbox/SSE.h>
    00016 #else
    00017     #include "../../include/Mudbox/mudbox.h"
    00018     #include "../../include/Mudbox/SSE.h"
    00019 #endif
    00020
    00021 #include <QtCore/QCoreApplication>
    00022
    00023 #ifndef COMPILING_EDGEBLEEDING_DLL
    00024 #define EBDLL MUDBOX_DLLIMPORT
    00025 #else
    00026 #define EBDLL MUDBOX_DLLEXPORT
    00027 #endif
    00028
    00029 #define MAX_TEXTURE_COUNT 4
    00030 class TextureCache
    00031 {
    00032 public:
    00033     void Request( mudbox::Texture *pTexture )
    00034     {
    00035         for( int i=0; i<cache.size(); i++ )
    00036             if( cache.at(i) == pTexture )
    00037                 return;
    00038
    00039         if( cache.size() >= MAX_TEXTURE_COUNT )
    00040         {
    00041             mudbox::Texture *pT = cache.takeFirst();
    00042             pT->AddDirtyTile( mudbox::ImgTile (0, 0, pT->Width(), pT->Height()) );
    00043             pT->SetLocation( mudbox::TexturePool::locationCPU );
    00044         };
    00045
    00046         cache.append( pTexture );
    00047         if( pTexture->Location() != mudbox::TexturePool::locationGPU )
    00048             pTexture->SetLocation( mudbox::TexturePool::locationGPU );
    00049     };
    00050
    00051     void Clear()
    00052     {
    00053 //      for( int i=0; i<cache.size(); i++ )
    00054 //          cache.at(i)->SetLocation( mudbox::TexturePool::locationCPU );
    00055
    00056         cache.clear();
    00057     };
    00058
    00059 private:
    00060     QList<mudbox::Texture *> cache;
    00061 };
    00062
    00063 class EBDLL EdgeBleeding : public mudbox::Node
    00064 {
    00065 public:
    00066
    00067     Q_DECLARE_TR_FUNCTIONS(EdgeBleeding);
    00068     DECLARE_CLASS;
    00069
    00070     EdgeBleeding( void );
    00071     static void Initializer();
    00072
    00073     static void FillBleedingAreas( void ) { FillBleedingAreas( false ); }
    00074     // the bBlend parameter when set to true will ensure that these functions do not
    00075     // write transparent pixels -- this fixes a problem with seams opening
    00076     // up on certain triangle edges.
    00077     static void FillBleedingAreas( bool bBlend );
    00078     static void FillBleedingAreas( mudbox::Mesh *pMesh, mudbox::TexturePool *pTexture, bool bBlend = false );
    00079     static void FillBleedingAreasForTriangle(mudbox::Mesh *pMesh, mudbox::TexturePool *pTP, bool bBlend = false);
    00080
    00081 private:
    00082     inline static float AdjustUV( float value )
    00083     {
    00084         float d = 0.0f;
    00085         return modff(value, &d);
    00086         //while ( value > 1.0f )
    00087         //    value -= 1.0f;
    00088         //while ( value < 0.0f )
    00089         //    value += 1.0f;
    00090         //return value;
    00091     };
    00092
    00093     static TextureCache s_cTextureCache;
    00094 };
    00095
    00096 #endif