# HG changeset patch # User John Donoghue # Date 1468789410 14400 # Node ID 8a456af24e6b58fafe997623696b2d69779d9582 # Parent 469c817eb2560e93208a10b267c35c4bccd46bf3 provide single function to get OpenGL renderer info * scripts/plot/util/__opengl_info__.m: New file. * scripts/plot/util/module.mk: Update. diff -r 469c817eb256 -r 8a456af24e6b scripts/plot/util/__opengl_info__.m --- /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 +## +## 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 . + +## -*- 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")) diff -r 469c817eb256 -r 8a456af24e6b scripts/plot/util/module.mk --- 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 \