changeset 22205:8a456af24e6b

provide single function to get OpenGL renderer info * scripts/plot/util/__opengl_info__.m: New file. * scripts/plot/util/module.mk: Update.
author John Donoghue <john.donoghue@ieee.org>
date Sun, 17 Jul 2016 17:03:30 -0400
parents 469c817eb256
children 21684fa513ce
files scripts/plot/util/__opengl_info__.m scripts/plot/util/module.mk
diffstat 2 files changed, 130 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/plot/util/__opengl_info__.m	Sun Jul 17 17:03:30 2016 -0400
@@ -0,0 +1,121 @@
+## Copyright (C) 2016 John Donoghue <john.donoghue@ieee.org>
+##
+## This program is free software; you can redistribute it and/or modify it
+## under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 3 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn {Function File} __opengl_info__
+## @deftypefnx {Function File} {@var{retval} =} __opengl_info__ ()
+##
+## Get OpenGL driver information.
+##
+## If no output values are requested, display information about the
+## OpenGL subsystem.  If an output is requested, return the information
+## in a structure.
+##
+## Fields in the structure are:
+## @table @asis
+## @item version
+## OpenGL Driver version string
+## @item vendor
+## OpenGL Driver vendor string
+## @item renderer
+## OpenGL renderer string
+## @item extensions
+## List of enabled extensions for the OpenGL driver.
+## @end table
+##
+## @example
+## glinfo = __opengl_info__ ();
+## @end example
+##
+## @end deftypefn
+
+function retval = __opengl_info__ ()
+
+  # currently we only handle a single argument
+  if (nargin != 0)
+    print_usage ();
+  endif
+
+  [info, msg] = gl_info ();
+
+  if (isempty (msg))
+    if (nargout == 0)
+      printf ("version    = %s\n", info.version);
+      printf ("vendor     = %s\n", info.vendor);
+      printf ("renderer   = %s\n", info.renderer);
+      printf ("extensions =\n");
+      printf ("  %s\n", info.extensions{:});
+    else
+      retval = info;
+    endif
+  else
+    warning (msg);
+  endif
+
+endfunction
+
+function info = fig_gl_info (h)
+  info = [];
+  if (ishandle (h) && strcmp (get (h, "renderer"), "opengl"))
+    vers = get (h, "__gl_version__");
+    vend = get (h, "__gl_vendor__");
+    rend = get (h, "__gl_renderer__");
+    exts = get (h, "__gl_extensions__");
+    if (! isempty (vend))
+      info.version = vers;
+      info.vendor = vend;
+      info.renderer = rend;
+      info.extensions = strsplit (strtrim (exts));
+    endif
+  endif
+endfunction
+
+function [info, msg] = gl_info ()
+  info = [];
+  msg = "";
+
+  ## If we have any open figures, take a look for any OpenGL info.
+
+  figs = findall (0, "type", "figure");
+
+  for i = 1:numel (figs)
+    if (isempty (info))
+      info = fig_gl_info (figs(i));
+      if (! isempty (info))
+        break
+      endif
+    endif
+  endfor
+
+  ## If no info yet, try open a figure brifly to get the info.
+
+  if (isempty (info))
+    h = figure ("position", [0,0,1,1], "toolbar", "none", "menubar", "none");
+    waitfor (h, "timeout", 1);
+    info = fig_gl_info (h);
+    close (h);
+  endif
+
+  if (isempty (info))
+    msg = "__opengl_info__: can not obtain OpenGL information";
+  endif
+
+endfunction
+
+
+%!xtest
+%! a = __opengl_info__ ();
+%! assert (! isempty (a))
+%! assert (isfield (a, "version"))
--- a/scripts/plot/util/module.mk	Thu Aug 04 20:20:27 2016 +0100
+++ b/scripts/plot/util/module.mk	Sun Jul 17 17:03:30 2016 -0400
@@ -24,6 +24,13 @@
 
 scripts_plot_util_FCN_FILES = \
   scripts/plot/util/__actual_axis_position__.m \
+  scripts/plot/util/__default_plot_options__.m \
+  scripts/plot/util/__gnuplot_drawnow__.m \
+  scripts/plot/util/__next_line_color__.m \
+  scripts/plot/util/__next_line_style__.m \
+  scripts/plot/util/__opengl_info__.m \
+  scripts/plot/util/__plt_get_axis_arg__.m \
+  scripts/plot/util/__pltopt__.m \
   scripts/plot/util/allchild.m \
   scripts/plot/util/ancestor.m \
   scripts/plot/util/axes.m \
@@ -33,7 +40,6 @@
   scripts/plot/util/closereq.m \
   scripts/plot/util/colstyle.m \
   scripts/plot/util/copyobj.m \
-  scripts/plot/util/__default_plot_options__.m \
   scripts/plot/util/figure.m \
   scripts/plot/util/findall.m \
   scripts/plot/util/findfigs.m \
@@ -45,7 +51,6 @@
   scripts/plot/util/gcf.m \
   scripts/plot/util/gco.m \
   scripts/plot/util/ginput.m \
-  scripts/plot/util/__gnuplot_drawnow__.m \
   scripts/plot/util/graphics_toolkit.m \
   scripts/plot/util/hdl2struct.m \
   scripts/plot/util/hggroup.m \
@@ -63,15 +68,11 @@
   scripts/plot/util/meshgrid.m \
   scripts/plot/util/ndgrid.m \
   scripts/plot/util/newplot.m \
-  scripts/plot/util/__next_line_color__.m \
-  scripts/plot/util/__next_line_style__.m \
   scripts/plot/util/pan.m \
-  scripts/plot/util/__plt_get_axis_arg__.m \
-  scripts/plot/util/__pltopt__.m \
+  scripts/plot/util/print.m \
   scripts/plot/util/printd.m \
-  scripts/plot/util/print.m \
+  scripts/plot/util/refresh.m \
   scripts/plot/util/refreshdata.m \
-  scripts/plot/util/refresh.m \
   scripts/plot/util/rotate.m \
   scripts/plot/util/rotate3d.m \
   scripts/plot/util/saveas.m \