annotate libinterp/dldfcn/__osmesa_print__.cc @ 20587:f90c8372b7ba

eliminate many more simple uses of error_state * Cell.cc, __ichol__.cc, __ilu__.cc, balance.cc, bsxfun.cc, colloc.cc, det.cc, dlmread.cc, dynamic-ld.cc, eig.cc, fft.cc, fft2.cc, fftn.cc, gcd.cc, getgrent.cc, getpwent.cc, givens.cc, hess.cc, input.cc, levenshtein.cc, load-path.cc, lookup.cc, ls-mat-ascii.cc, ls-mat4.cc, lsode.cc, lu.cc, max.cc, md5sum.cc, mex.cc, pager.cc, pinv.cc, pr-output.cc, qz.cc, schur.cc, sparse.cc, sqrtm.cc, str2double.cc, strfns.cc, sub2ind.cc, sysdep.cc, time.cc, toplev.cc, tril.cc, tsearch.cc, typecast.cc, __init_gnuplot__.cc, __magick_read__.cc, __osmesa_print__.cc, amd.cc, audiodevinfo.cc, dmperm.cc, fftw.cc, symrcm.cc, ov-base-diag.cc, ov-base-sparse.cc, ov-base.cc, ov-bool-sparse.cc, ov-builtin.cc, ov-complex.cc, ov-cx-diag.cc, ov-cx-mat.cc, ov-cx-sparse.cc, ov-fcn-handle.cc, ov-fcn-inline.cc, ov-float.cc, ov-flt-complex.cc, ov-flt-cx-diag.cc, ov-flt-cx-mat.cc, ov-flt-re-diag.cc, ov-flt-re-mat.cc, ov-lazy-idx.cc, ov-mex-fcn.cc, ov-perm.cc, ov-range.cc, ov-re-diag.cc, ov-re-mat.cc, ov-re-sparse.cc, ov-scalar.cc, ov-str-mat.cc, op-bm-b.cc, op-bm-bm.cc, op-sbm-b.cc, op-sbm-bm.cc, op-str-m.cc, op-str-s.cc, oct-parse.in.yy, pt-cbinop.cc, pt-colon.cc, pt-decl.cc, pt-exp.cc, pt-id.cc, pt-misc.cc, pt-select.cc, pt-unop.cc: Eliminate simple uses of error_state.
author John W. Eaton <jwe@octave.org>
date Mon, 05 Oct 2015 19:29:36 -0400
parents bb59bdbdb8ac
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19737
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
19743
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19741
diff changeset
30 #include "oct-locbuf.h"
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19741
diff changeset
31 #include "unwind-prot.h"
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19741
diff changeset
32
19737
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
19766
bf25e9f7c22a use FLTK_CFLAGS and FLTK_LIBS instead of GRAPHICS_CFLAGS and GRAPHICS_LIBS
John W. Eaton <jwe@octave.org>
parents: 19744
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: 19744
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: 19744
diff changeset
41 #elif defined (HAVE_GL_OSMESA_H)
19737
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"
19766
bf25e9f7c22a use FLTK_CFLAGS and FLTK_LIBS instead of GRAPHICS_CFLAGS and GRAPHICS_LIBS
John W. Eaton <jwe@octave.org>
parents: 19744
diff changeset
43 #endif
19743
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19741
diff changeset
44
19766
bf25e9f7c22a use FLTK_CFLAGS and FLTK_LIBS instead of GRAPHICS_CFLAGS and GRAPHICS_LIBS
John W. Eaton <jwe@octave.org>
parents: 19744
diff changeset
45 #if defined (HAVE_OSMESA) && defined (HAVE_OPENGL)
19743
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19741
diff changeset
46 static void
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19741
diff changeset
47 close_fcn (FILE *f)
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19741
diff changeset
48 {
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19741
diff changeset
49 gnulib::fclose (f);
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19741
diff changeset
50 }
19797
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
51
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
52 static void
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
53 reset_visibility (figure::properties *fp)
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
54 {
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
55 fp->set_visible ("on");
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
56 }
19737
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\
19829
ca7599ae464d doc: Grammarcheck documentation ahead of 4.0 release.
Rik <rik@octave.org>
parents: 19797
diff changeset
61 @deftypefn {Loadable Function} {} __osmesa_print__ (@var{h}, @var{file}, @var{term})\n\
ca7599ae464d doc: Grammarcheck documentation ahead of 4.0 release.
Rik <rik@octave.org>
parents: 19797
diff changeset
62 @deftypefnx {Loadable Function} {@var{img} =} __osmesa_print__ (@var{h})\n\
19737
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\
19797
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
66 \n\
19737
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\
19829
ca7599ae464d doc: Grammarcheck documentation ahead of 4.0 release.
Rik <rik@octave.org>
parents: 19797
diff changeset
68 the output of gl2ps to @var{file}. If the first character of @var{file}\n\
19797
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
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: 19766
diff changeset
70 to it.\n\
19737
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\
19829
ca7599ae464d doc: Grammarcheck documentation ahead of 4.0 release.
Rik <rik@octave.org>
parents: 19797
diff changeset
73 \n\
19737
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\
19829
ca7599ae464d doc: Grammarcheck documentation ahead of 4.0 release.
Rik <rik@octave.org>
parents: 19797
diff changeset
77 \n\
19737
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\
19829
ca7599ae464d doc: Grammarcheck documentation ahead of 4.0 release.
Rik <rik@octave.org>
parents: 19797
diff changeset
80 \n\
19737
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\
19797
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
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: 19766
diff changeset
86 instead.\n\
19737
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 {
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
90 octave_value_list retval;
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
91
19766
bf25e9f7c22a use FLTK_CFLAGS and FLTK_LIBS instead of GRAPHICS_CFLAGS and GRAPHICS_LIBS
John W. Eaton <jwe@octave.org>
parents: 19744
diff changeset
92 #if ! defined (HAVE_OSMESA)
19797
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
93 gripe_disabled_feature ("__osmesa_print__", "offscreen rendering");
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
94 #else
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
95
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
96 int nargin = args.length ();
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
97
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
98 if (! (nargin == 1 || nargin == 3))
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
99 {
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
100 print_usage ();
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
101 return retval;
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
102 }
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
103
19797
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
104 if (nargin == 3)
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
105 {
19797
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
106 if (! (args(1).is_string () && args(2).is_string ()))
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
107 {
19919
e814e202cd84 Account for whitespace and other anomalies in print function pipe/file string.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 19909
diff changeset
108 error ("__osmesa_print__: FILE and TERM must be strings");
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
109 return retval;
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
110 }
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
111
19797
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
112 #ifndef HAVE_GL2PS_H
19895
19755f4fc851 maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19829
diff changeset
113 error ("__osmesa_print__: Octave has been compiled without gl2ps");
19755f4fc851 maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19829
diff changeset
114 return retval;
19797
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
115 #endif
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
116 }
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 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
119 graphics_object fobj = gh_manager::get_object (h);
19797
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
120 if (! (fobj && fobj.isa ("figure")))
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
121 {
19919
e814e202cd84 Account for whitespace and other anomalies in print function pipe/file string.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 19909
diff changeset
122 error ("__osmesa_print__: H must be a valid figure handle");
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
123 return retval;
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
124 }
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
125
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
126 figure::properties& fp =
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
127 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
128
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
129 bool internal = true;
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
130 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
131
19957
a0ec61ec0f73 __osmesa_print__.cc: Use GLsizei in call to OSMesaCreateContextExt to match prototype.
Rik <rik@octave.org>
parents: 19952
diff changeset
132 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: 19952
diff changeset
133 GLsizei Height = static_cast<GLsizei> (bb(3));
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
134
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
135 // Create an RGBA-mode context, specify Z=16, stencil=0, accum=0 sizes
19744
ce0a1bd0cd47 fix omission from changeset 1170c849952b
John W. Eaton <jwe@octave.org>
parents: 19743
diff changeset
136 OSMesaContext ctx = OSMesaCreateContextExt (OSMESA_RGBA, 16, 0, 0, NULL);
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
137 if (! ctx)
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
138 {
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
139 error ("__osmesa_print__: OSMesaCreateContext failed!\n");
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
140 return retval;
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
141 }
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
142
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
143 // Allocate the image buffer
19744
ce0a1bd0cd47 fix omission from changeset 1170c849952b
John W. Eaton <jwe@octave.org>
parents: 19743
diff changeset
144 OCTAVE_LOCAL_BUFFER (GLubyte, buffer, 4 * Width * Height);
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
145
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
146 // 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
147 if (! OSMesaMakeCurrent (ctx, buffer, GL_UNSIGNED_BYTE, Width, Height))
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
148 {
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
149 error ("__osmesa_print__: OSMesaMakeCurrent failed!\n");
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
150 return retval;
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
151 }
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
152
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
153 // Test for a bug in OSMesa with version < 9.0
19797
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
154 //
19952
f48e650a68b5 Use GLint instead of just int in calls to glGetIntegerv to match prototype.
Rik <rik@octave.org>
parents: 19949
diff changeset
155 // 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: 19949
diff changeset
156 // 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: 19949
diff changeset
157 // (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: 19949
diff changeset
158 GLint z, s;
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
159 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
160 glGetIntegerv (GL_STENCIL_BITS, &s);
19797
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
161 if (z != 16 || s != 0)
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
162 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
163 " 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
164
19797
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
165 unwind_protect outer_frame;
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
166
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
167 bool v = fp.is_visible ();
19797
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
168
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
169 if (v)
19797
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
170 {
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
171 outer_frame.add_fcn (reset_visibility, &fp);
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
172
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
173 fp.set_visible ("off");
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19766
diff changeset
174 }
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
175
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
176 if (nargin == 3)
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
177 {
19741
59ad278cfb98 __opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents: 19737
diff changeset
178 // use gl2ps
20131
bb59bdbdb8ac Fix compilation error when building with OSMesa but without gl2ps (bug #44870)
Andreas Weber <andy.weber.aw@gmail.com>
parents: 20083
diff changeset
179 #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: 20083
diff changeset
180 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: 20083
diff changeset
181 #else
19741
59ad278cfb98 __opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents: 19737
diff changeset
182 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: 19737
diff changeset
183 std::string term = args(2).string_value ();
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
184
20587
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
185 size_t pos_p = file.find_first_of ("|");
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
186 size_t pos_c = file.find_first_not_of ("| ");
19919
e814e202cd84 Account for whitespace and other anomalies in print function pipe/file string.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 19909
diff changeset
187
20587
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
188 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: 20131
diff changeset
189 error ("__osmesa_print__: empty output ''");
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
190 else if (pos_c == std::string::npos)
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
191 error ("__osmesa_print__: empty pipe '|'");
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
192 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: 20131
diff changeset
193 {
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
194 // create process and pipe gl2ps output to it
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
195 std::string cmd = file.substr (pos_c);
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
196 gl2ps_print (fobj, cmd, term);
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
197 }
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
198 else
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
199 {
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
200 // write gl2ps output directly to file
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
201 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: 20131
diff changeset
202
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
203 if (filep)
19741
59ad278cfb98 __opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents: 19737
diff changeset
204 {
20587
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
205 unwind_protect frame;
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
206
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
207 frame.add_fcn (close_fcn, filep);
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
208
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
209 glps_renderer rend (filep, term);
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
210 rend.draw (fobj, "");
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
211
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
212 // Make sure buffered commands are finished!!!
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
213 glFinish ();
19741
59ad278cfb98 __opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents: 19737
diff changeset
214 }
59ad278cfb98 __opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents: 19737
diff changeset
215 else
20587
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20131
diff changeset
216 error ("__osmesa_print__: Couldn't create file \"%s\"", file.c_str ());
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
217 }
20131
bb59bdbdb8ac Fix compilation error when building with OSMesa but without gl2ps (bug #44870)
Andreas Weber <andy.weber.aw@gmail.com>
parents: 20083
diff changeset
218 #endif
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
219 }
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
220 else
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
221 {
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
222 // return RGB image
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
223 opengl_renderer rend;
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
224 rend.draw (fobj);
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 // 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
227 glFinish ();
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
228
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
229 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
230
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
231 // 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
232 // 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
233 assert (sizeof (GLubyte) == 1);
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
234 uint8NDArray img (dv);
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
235 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
236 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
237
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
238 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
239 perm(0) = 2;
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
240 perm(1) = 1;
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
241 perm(2) = 0;
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
242
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
243 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
244
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
245 // Flip Y
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
246 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
247 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
248
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
249 // Remove alpha channel
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
250 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
251 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
252 }
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
253
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
254 OSMesaDestroyContext (ctx);
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
255
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
256 #endif
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
257 return retval;
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
258 }
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
259
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
260 /*
19949
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
261 ## 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: 19919
diff changeset
262 ## 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: 19919
diff changeset
263 ## 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: 19919
diff changeset
264 ## For the moment, disable these tests on PC's and Macs.
20131
bb59bdbdb8ac Fix compilation error when building with OSMesa but without gl2ps (bug #44870)
Andreas Weber <andy.weber.aw@gmail.com>
parents: 20083
diff changeset
265 %!testif HAVE_OSMESA, HAVE_GL2PS_H
19949
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
266 %! if (isunix ())
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
267 %! h = figure ("visible", "off");
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
268 %! fn = tempname ();
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
269 %! sombrero ();
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
270 %! __osmesa_print__ (h, fn, "svg");
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
271 %! assert (stat (fn).size, 2692270, -0.1);
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
272 %! unlink (fn);
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
273 %! img = __osmesa_print__ (h);
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
274 %! 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: 19919
diff changeset
275 %! ## Use pixel sum per RGB channel as fingerprint
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
276 %! img_fp = squeeze (sum (sum (img), 2));
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
277 %! assert (img_fp, [52942515; 54167797; 56158178], -0.05);
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
278 %! endif
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
279
20131
bb59bdbdb8ac Fix compilation error when building with OSMesa but without gl2ps (bug #44870)
Andreas Weber <andy.weber.aw@gmail.com>
parents: 20083
diff changeset
280 %!testif HAVE_OSMESA, HAVE_GL2PS_H
19949
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
281 %! if (isunix ())
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
282 %! h = figure ("visible", "off");
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
283 %! fn = tempname ();
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
284 %! plot (sin (0:0.1:2*pi));
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
285 %! __osmesa_print__ (h, fn, "svgis2d");
20083
f1b67f6e6e45 __osmesa_print__.cc: Increase non-critical relative tolerance in BIST test.
Rik <rik@octave.org>
parents: 19957
diff changeset
286 %! assert (stat (fn).size, 7438, -0.1);
19949
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
287 %! unlink (fn);
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
288 %! img = __osmesa_print__ (h);
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
289 %! 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: 19919
diff changeset
290 %! ## Use pixel sum per RGB channel as fingerprint
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
291 %! img_fp = squeeze (sum (sum (img), 2));
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
292 %! assert (img_fp, [59281711; 59281711; 59482179], -0.05);
d9f6260cf20a Disable __osmesa_print__ tests on non-unix platforms (bug #44338).
Rik <rik@octave.org>
parents: 19919
diff changeset
293 %! endif
19737
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
294 */