diff --git a/panda/src/wdxdisplay8/wdxGraphicsWindow8.cxx b/panda/src/wdxdisplay8/wdxGraphicsWindow8.cxx index 4b09b29205..8ef7bace66 100644 --- a/panda/src/wdxdisplay8/wdxGraphicsWindow8.cxx +++ b/panda/src/wdxdisplay8/wdxGraphicsWindow8.cxx @@ -2202,11 +2202,12 @@ bool wdxGraphicsWindow::search_for_device(LPDIRECT3D8 pD3D8,DXDeviceInfo *pDevIn bool bCouldntFindValidZBuf; if(!_dxgsg->scrn.bIsLowVidMemCard) { - if(dx_pick_best_screenres) { - if((_dxgsg->scrn.MaxAvailVidMem == UNKNOWN_VIDMEM_SIZE) || is_badvidmem_card(&_dxgsg->scrn.DXDeviceID)) { - wdxdisplay_cat.info() << "pick_best_screenres: defaulted 800x600 based on no reliable vidmem size\n"; - dwRenderWidth=800; dwRenderHeight=600; - } else { + + bool bUseDefaultSize=dx_pick_best_screenres&& + ((_dxgsg->scrn.MaxAvailVidMem == UNKNOWN_VIDMEM_SIZE) || + is_badvidmem_card(&_dxgsg->scrn.DXDeviceID)); + + if(dx_pick_best_screenres && !bUseDefaultSize) { typedef struct { UINT memlimit; DWORD scrnX,scrnY; @@ -2246,15 +2247,20 @@ bool wdxGraphicsWindow::search_for_device(LPDIRECT3D8 pD3D8,DXDeviceInfo *pDevIn } } // otherwise just go with whatever was specified (we probably shouldve marked this card as lowmem if it gets to end of loop w/o breaking - } + } + + if(pixFmt==D3DFMT_UNKNOWN) { + + if(bUseDefaultSize) { + wdxdisplay_cat.info() << "pick_best_screenres: defaulted 800x600 based on no reliable vidmem size\n"; + dwRenderWidth=800; dwRenderHeight=600; + } - } else { search_for_valid_displaymode(dwRenderWidth,dwRenderHeight,bNeedZBuffer,bWantStencil, &_dxgsg->scrn.SupportedScreenDepthsMask, &bCouldntFindValidZBuf, &pixFmt); - // note I'm not saving refresh rate, will just use adapter default at given res for now if(pixFmt==D3DFMT_UNKNOWN) { @@ -2954,6 +2960,19 @@ get_depth_bitwidth(void) { // return ddsd.ddpfPixelFormat.dwRGBBitCount; } +void wdxGraphicsWindow:: +get_framebuffer_format(PixelBuffer::Type &fb_type, PixelBuffer::Format &fb_format) { + assert(_dxgsg!=NULL); + + fb_type = PixelBuffer::T_unsigned_byte; + // this is sortof incorrect, since for F_rgb5 it's really 5 bits per channel + //would have to change a lot of texture stuff to make this correct though + + if(IS_16BPP_DISPLAY_FORMAT(_dxgsg->scrn.PresParams.BackBufferFormat)) + fb_format = PixelBuffer::F_rgb5; + else fb_format = PixelBuffer::F_rgb; +} + // Global system parameters we want to modify during our run static int iMouseTrails; static bool bCursorShadowOn,bMouseVanish; diff --git a/panda/src/wdxdisplay8/wdxGraphicsWindow8.h b/panda/src/wdxdisplay8/wdxGraphicsWindow8.h index ad52331775..9f7489f2b0 100644 --- a/panda/src/wdxdisplay8/wdxGraphicsWindow8.h +++ b/panda/src/wdxdisplay8/wdxGraphicsWindow8.h @@ -90,6 +90,7 @@ public: virtual bool resize(unsigned int xsize,unsigned int ysize); virtual unsigned int verify_window_sizes(unsigned int numsizes,unsigned int *dimen); virtual int get_depth_bitwidth(void); + virtual void get_framebuffer_format(PixelBuffer::Type &fb_type, PixelBuffer::Format &fb_format); protected: ButtonHandle lookup_key(WPARAM wparam) const;