12 May 2019
This commit is contained in:
parent
72df10f2fb
commit
5199ab72ae
|
@ -60,6 +60,7 @@ GNU General Public License for more details.
|
|||
#define PARM_GLES_WRAPPER 35 //
|
||||
#define PARM_STENCIL_ACTIVE 36
|
||||
#define PARM_WATER_ALPHA 37
|
||||
#define PARM_TEX_MEMORY 38 // returns total memory of uploaded texture in bytes
|
||||
|
||||
// skybox ordering
|
||||
enum
|
||||
|
|
|
@ -351,6 +351,9 @@ static size_t GL_CalcImageSize( pixformat_t format, int width, int height, int d
|
|||
|
||||
switch( format )
|
||||
{
|
||||
case PF_LUMINANCE:
|
||||
size = width * height * depth;
|
||||
break;
|
||||
case PF_RGB_24:
|
||||
case PF_BGR_24:
|
||||
size = width * height * depth * 3;
|
||||
|
@ -1855,6 +1858,23 @@ void GL_ProcessTexture( int texnum, float gamma, int topColor, int bottomColor )
|
|||
FS_FreeImage( pic );
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
GL_TexMemory
|
||||
|
||||
return size of all uploaded textures
|
||||
================
|
||||
*/
|
||||
int GL_TexMemory( void )
|
||||
{
|
||||
int i, total = 0;
|
||||
|
||||
for( i = 0; i < gl_numTextures; i++ )
|
||||
total += gl_textures[i].size;
|
||||
|
||||
return total;
|
||||
}
|
||||
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
|
|
|
@ -331,6 +331,7 @@ void R_InitDlightTexture( void );
|
|||
void R_TextureList_f( void );
|
||||
void R_InitImages( void );
|
||||
void R_ShutdownImages( void );
|
||||
int GL_TexMemory( void );
|
||||
|
||||
//
|
||||
// gl_refrag.c
|
||||
|
|
|
@ -1274,6 +1274,8 @@ static int GL_RenderGetParm( int parm, int arg )
|
|||
return glState.stencilEnabled;
|
||||
case PARM_WATER_ALPHA:
|
||||
return FBitSet( world.flags, FWORLD_WATERALPHA );
|
||||
case PARM_TEX_MEMORY:
|
||||
return GL_TexMemory();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1774,7 +1774,7 @@ void GL_InitExtensions( void )
|
|||
|
||||
GL_CheckExtension( "GL_ARB_depth_texture", NULL, NULL, GL_DEPTH_TEXTURE );
|
||||
GL_CheckExtension( "GL_ARB_texture_float", NULL, "gl_texture_float", GL_ARB_TEXTURE_FLOAT_EXT );
|
||||
GL_CheckExtension( "GL_ARB_depth_buffer_float", NULL, "gl_texture_float", GL_ARB_DEPTH_FLOAT_EXT );
|
||||
GL_CheckExtension( "GL_ARB_depth_buffer_float", NULL, "gl_texture_depth_float", GL_ARB_DEPTH_FLOAT_EXT );
|
||||
GL_CheckExtension( "GL_EXT_gpu_shader4", NULL, NULL, GL_EXT_GPU_SHADER4 ); // don't confuse users
|
||||
GL_CheckExtension( "GL_ARB_shading_language_100", NULL, NULL, GL_SHADER_GLSL100_EXT );
|
||||
|
||||
|
|
|
@ -505,7 +505,7 @@ typically expanded to rgba buffer
|
|||
NOTE: number at end of pixelformat name it's a total bitscount e.g. PF_RGB_24 == PF_RGB_888
|
||||
========================================================================
|
||||
*/
|
||||
#define ImageRAW( type ) (type == PF_RGBA_32 || type == PF_BGRA_32 || type == PF_RGB_24 || type == PF_BGR_24)
|
||||
#define ImageRAW( type ) (type == PF_RGBA_32 || type == PF_BGRA_32 || type == PF_RGB_24 || type == PF_BGR_24 || type == PF_LUMINANCE)
|
||||
#define ImageDXT( type ) (type == PF_DXT1 || type == PF_DXT3 || type == PF_DXT5 || type == PF_ATI2)
|
||||
|
||||
typedef enum
|
||||
|
@ -517,6 +517,7 @@ typedef enum
|
|||
PF_BGRA_32, // big endian RGBA (MacOS)
|
||||
PF_RGB_24, // uncompressed dds or another 24-bit image
|
||||
PF_BGR_24, // big-endian RGB (MacOS)
|
||||
PF_LUMINANCE, // 8-bit single channel
|
||||
PF_DXT1, // s3tc DXT1 format
|
||||
PF_DXT3, // s3tc DXT3 format
|
||||
PF_DXT5, // s3tc DXT5 format
|
||||
|
|
|
@ -135,11 +135,21 @@ void Image_DXTGetPixelFormat( dds_t *hdr )
|
|||
}
|
||||
else
|
||||
{
|
||||
if( bits == 32 )
|
||||
switch( bits )
|
||||
{
|
||||
case 32:
|
||||
image.type = PF_BGRA_32;
|
||||
else if( bits == 24 )
|
||||
break;
|
||||
case 24:
|
||||
image.type = PF_BGR_24;
|
||||
else image.type = PF_UNKNOWN; // assume error;
|
||||
break;
|
||||
case 8:
|
||||
image.type = PF_LUMINANCE;
|
||||
break;
|
||||
default:
|
||||
image.type = PF_UNKNOWN;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -159,6 +169,7 @@ size_t Image_DXTGetLinearSize( int type, int width, int height, int depth )
|
|||
case PF_DXT3:
|
||||
case PF_DXT5:
|
||||
case PF_ATI2: return ((( width + 3 ) / 4 ) * (( height + 3 ) / 4 ) * depth * 16 );
|
||||
case PF_LUMINANCE: return (width * height * depth);
|
||||
case PF_BGR_24:
|
||||
case PF_RGB_24: return (width * height * depth * 3);
|
||||
case PF_BGRA_32:
|
||||
|
@ -311,6 +322,9 @@ qboolean Image_LoadDDS( const char *name, const byte *buffer, size_t filesize )
|
|||
break;
|
||||
}
|
||||
|
||||
if( image.type == PF_LUMINANCE )
|
||||
ClearBits( image.flags, IMAGE_HAS_COLOR|IMAGE_HAS_ALPHA );
|
||||
|
||||
if( header.dwReserved1[1] != 0 )
|
||||
{
|
||||
// store texture reflectivity
|
||||
|
|
|
@ -72,17 +72,18 @@ static const cubepack_t load_cubemap[] =
|
|||
// soul of ImageLib - table of image format constants
|
||||
const bpc_desc_t PFDesc[] =
|
||||
{
|
||||
{PF_UNKNOWN, "raw", 0x1908, 0 },
|
||||
{PF_INDEXED_24, "pal 24", 0x1908, 1 },
|
||||
{PF_INDEXED_32, "pal 32", 0x1908, 1 },
|
||||
{PF_RGBA_32, "RGBA 32",0x1908, 4 },
|
||||
{PF_BGRA_32, "BGRA 32",0x80E1, 4 },
|
||||
{PF_RGB_24, "RGB 24", 0x1908, 3 },
|
||||
{PF_BGR_24, "BGR 24", 0x80E0, 3 },
|
||||
{PF_DXT1, "DXT 1", 0x83F1, 4 },
|
||||
{PF_DXT3, "DXT 3", 0x83F2, 4 },
|
||||
{PF_DXT5, "DXT 5", 0x83F3, 4 },
|
||||
{PF_ATI2, "ATI 2", 0x8837, 4 },
|
||||
{ PF_UNKNOWN, "raw", 0x1908, 0 },
|
||||
{ PF_INDEXED_24, "pal 24", 0x1908, 1 },
|
||||
{ PF_INDEXED_32, "pal 32", 0x1908, 1 },
|
||||
{ PF_RGBA_32, "RGBA 32",0x1908, 4 },
|
||||
{ PF_BGRA_32, "BGRA 32",0x80E1, 4 },
|
||||
{ PF_RGB_24, "RGB 24", 0x1908, 3 },
|
||||
{ PF_BGR_24, "BGR 24", 0x80E0, 3 },
|
||||
{ PF_LUMINANCE, "LUM 8", 0x1909, 1 },
|
||||
{ PF_DXT1, "DXT 1", 0x83F1, 4 },
|
||||
{ PF_DXT3, "DXT 3", 0x83F2, 4 },
|
||||
{ PF_DXT5, "DXT 5", 0x83F3, 4 },
|
||||
{ PF_ATI2, "ATI 2", 0x8837, 4 },
|
||||
};
|
||||
|
||||
void Image_Reset( void )
|
||||
|
|
|
@ -875,11 +875,11 @@ Delta_ClampIntegerField
|
|||
prevent data to out of range
|
||||
=====================
|
||||
*/
|
||||
int Delta_ClampIntegerField( int iValue, qboolean bSigned, int numbits )
|
||||
int Delta_ClampIntegerField( delta_t *pField, int iValue, qboolean bSigned, int numbits )
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
if( numbits < 32 && abs( iValue ) >= (uint)BIT( numbits ))
|
||||
Msg( "%d overflow %d\n", abs( iValue ), (uint)BIT( numbits ));
|
||||
Msg( "%s %d overflow %d\n", pField->name, abs( iValue ), (uint)BIT( numbits ));
|
||||
#endif
|
||||
if( numbits < 32 )
|
||||
{
|
||||
|
@ -928,8 +928,8 @@ qboolean Delta_CompareField( delta_t *pField, void *from, void *to, float timeba
|
|||
toF = *(byte *)((byte *)to + pField->offset );
|
||||
}
|
||||
|
||||
fromF = Delta_ClampIntegerField( fromF, bSigned, pField->bits );
|
||||
toF = Delta_ClampIntegerField( toF, bSigned, pField->bits );
|
||||
fromF = Delta_ClampIntegerField( pField, fromF, bSigned, pField->bits );
|
||||
toF = Delta_ClampIntegerField( pField, toF, bSigned, pField->bits );
|
||||
if( pField->multiplier != 1.0f ) fromF *= pField->multiplier;
|
||||
if( pField->multiplier != 1.0f ) toF *= pField->multiplier;
|
||||
}
|
||||
|
@ -946,8 +946,8 @@ qboolean Delta_CompareField( delta_t *pField, void *from, void *to, float timeba
|
|||
toF = *(word *)((byte *)to + pField->offset );
|
||||
}
|
||||
|
||||
fromF = Delta_ClampIntegerField( fromF, bSigned, pField->bits );
|
||||
toF = Delta_ClampIntegerField( toF, bSigned, pField->bits );
|
||||
fromF = Delta_ClampIntegerField( pField, fromF, bSigned, pField->bits );
|
||||
toF = Delta_ClampIntegerField( pField, toF, bSigned, pField->bits );
|
||||
if( pField->multiplier != 1.0f ) fromF *= pField->multiplier;
|
||||
if( pField->multiplier != 1.0f ) toF *= pField->multiplier;
|
||||
}
|
||||
|
@ -964,8 +964,8 @@ qboolean Delta_CompareField( delta_t *pField, void *from, void *to, float timeba
|
|||
toF = *(uint *)((byte *)to + pField->offset );
|
||||
}
|
||||
|
||||
fromF = Delta_ClampIntegerField( fromF, bSigned, pField->bits );
|
||||
toF = Delta_ClampIntegerField( toF, bSigned, pField->bits );
|
||||
fromF = Delta_ClampIntegerField( pField, fromF, bSigned, pField->bits );
|
||||
toF = Delta_ClampIntegerField( pField, toF, bSigned, pField->bits );
|
||||
if( pField->multiplier != 1.0f ) fromF *= pField->multiplier;
|
||||
if( pField->multiplier != 1.0f ) toF *= pField->multiplier;
|
||||
}
|
||||
|
@ -1101,21 +1101,21 @@ qboolean Delta_WriteField( sizebuf_t *msg, delta_t *pField, void *from, void *to
|
|||
if( pField->flags & DT_BYTE )
|
||||
{
|
||||
iValue = *(byte *)((byte *)to + pField->offset );
|
||||
iValue = Delta_ClampIntegerField( iValue, bSigned, pField->bits );
|
||||
iValue = Delta_ClampIntegerField( pField, iValue, bSigned, pField->bits );
|
||||
if( pField->multiplier != 1.0f ) iValue *= pField->multiplier;
|
||||
MSG_WriteBitLong( msg, iValue, pField->bits, bSigned );
|
||||
}
|
||||
else if( pField->flags & DT_SHORT )
|
||||
{
|
||||
iValue = *(word *)((byte *)to + pField->offset );
|
||||
iValue = Delta_ClampIntegerField( iValue, bSigned, pField->bits );
|
||||
iValue = Delta_ClampIntegerField( pField, iValue, bSigned, pField->bits );
|
||||
if( pField->multiplier != 1.0f ) iValue *= pField->multiplier;
|
||||
MSG_WriteBitLong( msg, iValue, pField->bits, bSigned );
|
||||
}
|
||||
else if( pField->flags & DT_INTEGER )
|
||||
{
|
||||
iValue = *(uint *)((byte *)to + pField->offset );
|
||||
iValue = Delta_ClampIntegerField( iValue, bSigned, pField->bits );
|
||||
iValue = Delta_ClampIntegerField( pField, iValue, bSigned, pField->bits );
|
||||
if( pField->multiplier != 1.0f ) iValue *= pField->multiplier;
|
||||
MSG_WriteBitLong( msg, iValue, pField->bits, bSigned );
|
||||
}
|
||||
|
@ -1123,7 +1123,7 @@ qboolean Delta_WriteField( sizebuf_t *msg, delta_t *pField, void *from, void *to
|
|||
{
|
||||
flValue = *(float *)((byte *)to + pField->offset );
|
||||
iValue = (int)(flValue * pField->multiplier);
|
||||
iValue = Delta_ClampIntegerField( iValue, bSigned, pField->bits );
|
||||
iValue = Delta_ClampIntegerField( pField, iValue, bSigned, pField->bits );
|
||||
MSG_WriteBitLong( msg, iValue, pField->bits, bSigned );
|
||||
}
|
||||
else if( pField->flags & DT_ANGLE )
|
||||
|
@ -1139,7 +1139,7 @@ qboolean Delta_WriteField( sizebuf_t *msg, delta_t *pField, void *from, void *to
|
|||
flValue = *(float *)((byte *)to + pField->offset );
|
||||
flTime = Q_rint( timebase * 100.0f ) - Q_rint( flValue * 100.0f );
|
||||
iValue = (uint)abs( flTime );
|
||||
iValue = Delta_ClampIntegerField( iValue, bSigned, pField->bits );
|
||||
iValue = Delta_ClampIntegerField( pField, iValue, bSigned, pField->bits );
|
||||
MSG_WriteBitLong( msg, iValue, pField->bits, bSigned );
|
||||
}
|
||||
else if( pField->flags & DT_TIMEWINDOW_BIG )
|
||||
|
@ -1147,7 +1147,7 @@ qboolean Delta_WriteField( sizebuf_t *msg, delta_t *pField, void *from, void *to
|
|||
flValue = *(float *)((byte *)to + pField->offset );
|
||||
flTime = Q_rint( timebase * pField->multiplier ) - Q_rint( flValue * pField->multiplier );
|
||||
iValue = (uint)abs( flTime );
|
||||
iValue = Delta_ClampIntegerField( iValue, bSigned, pField->bits );
|
||||
iValue = Delta_ClampIntegerField( pField, iValue, bSigned, pField->bits );
|
||||
MSG_WriteBitLong( msg, iValue, pField->bits, bSigned );
|
||||
}
|
||||
else if( pField->flags & DT_STRING )
|
||||
|
|
Reference in New Issue