Mercurial > octave
view scripts/plot/util/__opengl_info__.m @ 22221:fddc5604d1fa
__opengl_info__.m: Tide code and fix to work with fltk toolkit.
* __opengl_info__.m: Remove type specifier "Function File" from @deftypefn
macro. Use '##' as prefix for full-line comments. Eliminate extra checks
for "isempty (info)" in for loop. Loop directly over available graphics
handles rather than over index to graphics handle list. Draw an axes object
on blank figure in order to force FLTK toolkit to populate OpenGL fields.
Use drawnow() rather than a 1 second waitfor() delay in order to force
graphics system to populate OpenGL fields.
author | Rik <rik@octave.org> |
---|---|
date | Mon, 08 Aug 2016 12:03:06 -0700 |
parents | 8a456af24e6b |
children | 3a2b891d0b33 e9a0469dedd9 |
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 {} {} __opengl_info__ ## @deftypefnx {} {@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)) warning (msg); else 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 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 hf = figs.' info = fig_gl_info (hf); if (! isempty (info)) break; endif endfor ## If no info yet, try open a figure to get the info. if (isempty (info)) ## Need to create a figure, place an OpenGL object, and force drawing. h = figure ("position", [0,0,1,1], "toolbar", "none", "menubar", "none"); hax = axes (); drawnow (); 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"))