Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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 );
}