Fade Screen.c 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699
  1. #ifdef PRECOMPILEDHEADERS
  2. #include "JA2 All.h"
  3. #else
  4. #include "sgp.h"
  5. #include "screenids.h"
  6. #include "Timer Control.h"
  7. #include "sys globals.h"
  8. #include "fade screen.h"
  9. #include "sysutil.h"
  10. #include "vobject_blitters.h"
  11. #include "cursor control.h"
  12. #include "music control.h"
  13. #include "Render Dirty.h"
  14. #include "gameloop.h"
  15. #endif
  16. #define SQUARE_STEP 8
  17. UINT32 guiExitScreen;
  18. BOOLEAN gfFadeInitialized = FALSE;
  19. INT8 gbFadeValue;
  20. INT16 gsFadeLimit;
  21. UINT32 guiTime;
  22. UINT32 guiFadeDelay;
  23. BOOLEAN gfFirstTimeInFade = FALSE;
  24. INT16 gsFadeCount;
  25. INT8 gbFadeType;
  26. BOOLEAN gfFadeIn;
  27. INT32 giX1, giX2, giY1, giY2;
  28. INT16 gsFadeRealCount;
  29. BOOLEAN gfFadeInVideo;
  30. UINT32 uiOldMusicMode;
  31. FADE_FUNCTION gFadeFunction = NULL;
  32. FADE_HOOK gFadeInDoneCallback = NULL;
  33. FADE_HOOK gFadeOutDoneCallback = NULL;
  34. void FadeFrameBufferSquare( );
  35. void FadeFrameBufferVersionOne( );
  36. void FadeFrameBufferVersionFaster( );
  37. void FadeFrameBufferSide( );
  38. void FadeFrameBufferRealFade( );
  39. void FadeInBackBufferVersionOne( );
  40. void FadeInBackBufferSquare( );
  41. void FadeInFrameBufferRealFade( );
  42. extern BOOLEAN ShadowVideoSurfaceRectUsingLowPercentTable( UINT32 uiDestVSurface, INT32 X1, INT32 Y1, INT32 X2, INT32 Y2);
  43. BOOLEAN UpdateSaveBufferWithBackbuffer( void );
  44. BOOLEAN gfFadeIn = FALSE;
  45. BOOLEAN gfFadeOut = FALSE;
  46. BOOLEAN gfFadeOutDone = FALSE;
  47. BOOLEAN gfFadeInDone = FALSE;
  48. void FadeInNextFrame( )
  49. {
  50. gfFadeIn = TRUE;
  51. gfFadeInDone = FALSE;
  52. }
  53. void FadeOutNextFrame( )
  54. {
  55. gfFadeOut = TRUE;
  56. gfFadeOutDone = FALSE;
  57. }
  58. BOOLEAN HandleBeginFadeIn( UINT32 uiScreenExit )
  59. {
  60. if ( gfFadeIn )
  61. {
  62. BeginFade( uiScreenExit, 35, FADE_IN_REALFADE, 5 );
  63. gfFadeIn = FALSE;
  64. gfFadeInDone = TRUE;
  65. return( TRUE );
  66. }
  67. return( FALSE );
  68. }
  69. BOOLEAN HandleBeginFadeOut( UINT32 uiScreenExit )
  70. {
  71. if ( gfFadeOut )
  72. {
  73. BeginFade( uiScreenExit, 35, FADE_OUT_REALFADE, 5 );
  74. gfFadeOut = FALSE;
  75. gfFadeOutDone = TRUE;
  76. return( TRUE );
  77. }
  78. return( FALSE );
  79. }
  80. BOOLEAN HandleFadeOutCallback( )
  81. {
  82. if ( gfFadeOutDone )
  83. {
  84. gfFadeOutDone = FALSE;
  85. if ( gFadeOutDoneCallback != NULL )
  86. {
  87. gFadeOutDoneCallback( );
  88. gFadeOutDoneCallback = NULL;
  89. return( TRUE );
  90. }
  91. }
  92. return( FALSE );
  93. }
  94. BOOLEAN HandleFadeInCallback( )
  95. {
  96. if ( gfFadeInDone )
  97. {
  98. gfFadeInDone = FALSE;
  99. if ( gFadeInDoneCallback != NULL )
  100. {
  101. gFadeInDoneCallback( );
  102. }
  103. gFadeInDoneCallback = NULL;
  104. return( TRUE );
  105. }
  106. return( FALSE );
  107. }
  108. void BeginFade( UINT32 uiExitScreen, INT8 bFadeValue, INT8 bType, UINT32 uiDelay )
  109. {
  110. //Init some paramters
  111. guiExitScreen = uiExitScreen;
  112. gbFadeValue = bFadeValue;
  113. guiFadeDelay = uiDelay;
  114. gfFadeIn = FALSE;
  115. gfFadeInVideo = TRUE;
  116. uiOldMusicMode = uiMusicHandle;
  117. // Calculate step;
  118. switch ( bType )
  119. {
  120. case FADE_IN_REALFADE:
  121. gsFadeRealCount = -1;
  122. gsFadeLimit = 8;
  123. gFadeFunction = (FADE_FUNCTION)FadeInFrameBufferRealFade;
  124. gfFadeInVideo = FALSE;
  125. // Copy backbuffer to savebuffer
  126. UpdateSaveBufferWithBackbuffer( );
  127. // Clear framebuffer
  128. ColorFillVideoSurfaceArea( FRAME_BUFFER, 0, 0, 640, 480, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
  129. break;
  130. case FADE_OUT_REALFADE:
  131. gsFadeRealCount = -1;
  132. gsFadeLimit = 10;
  133. gFadeFunction = (FADE_FUNCTION)FadeFrameBufferRealFade;
  134. gfFadeInVideo = FALSE;
  135. // Clear framebuffer
  136. //ColorFillVideoSurfaceArea( FRAME_BUFFER, 0, 0, 640, 480, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
  137. break;
  138. case FADE_OUT_VERSION_ONE:
  139. //gsFadeLimit = 255 / bFadeValue;
  140. //gFadeFunction = (FADE_FUNCTION)FadeFrameBufferVersionOne;
  141. //SetMusicFadeSpeed( 25 );
  142. //SetMusicMode( MUSIC_NONE );
  143. break;
  144. case FADE_OUT_SQUARE:
  145. gsFadeLimit = (640 / ( SQUARE_STEP * 2 ) );
  146. giX1 = 0;
  147. giX2 = 640;
  148. giY1 = 0;
  149. giY2 = 480;
  150. gFadeFunction = (FADE_FUNCTION)FadeFrameBufferSquare;
  151. // Zero frame buffer
  152. ColorFillVideoSurfaceArea( FRAME_BUFFER, 0, 0, 640, 480, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
  153. //ColorFillVideoSurfaceArea( guiSAVEBUFFER, 0, 0, 640, 480, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
  154. // SetMusicFadeSpeed( 25 );
  155. //SetMusicMode( MUSIC_NONE );
  156. break;
  157. case FADE_IN_VERSION_ONE:
  158. gsFadeLimit = 255 / bFadeValue;
  159. gFadeFunction = (FADE_FUNCTION)FadeInBackBufferVersionOne;
  160. break;
  161. case FADE_IN_SQUARE:
  162. gFadeFunction = (FADE_FUNCTION)FadeInBackBufferSquare;
  163. giX1 = 320;
  164. giX2 = 320;
  165. giY1 = 240;
  166. giY2 = 240;
  167. gsFadeLimit = (640 / ( SQUARE_STEP * 2 ) );
  168. gfFadeIn = TRUE;
  169. break;
  170. case FADE_OUT_VERSION_FASTER:
  171. gsFadeLimit = (255 / bFadeValue) * 2;
  172. gFadeFunction = (FADE_FUNCTION)FadeFrameBufferVersionFaster;
  173. //SetMusicFadeSpeed( 25 );
  174. //SetMusicMode( MUSIC_NONE );
  175. break;
  176. case FADE_OUT_VERSION_SIDE:
  177. // Copy frame buffer to save buffer
  178. gsFadeLimit = (640 / 8 );
  179. gFadeFunction = (FADE_FUNCTION)FadeFrameBufferSide;
  180. //SetMusicFadeSpeed( 25 );
  181. //SetMusicMode( MUSIC_NONE );
  182. break;
  183. }
  184. gfFadeInitialized = TRUE;
  185. gfFirstTimeInFade = TRUE;
  186. gsFadeCount = 0;
  187. gbFadeType = bType;
  188. SetPendingNewScreen(FADE_SCREEN);
  189. }
  190. UINT32 FadeScreenInit( )
  191. {
  192. return( TRUE );
  193. }
  194. UINT32 FadeScreenHandle( )
  195. {
  196. UINT32 uiTime;
  197. if ( !gfFadeInitialized )
  198. {
  199. SET_ERROR( "Fade Screen called but not intialized " );
  200. return( ERROR_SCREEN );
  201. }
  202. // ATE: Remove cursor
  203. SetCurrentCursorFromDatabase( VIDEO_NO_CURSOR );
  204. if ( gfFirstTimeInFade )
  205. {
  206. gfFirstTimeInFade = FALSE;
  207. // Calcuate delay
  208. guiTime = GetJA2Clock( );
  209. }
  210. // Get time
  211. uiTime = GetJA2Clock( );
  212. MusicPoll( TRUE );
  213. if ( ( uiTime - guiTime ) > guiFadeDelay )
  214. {
  215. // Fade!
  216. if ( !gfFadeIn )
  217. {
  218. //gFadeFunction( );
  219. }
  220. InvalidateScreen();
  221. if ( !gfFadeInVideo )
  222. {
  223. gFadeFunction( );
  224. }
  225. gsFadeCount++;
  226. if ( gsFadeCount > gsFadeLimit )
  227. {
  228. switch( gbFadeType )
  229. {
  230. case FADE_OUT_REALFADE:
  231. // Clear framebuffer
  232. ColorFillVideoSurfaceArea( FRAME_BUFFER, 0, 0, 640, 480, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
  233. break;
  234. }
  235. //End!
  236. gfFadeInitialized = FALSE;
  237. gfFadeIn = FALSE;
  238. return( guiExitScreen );
  239. }
  240. }
  241. return( FADE_SCREEN );
  242. }
  243. UINT32 FadeScreenShutdown( )
  244. {
  245. return( FALSE );
  246. }
  247. void FadeFrameBufferVersionOne( )
  248. {
  249. INT32 cX, cY;
  250. UINT32 uiDestPitchBYTES;
  251. UINT16 *pBuf;
  252. INT16 bR, bG, bB;
  253. UINT32 uiRGBColor;
  254. UINT16 s16BPPSrc;
  255. pBuf = (UINT16*)LockVideoSurface(FRAME_BUFFER, &uiDestPitchBYTES);
  256. // LOCK FRAME BUFFER
  257. for ( cX = 0; cX < 640; cX++ )
  258. {
  259. for ( cY = 0; cY < 480; cY++ )
  260. {
  261. s16BPPSrc = pBuf[ ( cY * 640 ) + cX ];
  262. uiRGBColor = GetRGBColor( s16BPPSrc );
  263. bR = SGPGetRValue( uiRGBColor );
  264. bG = SGPGetGValue( uiRGBColor );
  265. bB = SGPGetBValue( uiRGBColor );
  266. // Fade down
  267. bR -= gbFadeValue;
  268. if ( bR < 0 )
  269. bR = 0;
  270. bG -= gbFadeValue;
  271. if ( bG < 0 )
  272. bG = 0;
  273. bB -= gbFadeValue;
  274. if ( bB < 0 )
  275. bB = 0;
  276. // Set back info buffer
  277. pBuf[ ( cY * 640 ) + cX ] = Get16BPPColor( FROMRGB( bR, bG, bB ) );
  278. }
  279. }
  280. UnLockVideoSurface(FRAME_BUFFER);
  281. }
  282. void FadeInBackBufferVersionOne( )
  283. {
  284. INT32 cX, cY;
  285. UINT32 uiDestPitchBYTES, uiSrcPitchBYTES;
  286. UINT16 *pSrcBuf, *pDestBuf;
  287. INT16 bR, bG, bB;
  288. UINT32 uiRGBColor;
  289. UINT16 s16BPPSrc;
  290. INT16 bFadeVal = ( gsFadeLimit - gsFadeCount ) * gbFadeValue;
  291. pDestBuf = (UINT16*)LockVideoSurface(BACKBUFFER, &uiDestPitchBYTES);
  292. pSrcBuf = (UINT16*)LockVideoSurface(FRAME_BUFFER, &uiSrcPitchBYTES);
  293. // LOCK FRAME BUFFER
  294. for ( cX = 0; cX < 640; cX++ )
  295. {
  296. for ( cY = 0; cY < 480; cY++ )
  297. {
  298. s16BPPSrc = pSrcBuf[ ( cY * 640 ) + cX ];
  299. uiRGBColor = GetRGBColor( s16BPPSrc );
  300. bR = SGPGetRValue( uiRGBColor );
  301. bG = SGPGetGValue( uiRGBColor );
  302. bB = SGPGetBValue( uiRGBColor );
  303. // Fade down
  304. bR -= bFadeVal;
  305. if ( bR < 0 )
  306. bR = 0;
  307. bG -= bFadeVal;
  308. if ( bG < 0 )
  309. bG = 0;
  310. bB -= bFadeVal;
  311. if ( bB < 0 )
  312. bB = 0;
  313. // Set back info dest buffer
  314. pDestBuf[ ( cY * 640 ) + cX ] = Get16BPPColor( FROMRGB( bR, bG, bB ) );
  315. }
  316. }
  317. UnLockVideoSurface(FRAME_BUFFER);
  318. UnLockVideoSurface(BACKBUFFER);
  319. }
  320. void FadeFrameBufferVersionFaster( INT8 bFadeValue )
  321. {
  322. INT32 cX, cY, iStartX, iStartY;
  323. UINT32 uiDestPitchBYTES;
  324. UINT16 *pBuf;
  325. INT16 bR, bG, bB;
  326. UINT32 uiRGBColor;
  327. UINT16 s16BPPSrc;
  328. pBuf = (UINT16*)LockVideoSurface(FRAME_BUFFER, &uiDestPitchBYTES);
  329. iStartX = gsFadeCount % 2;
  330. iStartY = 0;
  331. // LOCK FRAME BUFFER
  332. for ( cX = iStartX; cX < 640; cX+= 2 )
  333. {
  334. if ( iStartX == 1 )
  335. {
  336. iStartX = 0;
  337. }
  338. else
  339. {
  340. iStartX = 1;
  341. }
  342. for ( cY = iStartY; cY < 480; cY++ )
  343. {
  344. s16BPPSrc = pBuf[ ( cY * 640 ) + cX ];
  345. uiRGBColor = GetRGBColor( s16BPPSrc );
  346. bR = SGPGetRValue( uiRGBColor );
  347. bG = SGPGetGValue( uiRGBColor );
  348. bB = SGPGetBValue( uiRGBColor );
  349. // Fade down
  350. bR -= bFadeValue;
  351. if ( bR < 0 )
  352. bR = 0;
  353. bG -= bFadeValue;
  354. if ( bG < 0 )
  355. bG = 0;
  356. bB -= bFadeValue;
  357. if ( bB < 0 )
  358. bB = 0;
  359. // Set back info buffer
  360. pBuf[ ( cY * 640 ) + cX ] = Get16BPPColor( FROMRGB( bR, bG, bB ) );
  361. }
  362. }
  363. UnLockVideoSurface(FRAME_BUFFER);
  364. }
  365. void FadeFrameBufferSide( )
  366. {
  367. INT32 iX1, iX2;
  368. INT16 sFadeMove;
  369. sFadeMove = gsFadeCount * 4;
  370. iX1 = 0;
  371. iX2 = sFadeMove;
  372. ColorFillVideoSurfaceArea( FRAME_BUFFER, iX1, 0, iX2, 480, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
  373. iX1 = 640 - sFadeMove;
  374. iX2 = 640;
  375. ColorFillVideoSurfaceArea( FRAME_BUFFER, iX1, 0, iX2, 480, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
  376. }
  377. void FadeFrameBufferSquare( )
  378. {
  379. INT32 iX1, iX2, iY1, iY2;
  380. INT16 sFadeXMove, sFadeYMove;
  381. sFadeXMove = SQUARE_STEP;
  382. sFadeYMove = (INT16)(sFadeXMove * .75);
  383. iX1 = giX1;
  384. iX2 = giX1 + sFadeXMove;
  385. iY1 = giY1;
  386. iY2 = giY1 + sFadeYMove;
  387. ColorFillVideoSurfaceArea( BACKBUFFER, iX1, 0, iX2, 480, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
  388. ColorFillVideoSurfaceArea( BACKBUFFER, 0, iY1, 640, iY2, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
  389. iX1 = giX2 - sFadeXMove;
  390. iX2 = giX2;
  391. iY1 = giY2 - sFadeYMove;
  392. iY2 = giY2;
  393. ColorFillVideoSurfaceArea( BACKBUFFER, iX1, 0, iX2, 480, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
  394. ColorFillVideoSurfaceArea( BACKBUFFER, 0, iY1, 640, iY2, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
  395. giX1 += sFadeXMove;
  396. giX2 -= sFadeXMove;
  397. giY1 += sFadeYMove;
  398. giY2 -= sFadeYMove;
  399. }
  400. void FadeInBackBufferSquare( )
  401. {
  402. INT32 iX1, iX2, iY1, iY2;
  403. INT16 sFadeXMove, sFadeYMove;
  404. blt_vs_fx BltFx;
  405. sFadeXMove = SQUARE_STEP;
  406. sFadeYMove = (INT16)(sFadeXMove * .75);
  407. if ( gsFadeCount == 0 )
  408. {
  409. ColorFillVideoSurfaceArea( BACKBUFFER, 0, 0, 640, 480, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
  410. }
  411. iX1 = giX1 - sFadeXMove;
  412. iX2 = giX1;
  413. iY1 = giY1 - sFadeYMove;
  414. iY2 = giY2 + sFadeYMove;
  415. BltFx.SrcRect.iLeft = iX1;
  416. BltFx.SrcRect.iTop = iY1;
  417. BltFx.SrcRect.iRight = iX2;
  418. BltFx.SrcRect.iBottom = iY2;
  419. if ( BltFx.SrcRect.iRight != BltFx.SrcRect.iLeft )
  420. {
  421. BltVideoSurface( BACKBUFFER, FRAME_BUFFER, 0,
  422. iX1, iY1,
  423. VS_BLT_SRCSUBRECT, &BltFx );
  424. }
  425. iX1 = giX2;
  426. iX2 = giX2 + sFadeXMove;
  427. iY1 = giY1 - sFadeYMove;
  428. iY2 = giY2 + sFadeYMove;
  429. BltFx.SrcRect.iLeft = iX1;
  430. BltFx.SrcRect.iTop = iY1;
  431. BltFx.SrcRect.iRight = iX2;
  432. BltFx.SrcRect.iBottom = iY2;
  433. if ( BltFx.SrcRect.iRight != BltFx.SrcRect.iLeft )
  434. {
  435. BltVideoSurface( BACKBUFFER, FRAME_BUFFER, 0,
  436. iX1, iY1,
  437. VS_BLT_SRCSUBRECT, &BltFx );
  438. }
  439. iX1 = giX1;
  440. iX2 = giX2;
  441. iY1 = giY1 - sFadeYMove;
  442. iY2 = giY1;
  443. BltFx.SrcRect.iLeft = iX1;
  444. BltFx.SrcRect.iTop = iY1;
  445. BltFx.SrcRect.iRight = iX2;
  446. BltFx.SrcRect.iBottom = iY2;
  447. if ( BltFx.SrcRect.iBottom != BltFx.SrcRect.iTop )
  448. {
  449. BltVideoSurface( BACKBUFFER, FRAME_BUFFER, 0,
  450. iX1, iY1,
  451. VS_BLT_SRCSUBRECT, &BltFx );
  452. }
  453. iX1 = giX1;
  454. iX2 = giX2;
  455. iY1 = giY2;
  456. iY2 = giY2 + sFadeYMove;
  457. BltFx.SrcRect.iLeft = iX1;
  458. BltFx.SrcRect.iTop = iY1;
  459. BltFx.SrcRect.iRight = iX2;
  460. BltFx.SrcRect.iBottom = iY2;
  461. if ( BltFx.SrcRect.iBottom != BltFx.SrcRect.iTop )
  462. {
  463. BltVideoSurface( BACKBUFFER, FRAME_BUFFER, 0,
  464. iX1, iY1,
  465. VS_BLT_SRCSUBRECT, &BltFx );
  466. }
  467. giX1 -= sFadeXMove;
  468. giX2 += sFadeXMove;
  469. giY1 -= sFadeYMove;
  470. giY2 += sFadeYMove;
  471. }
  472. void FadeFrameBufferRealFade( )
  473. {
  474. if ( gsFadeRealCount != gsFadeCount )
  475. {
  476. ShadowVideoSurfaceRectUsingLowPercentTable( FRAME_BUFFER, 0, 0, 640, 480 );
  477. gsFadeRealCount = gsFadeCount;
  478. }
  479. }
  480. void FadeInFrameBufferRealFade( )
  481. {
  482. INT32 cnt;
  483. if ( gsFadeRealCount != gsFadeCount )
  484. {
  485. for ( cnt = 0; cnt < ( gsFadeLimit - gsFadeCount ); cnt++ )
  486. {
  487. ShadowVideoSurfaceRectUsingLowPercentTable( FRAME_BUFFER, 0, 0, 640, 480 );
  488. }
  489. // Refresh Screen
  490. RefreshScreen( NULL );
  491. // Copy save buffer back
  492. RestoreExternBackgroundRect( 0, 0, 640, 480 );
  493. gsFadeRealCount = gsFadeCount;
  494. }
  495. }
  496. BOOLEAN UpdateSaveBufferWithBackbuffer(void)
  497. {
  498. UINT32 uiDestPitchBYTES, uiSrcPitchBYTES;
  499. UINT8 *pDestBuf, *pSrcBuf;
  500. UINT16 usWidth, usHeight;
  501. UINT8 ubBitDepth;
  502. // Update saved buffer - do for the viewport size ony!
  503. GetCurrentVideoSettings( &usWidth, &usHeight, &ubBitDepth );
  504. pSrcBuf = LockVideoSurface(FRAME_BUFFER, &uiSrcPitchBYTES);
  505. pDestBuf = LockVideoSurface(guiSAVEBUFFER, &uiDestPitchBYTES);
  506. if(gbPixelDepth==16)
  507. {
  508. // BLIT HERE
  509. Blt16BPPTo16BPP((UINT16 *)pDestBuf, uiDestPitchBYTES,
  510. (UINT16 *)pSrcBuf, uiSrcPitchBYTES,
  511. 0, 0, 0, 0, 640, 480 );
  512. }
  513. UnLockVideoSurface(FRAME_BUFFER);
  514. UnLockVideoSurface(guiSAVEBUFFER);
  515. return(TRUE);
  516. }