/*
 =======================================================================================
  Name        : MATBench.c
  Author      : vincent lhullier            Date :27/01/99
  Description : Bench function for materials
 =======================================================================================
 */
 
#include "gli_st.h"
#include "MATBench.h"
 
#ifdef BENCH_MATERIAL
 
/*
 =======================================================================================
    Globals 
 =======================================================================================
 */
static GLI_tdstMaterial    *gapst_Material[ 1024 ];
static long                gl_NumberOfMaterials = 0;
 
/*
 =======================================================================================
    Function 
 =======================================================================================
 */
 
void MATBENCH_fn_vAddMaterialRef( GLI_tdstMaterial *_pst_Material )
{
    gapst_Material[ gl_NumberOfMaterials++ ] = _pst_Material;
}
 
void MATBENCH_fn_vDeleteMaterialRef( GLI_tdstMaterial *_pst_Material )
{
    long i;
 
    for (i = 0; i < gl_NumberOfMaterials; i++)
    {
        if ( _pst_Material == gapst_Material[ i ] )
        {
            memmove( gapst_Material[ i ], gapst_Material[ i + 1 ], (gl_NumberOfMaterials - (i + 1)) * sizeof( GLI_tdstMaterial *) );
            gl_NumberOfMaterials--;
            return;
        }
    }
}
 
void MATBENCH_fn_vWriteMaterialInfoInFile( char *_szTitle )
{
    FILE    *hpFile;
    long    i;
    char    szFileName[ 20 ];
    long    lScroll, lAnimate;
 
    i = 0;
  	while(1)
	{
		sprintf( szFileName, "MatBench%03d.log", i );
		if (_access( szFileName, 0 ) != 0)
			break;
		if (i++ == 1000)
			return;
	}
 
    if ( (hpFile = fopen( szFileName, "wt" )) == NULL )
        return;
 
	fprintf(hpFile, "Material stats : %s, %d materials\r\n\r\n", _szTitle, gl_NumberOfMaterials );
 
    lScroll = lAnimate = 0;
 
    for (i = 0; i < gl_NumberOfMaterials; i++ )
    {
        fprintf( hpFile, "%08X, %08X, %2d, %2d , %08X %s\r\n",
                    gapst_Material[i],
                    gapst_Material[i]->xMaterialType,
                    gapst_Material[i]->lIncrementIsEnable,
                    gapst_Material[i]->lNumberOfDisplayNode,
                    gapst_Material[i]->p_stTexture,
                    gapst_Material[i]->p_stTexture ? gapst_Material[i]->p_stTexture->a255_cFileName :""
                );
        if (gapst_Material[i]->lIncrementIsEnable)
            lScroll++;
        if (gapst_Material[i]->lNumberOfDisplayNode)
            lAnimate++;
    }
 
    fprintf( hpFile, "\r\n" );
    fprintf( hpFile, "Material structure size : %d => %d \r\n", sizeof ( GLI_tdstMaterial ), gl_NumberOfMaterials * sizeof( GLI_tdstMaterial ) );
    fprintf( hpFile, "Optimized size = %d\r\n", gl_NumberOfMaterials * 84 + lScroll * 20 + lAnimate * 24 );
 
    gl_NumberOfMaterials = 0;
 
 
    fclose( hpFile );
}
 
 
 
 
 
 
#endif /* BENCH_MATERIAL */
