void release_test_d3d_device ( void ) { HRESULT ddrval; destroy_d3d_vertex_buffers (); if ( d3d.d3d ) { if ( d3d.device ) { ddrval = IDirect3DDevice7_Release ( d3d.device ); if ( ddrval < DD_OK ) { debug_log ( "Unable to release d3d device: %s", get_d3d_error_message ( ddrval ) ); } d3d.device = NULL; } if ( d3d.d3d ) { ddrval = IDirect3D7_Release ( d3d.d3d ); if ( ddrval < DD_OK ) { debug_log ( "Unable to release d3d: %s", get_d3d_error_message ( ddrval ) ); } d3d.d3d = NULL; } } }
void release_test_d3d_device ( void ) { unsigned int ddrval; destroy_d3d_vertex_buffers (); if ( d3d.d3d ) { if ( d3d.device ) { #ifdef _WIN32 ddrval = IDirect3DDevice7_Release ( d3d.device ); if ( ddrval < DD_OK ) { debug_log ( "Unable to release d3d device: %s", get_d3d_error_message ( ddrval ) ); } #endif d3d.device = NULL; } if ( d3d.d3d ) { #ifdef _WIN32 ddrval = IDirect3D7_Release ( d3d.d3d ); if ( ddrval < DD_OK ) { debug_log ( "Unable to release d3d: %s", get_d3d_error_message ( ddrval ) ); } #endif d3d.d3d = NULL; } } }
void clear_zbuffer_screen_using_viewport ( void ) { // ASSERT ( !d3d_in_3d_scene ); if ( d3d.device ) { #ifdef _WIN32 unsigned int ret; ret = IDirect3DDevice7_Clear ( d3d.device, 0, NULL, D3DCLEAR_ZBUFFER, 0, 1.0, 0 ); if ( ret != DD_OK ) { debug_log ( "Unable to clear zbuffer: %s", get_d3d_error_message ( ret ) ); } #endif } }
int create_test_d3d_device ( int width, int height ) { D3DDEVICEDESC7 hardware_desc; unsigned int d3drval; // // Get a d3d3 driver interface // #ifdef _WIN32 d3drval = IDirectDraw7_QueryInterface ( ddraw.ddraw, &IID_IDirect3D7, &d3d.d3d ); if ( d3drval != DD_OK ) { debug_log ( "Can't get a d3d device in this resolution" ); return ( FALSE ); } // // Query for a D3DDEVICE2 object // d3drval = IDirect3D7_CreateDevice ( d3d.d3d, &IID_IDirect3DHALDevice, ddraw.lpRenderBuffer, &d3d.device ); if ( d3drval != DD_OK ) { debug_log ( "Can't get a d3d device2 in this resolution" ); return ( FALSE ); } // // Get the capabilities of the device // d3drval = IDirect3DDevice7_GetCaps ( d3d.device, &hardware_desc ); if ( d3drval != DD_OK ) { debug_log ( "Unable to get the d3d device capabilities at this resolution" ); return ( FALSE ); } #endif // // Set the capabilities of the 3dvisual according to the capabilities of the card. // set_d3d_capabilities ( &hardware_desc ); // // Set render target // #ifdef _WIN32 d3drval = IDirect3DDevice7_SetRenderTarget ( d3d.device, ddraw.lpRenderBuffer, 0 ); if ( d3drval != DD_OK ) { debug_log ( "Unable to set render target" ); return ( FALSE ); } #endif { D3DVIEWPORT7 viewdata; viewdata.dwX = 0; viewdata.dwY = 0; viewdata.dwWidth = application_video_width; viewdata.dwHeight = application_video_height; viewdata.dvMinZ = 0; viewdata.dvMaxZ = 1; #ifdef _WIN32 d3drval = IDirect3DDevice7_SetViewport ( d3d.device, &viewdata ); if ( d3drval != D3D_OK ) { debug_log ( "Unable to set viewport2: %d, %d, %s", application_video_width, application_video_height, get_d3d_error_message ( d3drval ) ); return ( FALSE ); } #endif glViewport(viewdata.dwX, viewdata.dwY, viewdata.dwWidth, viewdata.dwHeight); glDepthRange(viewdata.dvMinZ, viewdata.dvMaxZ); } // // Create the vertex buffers // create_d3d_vertex_buffers (); return ( TRUE ); }
void clear_zbuffer_screen ( void ) { LPDIRECTDRAWSURFACEX zbuffer; if ( !active_screen ) { return; } if ( active_screen == video_screen ) { zbuffer = ddraw.lpZBuffer; } else { zbuffer = active_screen->zbuffer_surface; } if ( !zbuffer ) { return; } { unsigned int d3drval; DDBLTFX fx; fx.dwSize = sizeof ( DDBLTFX ); if ( application_video_colourdepth == 32 ) { fx.dwFillDepth = 0xffffffff; } else { fx.dwFillDepth = 0xffff; } #ifdef _WIN32 d3drval = IDirectDrawSurface7_Blt ( ddraw.lpZBuffer, NULL, NULL, NULL, DDBLT_DEPTHFILL, &fx ); if ( d3drval != DD_OK ) { debug_log ( "Unable to blt to z buffer: %s", get_d3d_error_message ( d3drval ) ); } #endif glClear(GL_DEPTH_BUFFER_BIT); } }