Browse Source

Exposes Opengl Vendor, Driver, Shader Model information to python

Zhao Huang 14 years ago
parent
commit
a56760cbcf

+ 50 - 0
panda/src/display/graphicsStateGuardian.cxx

@@ -130,6 +130,7 @@ TypeHandle GraphicsStateGuardian::_type_handle;
 //       Access: Public
 //       Access: Public
 //  Description:
 //  Description:
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
+
 GraphicsStateGuardian::
 GraphicsStateGuardian::
 GraphicsStateGuardian(CoordinateSystem internal_coordinate_system,
 GraphicsStateGuardian(CoordinateSystem internal_coordinate_system,
                       GraphicsEngine *engine, GraphicsPipe *pipe) :
                       GraphicsEngine *engine, GraphicsPipe *pipe) :
@@ -2664,3 +2665,52 @@ make_shadow_buffer(const NodePath &light_np, GraphicsOutputBase *host) {
   return tex;
   return tex;
 }
 }
 
 
+////////////////////////////////////////////////////////////////////
+//     Function: GraphicsStateGuardian::get_driver_vendor
+//       Access: Public, Virtual
+//  Description: Returns the vendor of the video card driver 
+////////////////////////////////////////////////////////////////////
+string GraphicsStateGuardian::get_driver_vendor() { return string("0"); }
+
+////////////////////////////////////////////////////////////////////
+//     Function: GraphicsStateGuardian::get_driver_vendor
+//       Access: Public, Virtual
+//  Description: Returns GL_Renderer
+////////////////////////////////////////////////////////////////////
+string GraphicsStateGuardian::get_driver_renderer() { return string("0"); }
+
+////////////////////////////////////////////////////////////////////
+//     Function: GraphicsStateGuardian::get_driver_version
+//       Access: Public, Virtual
+//  Description: Returns driver version
+////////////////////////////////////////////////////////////////////
+string GraphicsStateGuardian::get_driver_version() { return string("0"); }
+
+////////////////////////////////////////////////////////////////////
+//     Function: GraphicsStateGuardian::get_driver_version_major
+//       Access: Public, Virtual
+//  Description: Returns major version of the video driver
+////////////////////////////////////////////////////////////////////
+int GraphicsStateGuardian::get_driver_version_major() { return -1; }
+
+////////////////////////////////////////////////////////////////////
+//     Function: GraphicsStateGuardian::get_driver_version_minor
+//       Access: Public, Virtual
+//  Description: Returns the minor version of the video driver
+////////////////////////////////////////////////////////////////////
+int GraphicsStateGuardian::get_driver_version_minor() { return -1; }
+
+////////////////////////////////////////////////////////////////////
+//     Function: GraphicsStateGuardian::get_driver_shader_version_major
+//       Access: Public, Virtual
+//  Description: Returns the major version of the shader model
+////////////////////////////////////////////////////////////////////
+int GraphicsStateGuardian::get_driver_shader_version_major() { return -1; }
+
+////////////////////////////////////////////////////////////////////
+//     Function: GraphicsStateGuardian::get_driver_shader_version_minor
+//       Access: Public, Virtual
+//  Description: Returns the minor version of the shader model
+////////////////////////////////////////////////////////////////////
+int GraphicsStateGuardian::get_driver_shader_version_minor() { return -1; }
+

+ 9 - 0
panda/src/display/graphicsStateGuardian.h

@@ -191,6 +191,15 @@ PUBLISHED:
 #endif
 #endif
 
 
 PUBLISHED:
 PUBLISHED:
+
+  virtual string get_driver_vendor();
+  virtual string get_driver_renderer();
+  virtual string get_driver_version();
+  virtual int get_driver_version_major();
+  virtual int get_driver_version_minor();
+  virtual int get_driver_shader_version_major();
+  virtual int get_driver_shader_version_minor();
+  
   bool set_scene(SceneSetup *scene_setup);
   bool set_scene(SceneSetup *scene_setup);
   virtual SceneSetup *get_scene() const;
   virtual SceneSetup *get_scene() const;
 
 

+ 28 - 0
panda/src/glstuff/glGraphicsStateGuardian_src.cxx

@@ -276,6 +276,16 @@ fix_component_ordering(PTA_uchar &new_image,
   return result;
   return result;
 }
 }
 
 
+//#--- Zhao Nov/2011
+string CLP(GraphicsStateGuardian)::get_driver_vendor() { return _gl_vendor; }
+string CLP(GraphicsStateGuardian)::get_driver_renderer() { return _gl_renderer; }
+
+string CLP(GraphicsStateGuardian)::get_driver_version() { return _gl_version; }
+int CLP(GraphicsStateGuardian)::get_driver_version_major() { return _gl_version_major; }
+int CLP(GraphicsStateGuardian)::get_driver_version_minor() { return _gl_version_minor; }
+int CLP(GraphicsStateGuardian)::get_driver_shader_version_major() { return _gl_shadlang_ver_major; }
+int CLP(GraphicsStateGuardian)::get_driver_shader_version_minor() { return _gl_shadlang_ver_minor; }
+
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //     Function: GLGraphicsStateGuardian::Constructor
 //     Function: GLGraphicsStateGuardian::Constructor
 //       Access: Public
 //       Access: Public
@@ -5398,6 +5408,24 @@ query_gl_version() {
         << _gl_version_major << "." << _gl_version_minor
         << _gl_version_major << "." << _gl_version_minor
         << "\n";
         << "\n";
     }
     }
+
+    if (_gl_version_major==1) {
+        const char *extstr = (const char *) GLP(GetString)(GL_EXTENSIONS);
+        if (extstr != NULL) {
+            if (strstr( extstr, "GL_ARB_shading_language_100") != NULL)
+            {
+                _gl_shadlang_ver_major = 1;
+                _gl_shadlang_ver_minor = 0;
+            }
+        }
+    } 
+    else if (_gl_version_major >= 2) {
+        const char *verstr = (const char *) GLP(GetString)(GL_SHADING_LANGUAGE_VERSION);
+        if ((verstr == NULL) || (sscanf(verstr, "%d.%d", &_gl_shadlang_ver_major, &_gl_shadlang_ver_minor) != 2))
+        {
+            GLCAT.warning()  << "Invalid GL_SHADING_LANGUAGE_VERSION format.\n";            
+        }
+    }
   }
   }
 }
 }
 
 

+ 11 - 0
panda/src/glstuff/glGraphicsStateGuardian_src.h

@@ -186,6 +186,15 @@ public:
   CLP(GraphicsStateGuardian)(GraphicsEngine *engine, GraphicsPipe *pipe);
   CLP(GraphicsStateGuardian)(GraphicsEngine *engine, GraphicsPipe *pipe);
   virtual ~CLP(GraphicsStateGuardian)();
   virtual ~CLP(GraphicsStateGuardian)();
 
 
+  //#--- Zhao Nov/2011
+  virtual string get_driver_vendor();
+  virtual string get_driver_renderer();
+  virtual string get_driver_version();
+  virtual int get_driver_version_major();
+  virtual int get_driver_version_minor();
+  virtual int get_driver_shader_version_major();
+  virtual int get_driver_shader_version_minor();
+  
   virtual void reset();
   virtual void reset();
 
 
   virtual void prepare_display_region(DisplayRegionPipelineReader *dr);
   virtual void prepare_display_region(DisplayRegionPipelineReader *dr);
@@ -520,6 +529,8 @@ protected:
   string _gl_renderer;
   string _gl_renderer;
   string _gl_version;
   string _gl_version;
   int _gl_version_major, _gl_version_minor;
   int _gl_version_major, _gl_version_minor;
+  //#--- Zhao Nov/2011
+  int _gl_shadlang_ver_major, _gl_shadlang_ver_minor;
   pset<string> _extensions;
   pset<string> _extensions;
 
 
 public:
 public: