MacGLide/MacGLide/OpenGLide/PGTexture.h

119 lines
4.2 KiB
C++

//**************************************************************
//* OpenGLide - Glide to OpenGL Wrapper
//* http://openglide.sourceforge.net
//*
//* PGTexture Class Definition
//*
//* OpenGLide is OpenSource under LGPL license
//* Originaly made by Fabio Barros
//* Modified by Paul for Glidos (http://www.glidos.net)
//* Mac version and additional features by Jens-Olaf Hemprich
//**************************************************************
#ifndef __PGTEXTURE_H__
#define __PGTEXTURE_H__
#include "TexDB.h"
struct TTextureStruct;
class PGTexture
{
struct TexValues
{
GrLOD_t lod;
FxU32 width;
FxU32 height;
FxU32 nPixels;
};
unsigned int PowerOfTwoCeiling(unsigned int x);
public:
void NCCTable( GrNCCTable_t tab );
static FxU32 LodOffset( FxU32 evenOdd, const GrTexInfo *info );
static FxU32 MipMapMemRequired( GrLOD_t lod, GrAspectRatio_t aspectRatio,
GrTextureFormat_t format );
static FxU32 TextureMemRequired( FxU32 evenOdd, const GrTexInfo *info );
static void genPaletteMipmaps( FxU32 width, FxU32 height, const FxU8 *data );
void ChromakeyMode( GrChromakeyMode_t mode );
void ChromakeyValue( GrColor_t value );
inline float GetHAspect() const {return m_hAspect;}
inline float GetWAspect() const {return m_wAspect;}
inline const GrTexInfo* GetCurrentTexInfo() const {return &m_info;}
inline void Clear() {m_db->Clear();}
inline void initOpenGL() {m_db->initOpenGL();}
inline void cleanupOpenGL() {m_db->cleanupOpenGL();}
bool MakeReady(TTextureStruct* tex_coords = NULL, unsigned long number_of_triangles = 0);
void DownloadTable( GrTexTable_t type, const FxU32 *data, int first, int count );
void Source( FxU32 startAddress, FxU32 evenOdd, const GrTexInfo *info );
void DownloadMipMap( FxU32 startAddress, FxU32 evenOdd, const GrTexInfo *info );
void DownloadMipMapLevel(FxU32 startAddress,
GrLOD_t thisLod,
GrLOD_t largeLod,
GrAspectRatio_t aspectRatio,
GrTextureFormat_t format,
FxU32 evenOdd,
void *data);
void DownloadMipMapLevelPartial(FxU32 startAddress,
GrLOD_t thisLod,
GrLOD_t largeLod,
GrAspectRatio_t aspectRatio,
GrTextureFormat_t format,
FxU32 evenOdd,
void *data,
int start,
int end);
FxU32 GetMemorySize( void ) const;
PGTexture( int mem_size );
virtual ~PGTexture();
#ifdef OGL_DEBUG
int Num_565_Tex;
int Num_565_Chromakey_Tex;
int Num_1555_Tex;
int Num_1555_Chromakey_Tex;
int Num_4444_Tex;
int Num_4444_Chromakey_Tex;
int Num_332_Tex;
int Num_8332_Tex;
int Num_Alpha_Tex;
int Num_AlphaIntensity88_Tex;
int Num_AlphaIntensity44_Tex;
int Num_AlphaPalette_Tex;
int Num_Palette_Tex;
int Num_Palette_Chromakey_Tex;
int Num_Intensity_Tex;
int Num_YIQ_Tex;
int Num_AYIQ_Tex;
int Num_Other_Tex;
#endif
private:
void ApplyKeyToPalette( void );
void GetTexValues( TexValues *tval ) const;
void DownloadMipmapsToOpenGL(GLint compnum, GLint compformat, GLenum comptype, const void* texdata, TexValues& t, bool build_mipmaps);
FxU32 m_tex_memory_size;
bool m_palette_dirty;
FxU32 m_palette_hash;
TexDB * m_db;
GrChromakeyMode_t m_chromakey_mode;
FxU32 m_chromakey_value_8888;
FxU16 m_chromakey_value_565;
FxU16 m_chromakey_value_1555;
float m_wAspect;
float m_hAspect;
FxU32* m_tex_temp;
FxU32* m_textureCache;
bool m_valid;
FxU8 * m_memory;
FxU32 m_startAddress;
FxU32 m_evenOdd;
GrTexInfo m_info;
FxU32 m_palette[ 256 ];
GrNCCTable_t m_ncc_select;
GuNccTable m_ncc[2];
};
extern PGTexture *Textures;
#endif