Mercurial > octave
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 |
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 | 51 |
52 static void | |
53 reset_visibility (figure::properties *fp) | |
54 { | |
55 fp->set_visible ("on"); | |
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 | 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 | 69 is @qcode{|}, then a process is started and the output of gl2ps is piped\n\ |
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 | 85 The second method doesn't use gl2ps and returns a RGB image in @var{img}\n\ |
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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 148 unwind_protect outer_frame; |
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 | 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 | 153 { |
154 outer_frame.add_fcn (reset_visibility, &fp); | |
155 | |
156 fp.set_visible ("off"); | |
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 */ |