diff --git a/panda/src/dxgsg9/wdxGraphicsWindow9.cxx b/panda/src/dxgsg9/wdxGraphicsWindow9.cxx index 0ea0c30ae6..2d84e3073c 100755 --- a/panda/src/dxgsg9/wdxGraphicsWindow9.cxx +++ b/panda/src/dxgsg9/wdxGraphicsWindow9.cxx @@ -642,10 +642,10 @@ window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { // // Sets _depth_buffer_bpp appropriately. //////////////////////////////////////////////////////////////////// -void wdxGraphicsWindow9:: +bool wdxGraphicsWindow9:: create_screen_buffers_and_device(DXScreenData &Display, bool force_16bpp_zbuffer) { wdxGraphicsPipe9 *dxpipe; - DCAST_INTO_V(dxpipe, _pipe); + DCAST_INTO_R(dxpipe, _pipe, false); // only want dx_pick_best_screenres to apply to initial startup, and // since the initial res has already been picked, dont use auto-res-select in any future init sequence. @@ -711,7 +711,8 @@ create_screen_buffers_and_device(DXScreenData &Display, bool force_16bpp_zbuffer is_fullscreen(), D3DMULTISAMPLE_TYPE(dx_multisample_antialiasing_level), NULL); if (FAILED(hr)) { wdxdisplay9_cat.fatal() << "device #"<PresentationInterval = 0; @@ -829,7 +835,8 @@ create_screen_buffers_and_device(DXScreenData &Display, bool force_16bpp_zbuffer if (FAILED(hr)) { wdxdisplay9_cat.fatal() << "D3D CreateDevice failed for device #" << Display.CardIDNum << D3DERRORSTRING(hr); - exit(1); + //exit(1); + return false; } } // end create windowed buffers @@ -850,7 +857,7 @@ create_screen_buffers_and_device(DXScreenData &Display, bool force_16bpp_zbuffer init_resized_window(); - return; + return true; Fallback_to_16bpp_buffers: @@ -865,8 +872,8 @@ create_screen_buffers_and_device(DXScreenData &Display, bool force_16bpp_zbuffer << "CreateDevice failed with out-of-vidmem, retrying w/16bpp buffers on device #" << Display.CardIDNum << endl; } - create_screen_buffers_and_device(Display, true); - return; + return create_screen_buffers_and_device(Display, true); + //return; } else if (!((dwRenderWidth==640)&&(dwRenderHeight==480))) { if (wdxdisplay9_cat.info()) @@ -874,13 +881,14 @@ create_screen_buffers_and_device(DXScreenData &Display, bool force_16bpp_zbuffer // try final fallback to 640x480x16 Display.DisplayMode.Width=640; Display.DisplayMode.Height=480; - create_screen_buffers_and_device(Display, true); - return; + return create_screen_buffers_and_device(Display, true); + //return; } else { wdxdisplay9_cat.fatal() << "Can't create any screen buffers, bailing out.\n"; - exit(1); + //exit(1); + return false; } } @@ -1752,7 +1760,8 @@ open_window(void) { // In that case just create an additional swapchain for this window if (dxgsg->get_pipe()->get_device() == NULL) { - create_screen_buffers_and_device(_wcontext, dx_force_16bpp_zbuffer); + if (!create_screen_buffers_and_device(_wcontext, dx_force_16bpp_zbuffer)) + return false; dxgsg->get_pipe()->make_device((void*)(&_wcontext)); dxgsg->copy_pres_reset(&_wcontext); if (multiple_windows) { diff --git a/panda/src/dxgsg9/wdxGraphicsWindow9.h b/panda/src/dxgsg9/wdxGraphicsWindow9.h index 66e4e246fa..15c09e9fed 100755 --- a/panda/src/dxgsg9/wdxGraphicsWindow9.h +++ b/panda/src/dxgsg9/wdxGraphicsWindow9.h @@ -60,7 +60,7 @@ protected: private: // bool set_to_temp_rendertarget(); - void create_screen_buffers_and_device(DXScreenData &Display, + bool create_screen_buffers_and_device(DXScreenData &Display, bool force_16bpp_zbuffer); bool choose_device(void);