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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
1 /*
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
2
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
3 Copyright (C) 2015 Andreas Weber <andy.weber.aw@gmail.com>
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
4
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
5 This file is part of Octave.
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
6
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
9 Free Software Foundation; either version 3 of the License, or (at your
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
10 option) any later version.
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
11
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
15 for more details.
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
16
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, see
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
19 <http://www.gnu.org/licenses/>.
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
20
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
21 This code is based on Brian Pauls' src/osdemos/osdemo.c
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
22 from git://anongit.freedesktop.org/mesa/demos
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
23
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
24 */
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
25
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
26 #ifdef HAVE_CONFIG_H
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
27 #include <config.h>
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
28 #endif
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
29
19709
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19707
diff changeset
30 #include "oct-locbuf.h"
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19707
diff changeset
31 #include "unwind-prot.h"
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19707
diff changeset
32
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
33 #include "defun-dld.h"
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
34 #include "gl-render.h"
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
35 #include "gl2ps-renderer.h"
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
36 #include "graphics.h"
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
37 #include "gripes.h"
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
38
19732
bf25e9f7c22a use FLTK_CFLAGS and FLTK_LIBS instead of GRAPHICS_CFLAGS and GRAPHICS_LIBS
John W. Eaton <jwe@octave.org>
parents: 19710
diff changeset
39 #if defined (HAVE_OSMESA_H)
bf25e9f7c22a use FLTK_CFLAGS and FLTK_LIBS instead of GRAPHICS_CFLAGS and GRAPHICS_LIBS
John W. Eaton <jwe@octave.org>
parents: 19710
diff changeset
40 #include "osmesa.h"
bf25e9f7c22a use FLTK_CFLAGS and FLTK_LIBS instead of GRAPHICS_CFLAGS and GRAPHICS_LIBS
John W. Eaton <jwe@octave.org>
parents: 19710
diff changeset
41 #elif defined (HAVE_GL_OSMESA_H)
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
42 #include "GL/osmesa.h"
19732
bf25e9f7c22a use FLTK_CFLAGS and FLTK_LIBS instead of GRAPHICS_CFLAGS and GRAPHICS_LIBS
John W. Eaton <jwe@octave.org>
parents: 19710
diff changeset
43 #endif
19709
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19707
diff changeset
44
19732
bf25e9f7c22a use FLTK_CFLAGS and FLTK_LIBS instead of GRAPHICS_CFLAGS and GRAPHICS_LIBS
John W. Eaton <jwe@octave.org>
parents: 19710
diff changeset
45 #if defined (HAVE_OSMESA) && defined (HAVE_OPENGL)
19709
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19707
diff changeset
46 static void
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19707
diff changeset
47 close_fcn (FILE *f)
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19707
diff changeset
48 {
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19707
diff changeset
49 gnulib::fclose (f);
5cfb3ccbf24a style fixes for resource management
John W. Eaton <jwe@octave.org>
parents: 19707
diff changeset
50 }
19763
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
51
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
52 static void
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
53 reset_visibility (figure::properties *fp)
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
54 {
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
55 fp->set_visible ("on");
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
56 }
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
57 #endif
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
58
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
59 DEFUN_DLD(__osmesa_print__, args, ,
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
60 "-*- texinfo -*-\n\
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
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
66 \n\
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
67 The first method calls gl2ps with the appropriate @var{term} and writes\n\
19795
ca7599ae464d doc: Grammarcheck documentation ahead of 4.0 release.
Rik <rik@octave.org>
parents: 19763
diff changeset
68 the output of gl2ps to @var{file}. If the first character of @var{file}\n\
19763
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
69 is @qcode{|}, then a process is started and the output of gl2ps is piped\n\
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
70 to it.\n\
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
71 \n\
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
72 Valid options for @var{term}, which can be concatenated in one string, are:\n\
19795
ca7599ae464d doc: Grammarcheck documentation ahead of 4.0 release.
Rik <rik@octave.org>
parents: 19763
diff changeset
73 \n\
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
74 @table @asis\n\
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
75 @item @qcode{eps}, @qcode{pdf}, @qcode{ps}, @qcode{svg}, @qcode{pgf}, @qcode{tex}\n\
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
76 Select output format.\n\
19795
ca7599ae464d doc: Grammarcheck documentation ahead of 4.0 release.
Rik <rik@octave.org>
parents: 19763
diff changeset
77 \n\
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
78 @item @qcode{is2D}\n\
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
79 Use GL2PS_SIMPLE_SORT instead of GL2PS_BSP_SORT as Z-depth sorting algorithm.\n\
19795
ca7599ae464d doc: Grammarcheck documentation ahead of 4.0 release.
Rik <rik@octave.org>
parents: 19763
diff changeset
80 \n\
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
81 @item @qcode{notext}\n\
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
82 Don't render text.\n\
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
83 @end table\n\
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
84 \n\
19763
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
85 The second method doesn't use gl2ps and returns a RGB image in @var{img}\n\
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
86 instead.\n\
19703
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
87 \n\
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
88 @end deftypefn")
a81177f4bfe6 Add __osmesa_print__.cc for offscreen rendering with OpenGL
Andreas Weber <andy.weber.aw@gmail.com>
parents:
diff changeset
89 {
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
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
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
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
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
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
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
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
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
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
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
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
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
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
154 //
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
155 // Unfortunately the macros OSMESA_MAJOR_VERSION and
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
156 // OSMESA_MINOR_VERSION weren't updated between many releases and
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
157 // can't be used for detection. (Version 8.0 until 9.1.4 all return
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
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
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
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
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
166 unwind_protect outer_frame;
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
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
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
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
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
171 {
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
172 outer_frame.add_fcn (reset_visibility, &fp);
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
173
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
174 fp.set_visible ("off");
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
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
84772c272288 style fixes
John W. Eaton <jwe@octave.org>
parents: 19732
diff changeset
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 */