public static function sw_opengl_driver()
 {
     // OpenGL version
     $info = null;
     if (phodevi::is_windows()) {
         $info = null;
         // TODO: Windows support
     } else {
         if (pts_client::executable_in_path('nvidia-settings')) {
             $info = phodevi_parser::read_nvidia_extension('OpenGLVersion');
         }
     }
     if ($info == null) {
         $info = phodevi_parser::software_glxinfo_version();
         if ($info && ($pos = strpos($info, ' ')) != false && strpos($info, 'Mesa') === false) {
             $info = substr($info, 0, $pos);
         }
         $renderer = phodevi_parser::read_glx_renderer();
         if ($renderer && ($s = strpos($renderer, 'Gallium')) !== false) {
             $renderer = substr($renderer, $s);
             $renderer = substr($renderer, 0, strpos($renderer, ' ', strpos($renderer, '.')));
             $info .= ' ' . $renderer . '';
         }
     }
     return $info;
 }
 protected function generate_graphics_data(&$result_file, $system_identifier)
 {
     $this->rows[] = $system_identifier;
     $rows_index = count($this->rows) - 1;
     foreach ($this->columns as $i => $cpuinfo_item) {
         switch ($cpuinfo_item) {
             case 'OpenGL Renderer':
                 $line = phodevi_parser::read_glx_renderer();
                 break;
             case 'OpenGL Version':
                 $line = phodevi_parser::software_glxinfo_version();
                 break;
             case 'GLSL Version':
                 $line = phodevi_parser::software_glxinfo_glsl_version();
                 break;
             case 'OpenGL Extensions':
                 $line = phodevi_parser::software_glxinfo_opengl_extensions();
                 break;
         }
         $this->table_data[$i][$rows_index] = $line;
     }
 }