annotate libinterp/dldfcn/__osmesa_print__.cc @ 20939:b17fda023ca6

maint: Use new C++ archetype in more files. Place input validation first in files. Move declaration of retval down in function to be closer to point of usage. Eliminate else clause after if () error. Use "return ovl()" where it makes sense. * find.cc, gammainc.cc, gcd.cc, getgrent.cc, getpwent.cc, givens.cc, graphics.cc, help.cc, hess.cc, hex2num.cc, input.cc, kron.cc, load-path.cc, load-save.cc, lookup.cc, mappers.cc, matrix_type.cc, mgorth.cc, nproc.cc, ordschur.cc, pager.cc, pinv.cc, pr-output.cc, profiler.cc, psi.cc, quad.cc, rcond.cc, regexp.cc, schur.cc, sighandlers.cc, sparse.cc, str2double.cc, strfind.cc, strfns.cc, sub2ind.cc, svd.cc, sylvester.cc, symtab.cc, syscalls.cc, sysdep.cc, time.cc, toplev.cc, tril.cc, tsearch.cc, typecast.cc, urlwrite.cc, utils.cc, variables.cc, __delaunayn__.cc, __eigs__.cc, __glpk__.cc, __magick_read__.cc, __osmesa_print__.cc, __voronoi__.cc, amd.cc, audiodevinfo.cc, audioread.cc, chol.cc, colamd.cc, dmperm.cc, fftw.cc, qr.cc, symbfact.cc, symrcm.cc, ov-bool-mat.cc, ov-cell.cc, ov-class.cc, ov-classdef.cc, ov-fcn-handle.cc, ov-fcn-inline.cc, ov-flt-re-mat.cc, ov-java.cc, ov-null-mat.cc, ov-oncleanup.cc, ov-re-mat.cc, ov-struct.cc, ov-typeinfo.cc, ov-usr-fcn.cc, ov.cc, octave.cc: Use new C++ archetype in more files.
author Rik <rik@octave.org>
date Fri, 18 Dec 2015 15:37:22 -0800
parents 1142cf6abc0d
children 83ce7b8fb91c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
1 /*
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
2
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
3 Copyright (C) 2015 Andreas Weber <andy.weber.aw@gmail.com>
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
4
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
5 This file is part of Octave.
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
6
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
9 Free Software Foundation; either version 3 of the License, or (at your
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
10 option) any later version.
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
11
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
15 for more details.
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
16
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, see
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
19 <http://www.gnu.org/licenses/>.
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
20
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
21 This code is based on Brian Pauls' src/osdemos/osdemo.c
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
22 from git://anongit.freedesktop.org/mesa/demos
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
23
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
24 */
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
25
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
26 #ifdef HAVE_CONFIG_H
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
27 #include <config.h>
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
28 #endif
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
29
19709
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19707
diff changeset
30 #include "oct-locbuf.h"
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19707
diff changeset
31 #include "unwind-prot.h"
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19707
diff changeset
32
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
33 #include "defun-dld.h"
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
34 #include "gl-render.h"
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
35 #include "gl2ps-renderer.h"
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
36 #include "graphics.h"
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
37 #include "gripes.h"
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
38
19732
bf25e9f7c22a use FLTK_CFLAGS and FLTK_LIBS instead of GRAPHICS_CFLAGS and GRAPHICS_LIBS
John W. Eaton <jwe@octave.org>
parents: 19710
diff changeset
39 #if defined (HAVE_OSMESA_H)
bf25e9f7c22a use FLTK_CFLAGS and FLTK_LIBS instead of GRAPHICS_CFLAGS and GRAPHICS_LIBS
John W. Eaton <jwe@octave.org>
parents: 19710
diff changeset
40 #include "osmesa.h"
bf25e9f7c22a use FLTK_CFLAGS and FLTK_LIBS instead of GRAPHICS_CFLAGS and GRAPHICS_LIBS
John W. Eaton <jwe@octave.org>
parents: 19710
diff changeset
41 #elif defined (HAVE_GL_OSMESA_H)
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
42 #include "GL/osmesa.h"
19732
bf25e9f7c22a use FLTK_CFLAGS and FLTK_LIBS instead of GRAPHICS_CFLAGS and GRAPHICS_LIBS
John W. Eaton <jwe@octave.org>
parents: 19710
diff changeset
43 #endif
19709
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19707
diff changeset
44
19732
bf25e9f7c22a use FLTK_CFLAGS and FLTK_LIBS instead of GRAPHICS_CFLAGS and GRAPHICS_LIBS
John W. Eaton <jwe@octave.org>
parents: 19710
diff changeset
45 #if defined (HAVE_OSMESA) && defined (HAVE_OPENGL)
19709
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19707
diff changeset
46 static void
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19707
diff changeset
47 close_fcn (FILE *f)
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19707
diff changeset
48 {
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19707
diff changeset
49 gnulib::fclose (f);
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19707
diff changeset
50 }
19763
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
51
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
52 static void
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
53 reset_visibility (figure::properties *fp)
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
54 {
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
55 fp->set_visible ("on");
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
56 }
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
57 #endif
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
58
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
59 DEFUN_DLD(__osmesa_print__, args, ,
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
60 "-*- texinfo -*-\n\
20853
1142cf6abc0d 2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents: 20825
diff changeset
61 @deftypefn {} {} __osmesa_print__ (@var{h}, @var{file}, @var{term})\n\
1142cf6abc0d 2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents: 20825
diff changeset
62 @deftypefnx {} {@var{img} =} __osmesa_print__ (@var{h})\n\
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
63 Print figure @var{h} using OSMesa and gl2ps for vector formats.\n\
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
64 \n\
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
65 This is a private internal function.\n\
19763
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
66 \n\
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
67 The first method calls gl2ps with the appropriate @var{term} and writes\n\
19795
ca7599ae464d doc: Grammarcheck documentation ahead of 4.0 release.
Rik <rik@octave.org>
parents: 19763
diff changeset
68 the output of gl2ps to @var{file}. If the first character of @var{file}\n\
19763
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
69 is @qcode{|}, then a process is started and the output of gl2ps is piped\n\
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
70 to it.\n\
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
71 \n\
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
72 Valid options for @var{term}, which can be concatenated in one string, are:\n\
19795
ca7599ae464d doc: Grammarcheck documentation ahead of 4.0 release.
Rik <rik@octave.org>
parents: 19763
diff changeset
73 \n\
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
74 @table @asis\n\
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
75 @item @qcode{eps}, @qcode{pdf}, @qcode{ps}, @qcode{svg}, @qcode{pgf}, @qcode{tex}\n\
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
76 Select output format.\n\
19795
ca7599ae464d doc: Grammarcheck documentation ahead of 4.0 release.
Rik <rik@octave.org>
parents: 19763
diff changeset
77 \n\
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
78 @item @qcode{is2D}\n\
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
79 Use GL2PS_SIMPLE_SORT instead of GL2PS_BSP_SORT as Z-depth sorting algorithm.\n\
19795
ca7599ae464d doc: Grammarcheck documentation ahead of 4.0 release.
Rik <rik@octave.org>
parents: 19763
diff changeset
80 \n\
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
81 @item @qcode{notext}\n\
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
82 Don't render text.\n\
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
83 @end table\n\
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
84 \n\
19763
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
85 The second method doesn't use gl2ps and returns a RGB image in @var{img}\n\
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
86 instead.\n\
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
87 \n\
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
88 @end deftypefn")
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
89 {
19732
bf25e9f7c22a use FLTK_CFLAGS and FLTK_LIBS instead of GRAPHICS_CFLAGS and GRAPHICS_LIBS
John W. Eaton <jwe@octave.org>
parents: 19710
diff changeset
90 #if ! defined (HAVE_OSMESA)
19763
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
91 gripe_disabled_feature ("__osmesa_print__", "offscreen rendering");
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
92 #else
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
93 int nargin = args.length ();
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
94
20812
d9ca869ca124 maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents: 20790
diff changeset
95 if (nargin != 1 && nargin != 3)
20790
c2d9556d51d0 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20555
diff changeset
96 print_usage ();
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
97
19763
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
98 if (nargin == 3)
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
99 {
19763
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
100 if (! (args(1).is_string () && args(2).is_string ()))
20825
66cd994d1b79 eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents: 20812
diff changeset
101 error ("__osmesa_print__: FILE and TERM must be strings");
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
102
19763
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
103 #ifndef HAVE_GL2PS_H
19861
19755f4fc851 maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19795
diff changeset
104 error ("__osmesa_print__: Octave has been compiled without gl2ps");
19763
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
105 #endif
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
106 }
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
107
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
108 octave_value_list retval;
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
109
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
110 int h = args(0).double_value ();
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
111 graphics_object fobj = gh_manager::get_object (h);
19763
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
112 if (! (fobj && fobj.isa ("figure")))
20825
66cd994d1b79 eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents: 20812
diff changeset
113 error ("__osmesa_print__: H must be a valid figure handle");
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
114
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
115 figure::properties& fp =
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
116 dynamic_cast<figure::properties&> (fobj.get_properties ());
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
117
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
118 bool internal = true;
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
119 Matrix bb = fp.get_boundingbox (internal);
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
120
19922
a0ec61ec0f73 __osmesa_print__.cc: Use GLsizei in call to OSMesaCreateContextExt to match prototype.
Rik <rik@octave.org>
parents: 19917
diff changeset
121 GLsizei Width = static_cast<GLsizei> (bb(2));
a0ec61ec0f73 __osmesa_print__.cc: Use GLsizei in call to OSMesaCreateContextExt to match prototype.
Rik <rik@octave.org>
parents: 19917
diff changeset
122 GLsizei Height = static_cast<GLsizei> (bb(3));
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
123
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
124 // Create an RGBA-mode context, specify Z=16, stencil=0, accum=0 sizes
19710
ce0a1bd0cd47 fix omission from changeset 1170c849952b
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
125 OSMesaContext ctx = OSMesaCreateContextExt (OSMESA_RGBA, 16, 0, 0, NULL);
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
126 if (! ctx)
20825
66cd994d1b79 eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents: 20812
diff changeset
127 error ("__osmesa_print__: OSMesaCreateContext failed!\n");
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
128
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
129 // Allocate the image buffer
19710
ce0a1bd0cd47 fix omission from changeset 1170c849952b
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
130 OCTAVE_LOCAL_BUFFER (GLubyte, buffer, 4 * Width * Height);
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
131
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
132 // Bind the buffer to the context and make it current
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
133 if (! OSMesaMakeCurrent (ctx, buffer, GL_UNSIGNED_BYTE, Width, Height))
20825
66cd994d1b79 eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents: 20812
diff changeset
134 error ("__osmesa_print__: OSMesaMakeCurrent failed!\n");
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
135
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
136 // Test for a bug in OSMesa with version < 9.0
19763
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
137 //
19917
f48e650a68b5 Use GLint instead of just int in calls to glGetIntegerv to match prototype.
Rik <rik@octave.org>
parents: 19914
diff changeset
138 // Unfortunately the macros OSMESA_MAJOR_VERSION and OSMESA_MINOR_VERSION
f48e650a68b5 Use GLint instead of just int in calls to glGetIntegerv to match prototype.
Rik <rik@octave.org>
parents: 19914
diff changeset
139 // weren't updated between many releases and can't be used for detection.
f48e650a68b5 Use GLint instead of just int in calls to glGetIntegerv to match prototype.
Rik <rik@octave.org>
parents: 19914
diff changeset
140 // (Version 8.0 until 9.1.4 all return MAJOR 6, MINOR 5)
f48e650a68b5 Use GLint instead of just int in calls to glGetIntegerv to match prototype.
Rik <rik@octave.org>
parents: 19914
diff changeset
141 GLint z, s;
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
142 glGetIntegerv (GL_DEPTH_BITS, &z);
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
143 glGetIntegerv (GL_STENCIL_BITS, &s);
19763
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
144 if (z != 16 || s != 0)
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
145 error ("__osmesa_print__: Depth and stencil doesn't match,"
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
146 " are you sure you are using OSMesa >= 9.0?");
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
147
19763
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
148 unwind_protect outer_frame;
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
149
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
150 bool v = fp.is_visible ();
19763
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
151
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
152 if (v)
19763
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
153 {
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
154 outer_frame.add_fcn (reset_visibility, &fp);
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
155
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
156 fp.set_visible ("off");
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
157 }
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
158
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
159 if (nargin == 3)
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
160 {
19707
59ad278cfb98 __opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents: 19703
diff changeset
161 // use gl2ps
20096
bb59bdbdb8ac Fix compilation error when building with OSMesa but without gl2ps (bug #44870)
Andreas Weber <andy.weber.aw@gmail.com>
parents: 20048
diff changeset
162 #ifndef HAVE_GL2PS_H
bb59bdbdb8ac Fix compilation error when building with OSMesa but without gl2ps (bug #44870)
Andreas Weber <andy.weber.aw@gmail.com>
parents: 20048
diff changeset
163 gripe_disabled_feature ("__osmesa_print__", "gl2ps");
bb59bdbdb8ac Fix compilation error when building with OSMesa but without gl2ps (bug #44870)
Andreas Weber <andy.weber.aw@gmail.com>
parents: 20048
diff changeset
164 #else
19707
59ad278cfb98 __opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents: 19703
diff changeset
165 std::string file = args(1).string_value ();
59ad278cfb98 __opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents: 19703
diff changeset
166 std::string term = args(2).string_value ();
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
167
20555
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
168 size_t pos_p = file.find_first_of ("|");
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
169 size_t pos_c = file.find_first_not_of ("| ");
19884
e814e202cd84 Account for whitespace and other anomalies in print function pipe/file string.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 19874
diff changeset
170
20555
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
171 if (pos_p == std::string::npos && pos_c == std::string::npos)
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
172 error ("__osmesa_print__: empty output ''");
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
173 else if (pos_c == std::string::npos)
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
174 error ("__osmesa_print__: empty pipe '|'");
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
175 else if (pos_p != std::string::npos && pos_p < pos_c)
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
176 {
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
177 // create process and pipe gl2ps output to it
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
178 std::string cmd = file.substr (pos_c);
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
179 gl2ps_print (fobj, cmd, term);
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
180 }
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
181 else
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
182 {
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
183 // write gl2ps output directly to file
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
184 FILE *filep = gnulib::fopen (file.substr (pos_c).c_str (), "w");
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
185
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
186 if (! filep)
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
187 error ("__osmesa_print__: Couldn't create file \"%s\"", file.c_str ());
20555
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
188
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
189 unwind_protect frame;
20555
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
190
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
191 frame.add_fcn (close_fcn, filep);
20555
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20096
diff changeset
192
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
193 glps_renderer rend (filep, term);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
194 rend.draw (fobj, "");
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
195
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
196 // Make sure buffered commands are finished!!!
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
197 glFinish ();
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
198 }
20096
bb59bdbdb8ac Fix compilation error when building with OSMesa but without gl2ps (bug #44870)
Andreas Weber <andy.weber.aw@gmail.com>
parents: 20048
diff changeset
199 #endif
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
200 }
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
201 else
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
202 {
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
203 // return RGB image
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
204 opengl_renderer rend;
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
205 rend.draw (fobj);
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
206
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
207 // Make sure buffered commands are finished!!!
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
208 glFinish ();
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
209
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
210 dim_vector dv (4, Width, Height);
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
211
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
212 // FIXME: We expect that GLubyte is 1 Byte long.
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
213 // Adapt code if this isn't always true
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
214 assert (sizeof (GLubyte) == 1);
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
215 uint8NDArray img (dv);
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
216 unsigned char *p = reinterpret_cast<unsigned char*>(img.fortran_vec ());
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
217 memcpy (p, buffer, (4 * Width * Height));
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
218
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
219 Array<octave_idx_type> perm (dim_vector (3, 1));
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
220 perm(0) = 2;
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
221 perm(1) = 1;
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
222 perm(2) = 0;
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
223
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
224 Array<idx_vector> idx (dim_vector (3, 1));
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
225
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
226 // Flip Y
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
227 idx(0) = idx_vector::make_range (Height - 1, -1, Height);
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
228 idx(1) = idx_vector::colon;
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
229
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
230 // Remove alpha channel
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
231 idx(2) = idx_vector (0, 3);
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
232 retval = octave_value (img.permute (perm). index(idx));
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
233 }
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
234
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
235 OSMesaDestroyContext (ctx);
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
236
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
237 return retval;
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
238 #endif
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
239 }
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
240
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
241 /*
19914
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
242 ## FIXME: osmesa does not work correctly on Windows platforms.
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
243 ## This is not critical, since this facility will mostly be used in
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
244 ## the future for generating the images in Octave's own documentation.
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
245 ## For the moment, disable these tests on PC's and Macs.
20096
bb59bdbdb8ac Fix compilation error when building with OSMesa but without gl2ps (bug #44870)
Andreas Weber <andy.weber.aw@gmail.com>
parents: 20048
diff changeset
246 %!testif HAVE_OSMESA, HAVE_GL2PS_H
19914
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
247 %! if (isunix ())
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
248 %! h = figure ("visible", "off");
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
249 %! fn = tempname ();
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
250 %! sombrero ();
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
251 %! __osmesa_print__ (h, fn, "svg");
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
252 %! assert (stat (fn).size, 2692270, -0.1);
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
253 %! unlink (fn);
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
254 %! img = __osmesa_print__ (h);
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
255 %! assert (size (img), [get(h, "position")([4, 3]), 3])
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
256 %! ## Use pixel sum per RGB channel as fingerprint
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
257 %! img_fp = squeeze (sum (sum (img), 2));
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
258 %! assert (img_fp, [52942515; 54167797; 56158178], -0.05);
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
259 %! endif
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
260
20096
bb59bdbdb8ac Fix compilation error when building with OSMesa but without gl2ps (bug #44870)
Andreas Weber <andy.weber.aw@gmail.com>
parents: 20048
diff changeset
261 %!testif HAVE_OSMESA, HAVE_GL2PS_H
19914
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
262 %! if (isunix ())
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
263 %! h = figure ("visible", "off");
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
264 %! fn = tempname ();
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
265 %! plot (sin (0:0.1:2*pi));
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
266 %! __osmesa_print__ (h, fn, "svgis2d");
20048
f1b67f6e6e45 __osmesa_print__.cc: Increase non-critical relative tolerance in BIST test.
Rik <rik@octave.org>
parents: 19922
diff changeset
267 %! assert (stat (fn).size, 7438, -0.1);
19914
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
268 %! unlink (fn);
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
269 %! img = __osmesa_print__ (h);
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
270 %! assert (size (img), [get(h, "position")([4, 3]), 3])
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
271 %! ## Use pixel sum per RGB channel as fingerprint
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
272 %! img_fp = squeeze (sum (sum (img), 2));
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
273 %! assert (img_fp, [59281711; 59281711; 59482179], -0.05);
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19884
diff changeset
274 %! endif
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
275 */