diff --git a/panda/src/display/graphicsStateGuardian.cxx b/panda/src/display/graphicsStateGuardian.cxx index 96ccd7a188..9a0dc918a4 100644 --- a/panda/src/display/graphicsStateGuardian.cxx +++ b/panda/src/display/graphicsStateGuardian.cxx @@ -130,6 +130,7 @@ TypeHandle GraphicsStateGuardian::_type_handle; // Access: Public // Description: //////////////////////////////////////////////////////////////////// + GraphicsStateGuardian:: GraphicsStateGuardian(CoordinateSystem internal_coordinate_system, GraphicsEngine *engine, GraphicsPipe *pipe) : @@ -2664,3 +2665,52 @@ make_shadow_buffer(const NodePath &light_np, GraphicsOutputBase *host) { 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; } + diff --git a/panda/src/display/graphicsStateGuardian.h b/panda/src/display/graphicsStateGuardian.h index 94c392e127..463540397f 100644 --- a/panda/src/display/graphicsStateGuardian.h +++ b/panda/src/display/graphicsStateGuardian.h @@ -191,6 +191,15 @@ PUBLISHED: #endif 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); virtual SceneSetup *get_scene() const; diff --git a/panda/src/glstuff/glGraphicsStateGuardian_src.cxx b/panda/src/glstuff/glGraphicsStateGuardian_src.cxx index ef7eb69b56..42c208e0db 100644 --- a/panda/src/glstuff/glGraphicsStateGuardian_src.cxx +++ b/panda/src/glstuff/glGraphicsStateGuardian_src.cxx @@ -276,6 +276,16 @@ fix_component_ordering(PTA_uchar &new_image, 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 // Access: Public @@ -5398,6 +5408,24 @@ query_gl_version() { << _gl_version_major << "." << _gl_version_minor << "\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"; + } + } } } diff --git a/panda/src/glstuff/glGraphicsStateGuardian_src.h b/panda/src/glstuff/glGraphicsStateGuardian_src.h index cd5ae9193e..2acb8aa510 100644 --- a/panda/src/glstuff/glGraphicsStateGuardian_src.h +++ b/panda/src/glstuff/glGraphicsStateGuardian_src.h @@ -186,6 +186,15 @@ public: CLP(GraphicsStateGuardian)(GraphicsEngine *engine, GraphicsPipe *pipe); 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 prepare_display_region(DisplayRegionPipelineReader *dr); @@ -520,6 +529,8 @@ protected: string _gl_renderer; string _gl_version; int _gl_version_major, _gl_version_minor; + //#--- Zhao Nov/2011 + int _gl_shadlang_ver_major, _gl_shadlang_ver_minor; pset _extensions; public: