Mercurial > octave
annotate libinterp/dldfcn/__osmesa_print__.cc @ 19861:19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Try to wrap long lines to < 80 characters.
Use GNU style and don't indent first brace of function definition.
"case" statement is aligned flush left with brace of switch stmt.
Remove trailing '\' line continuation from the end of #define macros.
Use 2 spaces for indent.
* files-dock-widget.cc, history-dock-widget.cc, main-window.cc, octave-cmd.cc,
octave-dock-widget.cc, octave-gui.cc, resource-manager.cc, settings-dialog.cc,
shortcut-manager.cc, welcome-wizard.cc, workspace-view.cc, cellfun.cc, data.cc,
debug.cc, debug.h, dirfns.cc, error.h, file-io.cc, gl-render.cc, gl-render.h,
gl2ps-renderer.h, graphics.cc, graphics.in.h, help.cc, input.cc, load-path.cc,
load-path.h, lookup.cc, lu.cc, oct-stream.cc, octave-default-image.h,
ordschur.cc, pr-output.cc, qz.cc, strfns.cc, symtab.cc, symtab.h, sysdep.cc,
variables.cc, zfstream.h, __fltk_uigetfile__.cc, __init_fltk__.cc,
__magick_read__.cc, __osmesa_print__.cc, audiodevinfo.cc, ov-classdef.cc,
ov-classdef.h, ov-fcn.h, ov-float.cc, ov-flt-complex.cc, ov-java.cc,
ov-range.cc, ov-re-mat.cc, ov-usr-fcn.h, ov.cc, op-int.h, options-usage.h,
pt-eval.cc, Array-C.cc, Array-fC.cc, Array.cc, Array.h, PermMatrix.cc,
Sparse.cc, chMatrix.h, dSparse.cc, dim-vector.h, bsxfun-decl.h, bsxfun-defs.cc,
oct-norm.cc, Sparse-op-defs.h, oct-inttypes.cc, oct-inttypes.h, main.in.cc,
mkoctfile.in.cc: Cleanup C++ code to follow Octave coding conventions.
author | Rik <rik@octave.org> |
---|---|
date | Wed, 25 Feb 2015 11:55:49 -0800 |
parents | ca7599ae464d |
children | ed5ee3f610db |
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\ |
19795
ca7599ae464d
doc: Grammarcheck documentation ahead of 4.0 release.
Rik <rik@octave.org>
parents:
19763
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:
19763
diff
changeset
|
62 @deftypefnx {Loadable Function} {@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 { |
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 |
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
|
92 #if ! defined (HAVE_OSMESA) |
19763 | 93 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
|
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 |
19763 | 104 if (nargin == 3) |
19703
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
105 { |
19763 | 106 if (! (args(1).is_string () && args(2).is_string ())) |
19703
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
107 { |
19707
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
108 error ("__osmesa_print__: FILE and TERM has to be strings"); |
19703
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 |
19763 | 112 #ifndef HAVE_GL2PS_H |
19861
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
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:
19795
diff
changeset
|
114 return retval; |
19763 | 115 #endif |
19703
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); |
19763 | 120 if (! (fobj && fobj.isa ("figure"))) |
19703
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
121 { |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
122 error ("__osmesa_print__: H has to be a valid figure handle"); |
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 |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
132 int Width = bb(2); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
133 int Height = bb(3); |
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 |
19710
ce0a1bd0cd47
fix omission from changeset 1170c849952b
John W. Eaton <jwe@octave.org>
parents:
19709
diff
changeset
|
136 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
|
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 |
19710
ce0a1bd0cd47
fix omission from changeset 1170c849952b
John W. Eaton <jwe@octave.org>
parents:
19709
diff
changeset
|
144 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
|
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 |
19763 | 154 // |
155 // Unfortunately the macros OSMESA_MAJOR_VERSION and | |
156 // OSMESA_MINOR_VERSION weren't updated between many releases and | |
157 // can't be used for detection. (Version 8.0 until 9.1.4 all return | |
158 // MAJOR 6, MINOR 5) | |
19703
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
159 int z, s; |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
160 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
|
161 glGetIntegerv (GL_STENCIL_BITS, &s); |
19763 | 162 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
|
163 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
|
164 " 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
|
165 |
19763 | 166 unwind_protect outer_frame; |
167 | |
19703
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
168 bool v = fp.is_visible (); |
19763 | 169 |
19703
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
170 if (v) |
19763 | 171 { |
172 outer_frame.add_fcn (reset_visibility, &fp); | |
173 | |
174 fp.set_visible ("off"); | |
175 } | |
19703
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
176 |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
177 if (nargin == 3) |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
178 { |
19707
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
179 // use gl2ps |
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
180 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
|
181 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
|
182 |
19707
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
183 if (! error_state) |
19703
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
184 { |
19707
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
185 size_t pos = file.find_first_not_of ("|"); |
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
186 if (pos > 0) |
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
187 { |
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
188 // create process and pipe gl2ps output to it |
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
189 std::string cmd = file.substr (pos); |
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
190 gl2ps_print (fobj, cmd, term); |
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
191 } |
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
192 else |
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
193 { |
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
194 // write gl2ps output directly to file |
19763 | 195 FILE *filep = gnulib::fopen (file.c_str (), "w"); |
19709
5cfb3ccbf24a
style fixes for resource management
John W. Eaton <jwe@octave.org>
parents:
19707
diff
changeset
|
196 |
19707
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
197 if (filep) |
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
198 { |
19709
5cfb3ccbf24a
style fixes for resource management
John W. Eaton <jwe@octave.org>
parents:
19707
diff
changeset
|
199 unwind_protect frame; |
5cfb3ccbf24a
style fixes for resource management
John W. Eaton <jwe@octave.org>
parents:
19707
diff
changeset
|
200 |
5cfb3ccbf24a
style fixes for resource management
John W. Eaton <jwe@octave.org>
parents:
19707
diff
changeset
|
201 frame.add_fcn (close_fcn, filep); |
5cfb3ccbf24a
style fixes for resource management
John W. Eaton <jwe@octave.org>
parents:
19707
diff
changeset
|
202 |
19707
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
203 glps_renderer rend (filep, term); |
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
204 rend.draw (fobj, ""); |
19703
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
205 |
19707
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
206 // Make sure buffered commands are finished!!! |
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
207 glFinish (); |
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
208 } |
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
209 else |
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
210 error ("__osmesa_print__: Couldn't create file \"%s\"", file.c_str ()); |
59ad278cfb98
__opengl_print__.m: Use OSMesa for offscreen rendering (Bug #33180)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19703
diff
changeset
|
211 } |
19703
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
212 } |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
213 } |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
214 else |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
215 { |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
216 // return RGB image |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
217 opengl_renderer rend; |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
218 rend.draw (fobj); |
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 // 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
|
221 glFinish (); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
222 |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
223 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
|
224 |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
225 // 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
|
226 // 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
|
227 assert (sizeof (GLubyte) == 1); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
228 uint8NDArray img (dv); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
229 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
|
230 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
|
231 |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
232 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
|
233 perm(0) = 2; |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
234 perm(1) = 1; |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
235 perm(2) = 0; |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
236 |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
237 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
|
238 |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
239 // Flip Y |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
240 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
|
241 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
|
242 |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
243 // Remove alpha channel |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
244 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
|
245 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
|
246 } |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
247 |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
248 OSMesaDestroyContext (ctx); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
249 |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
250 #endif |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
251 return retval; |
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 /* |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
255 %!testif HAVE_OSMESA |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
256 %! h = figure ("visible", "off"); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
257 %! fn = tempname (); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
258 %! sombrero (); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
259 %! __osmesa_print__ (h, fn, "svg"); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
260 %! assert (stat (fn).size, 2692270, -0.1); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
261 %! unlink (fn); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
262 %! img = __osmesa_print__ (h); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
263 %! assert (size (img), [get(h, "position")([4, 3]), 3]) |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
264 %! ## Use pixel sum per RGB channel as fingerprint |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
265 %! img_fp = squeeze (sum (sum (img), 2)); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
266 %! assert (img_fp, [52942515; 54167797; 56158178], -0.05); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
267 |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
268 %!testif HAVE_OSMESA |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
269 %! h = figure ("visible", "off"); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
270 %! fn = tempname (); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
271 %! plot (sin (0:0.1:2*pi)); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
272 %! __osmesa_print__ (h, fn, "svgis2d"); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
273 %! assert (stat (fn).size, 7438, -0.05); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
274 %! unlink (fn); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
275 %! img = __osmesa_print__ (h); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
276 %! assert (size (img), [get(h, "position")([4, 3]), 3]) |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
277 %! ## Use pixel sum per RGB channel as fingerprint |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
278 %! img_fp = squeeze (sum (sum (img), 2)); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
279 %! assert (img_fp, [59281711; 59281711; 59482179], -0.05); |
a81177f4bfe6
Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff
changeset
|
280 */ |