Mercurial > octave
view scripts/plot/util/__opengl_info__.m @ 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 | |
children | fddc5604d1fa |
line wrap: on
line source
## 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"))