thug/Code/Gfx/NGC/p_loadscreen.cpp

649 lines
20 KiB
C++
Raw Normal View History

2016-02-13 21:39:12 +00:00
///*****************************************************************************
//** **
//** Neversoft Entertainment. **
//** **
//** Copyright (C) 2000 - All Rights Reserved **
//** **
//******************************************************************************
//** **
//** Project: Gfx **
//** **
//** Module: LoadScreen **
//** **
//** File name: p_loadscreen.cpp **
//** **
//** Created by: 05/08/02 - SPG **
//** **
//** Description: PS2-specific loading screen calls **
//** **
//*****************************************************************************/
//
///*****************************************************************************
//** Includes **
//*****************************************************************************/
//
//#include <core/defines.h>
//
//#include <sys/file/filesys.h>
//#include <sys/timer.h>
//
//#include <gel/mainloop.h>
//
//#include <gfx/ngc/p_memview.h>
//#include <sys/ngc/p_display.h>
//#include <sys/ngc/p_camera.h>
//#include <sys/ngc/p_render.h>
//#include <sys/ngc/p_prim.h>
//#include <sys/ngc/p_texman.h>
//#include <sys/ngc/p_file.h>
//#include <sys/ngc/p_dvd.h>
//
//#include "sys/ngc/p_profile.h"
//
//#include <gfx/nx.h>
//
//NsProfile _gpu( "GPU", 256 );
//NsProfile _cpu( "CPU", 256 );
//static volatile int _open = 0;
//
//NsCamera camera2D;
//int heaperror = 0;
//
///*****************************************************************************
//** DBG Information **
//*****************************************************************************/
//
//extern void (*pIconCallback)( void );
//
////extern void* copyXFB;
////extern void* dispXFB;
////extern void* myXFB1;
////extern void* myXFB2;
//
//namespace LoadScreen
//{
//
///*****************************************************************************
//** Externals **
//*****************************************************************************/
//
///*****************************************************************************
//** Defines **
//*****************************************************************************/
//
//#define vMAX_PIXEL_DATA_SIZE ( 32767 * 16 )
//
//#define ENABLE_LOADING_ICON 1
//
//
///*****************************************************************************
//** Private Types **
//*****************************************************************************/
//
//class LoadingIconData
//{
//public:
// int m_X;
// int m_Y;
// int m_FrameDelay;
// NsTexture** m_Rasters;
// int m_NumFrames;
//};
//
///*****************************************************************************
//** Private Data **
//*****************************************************************************/
//
//static bool s_loading_screen_on = false;
//static OSThread s_load_icon_thread;
//static OSAlarm s_alarm;
//static LoadingIconData s_load_icon_data = { 0 };
////static char s_load_icon_thread_stack[4096] __attribute__ (( aligned( 16 )));
//static volatile bool s_terminate_thread = false;
//static volatile bool s_terminate_thread_done = false;
//static bool s_thread_exists = false;
//
///*****************************************************************************
//** Public Data **
//*****************************************************************************/
//
///*****************************************************************************
//** Private Prototypes **
//*****************************************************************************/
//
///*****************************************************************************
//** Private Functions **
//*****************************************************************************/
//
///******************************************************************/
///* */
///* */
///******************************************************************/
//void s_thread_loading_icon_alarm_handler( OSAlarm* alarm, OSContext* context )
//{
// // Check the thread has not been resumed yet...
// if( OSIsThreadSuspended( &s_load_icon_thread ))
// {
// OSResumeThread( &s_load_icon_thread );
// }
//}
//
//
//
///******************************************************************/
///* */
///* */
///******************************************************************/
//void s_non_threaded_loading_icon( void )
//{
// LoadingIconData* p_data = (LoadingIconData*)&s_load_icon_data;
//
// static int current_image = 0;
// static Tmr::Time time = 0;
//
// Tmr::Time time_now = Tmr::GetVblanks();
//
// if(( time_now < time ) || ( time_now > ( time + p_data->m_FrameDelay )))
// {
// time = time_now;
//
// NsTexture* p_texture = p_data->m_Rasters[current_image];
//
// NsDisplay::begin();
//
// NsRender::begin();
//
//// NsPrim::begin();
// GXSetVtxAttrFmt( GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0 ); // 3 = positions & uvs.
// GXSetVtxAttrFmt( GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0 );
//
// camera2D.orthographic( 0, 0, 640, 448 );
//
// NsRender::setBlendMode( NsBlendMode_None, p_texture, (unsigned char)0 );
//
// GXClearVtxDesc();
// GXSetVtxDesc( GX_VA_POS, GX_DIRECT );
// GXSetVtxDesc( GX_VA_TEX0, GX_DIRECT );
// GX::SetChanMatColor( GX_COLOR0, (GXColor){ 128,128,128,128 });
// GX::SetChanCtrl( GX_COLOR0A0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE );
//
// p_texture->upload( NsTexture_Wrap_Clamp );
//
// GXBegin( GX_QUADS, GX_VTXFMT0, 4 );
// GXPosition3f32((float)p_data->m_X, (float)p_data->m_Y, -1.0f );
// GXTexCoord2f32( 0.0f, 0.0f );
// GXPosition3f32((float)p_data->m_X + (float)p_texture->m_width, (float)p_data->m_Y, -1.0f );
// GXTexCoord2f32( 1.0f, 0.0f );
// GXPosition3f32((float)p_data->m_X + (float)p_texture->m_width, (float)p_data->m_Y + (float)p_texture->m_height, -1.0f );
// GXTexCoord2f32( 1.0f, 1.0f );
// GXPosition3f32((float)p_data->m_X, (float)p_data->m_Y + (float)p_texture->m_height, -1.0f );
// GXTexCoord2f32( 0.0f, 1.0f );
// GXEnd();
//
//// NsPrim::end();
//
// camera2D.end();
//
// NsRender::end();
//
// NsDisplay::end( false );
//
// current_image = ( current_image + 1 ) % p_data->m_NumFrames ;
// }
//}
//
//
//
///******************************************************************/
///* */
///* */
///******************************************************************/
//void* s_threaded_loading_icon( void* data )
//{
// LoadingIconData* p_data = (LoadingIconData*)data;
//
// int current_image = 0;
//
// while( 1 )
// {
// if( s_terminate_thread )
// {
// // This thread is done...
// s_terminate_thread_done = true;
// return NULL;
// }
//
// bool busy = /*NsModel::busy() | DVDError() |*/ heaperror;
//
// // Don't want to do draw anything whilst display lists are being built. Come back in a bit.
// if( !busy )
// {
// NsTexture* p_texture = p_data->m_Rasters[current_image];
//
// NsDisplay::begin();
// NsRender::begin();
//
// GXSetVtxAttrFmt( GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0 ); // 3 = positions & uvs.
// GXSetVtxAttrFmt( GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0 );
//
// camera2D.orthographic( 0, 0, 640, 448 );
//
// NsRender::setBlendMode( NsBlendMode_None, p_texture, (unsigned char)0 );
//
// GXClearVtxDesc();
// GXSetVtxDesc( GX_VA_POS, GX_DIRECT );
// GXSetVtxDesc( GX_VA_TEX0, GX_DIRECT );
// GX::SetChanMatColor( GX_COLOR0, (GXColor){ 128,128,128,128 });
// GX::SetChanCtrl( GX_COLOR0A0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE );
//
// p_texture->upload( NsTexture_Wrap_Clamp );
//
// GXBegin( GX_QUADS, GX_VTXFMT0, 4 );
// GXPosition3f32((float)p_data->m_X, (float)p_data->m_Y, -1.0f );
// GXTexCoord2f32( 0.0f, 0.0f );
// GXPosition3f32((float)p_data->m_X + (float)p_texture->m_width, (float)p_data->m_Y, -1.0f );
// GXTexCoord2f32( 1.0f, 0.0f );
// GXPosition3f32((float)p_data->m_X + (float)p_texture->m_width, (float)p_data->m_Y + (float)p_texture->m_height, -1.0f );
// GXTexCoord2f32( 1.0f, 1.0f );
// GXPosition3f32((float)p_data->m_X, (float)p_data->m_Y + (float)p_texture->m_height, -1.0f );
// GXTexCoord2f32( 0.0f, 1.0f );
// GXEnd();
//
// camera2D.end();
//
// NsRender::end();
// NsDisplay::end( false );
//
// current_image = ( current_image + 1 ) % p_data->m_NumFrames ;
// }
//
// // Go to sleep.
// if( busy )
// {
// // Come back shortly.
// OSSetAlarm( &s_alarm, OSMillisecondsToTicks( 50 ), s_thread_loading_icon_alarm_handler );
// }
// else
// {
// // Come back in the proper time.
// OSSetAlarm( &s_alarm, OSMillisecondsToTicks( s_load_icon_data.m_FrameDelay ), s_thread_loading_icon_alarm_handler );
// }
//
// OSSuspendThread( &s_load_icon_thread );
// }
//}
//
//
///*****************************************************************************
//** Public Functions **
//*****************************************************************************/
//
///******************************************************************/
///* */
///* */
///******************************************************************/
//void SetLoadingIconProperties( int x, int y, int frame_delay, int num_frames, char* basename, char* ext )
//{
//// int i;
////
//// if( s_load_icon_data.m_NumFrames > 0 )
//// {
//// for( i = 0; i < s_load_icon_data.m_NumFrames; i++ )
//// {
//// delete s_load_icon_data.m_Rasters[i];
//// }
//// delete [] s_load_icon_data.m_Rasters;
//// }
////
//// s_load_icon_data.m_X = x;
//// s_load_icon_data.m_Y = y;
//// s_load_icon_data.m_FrameDelay = ( frame_delay * 1000 ) / 60; // Convert from frames to milliseconds.
////// s_load_icon_data.m_FrameDelay = frame_delay;
//// s_load_icon_data.m_NumFrames = num_frames;
//// s_load_icon_data.m_Rasters = new NsTexture*[s_load_icon_data.m_NumFrames];
////
//// for( i = 0; i < s_load_icon_data.m_NumFrames; i++ )
//// {
//// NsFile file;
////
//// char image_name[64];
//// sprintf( image_name, "%s%d.%s", basename, i+1, ext );
////
//// file.open( image_name );
//// int filesize = file.size();
//// uint8 *pData = (uint8*)new uint8[filesize + 31];
//// pData = (uint8*)OSRoundUp32B( pData );
//// file.read( pData, filesize );
//// file.close();
////
//// NsTexture *pTex = (NsTexture*)pData;
//// pData = (uint8*)&pTex[1];
//// pTex->m_pImage = pData;
//// pData += ( pTex->m_width * pTex->m_height * pTex->m_depth ) / 8;
//// pTex->m_pPalette = pData;
////
//// s_load_icon_data.m_Rasters[i] = pTex;
//// }
//}
//
//void _start( void )
//{
// _gpu.start();
// _open = 1;
//}
//
//void _end( void )
//{
// _gpu.stop();
// _open = 0;
//}
//
///******************************************************************/
///* */
///* */
///******************************************************************/
//void Display( char* filename, bool just_freeze, bool blank )
//{
//// float y = 0;
////
//// while ( 1 )
//// {
//// Nx::CEngine::sPreRender();
////
////// Nx::CEngine::sRenderWorld();
////
//////--------------------------------------------------
////
//// NsCamera cam;
//// cam.orthographic( 0, 0, 640, 448 );
////
//// // Draw the screen.
//// NsPrim::begin();
////
//// cam.begin();
////
//// NsRender::setBlendMode( NsBlendMode_None, NULL, (unsigned char)0 );
////
//// NsPrim::box( 64, 64 + y, 640-64, 64+80 + y, (GXColor){0,32,64,128} );
////
//// y += 1.0f;
//// if ( y > 256.0f ) y -= 256.0f;
////
//// cam.end();
////
//// NsPrim::end();
////
//////--------------------------------------------------
////
//// Nx::CEngine::sPostRender();
//// }
//
//// Spt::SingletonPtr< Mlp::Manager > mlp_man;
//// Tmr::Time start_time;
////
////#if 0
//// NsDisplay::setRenderStartCallback( _start );
//// NsDisplay::setRenderEndCallback( _end );
////
//// camera2D.orthographic ( 0, 0, 640, 448 );
//// int col = 0;
////
//// NsDisplay::setRenderStartCallback( _start );
//// NsDisplay::setRenderEndCallback( _end );
////
//// while ( 1 ) {
//// NsDisplay::setBackgroundColor ( (GXColor){0,0,255,0} );
//// col+=2;
//// if (col == 256) col = 0;
////
//// // Draw the screen.
//// NsDisplay::begin();
//// NsRender::begin();
//// NsPrim::begin();
////
//// camera2D.begin();
////
//// _cpu.start();
////
//// NsRender::setBlendMode( NsBlendMode_None, NULL, (unsigned char)128 );
////
////
//// GXClearVtxDesc();
//// GXSetVtxDesc( GX_VA_POS, GX_DIRECT );
////
//// // Set material color.
//// GX::SetChanMatColor( GX_COLOR0A0, (GXColor){255,255,col,128} );
//// GX::SetChanAmbColor( GX_COLOR0A0, (GXColor){255,255,255,255} );
////
//// GX::SetChanCtrl( GX_COLOR0A0, GX_ENABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE );
////
////
//// for (int lp = 0; lp < 3000; lp++) {
//// float l = 64+col;
//// float t = 64;
//// float r = 64+2+col;
//// float b = 64+2;
////// NsPrim::box ( 64+col, 64, 80+col, 80, (GXColor){255,255,col,128} );
////
//// // Send coordinates.
//// GXBegin( GX_QUADS, GX_VTXFMT0, 4 );
//// GXPosition3f32(l, t, -1.0f);
//// GXPosition3f32(r, t, -1.0f);
//// GXPosition3f32(r, b, -1.0f);
//// GXPosition3f32(l, b, -1.0f);
//// GXEnd();
//// }
////
//// _cpu.stop();
////
////// while ( _open );
//// _gpu.histogram( 576, 32, 608, 416, (GXColor){255,0,0,128} );
//// _cpu.histogram( 544, 32, 576, 416, (GXColor){0,255,0,128} );
////
//// camera2D.end();
////
//// NsPrim::end();
//// NsRender::end();
//// NsDisplay::end( true );
//// }
////#endif
////
////
////
////
////
////
////
////
////
////
////
////
////
////
////
////
////
////
////
////
////
////
////
////
////
////
//// if( s_loading_screen_on )
//// {
//// return;
//// }
////
//// start_time = Tmr::GetTime();
////
//// if( !just_freeze && !blank )
//// {
//// // Load in the screen.
//// NsFile file;
//// NsTexture * pTex = (NsTexture *)file.load( filename );
////
//// // Skip data.
//// uint8 * pData = (uint8 *)&pTex[1];
//// pTex->m_pImage = pData;
//// pData += ( pTex->m_width * pTex->m_height * pTex->m_depth ) / 8;
//// pTex->m_pPalette = pData;
////
//// camera2D.orthographic ( 0, 0, 640, 448 );
//// NsDisplay::setBackgroundColor ( (GXColor){0,0,0,0} );
////
//// for ( int lp = 0; lp < 2; lp++ )
//// {
//// // Draw the screen.
//// NsDisplay::begin();
//// NsRender::begin();
//// NsPrim::begin();
////
//// camera2D.begin();
////
//// NsRender::setBlendMode( NsBlendMode_None, pTex, (unsigned char)0 );
//// NsPrim::sprite ( pTex, 0.0f, 0.0f, -1.0f );
////
//// camera2D.end();
////
//// NsPrim::end();
//// NsRender::end();
//// NsDisplay::end( false );
//// }
////
//// // Wait for it to finish.
//// NsDisplay::flush();
////
//// // We're done.
//// delete pTex;
////
//// // Start the thread to display the animated loading icon.
////# if ENABLE_LOADING_ICON
////// pIconCallback = s_non_threaded_loading_icon;
//// BOOL rv = true;
////
//// s_terminate_thread = false;
////
//// memset( &s_load_icon_thread, 0, sizeof( OSThread ));
//// rv = OSCreateThread( &s_load_icon_thread,
//// s_threaded_loading_icon, // Entry function.
//// &s_load_icon_data, // Argument for start function.
//// s_load_icon_thread_stack + sizeof( s_load_icon_thread_stack ), // Stack base (stack grows down).
//// sizeof( s_load_icon_thread_stack ), // Stack size in bytes.
//// 1, // Thread priority.
//// OS_THREAD_ATTR_DETACH ); // Thread attributes.
//// Dbg_MsgAssert( rv, ( "Failed to create thread" ));
////
//// if( rv )
//// {
//// s_thread_exists = true;
////// OSResumeThread( &s_load_icon_thread );
//// OSSetAlarm( &s_alarm, OSMillisecondsToTicks( s_load_icon_data.m_FrameDelay ), s_thread_loading_icon_alarm_handler );
//// }
////# endif // ENABLE_LOADING_ICON
//// }
//// else
//// {
//// // Wait a couple of VBlanks for RW stuff to disappear
//// // Mick: so there is no pending page flip
//// while( Tmr::GetVblanks() - start_time < 2 );
////
//// // not loading, just freezing, maybe should copy current buffer over second buffer?
//// if( blank )
//// {
//// // Need to clear the screen here.
////// RpSkySuspend( ); // Turn or Renderwware inputs and stuff
////// Flx::clearGsMem(0x00, 0x00, 0x00, 640, 448*2);
////// RpSkyResume( ); // and trun em back on, with the screen nice and blank...
//// }
//// }
//// s_loading_screen_on = true;
////
//// mlp_man->PauseDisplayTasks( true );
//}
//
///******************************************************************/
///* */
///* */
///******************************************************************/
//
//void Hide( void )
//{
//# if ENABLE_LOADING_ICON
// if( s_thread_exists )
// {
// s_terminate_thread_done = false;
// s_terminate_thread = true;
//
// // Cancel the alarm and resume the thread.
//// OSCancelAlarm( &s_alarm );
//// OSResumeThread( &s_load_icon_thread );
//
// while( !s_terminate_thread_done );
//
// s_thread_exists = false;
//// pIconCallback = NULL;
//
// VISetBlack( TRUE );
// VIFlush();
// VIWaitForRetrace();
// NsDisplay::flush();
// VISetBlack( FALSE );
// VIFlush();
// VIWaitForRetrace();
// }
//# endif // ENABLE_LOADING_ICON
//
// Spt::SingletonPtr< Mlp::Manager > mlp_man;
// mlp_man->PauseDisplayTasks( false );
//
// if( !s_loading_screen_on )
// {
// return;
// }
//
// s_loading_screen_on = false;
//}
//
///******************************************************************/
///* */
///* */
///******************************************************************/
//
//void StartProgressBar( char* tick_image, int num_ticks, int x, int y )
//{
//}
//
///******************************************************************/
///* */
///* */
///******************************************************************/
//
//void ProgressTick( int num_ticks )
//{
//}
//
///******************************************************************/
///* */
///* */
///******************************************************************/
//
//void EndProgressBar( void )
//{
//}
//
///******************************************************************/
///* */
///* */
///******************************************************************/
//
//} // namespace LoadScreen