2
0
Эх сурвалжийг харах

*** empty log message ***

Josh Yelon 19 жил өмнө
parent
commit
7108474f44

+ 3 - 0
direct/src/directscripts/gendocs.py

@@ -96,6 +96,9 @@ def textToHTML(comment, sep, delsection=None):
         line = line.lstrip(" ").lstrip(sep).lstrip(" ").rstrip("\r").rstrip(" ")
         line = line.lstrip(" ").lstrip(sep).lstrip(" ").rstrip("\r").rstrip(" ")
         if (line == ""):
         if (line == ""):
             sections.append("")
             sections.append("")
+        elif (line[0]=="*") or (line[0]=="-"):
+            sections.append(line)
+            sections.append("")
         elif (SECHEADER.match(line)):
         elif (SECHEADER.match(line)):
             sections.append(line)
             sections.append(line)
         else:
         else:

+ 26 - 23
direct/src/directscripts/packpanda.py

@@ -15,7 +15,8 @@
 import sys, os, getopt, string, shutil, py_compile
 import sys, os, getopt, string, shutil, py_compile
 
 
 OPTIONLIST = [
 OPTIONLIST = [
-("game",      1, "Name of directory containing game"),
+("dir",       1, "Name of directory containing game"),
+("name",      1, "Human-readable name of the game"),
 ("version",   1, "Version number to add to game name"),
 ("version",   1, "Version number to add to game name"),
 ("rmdir",     2, "Delete all directories with given name"),
 ("rmdir",     2, "Delete all directories with given name"),
 ("rmext",     2, "Delete all files with given extension"),
 ("rmext",     2, "Delete all files with given extension"),
@@ -69,7 +70,7 @@ OPTIONS = ParseOptions(sys.argv[1:])
 
 
 PANDA=None
 PANDA=None
 for dir in sys.path:
 for dir in sys.path:
-    if (dir != "") and os.path.exists(os.path.join(dir,"direct")) and os.path.exists(os.path.join(dir,"pandac")) and os.path.exists(os.path.join(dir,"python")) and os.path.exists(os.path.join(dir,"nsis")):
+    if (dir != "") and os.path.exists(os.path.join(dir,"direct")) and os.path.exists(os.path.join(dir,"pandac")) and os.path.exists(os.path.join(dir,"python")):
         PANDA=os.path.abspath(dir)
         PANDA=os.path.abspath(dir)
 if (PANDA is None):
 if (PANDA is None):
   sys.exit("Cannot locate the panda root directory in the python path (cannot locate directory containing direct and pandac).")
   sys.exit("Cannot locate the panda root directory in the python path (cannot locate directory containing direct and pandac).")
@@ -84,31 +85,33 @@ else:
 
 
 ##############################################################################
 ##############################################################################
 #
 #
-# Identify the main parts of the game: GAME, NAME, MAIN, ICON, BITMAP, etc
+# Identify the main parts of the game: DIR, NAME, MAIN, ICON, BITMAP, etc
 #
 #
 ##############################################################################
 ##############################################################################
 
 
 VER=OPTIONS["version"]
 VER=OPTIONS["version"]
-GAME=OPTIONS["game"]
-if (GAME==""):
-  print "You must specify the --game option."
+DIR=OPTIONS["dir"]
+if (DIR==""):
+  print "You must specify the --dir option."
   ParseFailure()
   ParseFailure()
-GAME=os.path.abspath(GAME)
-NAME=os.path.basename(GAME)
-SMDIRECTORY=os.path.basename(GAME)
+DIR=os.path.abspath(DIR)
+NAME=os.path.basename(DIR)
+if (OPTIONS["name"] != ""):
+  NAME=OPTIONS["name"]
+SMDIRECTORY=NAME
 if (VER!=""): SMDIRECTORY=SMDIRECTORY+" "+VER
 if (VER!=""): SMDIRECTORY=SMDIRECTORY+" "+VER
-ICON=os.path.join(GAME, NAME+".ico")
-BITMAP=os.path.join(GAME, NAME+".bmp")
-LICENSE=os.path.join(GAME,"LICENSE.TXT")
-OUTFILE=os.path.basename(GAME)
+ICON=os.path.join(DIR, "icon.ico")
+BITMAP=os.path.join(DIR, "installer.bmp")
+LICENSE=os.path.join(DIR, "license.txt")
+OUTFILE=os.path.basename(DIR)
 if (VER!=""): OUTFILE=OUTFILE+"-"+VER
 if (VER!=""): OUTFILE=OUTFILE+"-"+VER
 OUTFILE=os.path.abspath(OUTFILE+".exe")
 OUTFILE=os.path.abspath(OUTFILE+".exe")
-INSTALLDIR='C:\\'+os.path.basename(GAME)
+INSTALLDIR='C:\\'+os.path.basename(DIR)
 if (VER!=""): INSTALLDIR=INSTALLDIR+"-"+VER
 if (VER!=""): INSTALLDIR=INSTALLDIR+"-"+VER
 COMPRESS="lzma"
 COMPRESS="lzma"
 if (OPTIONS["fast"]): COMPRESS="zlib"
 if (OPTIONS["fast"]): COMPRESS="zlib"
-if (OPTIONS["pyc"]): MAIN=NAME+".pyc"
-else: MAIN=NAME+".py"
+if (OPTIONS["pyc"]): MAIN="main.pyc"
+else: MAIN="main.py"
 
 
 def PrintFileStatus(label, file):
 def PrintFileStatus(label, file):
   if (os.path.exists(file)):
   if (os.path.exists(file)):
@@ -116,21 +119,21 @@ def PrintFileStatus(label, file):
   else:
   else:
     print "%-15s: %s (MISSING)"%(label, file)
     print "%-15s: %s (MISSING)"%(label, file)
 
 
-PrintFileStatus("Game", GAME)
+PrintFileStatus("Dir", DIR)
 print "%-15s: %s"%("Name", NAME)
 print "%-15s: %s"%("Name", NAME)
 print "%-15s: %s"%("Start Menu", SMDIRECTORY)
 print "%-15s: %s"%("Start Menu", SMDIRECTORY)
-PrintFileStatus("Main", os.path.join(GAME, MAIN))
+PrintFileStatus("Main", os.path.join(DIR, MAIN))
 PrintFileStatus("Icon", ICON)
 PrintFileStatus("Icon", ICON)
 PrintFileStatus("Bitmap", BITMAP)
 PrintFileStatus("Bitmap", BITMAP)
 PrintFileStatus("License", LICENSE)
 PrintFileStatus("License", LICENSE)
 print "%-15s: %s"%("Output", OUTFILE)
 print "%-15s: %s"%("Output", OUTFILE)
 print "%-15s: %s"%("Install Dir", INSTALLDIR)
 print "%-15s: %s"%("Install Dir", INSTALLDIR)
 
 
-if (os.path.isdir(GAME)==0):
-  sys.exit("Difficulty reading "+GAME+". Cannot continue.")
+if (os.path.isdir(DIR)==0):
+  sys.exit("Difficulty reading "+DIR+". Cannot continue.")
 
 
-if (os.path.isfile(os.path.join(GAME, NAME+".py"))==0):
-  sys.exit("Difficulty reading "+NAME+".py. Cannot continue.")
+if (os.path.isfile(os.path.join(DIR, "main.py"))==0):
+  sys.exit("Difficulty reading main.py. Cannot continue.")
 
 
 if (os.path.isfile(LICENSE)==0):
 if (os.path.isfile(LICENSE)==0):
   LICENSE=os.path.join(PANDA,"LICENSE")
   LICENSE=os.path.join(PANDA,"LICENSE")
@@ -150,7 +153,7 @@ print "Copying the game to "+TMPDIR+"..."
 if (os.path.exists(TMPDIR)):
 if (os.path.exists(TMPDIR)):
    try: shutil.rmtree(TMPDIR)
    try: shutil.rmtree(TMPDIR)
    except: sys.exit("Cannot delete "+TMPDIR)
    except: sys.exit("Cannot delete "+TMPDIR)
-try: shutil.copytree(GAME, TMPDIR)
+try: shutil.copytree(DIR, TMPDIR)
 except: sys.exit("Cannot copy game to "+TMPDIR)
 except: sys.exit("Cannot copy game to "+TMPDIR)
 
 
 ##############################################################################
 ##############################################################################

+ 6 - 1
direct/src/showbase/ShowBase.py

@@ -804,7 +804,7 @@ class ShowBase(DirectObject.DirectObject):
     def makeCamera(self, win, sort = 0, scene = None,
     def makeCamera(self, win, sort = 0, scene = None,
                    displayRegion = (0, 1, 0, 1), stereo = None,
                    displayRegion = (0, 1, 0, 1), stereo = None,
                    aspectRatio = None, clearDepth = 0, clearColor = None,
                    aspectRatio = None, clearDepth = 0, clearColor = None,
-                   lens = None, camName = 'cam'):
+                   lens = None, camName = 'cam', mask = None):
         """
         """
         Makes a new 3-d camera associated with the indicated window,
         Makes a new 3-d camera associated with the indicated window,
         and creates a display region in the indicated subrectangle.
         and creates a display region in the indicated subrectangle.
@@ -828,6 +828,11 @@ class ShowBase(DirectObject.DirectObject):
         if scene != None:
         if scene != None:
             camNode.setScene(scene)
             camNode.setScene(scene)
 
 
+        if mask != None:
+            if (isinstance(mask, int)):
+                mask = BitMask32(mask)
+            camNode.setCameraMask(mask)
+
         # self.camera is the parent node of all cameras: a node that
         # self.camera is the parent node of all cameras: a node that
         # we can move around to move all cameras as a group.
         # we can move around to move all cameras as a group.
         if self.camera == None:
         if self.camera == None:

+ 4 - 0
panda/src/display/graphicsBuffer.cxx

@@ -36,6 +36,8 @@ GraphicsBuffer(GraphicsPipe *pipe,
                GraphicsOutput *host) :
                GraphicsOutput *host) :
   GraphicsOutput(pipe, name, properties, x_size, y_size, flags, gsg, host)
   GraphicsOutput(pipe, name, properties, x_size, y_size, flags, gsg, host)
 {
 {
+  nassertv(gsg != (GraphicsStateGuardian *)NULL);
+
 #ifdef DO_MEMORY_USAGE
 #ifdef DO_MEMORY_USAGE
   MemoryUsage::update_type(this, this);
   MemoryUsage::update_type(this, this);
 #endif
 #endif
@@ -47,6 +49,8 @@ GraphicsBuffer(GraphicsPipe *pipe,
 
 
   _default_display_region->compute_pixels(_x_size, _y_size);
   _default_display_region->compute_pixels(_x_size, _y_size);
   _open_request = OR_none;
   _open_request = OR_none;
+
+  set_inverted(gsg->get_copy_texture_inverted());
 }
 }
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////

+ 0 - 3
panda/src/display/graphicsOutput.cxx

@@ -325,9 +325,6 @@ add_render_texture(Texture *tex, RenderTextureMode mode,
   result._plane = plane;
   result._plane = plane;
   result._rtm_mode = mode;
   result._rtm_mode = mode;
   _textures.push_back(result);
   _textures.push_back(result);
-
-  nassertv(_gsg != (GraphicsStateGuardian *)NULL);
-  set_inverted(_gsg->get_copy_texture_inverted());
 }
 }
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////

+ 1 - 0
panda/src/display/graphicsPipe.h

@@ -88,6 +88,7 @@ PUBLISHED:
     BF_can_bind_color      = 0x0040, // Need capability: bind the color bitplane to a tex.
     BF_can_bind_color      = 0x0040, // Need capability: bind the color bitplane to a tex.
     BF_can_bind_every      = 0x0080, // Need capability: bind all bitplanes to a tex.
     BF_can_bind_every      = 0x0080, // Need capability: bind all bitplanes to a tex.
     BF_size_track_host     = 0x0100, // Buffer should track the host size.
     BF_size_track_host     = 0x0100, // Buffer should track the host size.
+    BF_rtt_cumulative      = 0x0200, // Buffer supports cumulative render-to-texture.
   };
   };
 
 
   INLINE bool is_valid() const;
   INLINE bool is_valid() const;

+ 2 - 0
panda/src/dxgsg8/wdxGraphicsPipe8.cxx

@@ -108,6 +108,7 @@ make_output(const string &name,
     if (((flags&BF_require_parasite)!=0)||
     if (((flags&BF_require_parasite)!=0)||
         ((flags&BF_refuse_window)!=0)||
         ((flags&BF_refuse_window)!=0)||
         ((flags&BF_size_track_host)!=0)||
         ((flags&BF_size_track_host)!=0)||
+        ((flags&BF_rtt_cumulative)!=0)||
         ((flags&BF_can_bind_color)!=0)||
         ((flags&BF_can_bind_color)!=0)||
         ((flags&BF_can_bind_every)!=0)||
         ((flags&BF_can_bind_every)!=0)||
         (properties != gsg->get_default_properties())) {
         (properties != gsg->get_default_properties())) {
@@ -124,6 +125,7 @@ make_output(const string &name,
         ((flags&BF_require_parasite)!=0)||
         ((flags&BF_require_parasite)!=0)||
         ((flags&BF_require_window)!=0)||
         ((flags&BF_require_window)!=0)||
         ((flags&BF_size_track_host)!=0)||
         ((flags&BF_size_track_host)!=0)||
+        ((flags&BF_rtt_cumulative)!=0)||
         ((flags&BF_can_bind_every)!=0)||
         ((flags&BF_can_bind_every)!=0)||
         (properties != gsg->get_default_properties())) {
         (properties != gsg->get_default_properties())) {
       return NULL;
       return NULL;

+ 2 - 0
panda/src/dxgsg9/wdxGraphicsPipe9.cxx

@@ -107,6 +107,7 @@ make_output(const string &name,
     if (((flags&BF_require_parasite)!=0)||
     if (((flags&BF_require_parasite)!=0)||
         ((flags&BF_refuse_window)!=0)||
         ((flags&BF_refuse_window)!=0)||
         ((flags&BF_size_track_host)!=0)||
         ((flags&BF_size_track_host)!=0)||
+        ((flags&BF_rtt_cumulative)!=0)||
         ((flags&BF_can_bind_color)!=0)||
         ((flags&BF_can_bind_color)!=0)||
         ((flags&BF_can_bind_every)!=0)||
         ((flags&BF_can_bind_every)!=0)||
         (prop != gsg->get_default_properties())) {
         (prop != gsg->get_default_properties())) {
@@ -123,6 +124,7 @@ make_output(const string &name,
         ((flags&BF_require_parasite)!=0)||
         ((flags&BF_require_parasite)!=0)||
         ((flags&BF_require_window)!=0)||
         ((flags&BF_require_window)!=0)||
         ((flags&BF_size_track_host)!=0)||
         ((flags&BF_size_track_host)!=0)||
+        ((flags&BF_rtt_cumulative)!=0)||
         ((flags&BF_can_bind_every)!=0)||
         ((flags&BF_can_bind_every)!=0)||
         (prop != gsg->get_default_properties())) {
         (prop != gsg->get_default_properties())) {
       return NULL;
       return NULL;

+ 32 - 3
panda/src/glstuff/glGraphicsBuffer_src.cxx

@@ -40,6 +40,7 @@ CLP(GraphicsBuffer)(GraphicsPipe *pipe,
   _fbo = 0;
   _fbo = 0;
   _rb_size_x = 0;
   _rb_size_x = 0;
   _rb_size_y = 0;
   _rb_size_y = 0;
+  _cube_face_active = 0;
   for (int i=0; i<RTP_COUNT; i++) {
   for (int i=0; i<RTP_COUNT; i++) {
     _rb[i] = 0;
     _rb[i] = 0;
     _tex[i] = 0;
     _tex[i] = 0;
@@ -244,6 +245,7 @@ rebuild_bitplanes() {
               next, GL_RGBA, Texture::F_rgba);
               next, GL_RGBA, Texture::F_rgba);
     next += 1;
     next += 1;
   }
   }
+  _cube_face_active = 0;
   
   
   glgsg->report_my_gl_errors();
   glgsg->report_my_gl_errors();
 }
 }
@@ -285,9 +287,11 @@ bind_slot(bool rb_resize, Texture **attach, RenderTexturePlane slot,
                                      GL_TEXTURE_2D, gtc->_index, 0);
                                      GL_TEXTURE_2D, gtc->_index, 0);
     } else {
     } else {
       glgsg->_glFramebufferTexture2D(GL_FRAMEBUFFER_EXT, attachpoint,
       glgsg->_glFramebufferTexture2D(GL_FRAMEBUFFER_EXT, attachpoint,
-                                     GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, gtc->_index, 0);
+                                     GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB,
+                                     gtc->_index, 0);
     }
     }
     _tex[slot] = tex;
     _tex[slot] = tex;
+    _attach_point[slot] = attachpoint;
     
     
     // If there was a renderbuffer bound to this slot, delete it.
     // If there was a renderbuffer bound to this slot, delete it.
     if (_rb[slot] != 0) {
     if (_rb[slot] != 0) {
@@ -320,6 +324,7 @@ bind_slot(bool rb_resize, Texture **attach, RenderTexturePlane slot,
     
     
     // Toss any texture that was connected to the slot.
     // Toss any texture that was connected to the slot.
     _tex[slot] = 0;
     _tex[slot] = 0;
+    _attach_point[slot] = attachpoint;
   }
   }
 }
 }
   
   
@@ -401,7 +406,27 @@ end_frame(FrameMode mode) {
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 void CLP(GraphicsBuffer)::
 void CLP(GraphicsBuffer)::
 select_cube_map(int cube_map_index) {
 select_cube_map(int cube_map_index) {
-  GLCAT.error() << "select_cube_map not implemented yet.\n";
+  if (cube_map_index == _cube_face_active) {
+    return;
+  }
+  _cube_face_active = cube_map_index;
+
+  CLP(GraphicsStateGuardian) *glgsg;
+  DCAST_INTO_V(glgsg, _gsg);
+  
+  for (int i=0; i<RTP_COUNT; i++) {
+    Texture *tex = _tex[i];
+    if ((tex == 0) ||
+        (tex->get_texture_type() != Texture::TT_cube_map)) {
+      continue;
+    }
+    TextureContext *tc = tex->prepare_now(glgsg->get_prepared_objects(), glgsg);
+    nassertv(tc != (TextureContext *)NULL);
+    CLP(TextureContext) *gtc = DCAST(CLP(TextureContext), tc);
+    glgsg->_glFramebufferTexture2D(GL_FRAMEBUFFER_EXT, _attach_point[i],
+                                   GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB + cube_map_index,
+                                   gtc->_index, 0);
+  }
 }
 }
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
@@ -435,6 +460,11 @@ open_buffer() {
 void CLP(GraphicsBuffer)::
 void CLP(GraphicsBuffer)::
 close_buffer() {
 close_buffer() {
 
 
+  _active = false;
+  if (_gsg == 0) {
+    return;
+  }
+  
   // Get the glgsg.
   // Get the glgsg.
   CLP(GraphicsStateGuardian) *glgsg;
   CLP(GraphicsStateGuardian) *glgsg;
   DCAST_INTO_V(glgsg, _gsg);
   DCAST_INTO_V(glgsg, _gsg);
@@ -458,6 +488,5 @@ close_buffer() {
   
   
   // Release the Gsg
   // Release the Gsg
   _gsg.clear();
   _gsg.clear();
-  _active = false;
 }
 }
 
 

+ 15 - 1
panda/src/glstuff/glGraphicsBuffer_src.h

@@ -26,15 +26,27 @@
 //               The glGraphicsBuffer is based on the OpenGL
 //               The glGraphicsBuffer is based on the OpenGL
 //               EXT_framebuffer_object and ARB_draw_buffers extensions.
 //               EXT_framebuffer_object and ARB_draw_buffers extensions.
 //               This design has significant advantages over the
 //               This design has significant advantages over the
-//               older wglGraphicsBuffer and glxGraphicsBuffer.
+//               older wglGraphicsBuffer and glxGraphicsBuffer:
 //
 //
 //               * Can export depth and stencil.
 //               * Can export depth and stencil.
 //               * Supports auxiliary bitplanes.
 //               * Supports auxiliary bitplanes.
 //               * Supports non-power-of-two padding.
 //               * Supports non-power-of-two padding.
 //               * Supports tracking of host window size.
 //               * Supports tracking of host window size.
+//               * Supports cumulative render-to-texture.
 //               * Faster than pbuffers.
 //               * Faster than pbuffers.
 //               * Can render onto a texture without clearing it first.
 //               * Can render onto a texture without clearing it first.
 //
 //
+//               Some of these deserve a little explanation. 
+//               Auxiliary bitplanes are additional bitplanes above
+//               and beyond the normal depth,stencil,color.  One can
+//               use them to render out multiple textures in a single
+//               pass.  Cumulative render-to-texture means that if
+//               don't clear the buffer, then the contents of the
+//               buffer will be equal to the texture's previous
+//               contents.  This alo means you can meaningfully
+//               share a bitplane between two buffers by binding
+//               the same texture to both buffers. 
+//
 //               If either of the necessary OpenGL extensions is not
 //               If either of the necessary OpenGL extensions is not
 //               available, then the glGraphicsBuffer will not be
 //               available, then the glGraphicsBuffer will not be
 //               available (although it may still be possible to
 //               available (although it may still be possible to
@@ -72,8 +84,10 @@ private:
   GLuint      _fbo;
   GLuint      _fbo;
   int         _rb_size_x;
   int         _rb_size_x;
   int         _rb_size_y;
   int         _rb_size_y;
+  int         _cube_face_active;
   PT(Texture) _tex[RTP_COUNT];
   PT(Texture) _tex[RTP_COUNT];
   GLuint      _rb[RTP_COUNT];
   GLuint      _rb[RTP_COUNT];
+  GLenum      _attach_point[RTP_COUNT];
   
   
 public:
 public:
   static TypeHandle get_class_type() {
   static TypeHandle get_class_type() {

+ 2 - 0
panda/src/glxdisplay/glxGraphicsPipe.cxx

@@ -300,6 +300,7 @@ make_output(const string &name,
     if (((flags&BF_require_parasite)!=0)||
     if (((flags&BF_require_parasite)!=0)||
         ((flags&BF_refuse_window)!=0)||
         ((flags&BF_refuse_window)!=0)||
         ((flags&BF_size_track_host)!=0)||
         ((flags&BF_size_track_host)!=0)||
+        ((flags&BF_rtt_cumulative)!=0)||
         ((flags&BF_can_bind_color)!=0)||
         ((flags&BF_can_bind_color)!=0)||
         ((flags&BF_can_bind_every)!=0)) {
         ((flags&BF_can_bind_every)!=0)) {
       return NULL;
       return NULL;
@@ -333,6 +334,7 @@ make_output(const string &name,
         ((flags&BF_require_parasite)!=0)||
         ((flags&BF_require_parasite)!=0)||
         ((flags&BF_require_window)!=0)||
         ((flags&BF_require_window)!=0)||
         ((flags&BF_size_track_host)!=0)||
         ((flags&BF_size_track_host)!=0)||
+        ((flags&BF_rtt_cumulative)!=0)||
         ((flags&BF_can_bind_every)!=0)) {
         ((flags&BF_can_bind_every)!=0)) {
       return NULL;
       return NULL;
     }
     }

+ 8 - 2
panda/src/glxdisplay/glxGraphicsStateGuardian.cxx

@@ -132,9 +132,15 @@ reset() {
     // It's Mesa, therefore probably a software context.
     // It's Mesa, therefore probably a software context.
     if (!software) {
     if (!software) {
       glxdisplay_cat.error()
       glxdisplay_cat.error()
-        << "Using GL renderer " << _gl_renderer << "; it is probably a software renderer.\n";
+        << "The application requested harware acceleration, but your OpenGL\n";
       glxdisplay_cat.error()
       glxdisplay_cat.error()
-        << "To allow use of this display add FM_software to your frame buffer mode.\n";
+        << "driver, " << _gl_renderer << ", only supports software rendering.\n";
+      glxdisplay_cat.error()
+        << "You need to install a hardware-accelerated OpenGL driver, or,\n";
+      glxdisplay_cat.error()
+        << "if you actually *want* to use a software renderer, then\n";
+      glxdisplay_cat.error()
+        << "change the word 'hardware' to 'software' in the Config.prc file.\n";
       _is_valid = false;
       _is_valid = false;
     }
     }
     frame_buffer_mode = (frame_buffer_mode | FrameBufferProperties::FM_software) & ~FrameBufferProperties::FM_hardware;
     frame_buffer_mode = (frame_buffer_mode | FrameBufferProperties::FM_software) & ~FrameBufferProperties::FM_hardware;

+ 1 - 0
panda/src/mesadisplay/osMesaGraphicsPipe.cxx

@@ -144,6 +144,7 @@ make_output(const string &name,
         ((flags&BF_require_window)!=0)||
         ((flags&BF_require_window)!=0)||
         ((flags&BF_size_track_host)!=0)||
         ((flags&BF_size_track_host)!=0)||
         ((flags&BF_can_bind_every)!=0)||
         ((flags&BF_can_bind_every)!=0)||
+        ((flags&BF_rtt_cumulative)!=0)||
         (properties != gsg->get_default_properties())) {
         (properties != gsg->get_default_properties())) {
       return NULL;
       return NULL;
     }
     }

+ 2 - 0
panda/src/wgldisplay/wglGraphicsPipe.cxx

@@ -128,6 +128,7 @@ make_output(const string &name,
     if (((flags&BF_require_parasite)!=0)||
     if (((flags&BF_require_parasite)!=0)||
         ((flags&BF_refuse_window)!=0)||
         ((flags&BF_refuse_window)!=0)||
         ((flags&BF_size_track_host)!=0)||
         ((flags&BF_size_track_host)!=0)||
+        ((flags&BF_rtt_cumulative)!=0)||
         ((flags&BF_can_bind_color)!=0)||
         ((flags&BF_can_bind_color)!=0)||
         ((flags&BF_can_bind_every)!=0)) {
         ((flags&BF_can_bind_every)!=0)) {
       return NULL;
       return NULL;
@@ -169,6 +170,7 @@ make_output(const string &name,
         ((flags&BF_require_parasite)!=0)||
         ((flags&BF_require_parasite)!=0)||
         ((flags&BF_require_window)!=0)||
         ((flags&BF_require_window)!=0)||
         ((flags&BF_size_track_host)!=0)||
         ((flags&BF_size_track_host)!=0)||
+        ((flags&BF_rtt_cumulative)!=0)||
         ((flags&BF_can_bind_every)!=0)) {
         ((flags&BF_can_bind_every)!=0)) {
       return NULL;
       return NULL;
     }
     }