void play_one_shot_cd_audio_track ( int track ) { cdrom_track_repeat = FALSE; cdrom_track_playing = track; system_thread_function ( internal_play_cd_audio_track, &track ); cdrom_track_repeat = FALSE; }
int test_video_resolution ( int width, int height, int depth ) { unsigned int ddrval; DDSURFACEDESC2 ddsd; DDSCAPS2 caps; // // Set the video mode // { int parms[3]; parms[0] = width; parms[1] = height; parms[2] = depth; ddrval = system_thread_function ( ddraw_internal_set_display_mode, parms ); } if ( ddrval != DD_OK ) { debug_log ( "Unable to set display resolution: %d, %d, %d: %s", width, height, depth, get_ddraw_error_message ( ddrval ) ); return ( FALSE ); } // // Release any previous pointers // release_ddraw_surface_pointers (); // // Create the primary surface // memset ( &ddsd, 0, sizeof ( ddsd ) ); ddsd.dwSize = sizeof (ddsd); ddsd.dwFlags = DDSD_CAPS; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_3DDEVICE; if ( ddraw.use_double_buffer ) { ddsd.dwFlags |= DDSD_BACKBUFFERCOUNT; ddsd.dwBackBufferCount = 1; ddsd.ddsCaps.dwCaps |= DDSCAPS_FLIP | DDSCAPS_COMPLEX; } #ifdef _WIN32 ddrval = IDirectDraw7_CreateSurface ( ddraw.ddraw, &ddsd, &ddraw.lpFrontBuffer, NULL); if ( ddrval != DD_OK ) { debug_log ( "Unable to create primary surface: %s", get_ddraw_error_message ( ddrval ) ); return ( FALSE ); } #endif if ( ddraw.use_double_buffer ) { // // Get the back screen from this surface. // memset ( &caps, 0, sizeof ( caps ) ); caps.dwCaps = DDSCAPS_BACKBUFFER; #ifdef _WIN32 ddrval = IDirectDrawSurface7_GetAttachedSurface ( ddraw.lpFrontBuffer, &caps, &ddraw.lpBackBuffer ); if ( ddrval != DD_OK ) { debug_log ( "Unable to get backbuffer: %s", get_ddraw_error_message ( ddrval ) ); return ( FALSE ); } #endif } if ( ddraw.use_system_memory ) { // // Create the system memory surface // memset ( &ddsd, 0, sizeof ( ddsd ) ); ddsd.dwSize = sizeof( ddsd ); #ifdef _WIN32 ddrval = IDirectDrawSurface7_GetSurfaceDesc ( ddraw.lpFrontBuffer, &ddsd ); #endif ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY; ddsd.dwHeight = height; ddsd.dwWidth = width; #ifdef _WIN32 ddrval = IDirectDraw7_CreateSurface ( ddraw.ddraw , &ddsd, &ddraw.lpRenderBuffer, NULL ); if ( ddrval != DD_OK ) { debug_log ( "Unable to create system memory surface: %s", get_ddraw_error_message ( ddrval ) ); return ( FALSE ); } #endif } else { // // Set the render buffer // if ( ddraw.use_double_buffer ) { ddraw.lpRenderBuffer = ddraw.lpBackBuffer; ddraw.lpRenderBuffer = ddraw.lpBackBuffer; } else { ddraw.lpRenderBuffer = ddraw.lpFrontBuffer; ddraw.lpRenderBuffer = ddraw.lpFrontBuffer; } } if ( ddraw.use_z_buffer ) { // // Create the zbuffer and attach it to the render buffer. // memset ( &ddsd, 0, sizeof ( ddsd ) ); ddsd.dwSize = sizeof ( ddsd ); #ifdef _WIN32 ddrval = IDirectDrawSurface7_GetSurfaceDesc ( ddraw.lpFrontBuffer, &ddsd ); #endif ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT; ddsd.ddsCaps.dwCaps = DDSCAPS_ZBUFFER | DDSCAPS_VIDEOMEMORY; ddsd.dwHeight = height; ddsd.dwWidth = width; get_ddraw_zbuffer_pixel_format ( &ddsd.ddpfPixelFormat ); #ifdef _WIN32 ddrval = IDirectDraw7_CreateSurface ( ddraw.ddraw, &ddsd, &ddraw.lpZBuffer, NULL ); if ( ddrval != DD_OK ) { debug_log ( "Unable to create Zbuffer surface: %s", get_ddraw_error_message ( ddrval ) ); return ( FALSE ); } ddrval = IDirectDrawSurface7_AddAttachedSurface ( ddraw.lpRenderBuffer, ddraw.lpZBuffer ); if ( ddrval != DD_OK ) { debug_log ( "Unable to attach Zbuffer surface: %s", get_ddraw_error_message ( ddrval ) ); return ( FALSE ); } #endif } application_video_width = width; application_video_height = height; return ( TRUE ); }