Browse Source

forgot to set lowmem flag for windowed case

cxgeorge 24 years ago
parent
commit
9ccd823fd7
1 changed files with 35 additions and 34 deletions
  1. 35 34
      panda/src/wdxdisplay/wdxGraphicsWindow.cxx

+ 35 - 34
panda/src/wdxdisplay/wdxGraphicsWindow.cxx

@@ -1422,6 +1422,15 @@ dx_setup() {
     // so this is the true value
     _MaxAvailVidMem = dwVidMemTotal;  
 
+    #define LOWVIDMEMTHRESHOLD 3500000
+     // assume buggy drivers (this means you, FireGL2) may return zero for dwTotal, so ignore value if its 0    
+    if((dwVidMemFree>0)&&(dwVidMemFree< LOWVIDMEMTHRESHOLD)) {
+        // hack: figuring out exactly what res to use is tricky, instead I will
+        // just use 640x480 if we have < 3 meg avail
+        _bIsLowVidMemCard = true;
+        wdxdisplay_cat.debug() << " " << dwVidMemFree << " Available VidMem is under " << LOWVIDMEMTHRESHOLD <<", using 640x480 16bpp rendertargets to save tex vidmem.\n";
+    }
+
     if(dx_full_screen) {
            dwRenderWidth  = _props._xsize;
            dwRenderHeight = _props._ysize;
@@ -1470,45 +1479,37 @@ dx_setup() {
                exit(1);
            }
 
-           if(dwVidMemFree>0) {  // assume buggy drivers (this means you, FireGL2) may return zero for dwTotal, so ignore value if its 0
-
-               // hack: figuring out exactly what res to use is tricky, instead I will
-               // just use 640x480 if we have < 3 meg avail
-
-       #define LOWVIDMEMTHRESHOLD 3500000
-               if(dwVidMemFree< LOWVIDMEMTHRESHOLD) {
+           if(_bIsLowVidMemCard) {
                    // we're going to need 800x600 or 640x480 at 16 bit to save enough tex vidmem
                    dwFullScreenBitDepth=16;              // do 16bpp
                    dwRenderWidth=640;
                    dwRenderHeight=480;
-                   _bIsLowVidMemCard = true;
-                   wdxdisplay_cat.debug() << " " << dwVidMemFree << " Available VidMem is under " << LOWVIDMEMTHRESHOLD <<", using 640x480 16bpp rendertargets to save tex vidmem.\n";
-               }
-
-       #if 0
-       // cant do this without more accurate way to estimate mem used before actually switching
-       // to that fullscrn mode.  simply computing memsize based on GetDisplayMode doesnt seem
-       // to be accurate within more than 1 meg
-
-               // we think we need to reserve at least 2 megs of vidmem for textures.
-               // to do this, reduce buffer bitdepth if possible
-       #define RESERVEDTEXVIDMEM 2000000
-
-               int rendertargetmem=dwRenderWidth*dwRenderHeight*(dwFullScreenBitDepth>>3);
-               int memleft = dwFree-rendertargetmem*2;   //*2 to handle backbuf/zbuf
+                   // force 16bpp textures too?
 
-               if(memleft < RESERVEDTEXVIDMEM) {
-                   dwFullScreenBitDepth=16;
-                   wdxdisplay_cat.debug() << "using 16bpp rendertargets to save tex vidmem\n";
-                   assert((DMI.supportedBitDepths & DDBD_16) && (pD3DDevDesc->dwDeviceRenderBitDepth & DDBD_16));   // probably a safe assumption
-                   rendertargetmem=dwRenderWidth*dwRenderHeight*(dwFullScreenBitDepth>>3);
-                   memleft = dwFree-rendertargetmem*2;
-
-                    // BUGBUG:  if we still cant reserve 2 megs of vidmem, need to auto-reduce the scrn res
-                   if(memleft < RESERVEDTEXVIDMEM)
-                       wdxdisplay_cat.debug() << " XXXXXX WARNING: cant reserve 2MB of tex vidmem. only " << memleft << " bytes available. Need to rewrite wdxdisplay to try lower resolutions  XXXXXXXXXXXXXXXXXXXX\n";
-               }
-       #endif
+                   #if 0
+                   // cant do this without more accurate way to estimate mem used before actually switching
+                   // to that fullscrn mode.  simply computing memsize based on GetDisplayMode doesnt seem
+                   // to be accurate within more than 1 meg
+            
+                           // we think we need to reserve at least 2 megs of vidmem for textures.
+                           // to do this, reduce buffer bitdepth if possible
+                   #define RESERVEDTEXVIDMEM 2000000
+            
+                           int rendertargetmem=dwRenderWidth*dwRenderHeight*(dwFullScreenBitDepth>>3);
+                           int memleft = dwFree-rendertargetmem*2;   //*2 to handle backbuf/zbuf
+            
+                           if(memleft < RESERVEDTEXVIDMEM) {
+                               dwFullScreenBitDepth=16;
+                               wdxdisplay_cat.debug() << "using 16bpp rendertargets to save tex vidmem\n";
+                               assert((DMI.supportedBitDepths & DDBD_16) && (pD3DDevDesc->dwDeviceRenderBitDepth & DDBD_16));   // probably a safe assumption
+                               rendertargetmem=dwRenderWidth*dwRenderHeight*(dwFullScreenBitDepth>>3);
+                               memleft = dwFree-rendertargetmem*2;
+            
+                                // BUGBUG:  if we still cant reserve 2 megs of vidmem, need to auto-reduce the scrn res
+                               if(memleft < RESERVEDTEXVIDMEM)
+                                   wdxdisplay_cat.debug() << " XXXXXX WARNING: cant reserve 2MB of tex vidmem. only " << memleft << " bytes available. Need to rewrite wdxdisplay to try lower resolutions  XXXXXXXXXXXXXXXXXXXX\n";
+                           }
+                   #endif
            }
 
            DWORD SCL_FPUFlag;