annotate libinterp/corefcn/gl-render.cc @ 21209:67d2965af0b5

revamp text rendering classes * base-text-renderer.h: New file. * ft-text-renderer.h, ft-text-renderer.cc: New files for freetype text rendering classes, adapted from txt-eng-ft.h and txt-eng.cc. * text-renderer.h, text-renderer.cc: New files. Public interface for text rendering. * gl-select.cc, gl-render.cc, gl-render.h, gl2ps-print.cc, graphics.cc, graphics.in.h: Adapt to use new text rendering interface that does not require checking HAVE_FREETYPE. * libinterp/corefcn/module.mk: Update.
author John W. Eaton <jwe@octave.org>
date Sat, 06 Feb 2016 08:15:53 -0500
parents fcac5dbbf9ed
children 40de9f8f23a6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1 /*
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2
19697
4197fc428c7d maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents: 19597
diff changeset
3 Copyright (C) 2008-2015 Michael Goffioul
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
4
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
5 This file is part of Octave.
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
6
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
9 Free Software Foundation; either version 3 of the License, or (at your
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
10 option) any later version.
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
11
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
15 for more details.
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
16
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, see
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
19 <http://www.gnu.org/licenses/>.
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
20
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
21 */
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
22
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
23 #ifdef HAVE_CONFIG_H
21200
fcac5dbbf9ed maint: Indent #ifdef blocks in libinterp.
Rik <rik@octave.org>
parents: 21198
diff changeset
24 # include <config.h>
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
25 #endif
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
26
7954
3ffc34caec65 configure fixes
John W. Eaton <jwe@octave.org>
parents: 7924
diff changeset
27 #if defined (HAVE_OPENGL)
3ffc34caec65 configure fixes
John W. Eaton <jwe@octave.org>
parents: 7924
diff changeset
28
9403
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
29 #include <iostream>
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
30
21196
bd96c2efd4fe move include statements for OpenGL headers to a single file
John W. Eaton <jwe@octave.org>
parents: 21115
diff changeset
31 #ifdef HAVE_WINDOWS_H
21200
fcac5dbbf9ed maint: Indent #ifdef blocks in libinterp.
Rik <rik@octave.org>
parents: 21198
diff changeset
32 # define WIN32_LEAN_AND_MEAN
fcac5dbbf9ed maint: Indent #ifdef blocks in libinterp.
Rik <rik@octave.org>
parents: 21198
diff changeset
33 # include <windows.h>
21196
bd96c2efd4fe move include statements for OpenGL headers to a single file
John W. Eaton <jwe@octave.org>
parents: 21115
diff changeset
34 #endif
bd96c2efd4fe move include statements for OpenGL headers to a single file
John W. Eaton <jwe@octave.org>
parents: 21115
diff changeset
35
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
36 #include <lo-mappers.h>
8377
25bc2d31e1bf improve OCTAVE_LOCAL_BUFFER
Jaroslav Hajek <highegg@gmail.com>
parents: 8263
diff changeset
37 #include "oct-locbuf.h"
13985
43cc49c7abd1 Use thread-safe atomic reference counting (GCC and MSVC).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13961
diff changeset
38 #include "oct-refcount.h"
21115
629643522cc0 include errwarn.h in all files that use gripe_disabled_feature
John W. Eaton <jwe@octave.org>
parents: 21109
diff changeset
39
629643522cc0 include errwarn.h in all files that use gripe_disabled_feature
John W. Eaton <jwe@octave.org>
parents: 21109
diff changeset
40 #include "errwarn.h"
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
41 #include "gl-render.h"
21196
bd96c2efd4fe move include statements for OpenGL headers to a single file
John W. Eaton <jwe@octave.org>
parents: 21115
diff changeset
42 #include "oct-opengl.h"
21209
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
43 #include "text-renderer.h"
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
44
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
45 #define LIGHT_MODE GL_FRONT_AND_BACK
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
46
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
47 // Use symbolic names for axes
19861
19755f4fc851 maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
48 enum
19755f4fc851 maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
49 {
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
50 X_AXIS,
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
51 Y_AXIS,
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
52 Z_AXIS
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
53 };
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
54
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
55 // Use symbolic names for color mode
19861
19755f4fc851 maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
56 enum
19755f4fc851 maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
57 {
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
58 UNIFORM,
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
59 FLAT,
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
60 INTERP,
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
61 TEXTURE
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
62 };
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
63
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
64 // Use symbolic names for lighting
19861
19755f4fc851 maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
65 enum
19755f4fc851 maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
66 {
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
67 NONE,
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
68 //FLAT, // Already declared in anonymous enum for color mode
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
69 GOURAUD = 2
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
70 };
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
71
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
72 // Win32 API requires the CALLBACK attributes for
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
73 // GLU callback functions. Define it to empty on
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
74 // other platforms.
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
75 #ifndef CALLBACK
21200
fcac5dbbf9ed maint: Indent #ifdef blocks in libinterp.
Rik <rik@octave.org>
parents: 21198
diff changeset
76 # define CALLBACK
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
77 #endif
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
78
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
79 class
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
80 opengl_texture
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
81 {
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
82 protected:
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
83 class texture_rep
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
84 {
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
85 public:
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
86 texture_rep (void)
11584
cda4aa780d58 Another round of initialising members in the constructor initialisation list
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents: 11576
diff changeset
87 : id (), w (), h (), tw (), th (), tx (), ty (),
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
88 valid (false), count (1)
11584
cda4aa780d58 Another round of initialising members in the constructor initialisation list
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents: 11576
diff changeset
89 { }
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
90
9681
40775386ab58 gl-render.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 9680
diff changeset
91 texture_rep (GLuint id_arg, int w_arg, int h_arg, int tw_arg, int th_arg)
17651
b0f529c3671d gl-render.cc: Replace custom min function with std::min.
Rik <rik@octave.org>
parents: 17602
diff changeset
92 : id (id_arg), w (w_arg), h (h_arg), tw (tw_arg), th (th_arg),
b0f529c3671d gl-render.cc: Replace custom min function with std::min.
Rik <rik@octave.org>
parents: 17602
diff changeset
93 tx (double(w)/tw), ty (double(h)/th), valid (true),
b0f529c3671d gl-render.cc: Replace custom min function with std::min.
Rik <rik@octave.org>
parents: 17602
diff changeset
94 count (1) { }
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
95
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
96 ~texture_rep (void)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
97 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
98 if (valid)
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
99 glDeleteTextures (1, &id);
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
100 }
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
101
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
102 void bind (int mode) const
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
103 { if (valid) glBindTexture (mode, id); }
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
104
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
105 void tex_coord (double q, double r) const
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
106 { if (valid) glTexCoord2d (q*tx, r*ty); }
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
107
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
108 GLuint id;
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
109 int w, h;
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
110 int tw, th;
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
111 double tx, ty;
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
112 bool valid;
12125
a21a3875ca83 implement a common class for reference counts
Jaroslav Hajek <highegg@gmail.com>
parents: 12122
diff changeset
113 octave_refcount<int> count;
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
114 };
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
115
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
116 texture_rep *rep;
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
117
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
118 private:
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
119 opengl_texture (texture_rep *_rep) : rep (_rep) { }
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
120
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
121 public:
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
122 opengl_texture (void) : rep (new texture_rep ()) { }
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
123
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
124 opengl_texture (const opengl_texture& tx)
17651
b0f529c3671d gl-render.cc: Replace custom min function with std::min.
Rik <rik@octave.org>
parents: 17602
diff changeset
125 : rep (tx.rep)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
126 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
127 rep->count++;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
128 }
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
129
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
130 ~opengl_texture (void)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
131 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
132 if (--rep->count == 0)
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
133 delete rep;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
134 }
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
135
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
136 opengl_texture& operator = (const opengl_texture& tx)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
137 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
138 if (--rep->count == 0)
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
139 delete rep;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
140
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
141 rep = tx.rep;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
142 rep->count++;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
143
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
144 return *this;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
145 }
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
146
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
147 static opengl_texture create (const octave_value& data);
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
148
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
149 void bind (int mode = GL_TEXTURE_2D) const
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
150 { rep->bind (mode); }
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
151
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
152 void tex_coord (double q, double r) const
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
153 { rep->tex_coord (q, r); }
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
154
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
155 bool is_valid (void) const
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
156 { return rep->valid; }
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
157 };
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
158
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
159 static int
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
160 next_power_of_2 (int n)
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
161 {
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
162 int m = 1;
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
163
15215
9020dddc925a use std::numeric_limits for integer max and min values
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
164 while (m < n && m < std::numeric_limits<int>::max ())
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
165 m <<= 1;
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
166
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
167 return m;
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
168 }
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
169
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
170 opengl_texture
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
171 opengl_texture::create (const octave_value& data)
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
172 {
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
173 opengl_texture retval;
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
174
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
175 dim_vector dv (data.dims ());
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
176
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
177 // Expect RGB data
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
178 if (dv.length () == 3 && dv(2) == 3)
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
179 {
17651
b0f529c3671d gl-render.cc: Replace custom min function with std::min.
Rik <rik@octave.org>
parents: 17602
diff changeset
180 // FIXME: dim_vectors hold octave_idx_type values.
b0f529c3671d gl-render.cc: Replace custom min function with std::min.
Rik <rik@octave.org>
parents: 17602
diff changeset
181 // Should we check for dimensions larger than intmax?
18100
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
182 int h, w, tw, th;
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
183 h = dv(0), w = dv(1);
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
184 GLuint id;
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
185 bool ok = true;
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
186
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
187 tw = next_power_of_2 (w);
19898
2eed41ae3b64 Fix computation of next-power-of-2 for height in OpenGL texture creation.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 19864
diff changeset
188 th = next_power_of_2 (h);
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
189
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
190 glGenTextures (1, &id);
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
191 glBindTexture (GL_TEXTURE_2D, id);
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
192
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
193 if (data.is_double_type ())
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
194 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
195 const NDArray xdata = data.array_value ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
196
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
197 OCTAVE_LOCAL_BUFFER (float, a, (3*tw*th));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
198
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
199 for (int i = 0; i < h; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
200 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
201 for (int j = 0, idx = i*tw*3; j < w; j++, idx += 3)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
202 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
203 a[idx] = xdata(i,j,0);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
204 a[idx+1] = xdata(i,j,1);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
205 a[idx+2] = xdata(i,j,2);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
206 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
207 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
208
17651
b0f529c3671d gl-render.cc: Replace custom min function with std::min.
Rik <rik@octave.org>
parents: 17602
diff changeset
209 glTexImage2D (GL_TEXTURE_2D, 0, 3, tw, th, 0, GL_RGB, GL_FLOAT, a);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
210 }
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
211 else if (data.is_uint8_type ())
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
212 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
213 const uint8NDArray xdata = data.uint8_array_value ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
214
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
215 OCTAVE_LOCAL_BUFFER (octave_uint8, a, (3*tw*th));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
216
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
217 for (int i = 0; i < h; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
218 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
219 for (int j = 0, idx = i*tw*3; j < w; j++, idx += 3)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
220 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
221 a[idx] = xdata(i,j,0);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
222 a[idx+1] = xdata(i,j,1);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
223 a[idx+2] = xdata(i,j,2);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
224 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
225 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
226
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
227 glTexImage2D (GL_TEXTURE_2D, 0, 3, tw, th, 0,
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
228 GL_RGB, GL_UNSIGNED_BYTE, a);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
229 }
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
230 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
231 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
232 ok = false;
20711
7b608fadc663 Make error messages more specific about the variable and problem encountered.
Rik <rik@octave.org>
parents: 20623
diff changeset
233 warning ("opengl_texture::create: invalid texture data type (double or uint8 required)");
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
234 }
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
235
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
236 if (ok)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
237 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
238 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
239 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
240
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
241 if (glGetError () != GL_NO_ERROR)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
242 warning ("opengl_texture::create: OpenGL error while generating texture data");
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
243 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
244 retval = opengl_texture (new texture_rep (id, w, h, tw, th));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
245 }
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
246 }
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
247 else
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
248 warning ("opengl_texture::create: invalid texture data size");
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
249
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
250 return retval;
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
251 }
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
252
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
253 class
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
254 opengl_tesselator
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
255 {
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
256 public:
8724
a50228129dba Introduce new macro OCTAVE_GLUTESSCALLBACK_THREEDOTS. Use definitions HAVE_FRAMEWORK_OPENGL and HAVE_GLUTESSCALLBACK_THREEDOTS for Mac's framework OpenGL implementation.
Ben Abbott <bpabbott@mac.com>
parents: 8674
diff changeset
257 #if defined (HAVE_FRAMEWORK_OPENGL) && defined (HAVE_GLUTESSCALLBACK_THREEDOTS)
a50228129dba Introduce new macro OCTAVE_GLUTESSCALLBACK_THREEDOTS. Use definitions HAVE_FRAMEWORK_OPENGL and HAVE_GLUTESSCALLBACK_THREEDOTS for Mac's framework OpenGL implementation.
Ben Abbott <bpabbott@mac.com>
parents: 8674
diff changeset
258 typedef GLvoid (CALLBACK *fcn) (...);
a50228129dba Introduce new macro OCTAVE_GLUTESSCALLBACK_THREEDOTS. Use definitions HAVE_FRAMEWORK_OPENGL and HAVE_GLUTESSCALLBACK_THREEDOTS for Mac's framework OpenGL implementation.
Ben Abbott <bpabbott@mac.com>
parents: 8674
diff changeset
259 #else
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
260 typedef void (CALLBACK *fcn) (void);
8724
a50228129dba Introduce new macro OCTAVE_GLUTESSCALLBACK_THREEDOTS. Use definitions HAVE_FRAMEWORK_OPENGL and HAVE_GLUTESSCALLBACK_THREEDOTS for Mac's framework OpenGL implementation.
Ben Abbott <bpabbott@mac.com>
parents: 8674
diff changeset
261 #endif
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
262
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
263 public:
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
264
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14838
diff changeset
265 opengl_tesselator (void) : glu_tess (0), fill () { init (); }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
266
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
267 virtual ~opengl_tesselator (void)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
268 { if (glu_tess) gluDeleteTess (glu_tess); }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
269
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
270 void begin_polygon (bool filled = true)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
271 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
272 gluTessProperty (glu_tess, GLU_TESS_BOUNDARY_ONLY,
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
273 (filled ? GL_FALSE : GL_TRUE));
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
274 fill = filled;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
275 gluTessBeginPolygon (glu_tess, this);
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
276 }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
277
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
278 void end_polygon (void) const
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
279 { gluTessEndPolygon (glu_tess); }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
280
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
281 void begin_contour (void) const
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
282 { gluTessBeginContour (glu_tess); }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
283
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
284 void end_contour (void) const
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
285 { gluTessEndContour (glu_tess); }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
286
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
287 void add_vertex (double *loc, void *data) const
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
288 { gluTessVertex (glu_tess, loc, data); }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
289
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
290 protected:
7870
b1823dfd6ec7 style fixes
John W. Eaton <jwe@octave.org>
parents: 7866
diff changeset
291 virtual void begin (GLenum /*type*/) { }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
292
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
293 virtual void end (void) { }
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
294
17651
b0f529c3671d gl-render.cc: Replace custom min function with std::min.
Rik <rik@octave.org>
parents: 17602
diff changeset
295 virtual void vertex (void * /*data*/) { }
b0f529c3671d gl-render.cc: Replace custom min function with std::min.
Rik <rik@octave.org>
parents: 17602
diff changeset
296
b0f529c3671d gl-render.cc: Replace custom min function with std::min.
Rik <rik@octave.org>
parents: 17602
diff changeset
297 virtual void combine (GLdouble [3] /*c*/, void * [4] /*data*/,
b0f529c3671d gl-render.cc: Replace custom min function with std::min.
Rik <rik@octave.org>
parents: 17602
diff changeset
298 GLfloat [4] /*w*/, void ** /*out_data*/) { }
7870
b1823dfd6ec7 style fixes
John W. Eaton <jwe@octave.org>
parents: 7866
diff changeset
299
b1823dfd6ec7 style fixes
John W. Eaton <jwe@octave.org>
parents: 7866
diff changeset
300 virtual void edge_flag (GLboolean /*flag*/) { }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
301
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
302 virtual void error (GLenum err)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
303 { ::error ("OpenGL tesselation error (%d)", err); }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
304
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
305 virtual void init (void)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
306 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
307 glu_tess = gluNewTess ();
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
308
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
309 gluTessCallback (glu_tess, GLU_TESS_BEGIN_DATA,
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
310 reinterpret_cast<fcn> (tess_begin));
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
311 gluTessCallback (glu_tess, GLU_TESS_END_DATA,
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
312 reinterpret_cast<fcn> (tess_end));
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
313 gluTessCallback (glu_tess, GLU_TESS_VERTEX_DATA,
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
314 reinterpret_cast<fcn> (tess_vertex));
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
315 gluTessCallback (glu_tess, GLU_TESS_COMBINE_DATA,
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
316 reinterpret_cast<fcn> (tess_combine));
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
317 gluTessCallback (glu_tess, GLU_TESS_EDGE_FLAG_DATA,
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
318 reinterpret_cast<fcn> (tess_edge_flag));
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
319 gluTessCallback (glu_tess, GLU_TESS_ERROR_DATA,
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
320 reinterpret_cast<fcn> (tess_error));
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
321 }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
322
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
323 bool is_filled (void) const { return fill; }
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
324
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
325 private:
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
326 static void CALLBACK tess_begin (GLenum type, void *t)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
327 { reinterpret_cast<opengl_tesselator *> (t)->begin (type); }
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
328
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
329 static void CALLBACK tess_end (void *t)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
330 { reinterpret_cast<opengl_tesselator *> (t)->end (); }
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
331
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
332 static void CALLBACK tess_vertex (void *v, void *t)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
333 { reinterpret_cast<opengl_tesselator *> (t)->vertex (v); }
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
334
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
335 static void CALLBACK tess_combine (GLdouble c[3], void *v[4], GLfloat w[4],
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
336 void **out, void *t)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
337 { reinterpret_cast<opengl_tesselator *> (t)->combine (c, v, w, out); }
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
338
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
339 static void CALLBACK tess_edge_flag (GLboolean flag, void *t)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
340 { reinterpret_cast<opengl_tesselator *> (t)->edge_flag (flag); }
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
341
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
342 static void CALLBACK tess_error (GLenum err, void *t)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
343 { reinterpret_cast<opengl_tesselator *> (t)->error (err); }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
344
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
345 private:
12122
f4689107dd8c Explicitly disallow copying in some classes.
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents: 11586
diff changeset
346
f4689107dd8c Explicitly disallow copying in some classes.
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents: 11586
diff changeset
347 // No copying!
f4689107dd8c Explicitly disallow copying in some classes.
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents: 11586
diff changeset
348
12174
db1f49eaba6b whitespace fixes
John W. Eaton <jwe@octave.org>
parents: 12164
diff changeset
349 opengl_tesselator (const opengl_tesselator&);
db1f49eaba6b whitespace fixes
John W. Eaton <jwe@octave.org>
parents: 12164
diff changeset
350
db1f49eaba6b whitespace fixes
John W. Eaton <jwe@octave.org>
parents: 12164
diff changeset
351 opengl_tesselator operator = (const opengl_tesselator&);
12122
f4689107dd8c Explicitly disallow copying in some classes.
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents: 11586
diff changeset
352
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
353 GLUtesselator *glu_tess;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
354 bool fill;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
355 };
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
356
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
357 class
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
358 vertex_data
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
359 {
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
360 public:
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
361 class vertex_data_rep
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
362 {
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
363 public:
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
364 Matrix coords;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
365 Matrix color;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
366 Matrix normal;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
367 double alpha;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
368 float ambient;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
369 float diffuse;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
370 float specular;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
371 float specular_exp;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
372
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
373 // reference counter
12125
a21a3875ca83 implement a common class for reference counts
Jaroslav Hajek <highegg@gmail.com>
parents: 12122
diff changeset
374 octave_refcount<int> count;
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
375
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
376 vertex_data_rep (void)
11584
cda4aa780d58 Another round of initialising members in the constructor initialisation list
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents: 11576
diff changeset
377 : coords (), color (), normal (), alpha (),
cda4aa780d58 Another round of initialising members in the constructor initialisation list
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents: 11576
diff changeset
378 ambient (), diffuse (), specular (), specular_exp (),count (1) { }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
379
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
380 vertex_data_rep (const Matrix& c, const Matrix& col, const Matrix& n,
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
381 double a, float as, float ds, float ss, float se)
17651
b0f529c3671d gl-render.cc: Replace custom min function with std::min.
Rik <rik@octave.org>
parents: 17602
diff changeset
382 : coords (c), color (col), normal (n), alpha (a),
b0f529c3671d gl-render.cc: Replace custom min function with std::min.
Rik <rik@octave.org>
parents: 17602
diff changeset
383 ambient (as), diffuse (ds), specular (ss), specular_exp (se),
b0f529c3671d gl-render.cc: Replace custom min function with std::min.
Rik <rik@octave.org>
parents: 17602
diff changeset
384 count (1) { }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
385 };
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
386
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
387 private:
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
388 vertex_data_rep *rep;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
389
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
390 vertex_data_rep *nil_rep (void) const
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
391 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
392 static vertex_data_rep *nr = new vertex_data_rep ();
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
393
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
394 return nr;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
395 }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
396
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
397 public:
7904
1fddd9b8e862 Fix nil_rep reference counting in gl-render.cc::vertex_data internal class
John W. Eaton <jwe@octave.org>
parents: 7874
diff changeset
398 vertex_data (void) : rep (nil_rep ())
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
399 { rep->count++; }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
400
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
401 vertex_data (const vertex_data& v) : rep (v.rep)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
402 { rep->count++; }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
403
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
404 vertex_data (const Matrix& c, const Matrix& col, const Matrix& n,
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
405 double a, float as, float ds, float ss, float se)
17651
b0f529c3671d gl-render.cc: Replace custom min function with std::min.
Rik <rik@octave.org>
parents: 17602
diff changeset
406 : rep (new vertex_data_rep (c, col, n, a, as, ds, ss, se))
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
407 { }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
408
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
409 vertex_data (vertex_data_rep *new_rep)
17651
b0f529c3671d gl-render.cc: Replace custom min function with std::min.
Rik <rik@octave.org>
parents: 17602
diff changeset
410 : rep (new_rep) { }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
411
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
412 ~vertex_data (void)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
413 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
414 if (--rep->count == 0)
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
415 delete rep;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
416 }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
417
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
418 vertex_data& operator = (const vertex_data& v)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
419 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
420 if (--rep->count == 0)
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
421 delete rep;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
422
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
423 rep = v.rep;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
424 rep->count++;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
425
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
426 return *this;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
427 }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
428
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
429 vertex_data_rep *get_rep (void) const { return rep; }
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
430 };
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
431
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
432 class
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
433 opengl_renderer::patch_tesselator : public opengl_tesselator
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
434 {
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
435 public:
18768
75f8926deef1 Fix Z-order stacking of patches and axes grid lines (bug #40722).
Rik <rik@octave.org>
parents: 18720
diff changeset
436 patch_tesselator (opengl_renderer *r, int cmode, int lmode, float idx = 0.0)
17651
b0f529c3671d gl-render.cc: Replace custom min function with std::min.
Rik <rik@octave.org>
parents: 17602
diff changeset
437 : opengl_tesselator (), renderer (r),
b0f529c3671d gl-render.cc: Replace custom min function with std::min.
Rik <rik@octave.org>
parents: 17602
diff changeset
438 color_mode (cmode), light_mode (lmode), index (idx),
b0f529c3671d gl-render.cc: Replace custom min function with std::min.
Rik <rik@octave.org>
parents: 17602
diff changeset
439 first (true), tmp_vdata ()
12164
18e9a8da7d18 eliminate some -Weffc++ warnings
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents: 12126
diff changeset
440 { }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
441
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
442 protected:
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
443 void begin (GLenum type)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
444 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
445 //printf ("patch_tesselator::begin (%d)\n", type);
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
446 first = true;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
447
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
448 if (color_mode == INTERP || light_mode == GOURAUD)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
449 glShadeModel (GL_SMOOTH);
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
450 else
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
451 glShadeModel (GL_FLAT);
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
452
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
453 if (is_filled ())
18768
75f8926deef1 Fix Z-order stacking of patches and axes grid lines (bug #40722).
Rik <rik@octave.org>
parents: 18720
diff changeset
454 renderer->set_polygon_offset (true, index);
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
455
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
456 glBegin (type);
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
457 }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
458
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
459 void end (void)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
460 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
461 //printf ("patch_tesselator::end\n");
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
462 glEnd ();
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
463 renderer->set_polygon_offset (false);
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
464 }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
465
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
466 void vertex (void *data)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
467 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
468 vertex_data::vertex_data_rep *v
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
469 = reinterpret_cast<vertex_data::vertex_data_rep *> (data);
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
470 //printf ("patch_tesselator::vertex (%g, %g, %g)\n", v->coords(0), v->coords(1), v->coords(2));
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
471
18768
75f8926deef1 Fix Z-order stacking of patches and axes grid lines (bug #40722).
Rik <rik@octave.org>
parents: 18720
diff changeset
472 // NOTE: OpenGL can re-order vertices. For "flat" coloring of FaceColor
75f8926deef1 Fix Z-order stacking of patches and axes grid lines (bug #40722).
Rik <rik@octave.org>
parents: 18720
diff changeset
473 // the first vertex must be identified in the draw_patch routine.
18296
c8d6ca222bcc Make "edgecolor"="flat" for patch objects compatible with Matlab.
Rik <rik@octave.org>
parents: 18295
diff changeset
474
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
475 if (color_mode == INTERP || (color_mode == FLAT && ! is_filled ()))
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
476 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
477 Matrix col = v->color;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
478
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
479 if (col.numel () == 3)
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
480 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
481 glColor3dv (col.data ());
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
482 if (light_mode > 0)
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
483 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
484 float buf[4] = { 0, 0, 0, 1 };
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
485
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
486 for (int k = 0; k < 3; k++)
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
487 buf[k] = (v->ambient * col(k));
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
488 glMaterialfv (LIGHT_MODE, GL_AMBIENT, buf);
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
489
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
490 for (int k = 0; k < 3; k++)
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
491 buf[k] = (v->diffuse * col(k));
18134
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
492 glMaterialfv (LIGHT_MODE, GL_DIFFUSE, buf);
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
493 }
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
494 }
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
495 }
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
496
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
497 if (light_mode > 0 && (first || light_mode == GOURAUD))
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
498 glNormal3dv (v->normal.data ());
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
499
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
500 glVertex3dv (v->coords.data ());
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
501
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
502 first = false;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
503 }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
504
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
505 void combine (GLdouble xyz[3], void *data[4], GLfloat w[4], void **out_data)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
506 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
507 //printf ("patch_tesselator::combine\n");
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
508
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
509 vertex_data::vertex_data_rep *v[4];
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
510 int vmax = 4;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
511
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
512 for (int i = 0; i < 4; i++)
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
513 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
514 v[i] = reinterpret_cast<vertex_data::vertex_data_rep *> (data[i]);
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
515
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
516 if (vmax == 4 && ! v[i])
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
517 vmax = i;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
518 }
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
519
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
520 Matrix vv (1, 3, 0.0);
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
521 Matrix cc;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
522 Matrix nn (1, 3, 0.0);
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
523 double aa = 0.0;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
524
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
525 vv(0) = xyz[0];
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
526 vv(1) = xyz[1];
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
527 vv(2) = xyz[2];
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
528
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
529 if (v[0]->color.numel ())
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
530 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
531 cc.resize (1, 3, 0.0);
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
532 for (int ic = 0; ic < 3; ic++)
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
533 for (int iv = 0; iv < vmax; iv++)
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
534 cc(ic) += (w[iv] * v[iv]->color (ic));
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
535 }
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
536
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
537 if (v[0]->normal.numel () > 0)
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
538 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
539 for (int in = 0; in < 3; in++)
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
540 for (int iv = 0; iv < vmax; iv++)
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
541 nn(in) += (w[iv] * v[iv]->normal (in));
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
542 }
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
543
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
544 for (int iv = 0; iv < vmax; iv++)
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
545 aa += (w[iv] * v[iv]->alpha);
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
546
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
547 vertex_data new_v (vv, cc, nn, aa, v[0]->ambient, v[0]->diffuse,
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
548 v[0]->specular, v[0]->specular_exp);
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
549 tmp_vdata.push_back (new_v);
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
550
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
551 *out_data = new_v.get_rep ();
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
552 }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
553
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
554 private:
12122
f4689107dd8c Explicitly disallow copying in some classes.
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents: 11586
diff changeset
555
f4689107dd8c Explicitly disallow copying in some classes.
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents: 11586
diff changeset
556 // No copying!
f4689107dd8c Explicitly disallow copying in some classes.
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents: 11586
diff changeset
557
f4689107dd8c Explicitly disallow copying in some classes.
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents: 11586
diff changeset
558 patch_tesselator (const patch_tesselator&);
f4689107dd8c Explicitly disallow copying in some classes.
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents: 11586
diff changeset
559
f4689107dd8c Explicitly disallow copying in some classes.
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents: 11586
diff changeset
560 patch_tesselator& operator = (const patch_tesselator&);
f4689107dd8c Explicitly disallow copying in some classes.
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents: 11586
diff changeset
561
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
562 opengl_renderer *renderer;
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
563 int color_mode;
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
564 int light_mode;
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
565 int index;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
566 bool first;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
567 std::list<vertex_data> tmp_vdata;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
568 };
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
569
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
570 void
13281
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
571 opengl_renderer::draw (const graphics_object& go, bool toplevel)
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
572 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
573 if (! go.valid_object ())
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
574 return;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
575
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
576 const base_properties& props = go.get_properties ();
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
577
14838
1abb7c083171 Make sure opengl_renderer::toolkit is defined.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 14138
diff changeset
578 if (! toolkit)
1abb7c083171 Make sure opengl_renderer::toolkit is defined.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 14138
diff changeset
579 toolkit = props.get_toolkit ();
1abb7c083171 Make sure opengl_renderer::toolkit is defined.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 14138
diff changeset
580
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
581 if (go.isa ("figure"))
9798
2d6a5af744b6 printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9687
diff changeset
582 draw_figure (dynamic_cast<const figure::properties&> (props));
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
583 else if (go.isa ("axes"))
9798
2d6a5af744b6 printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9687
diff changeset
584 draw_axes (dynamic_cast<const axes::properties&> (props));
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
585 else if (go.isa ("line"))
9798
2d6a5af744b6 printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9687
diff changeset
586 draw_line (dynamic_cast<const line::properties&> (props));
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
587 else if (go.isa ("surface"))
9798
2d6a5af744b6 printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9687
diff changeset
588 draw_surface (dynamic_cast<const surface::properties&> (props));
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
589 else if (go.isa ("patch"))
9798
2d6a5af744b6 printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9687
diff changeset
590 draw_patch (dynamic_cast<const patch::properties&> (props));
7866
35e8d6199455 Add hggroup support in OpenGL renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7851
diff changeset
591 else if (go.isa ("hggroup"))
9798
2d6a5af744b6 printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9687
diff changeset
592 draw_hggroup (dynamic_cast<const hggroup::properties&> (props));
9403
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
593 else if (go.isa ("text"))
9798
2d6a5af744b6 printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9687
diff changeset
594 draw_text (dynamic_cast<const text::properties&> (props));
9680
73153525df9a initial implementation of OpenGL image rendering
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9616
diff changeset
595 else if (go.isa ("image"))
9798
2d6a5af744b6 printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9687
diff changeset
596 draw_image (dynamic_cast<const image::properties&> (props));
13703
22ce748da25f Add missing UI objects: uicontextmenu, uitoolbar, uipushtool and uitoggletool.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13281
diff changeset
597 else if (go.isa ("uimenu") || go.isa ("uicontrol")
22ce748da25f Add missing UI objects: uicontextmenu, uitoolbar, uipushtool and uitoggletool.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13281
diff changeset
598 || go.isa ("uicontextmenu") || go.isa ("uitoolbar")
22ce748da25f Add missing UI objects: uicontextmenu, uitoolbar, uipushtool and uitoggletool.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13281
diff changeset
599 || go.isa ("uipushtool") || go.isa ("uitoggletool"))
20946
6eff66fb8a02 style fixes for comments
John W. Eaton <jwe@octave.org>
parents: 20738
diff changeset
600 ; // SKIP
13281
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
601 else if (go.isa ("uipanel"))
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
602 {
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
603 if (toplevel)
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
604 draw_uipanel (dynamic_cast<const uipanel::properties&> (props), go);
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
605 }
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
606 else
13281
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
607 {
15466
d174210ce1ec use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
608 warning ("opengl_renderer: cannot render object of type '%s'",
13281
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
609 props.graphics_object_name ().c_str ());
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
610 }
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
611 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
612
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
613 void
9798
2d6a5af744b6 printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9687
diff changeset
614 opengl_renderer::draw_figure (const figure::properties& props)
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
615 {
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
616 // Initialize OpenGL context
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
617
13281
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
618 init_gl_context (props.is___enhanced__ (), props.get_color_rgb ());
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
619
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
620 // Draw children
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
621
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
622 draw (props.get_all_children (), false);
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
623 }
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
624
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
625 void
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
626 opengl_renderer::draw_uipanel (const uipanel::properties& props,
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
627 const graphics_object& go)
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
628 {
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
629 graphics_object fig = go.get_ancestor ("figure");
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
630 const figure::properties& figProps =
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
631 dynamic_cast<const figure::properties&> (fig.get_properties ());
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
632
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
633 // Initialize OpenGL context
13281
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
634
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
635 init_gl_context (figProps.is___enhanced__ (),
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
636 props.get_backgroundcolor_rgb ());
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
637
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
638 // Draw children
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
639
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
640 draw (props.get_all_children (), false);
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
641 }
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
642
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
643 void
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
644 opengl_renderer::init_gl_context (bool enhanced, const Matrix& c)
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
645 {
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
646 // Initialize OpenGL context
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
647
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
648 glEnable (GL_DEPTH_TEST);
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
649 glDepthFunc (GL_LEQUAL);
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
650 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
9403
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
651 glAlphaFunc (GL_GREATER, 0.0f);
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
652 glEnable (GL_NORMALIZE);
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
653
13281
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13219
diff changeset
654 if (enhanced)
7907
c350329da645 Implement basic line antialiasing
John W. Eaton <jwe@octave.org>
parents: 7906
diff changeset
655 {
c350329da645 Implement basic line antialiasing
John W. Eaton <jwe@octave.org>
parents: 7906
diff changeset
656 glEnable (GL_BLEND);
18770
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
657 glEnable (GL_MULTISAMPLE);
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
658 GLint iMultiSample, iNumSamples;
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
659 glGetIntegerv (GL_SAMPLE_BUFFERS, &iMultiSample);
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
660 glGetIntegerv (GL_SAMPLES, &iNumSamples);
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
661 if (iMultiSample != GL_TRUE || iNumSamples == 0)
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
662 {
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
663 // MultiSample not implemented. Use old-style anti-aliasing
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
664 glDisable (GL_MULTISAMPLE);
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
665 glEnable (GL_LINE_SMOOTH);
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
666 glHint (GL_LINE_SMOOTH_HINT, GL_NICEST);
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
667 }
7907
c350329da645 Implement basic line antialiasing
John W. Eaton <jwe@octave.org>
parents: 7906
diff changeset
668 }
c350329da645 Implement basic line antialiasing
John W. Eaton <jwe@octave.org>
parents: 7906
diff changeset
669 else
c350329da645 Implement basic line antialiasing
John W. Eaton <jwe@octave.org>
parents: 7906
diff changeset
670 {
c350329da645 Implement basic line antialiasing
John W. Eaton <jwe@octave.org>
parents: 7906
diff changeset
671 glDisable (GL_BLEND);
c350329da645 Implement basic line antialiasing
John W. Eaton <jwe@octave.org>
parents: 7906
diff changeset
672 glDisable (GL_LINE_SMOOTH);
c350329da645 Implement basic line antialiasing
John W. Eaton <jwe@octave.org>
parents: 7906
diff changeset
673 }
c350329da645 Implement basic line antialiasing
John W. Eaton <jwe@octave.org>
parents: 7906
diff changeset
674
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
675 // Clear background
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
676
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20055
diff changeset
677 if (c.numel () >= 3)
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
678 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
679 glClearColor (c(0), c(1), c(2), 1);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
680 glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
681 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
682 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
683
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
684 void
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
685 opengl_renderer::render_grid (const std::string& gridstyle,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
686 const Matrix& ticks, double lim1, double lim2,
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
687 double p1, double p1N, double p2, double p2N,
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
688 int xyz, bool is_3D)
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
689 {
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
690 set_linestyle (gridstyle, true);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
691 glBegin (GL_LINES);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
692 for (int i = 0; i < ticks.numel (); i++)
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
693 {
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
694 double val = ticks(i);
18720
04adeda9b83d Revert ea22cf3e370b and 60df2fd04293 plotting grid/ticks over axes lines.
Rik <rik@octave.org>
parents: 18705
diff changeset
695 if (lim1 <= val && val <= lim2)
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
696 {
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
697 if (xyz == X_AXIS)
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
698 {
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
699 glVertex3d (val, p1N, p2);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
700 glVertex3d (val, p1, p2);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
701 if (is_3D)
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
702 {
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
703 glVertex3d (val, p1, p2N);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
704 glVertex3d (val, p1, p2);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
705 }
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
706 }
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
707 else if (xyz == Y_AXIS)
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
708 {
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
709 glVertex3d (p1N, val, p2);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
710 glVertex3d (p1, val, p2);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
711 if (is_3D)
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
712 {
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
713 glVertex3d (p1, val, p2N);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
714 glVertex3d (p1, val, p2);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
715 }
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
716 }
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
717 else if (xyz == Z_AXIS)
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
718 {
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
719 glVertex3d (p1N, p2, val);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
720 glVertex3d (p1, p2, val);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
721 glVertex3d (p1, p2N, val);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
722 glVertex3d (p1, p2, val);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
723 }
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
724 }
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
725 }
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
726 glEnd ();
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
727 set_linestyle ("-", true);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
728 }
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
729
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
730 void
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
731 opengl_renderer::render_tickmarks (const Matrix& ticks,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
732 double lim1, double lim2,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
733 double p1, double p1N,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
734 double p2, double p2N,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
735 double dx, double dy, double dz,
12684
abfcb5d5641b Disable mirrored axes ticks for plottyy in ftlk
Konstantinos Poulios <logari81@googlemail.com>
parents: 12446
diff changeset
736 int xyz, bool mirror)
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
737 {
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
738 glBegin (GL_LINES);
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
739
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
740 for (int i = 0; i < ticks.numel (); i++)
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
741 {
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
742 double val = ticks(i);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
743
18720
04adeda9b83d Revert ea22cf3e370b and 60df2fd04293 plotting grid/ticks over axes lines.
Rik <rik@octave.org>
parents: 18705
diff changeset
744 if (lim1 <= val && val <= lim2)
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
745 {
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
746 if (xyz == X_AXIS)
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
747 {
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
748 glVertex3d (val, p1, p2);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
749 glVertex3d (val, p1+dy, p2+dz);
12684
abfcb5d5641b Disable mirrored axes ticks for plottyy in ftlk
Konstantinos Poulios <logari81@googlemail.com>
parents: 12446
diff changeset
750 if (mirror)
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
751 {
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
752 glVertex3d (val, p1N, p2N);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
753 glVertex3d (val, p1N-dy, p2N-dz);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
754 }
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
755 }
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
756 else if (xyz == Y_AXIS)
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
757 {
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
758 glVertex3d (p1, val, p2);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
759 glVertex3d (p1+dx, val, p2+dz);
12684
abfcb5d5641b Disable mirrored axes ticks for plottyy in ftlk
Konstantinos Poulios <logari81@googlemail.com>
parents: 12446
diff changeset
760 if (mirror)
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
761 {
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
762 glVertex3d (p1N, val, p2N);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
763 glVertex3d (p1N-dx, val, p2N-dz);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
764 }
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
765 }
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
766 else if (xyz == Z_AXIS)
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
767 {
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
768 glVertex3d (p1, p2, val);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
769 glVertex3d (p1+dx, p2+dy, val);
12684
abfcb5d5641b Disable mirrored axes ticks for plottyy in ftlk
Konstantinos Poulios <logari81@googlemail.com>
parents: 12446
diff changeset
770 if (mirror)
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
771 {
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
772 glVertex3d (p1N, p2N, val);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
773 glVertex3d (p1N-dx, p2N-dy, val);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
774 }
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
775 }
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
776 }
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
777 }
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
778
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
779 glEnd ();
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
780 }
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
781
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
782 void
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
783 opengl_renderer::render_ticktexts (const Matrix& ticks,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
784 const string_vector& ticklabels,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
785 double lim1, double lim2,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
786 double p1, double p2,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
787 int xyz, int ha, int va,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
788 int& wmax, int& hmax)
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
789 {
16855
359ac80ecb30 Trim ticklabel strings and repeat them as necessary to fill tick marks (bug #39344)
Rik <rik@octave.org>
parents: 15467
diff changeset
790 int nticks = ticks.numel ();
359ac80ecb30 Trim ticklabel strings and repeat them as necessary to fill tick marks (bug #39344)
Rik <rik@octave.org>
parents: 15467
diff changeset
791 int nlabels = ticklabels.numel ();
359ac80ecb30 Trim ticklabel strings and repeat them as necessary to fill tick marks (bug #39344)
Rik <rik@octave.org>
parents: 15467
diff changeset
792
359ac80ecb30 Trim ticklabel strings and repeat them as necessary to fill tick marks (bug #39344)
Rik <rik@octave.org>
parents: 15467
diff changeset
793 if (nlabels == 0)
359ac80ecb30 Trim ticklabel strings and repeat them as necessary to fill tick marks (bug #39344)
Rik <rik@octave.org>
parents: 15467
diff changeset
794 return;
359ac80ecb30 Trim ticklabel strings and repeat them as necessary to fill tick marks (bug #39344)
Rik <rik@octave.org>
parents: 15467
diff changeset
795
359ac80ecb30 Trim ticklabel strings and repeat them as necessary to fill tick marks (bug #39344)
Rik <rik@octave.org>
parents: 15467
diff changeset
796 for (int i = 0; i < nticks; i++)
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
797 {
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
798 double val = ticks(i);
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
799
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
800 if (lim1 <= val && val <= lim2)
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
801 {
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
802 Matrix b;
16855
359ac80ecb30 Trim ticklabel strings and repeat them as necessary to fill tick marks (bug #39344)
Rik <rik@octave.org>
parents: 15467
diff changeset
803
359ac80ecb30 Trim ticklabel strings and repeat them as necessary to fill tick marks (bug #39344)
Rik <rik@octave.org>
parents: 15467
diff changeset
804 std::string label (ticklabels(i % nlabels));
359ac80ecb30 Trim ticklabel strings and repeat them as necessary to fill tick marks (bug #39344)
Rik <rik@octave.org>
parents: 15467
diff changeset
805 label.erase (0, label.find_first_not_of (" "));
359ac80ecb30 Trim ticklabel strings and repeat them as necessary to fill tick marks (bug #39344)
Rik <rik@octave.org>
parents: 15467
diff changeset
806 label = label.substr (0, label.find_last_not_of (" ")+1);
359ac80ecb30 Trim ticklabel strings and repeat them as necessary to fill tick marks (bug #39344)
Rik <rik@octave.org>
parents: 15467
diff changeset
807
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
808 // FIXME: As tick text is transparent, shouldn't it be
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
809 // drawn after axes object, for correct rendering?
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
810 if (xyz == X_AXIS)
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
811 {
16855
359ac80ecb30 Trim ticklabel strings and repeat them as necessary to fill tick marks (bug #39344)
Rik <rik@octave.org>
parents: 15467
diff changeset
812 b = render_text (label, val, p1, p2, ha, va);
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
813 }
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
814 else if (xyz == Y_AXIS)
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
815 {
16855
359ac80ecb30 Trim ticklabel strings and repeat them as necessary to fill tick marks (bug #39344)
Rik <rik@octave.org>
parents: 15467
diff changeset
816 b = render_text (label, p1, val, p2, ha, va);
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
817 }
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
818 else if (xyz == Z_AXIS)
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
819 {
16855
359ac80ecb30 Trim ticklabel strings and repeat them as necessary to fill tick marks (bug #39344)
Rik <rik@octave.org>
parents: 15467
diff changeset
820 b = render_text (label, p1, p2, val, ha, va);
12126
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
821 }
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
822
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
823 wmax = std::max (wmax, static_cast<int> (b(2)));
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
824 hmax = std::max (hmax, static_cast<int> (b(3)));
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
825 }
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
826 }
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
827 }
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
828
85f9a5b211fd restructuring draw_axes, enabling minor ticks/grid in fltk, closing bug 31800
Konstantinos Poulios <logari81@googlemail.com>
parents: 12125
diff changeset
829 void
21198
1adcdc518d9e provide wrapper for glFinish in opengl_renderer class
John W. Eaton <jwe@octave.org>
parents: 21196
diff changeset
830 opengl_renderer::finish (void)
1adcdc518d9e provide wrapper for glFinish in opengl_renderer class
John W. Eaton <jwe@octave.org>
parents: 21196
diff changeset
831 {
1adcdc518d9e provide wrapper for glFinish in opengl_renderer class
John W. Eaton <jwe@octave.org>
parents: 21196
diff changeset
832 glFinish ();
1adcdc518d9e provide wrapper for glFinish in opengl_renderer class
John W. Eaton <jwe@octave.org>
parents: 21196
diff changeset
833 }
1adcdc518d9e provide wrapper for glFinish in opengl_renderer class
John W. Eaton <jwe@octave.org>
parents: 21196
diff changeset
834
1adcdc518d9e provide wrapper for glFinish in opengl_renderer class
John W. Eaton <jwe@octave.org>
parents: 21196
diff changeset
835 void
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
836 opengl_renderer::setup_opengl_transformation (const axes::properties& props)
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
837 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
838 // setup OpenGL transformation
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
839
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
840 Matrix x_zlim = props.get_transform_zlim ();
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
841
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
842 xZ1 = x_zlim(0)-(x_zlim(1)-x_zlim(0))/2;
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
843 xZ2 = x_zlim(1)+(x_zlim(1)-x_zlim(0))/2;
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
844
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
845 Matrix x_mat1 = props.get_opengl_matrix_1 ();
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
846 Matrix x_mat2 = props.get_opengl_matrix_2 ();
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
847
8724
a50228129dba Introduce new macro OCTAVE_GLUTESSCALLBACK_THREEDOTS. Use definitions HAVE_FRAMEWORK_OPENGL and HAVE_GLUTESSCALLBACK_THREEDOTS for Mac's framework OpenGL implementation.
Ben Abbott <bpabbott@mac.com>
parents: 8674
diff changeset
848 #if defined (HAVE_FRAMEWORK_OPENGL)
a50228129dba Introduce new macro OCTAVE_GLUTESSCALLBACK_THREEDOTS. Use definitions HAVE_FRAMEWORK_OPENGL and HAVE_GLUTESSCALLBACK_THREEDOTS for Mac's framework OpenGL implementation.
Ben Abbott <bpabbott@mac.com>
parents: 8674
diff changeset
849 GLint vw[4];
a50228129dba Introduce new macro OCTAVE_GLUTESSCALLBACK_THREEDOTS. Use definitions HAVE_FRAMEWORK_OPENGL and HAVE_GLUTESSCALLBACK_THREEDOTS for Mac's framework OpenGL implementation.
Ben Abbott <bpabbott@mac.com>
parents: 8674
diff changeset
850 #else
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
851 int vw[4];
8724
a50228129dba Introduce new macro OCTAVE_GLUTESSCALLBACK_THREEDOTS. Use definitions HAVE_FRAMEWORK_OPENGL and HAVE_GLUTESSCALLBACK_THREEDOTS for Mac's framework OpenGL implementation.
Ben Abbott <bpabbott@mac.com>
parents: 8674
diff changeset
852 #endif
a50228129dba Introduce new macro OCTAVE_GLUTESSCALLBACK_THREEDOTS. Use definitions HAVE_FRAMEWORK_OPENGL and HAVE_GLUTESSCALLBACK_THREEDOTS for Mac's framework OpenGL implementation.
Ben Abbott <bpabbott@mac.com>
parents: 8674
diff changeset
853
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
854 glGetIntegerv (GL_VIEWPORT, vw);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
855
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
856 glMatrixMode (GL_MODELVIEW);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
857 glLoadIdentity ();
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
858 glScaled (1, 1, -1);
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
859 glMultMatrixd (x_mat1.data ());
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
860 glMatrixMode (GL_PROJECTION);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
861 glLoadIdentity ();
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
862 glOrtho (0, vw[2], vw[3], 0, xZ1, xZ2);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
863 glMultMatrixd (x_mat2.data ());
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
864 glMatrixMode (GL_MODELVIEW);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
865
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
866 glClear (GL_DEPTH_BUFFER_BIT);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
867
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
868 // store axes transformation data
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
869
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
870 xform = props.get_transform ();
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
871 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
872
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
873 void
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
874 opengl_renderer::draw_axes_planes (const axes::properties& props)
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
875 {
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
876 Matrix axe_color = props.get_color_rgb ();
20974
1edf15793cac maint: Use is_empty rather than "numel () == 0" for clarity.
Rik <rik@octave.org>
parents: 20955
diff changeset
877 if (axe_color.is_empty () || ! props.is_visible ())
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
878 return;
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
879
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
880 double xPlane = props.get_xPlane ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
881 double yPlane = props.get_yPlane ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
882 double zPlane = props.get_zPlane ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
883 double xPlaneN = props.get_xPlaneN ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
884 double yPlaneN = props.get_yPlaneN ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
885 double zPlaneN = props.get_zPlaneN ();
20055
438485f6a479 Honor the axes stack order in gl2ps outputs (bug #44765)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20034
diff changeset
886 bool is2d = props.get_is2D ();
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
887
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
888 // Axes planes
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
889 set_color (axe_color);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
890 set_polygon_offset (true, 2.5);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
891
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
892 glBegin (GL_QUADS);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
893
20055
438485f6a479 Honor the axes stack order in gl2ps outputs (bug #44765)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20034
diff changeset
894 if (! is2d)
438485f6a479 Honor the axes stack order in gl2ps outputs (bug #44765)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20034
diff changeset
895 {
438485f6a479 Honor the axes stack order in gl2ps outputs (bug #44765)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20034
diff changeset
896 // X plane
438485f6a479 Honor the axes stack order in gl2ps outputs (bug #44765)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20034
diff changeset
897 glVertex3d (xPlane, yPlaneN, zPlaneN);
438485f6a479 Honor the axes stack order in gl2ps outputs (bug #44765)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20034
diff changeset
898 glVertex3d (xPlane, yPlane, zPlaneN);
438485f6a479 Honor the axes stack order in gl2ps outputs (bug #44765)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20034
diff changeset
899 glVertex3d (xPlane, yPlane, zPlane);
438485f6a479 Honor the axes stack order in gl2ps outputs (bug #44765)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20034
diff changeset
900 glVertex3d (xPlane, yPlaneN, zPlane);
438485f6a479 Honor the axes stack order in gl2ps outputs (bug #44765)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20034
diff changeset
901
438485f6a479 Honor the axes stack order in gl2ps outputs (bug #44765)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20034
diff changeset
902 // Y plane
438485f6a479 Honor the axes stack order in gl2ps outputs (bug #44765)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20034
diff changeset
903 glVertex3d (xPlaneN, yPlane, zPlaneN);
438485f6a479 Honor the axes stack order in gl2ps outputs (bug #44765)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20034
diff changeset
904 glVertex3d (xPlane, yPlane, zPlaneN);
438485f6a479 Honor the axes stack order in gl2ps outputs (bug #44765)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20034
diff changeset
905 glVertex3d (xPlane, yPlane, zPlane);
438485f6a479 Honor the axes stack order in gl2ps outputs (bug #44765)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20034
diff changeset
906 glVertex3d (xPlaneN, yPlane, zPlane);
438485f6a479 Honor the axes stack order in gl2ps outputs (bug #44765)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20034
diff changeset
907 }
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
908
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
909 // Z plane
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
910 glVertex3d (xPlaneN, yPlaneN, zPlane);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
911 glVertex3d (xPlane, yPlaneN, zPlane);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
912 glVertex3d (xPlane, yPlane, zPlane);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
913 glVertex3d (xPlaneN, yPlane, zPlane);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
914
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
915 glEnd ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
916
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
917 set_polygon_offset (false);
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
918 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
919
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
920 void
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
921 opengl_renderer::draw_axes_boxes (const axes::properties& props)
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
922 {
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
923 if (! props.is_visible ())
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
924 return;
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
925
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
926 bool xySym = props.get_xySym ();
18667
e42843ceff48 Fix axes bounding box not obeying 'layer' property.
Rik <rik@octave.org>
parents: 18658
diff changeset
927 bool layer2Dtop = props.get_layer2Dtop ();
e42843ceff48 Fix axes bounding box not obeying 'layer' property.
Rik <rik@octave.org>
parents: 18658
diff changeset
928 bool is2d = props.get_is2D ();
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
929 double xPlane = props.get_xPlane ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
930 double yPlane = props.get_yPlane ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
931 double zPlane = props.get_zPlane ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
932 double xPlaneN = props.get_xPlaneN ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
933 double yPlaneN = props.get_yPlaneN ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
934 double zPlaneN = props.get_zPlaneN ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
935 double xpTick = props.get_xpTick ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
936 double ypTick = props.get_ypTick ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
937 double zpTick = props.get_zpTick ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
938 double xpTickN = props.get_xpTickN ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
939 double ypTickN = props.get_ypTickN ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
940 double zpTickN = props.get_zpTickN ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
941
13216
434e227b100b Improvements to plotyy.
Ben Abbott <bpabbott@mac.com>
parents: 13141
diff changeset
942 bool plotyy = (props.has_property ("__plotyy_axes__"));
12443
24b38afd6a45 fix plotyy bugs #31800, #32211
Konstantinos Poulios <logari81@googlemail.com>
parents: 12334
diff changeset
943
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
944 // Axes box
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
945
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
946 set_linestyle ("-", true);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
947 set_linewidth (props.get_linewidth ());
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
948
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
949 glBegin (GL_LINES);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
950
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
951 if (layer2Dtop)
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
952 std::swap (zpTick, zpTickN);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
953
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
954 // X box
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
955 set_color (props.get_xcolor_rgb ());
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
956 glVertex3d (xPlaneN, ypTick, zpTick);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
957 glVertex3d (xPlane, ypTick, zpTick);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
958
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
959 if (props.is_box ())
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
960 {
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
961 glVertex3d (xPlaneN, ypTickN, zpTick);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
962 glVertex3d (xPlane, ypTickN, zpTick);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
963 if (! is2d)
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
964 {
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
965 glVertex3d (xPlaneN, ypTickN, zpTickN);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
966 glVertex3d (xPlane, ypTickN, zpTickN);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
967 glVertex3d (xPlaneN, ypTick, zpTickN);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
968 glVertex3d (xPlane, ypTick, zpTickN);
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
969 }
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
970 }
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
971
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
972 // Y box
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
973 set_color (props.get_ycolor_rgb ());
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
974 glVertex3d (xpTick, yPlaneN, zpTick);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
975 glVertex3d (xpTick, yPlane, zpTick);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
976
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
977 if (props.is_box () && ! plotyy)
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
978 {
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
979 glVertex3d (xpTickN, yPlaneN, zpTick);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
980 glVertex3d (xpTickN, yPlane, zpTick);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
981
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
982 if (! is2d)
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
983 {
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
984 glVertex3d (xpTickN, yPlaneN, zpTickN);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
985 glVertex3d (xpTickN, yPlane, zpTickN);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
986 glVertex3d (xpTick, yPlaneN, zpTickN);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
987 glVertex3d (xpTick, yPlane, zpTickN);
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
988 }
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
989 }
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
990
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
991 // Z box
20034
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
992 if (! is2d)
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
993 {
20034
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
994 set_color (props.get_zcolor_rgb ());
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
995
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
996 if (xySym)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
997 {
20034
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
998 glVertex3d (xPlaneN, yPlane, zPlaneN);
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
999 glVertex3d (xPlaneN, yPlane, zPlane);
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1000 }
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1001 else
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1002 {
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1003 glVertex3d (xPlane, yPlaneN, zPlaneN);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1004 glVertex3d (xPlane, yPlaneN, zPlane);
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1005 }
20034
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1006
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1007 if (props.is_box ())
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1008 {
20034
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1009 glVertex3d (xPlane, yPlane, zPlaneN);
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1010 glVertex3d (xPlane, yPlane, zPlane);
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1011
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1012 if (xySym)
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1013 {
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1014 glVertex3d (xPlane, yPlaneN, zPlaneN);
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1015 glVertex3d (xPlane, yPlaneN, zPlane);
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1016 }
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1017 else
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1018 {
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1019 glVertex3d (xPlaneN, yPlane, zPlaneN);
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1020 glVertex3d (xPlaneN, yPlane, zPlane);
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1021 }
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1022
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1023 glVertex3d (xPlaneN, yPlaneN, zPlaneN);
42c3a0829324 Skip z axes rendering when in 2D mode (bug #44752)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19898
diff changeset
1024 glVertex3d (xPlaneN, yPlaneN, zPlane);
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1025 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1026 }
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1027
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1028 glEnd ();
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1029 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1030
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1031 void
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1032 opengl_renderer::draw_axes_x_grid (const axes::properties& props)
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1033 {
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1034 int xstate = props.get_xstate ();
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1035
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1036 if (props.is_visible () && xstate != AXE_DEPTH_DIR)
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1037 {
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1038 int zstate = props.get_zstate ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1039 bool x2Dtop = props.get_x2Dtop ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1040 bool layer2Dtop = props.get_layer2Dtop ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1041 bool xyzSym = props.get_xyzSym ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1042 bool nearhoriz = props.get_nearhoriz ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1043 double xticklen = props.get_xticklen ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1044 double xtickoffset = props.get_xtickoffset ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1045 double fy = props.get_fy ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1046 double fz = props.get_fz ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1047 double x_min = props.get_x_min ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1048 double x_max = props.get_x_max ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1049 double yPlane = props.get_yPlane ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1050 double yPlaneN = props.get_yPlaneN ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1051 double ypTick = props.get_ypTick ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1052 double ypTickN = props.get_ypTickN ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1053 double zPlane = props.get_zPlane ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1054 double zPlaneN = props.get_zPlaneN ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1055 double zpTick = props.get_zpTick ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1056 double zpTickN = props.get_zpTickN ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1057
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1058 // X grid
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1059
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1060 std::string gridstyle = props.get_gridlinestyle ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1061 std::string minorgridstyle = props.get_minorgridlinestyle ();
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1062 bool do_xgrid = (props.is_xgrid () && (gridstyle != "none"));
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
1063 bool do_xminorgrid = (props.is_xminorgrid ()
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
1064 && (minorgridstyle != "none"));
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1065 bool do_xminortick = props.is_xminortick ();
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1066 Matrix xticks = xform.xscale (props.get_xtick ().matrix_value ());
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1067 Matrix xmticks = xform.xscale (props.get_xmtick ().matrix_value ());
20990
fc9cca99b2de Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents: 20974
diff changeset
1068 string_vector xticklabels = props.get_xticklabel ().string_vector_value ();
18100
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
1069 int wmax = 0;
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
1070 int hmax = 0;
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1071 bool tick_along_z = nearhoriz || xisinf (fy);
12684
abfcb5d5641b Disable mirrored axes ticks for plottyy in ftlk
Konstantinos Poulios <logari81@googlemail.com>
parents: 12446
diff changeset
1072 bool mirror = props.is_box () && xstate != AXE_ANY_DIR;
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1073
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1074 set_color (props.get_xcolor_rgb ());
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1075
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1076 // grid lines
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1077 if (do_xgrid)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1078 render_grid (gridstyle, xticks, x_min, x_max,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1079 yPlane, yPlaneN, layer2Dtop ? zPlaneN : zPlane,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1080 zPlaneN, 0, (zstate != AXE_DEPTH_DIR));
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1081
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1082 // tick marks
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1083 if (tick_along_z)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1084 {
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1085 render_tickmarks (xticks, x_min, x_max, ypTick, ypTick,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1086 zpTick, zpTickN, 0., 0.,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1087 signum (zpTick-zpTickN)*fz*xticklen,
12684
abfcb5d5641b Disable mirrored axes ticks for plottyy in ftlk
Konstantinos Poulios <logari81@googlemail.com>
parents: 12446
diff changeset
1088 0, mirror);
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1089 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1090 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1091 {
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1092 render_tickmarks (xticks, x_min, x_max, ypTick, ypTickN,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1093 zpTick, zpTick, 0.,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1094 signum (ypTick-ypTickN)*fy*xticklen,
12684
abfcb5d5641b Disable mirrored axes ticks for plottyy in ftlk
Konstantinos Poulios <logari81@googlemail.com>
parents: 12446
diff changeset
1095 0., 0, mirror);
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1096 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1097
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1098 // tick texts
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1099 if (xticklabels.numel () > 0)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1100 {
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1101 int halign = (xstate == AXE_HORZ_DIR ? 1 : (xyzSym ? 0 : 2));
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1102 int valign = (xstate == AXE_VERT_DIR ? 1 : (x2Dtop ? 0 : 2));
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1103
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1104 if (tick_along_z)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1105 render_ticktexts (xticks, xticklabels, x_min, x_max, ypTick,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1106 zpTick+signum (zpTick-zpTickN)*fz*xtickoffset,
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1107 0, halign, valign, wmax, hmax);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1108 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1109 render_ticktexts (xticks, xticklabels, x_min, x_max,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1110 ypTick+signum (ypTick-ypTickN)*fy*xtickoffset,
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1111 zpTick, 0, halign, valign, wmax, hmax);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1112 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1113
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1114 // minor grid lines
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1115 if (do_xminorgrid)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1116 render_grid (minorgridstyle, xmticks, x_min, x_max,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1117 yPlane, yPlaneN, layer2Dtop ? zPlaneN : zPlane,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1118 zPlaneN, 0, (zstate != AXE_DEPTH_DIR));
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1119
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1120 // minor tick marks
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1121 if (do_xminortick)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1122 {
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1123 if (tick_along_z)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1124 render_tickmarks (xmticks, x_min, x_max, ypTick, ypTick,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1125 zpTick, zpTickN, 0., 0.,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1126 signum (zpTick-zpTickN)*fz*xticklen/2,
12684
abfcb5d5641b Disable mirrored axes ticks for plottyy in ftlk
Konstantinos Poulios <logari81@googlemail.com>
parents: 12446
diff changeset
1127 0, mirror);
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1128 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1129 render_tickmarks (xmticks, x_min, x_max, ypTick, ypTickN,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1130 zpTick, zpTick, 0.,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1131 signum (ypTick-ypTickN)*fy*xticklen/2,
12684
abfcb5d5641b Disable mirrored axes ticks for plottyy in ftlk
Konstantinos Poulios <logari81@googlemail.com>
parents: 12446
diff changeset
1132 0., 0, mirror);
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1133 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1134
12334
63dc132a1000 Move axes labels and title positioning to axes::properties
Konstantinos Poulios <logari81@gmail.com>
parents: 12333
diff changeset
1135 gh_manager::get_object (props.get_xlabel ()).set ("visible", "on");
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1136 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1137 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1138 gh_manager::get_object (props.get_xlabel ()).set ("visible", "off");
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1139 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1140
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1141 void
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1142 opengl_renderer::draw_axes_y_grid (const axes::properties& props)
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1143 {
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1144 int ystate = props.get_ystate ();
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1145
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1146 if (ystate != AXE_DEPTH_DIR && props.is_visible ())
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1147 {
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1148 int zstate = props.get_zstate ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1149 bool y2Dright = props.get_y2Dright ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1150 bool layer2Dtop = props.get_layer2Dtop ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1151 bool xyzSym = props.get_xyzSym ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1152 bool nearhoriz = props.get_nearhoriz ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1153 double yticklen = props.get_yticklen ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1154 double ytickoffset = props.get_ytickoffset ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1155 double fx = props.get_fx ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1156 double fz = props.get_fz ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1157 double xPlane = props.get_xPlane ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1158 double xPlaneN = props.get_xPlaneN ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1159 double xpTick = props.get_xpTick ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1160 double xpTickN = props.get_xpTickN ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1161 double y_min = props.get_y_min ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1162 double y_max = props.get_y_max ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1163 double zPlane = props.get_zPlane ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1164 double zPlaneN = props.get_zPlaneN ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1165 double zpTick = props.get_zpTick ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1166 double zpTickN = props.get_zpTickN ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1167
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1168 // Y grid
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1169
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1170 std::string gridstyle = props.get_gridlinestyle ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1171 std::string minorgridstyle = props.get_minorgridlinestyle ();
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1172 bool do_ygrid = (props.is_ygrid () && (gridstyle != "none"));
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
1173 bool do_yminorgrid = (props.is_yminorgrid ()
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
1174 && (minorgridstyle != "none"));
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1175 bool do_yminortick = props.is_yminortick ();
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1176 Matrix yticks = xform.yscale (props.get_ytick ().matrix_value ());
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1177 Matrix ymticks = xform.yscale (props.get_ymtick ().matrix_value ());
20990
fc9cca99b2de Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents: 20974
diff changeset
1178 string_vector yticklabels = props.get_yticklabel ().string_vector_value ();
18100
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
1179 int wmax = 0;
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
1180 int hmax = 0;
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1181 bool tick_along_z = nearhoriz || xisinf (fx);
12684
abfcb5d5641b Disable mirrored axes ticks for plottyy in ftlk
Konstantinos Poulios <logari81@googlemail.com>
parents: 12446
diff changeset
1182 bool mirror = props.is_box () && ystate != AXE_ANY_DIR
13216
434e227b100b Improvements to plotyy.
Ben Abbott <bpabbott@mac.com>
parents: 13141
diff changeset
1183 && (! props.has_property ("__plotyy_axes__"));
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1184
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1185 set_color (props.get_ycolor_rgb ());
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1186
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1187 // grid lines
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1188 if (do_ygrid)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1189 render_grid (gridstyle, yticks, y_min, y_max,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1190 xPlane, xPlaneN, layer2Dtop ? zPlaneN : zPlane,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1191 zPlaneN, 1, (zstate != AXE_DEPTH_DIR));
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1192
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1193 // tick marks
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1194 if (tick_along_z)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1195 render_tickmarks (yticks, y_min, y_max, xpTick, xpTick,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1196 zpTick, zpTickN, 0., 0.,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1197 signum (zpTick-zpTickN)*fz*yticklen,
12684
abfcb5d5641b Disable mirrored axes ticks for plottyy in ftlk
Konstantinos Poulios <logari81@googlemail.com>
parents: 12446
diff changeset
1198 1, mirror);
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1199 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1200 render_tickmarks (yticks, y_min, y_max, xpTick, xpTickN,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1201 zpTick, zpTick,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1202 signum (xPlaneN-xPlane)*fx*yticklen,
12684
abfcb5d5641b Disable mirrored axes ticks for plottyy in ftlk
Konstantinos Poulios <logari81@googlemail.com>
parents: 12446
diff changeset
1203 0., 0., 1, mirror);
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1204
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1205 // tick texts
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1206 if (yticklabels.numel () > 0)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1207 {
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1208 int halign = (ystate == AXE_HORZ_DIR
20955
77f5591878bf maint: Use '! expr' rather than '!expr' to conform to coding guidelines.
Rik <rik@octave.org>
parents: 20946
diff changeset
1209 ? 1 : (! xyzSym || y2Dright ? 0 : 2));
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1210 int valign = (ystate == AXE_VERT_DIR ? 1 : 2);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1211
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1212 if (tick_along_z)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1213 render_ticktexts (yticks, yticklabels, y_min, y_max, xpTick,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1214 zpTick+signum (zpTick-zpTickN)*fz*ytickoffset,
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1215 1, halign, valign, wmax, hmax);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1216 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1217 render_ticktexts (yticks, yticklabels, y_min, y_max,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1218 xpTick+signum (xpTick-xpTickN)*fx*ytickoffset,
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1219 zpTick, 1, halign, valign, wmax, hmax);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1220 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1221
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1222 // minor grid lines
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1223 if (do_yminorgrid)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1224 render_grid (minorgridstyle, ymticks, y_min, y_max,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1225 xPlane, xPlaneN, layer2Dtop ? zPlaneN : zPlane,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1226 zPlaneN, 1, (zstate != AXE_DEPTH_DIR));
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1227
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1228 // minor tick marks
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1229 if (do_yminortick)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1230 {
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1231 if (tick_along_z)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1232 render_tickmarks (ymticks, y_min, y_max, xpTick, xpTick,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1233 zpTick, zpTickN, 0., 0.,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1234 signum (zpTick-zpTickN)*fz*yticklen/2,
12684
abfcb5d5641b Disable mirrored axes ticks for plottyy in ftlk
Konstantinos Poulios <logari81@googlemail.com>
parents: 12446
diff changeset
1235 1, mirror);
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1236 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1237 render_tickmarks (ymticks, y_min, y_max, xpTick, xpTickN,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1238 zpTick, zpTick,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1239 signum (xpTick-xpTickN)*fx*yticklen/2,
12684
abfcb5d5641b Disable mirrored axes ticks for plottyy in ftlk
Konstantinos Poulios <logari81@googlemail.com>
parents: 12446
diff changeset
1240 0., 0., 1, mirror);
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1241 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1242
12334
63dc132a1000 Move axes labels and title positioning to axes::properties
Konstantinos Poulios <logari81@gmail.com>
parents: 12333
diff changeset
1243 gh_manager::get_object (props.get_ylabel ()).set ("visible", "on");
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1244 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1245 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1246 gh_manager::get_object (props.get_ylabel ()).set ("visible", "off");
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1247 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1248
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1249 void
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1250 opengl_renderer::draw_axes_z_grid (const axes::properties& props)
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1251 {
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1252 int zstate = props.get_zstate ();
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1253
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1254 if (zstate != AXE_DEPTH_DIR && props.is_visible ())
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1255 {
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1256 bool xySym = props.get_xySym ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1257 bool zSign = props.get_zSign ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1258 double zticklen = props.get_zticklen ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1259 double ztickoffset = props.get_ztickoffset ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1260 double fx = props.get_fx ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1261 double fy = props.get_fy ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1262 double xPlane = props.get_xPlane ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1263 double xPlaneN = props.get_xPlaneN ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1264 double yPlane = props.get_yPlane ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1265 double yPlaneN = props.get_yPlaneN ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1266 double z_min = props.get_z_min ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1267 double z_max = props.get_z_max ();
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1268
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1269 // Z Grid
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1270
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1271 std::string gridstyle = props.get_gridlinestyle ();
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1272 std::string minorgridstyle = props.get_minorgridlinestyle ();
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1273 bool do_zgrid = (props.is_zgrid () && (gridstyle != "none"));
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
1274 bool do_zminorgrid = (props.is_zminorgrid ()
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
1275 && (minorgridstyle != "none"));
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1276 bool do_zminortick = props.is_zminortick ();
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1277 Matrix zticks = xform.zscale (props.get_ztick ().matrix_value ());
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1278 Matrix zmticks = xform.zscale (props.get_zmtick ().matrix_value ());
20990
fc9cca99b2de Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents: 20974
diff changeset
1279 string_vector zticklabels = props.get_zticklabel ().string_vector_value ();
18100
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
1280 int wmax = 0;
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
1281 int hmax = 0;
12684
abfcb5d5641b Disable mirrored axes ticks for plottyy in ftlk
Konstantinos Poulios <logari81@googlemail.com>
parents: 12446
diff changeset
1282 bool mirror = props.is_box () && zstate != AXE_ANY_DIR;
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1283
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1284 set_color (props.get_zcolor_rgb ());
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1285
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1286 // grid lines
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1287 if (do_zgrid)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1288 render_grid (gridstyle, zticks, z_min, z_max,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1289 xPlane, xPlaneN, yPlane, yPlaneN, 2, true);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1290
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1291 // tick marks
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1292 if (xySym)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1293 {
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1294 if (xisinf (fy))
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1295 render_tickmarks (zticks, z_min, z_max, xPlaneN, xPlane,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1296 yPlane, yPlane,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1297 signum (xPlaneN-xPlane)*fx*zticklen,
12684
abfcb5d5641b Disable mirrored axes ticks for plottyy in ftlk
Konstantinos Poulios <logari81@googlemail.com>
parents: 12446
diff changeset
1298 0., 0., 2, mirror);
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1299 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1300 render_tickmarks (zticks, z_min, z_max, xPlaneN, xPlaneN,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1301 yPlane, yPlane, 0.,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1302 signum (yPlane-yPlaneN)*fy*zticklen,
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1303 0., 2, false);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1304 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1305 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1306 {
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1307 if (xisinf (fx))
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1308 render_tickmarks (zticks, z_min, z_max, xPlaneN, xPlane,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1309 yPlaneN, yPlane, 0.,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1310 signum (yPlaneN-yPlane)*fy*zticklen,
12684
abfcb5d5641b Disable mirrored axes ticks for plottyy in ftlk
Konstantinos Poulios <logari81@googlemail.com>
parents: 12446
diff changeset
1311 0., 2, mirror);
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1312 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1313 render_tickmarks (zticks, z_min, z_max, xPlane, xPlane,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1314 yPlaneN, yPlane,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1315 signum (xPlane-xPlaneN)*fx*zticklen,
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1316 0., 0., 2, false);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1317 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1318
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1319 // FIXME: tick texts
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1320 if (zticklabels.numel () > 0)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1321 {
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1322 int halign = 2;
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1323 int valign = (zstate == AXE_VERT_DIR ? 1 : (zSign ? 3 : 2));
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1324
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1325 if (xySym)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1326 {
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1327 if (xisinf (fy))
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1328 render_ticktexts (zticks, zticklabels, z_min, z_max,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1329 xPlaneN+signum (xPlaneN-xPlane)*fx*ztickoffset,
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1330 yPlane, 2, halign, valign, wmax, hmax);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1331 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1332 render_ticktexts (zticks, zticklabels, z_min, z_max, xPlaneN,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1333 yPlane+signum (yPlane-yPlaneN)*fy*ztickoffset,
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1334 2, halign, valign, wmax, hmax);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1335 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1336 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1337 {
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1338 if (xisinf (fx))
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1339 render_ticktexts (zticks, zticklabels, z_min, z_max, xPlane,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1340 yPlaneN+signum (yPlaneN-yPlane)*fy*ztickoffset,
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1341 2, halign, valign, wmax, hmax);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1342 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1343 render_ticktexts (zticks, zticklabels, z_min, z_max,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1344 xPlane+signum (xPlane-xPlaneN)*fx*ztickoffset,
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1345 yPlaneN, 2, halign, valign, wmax, hmax);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1346 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1347 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1348
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1349 // minor grid lines
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1350 if (do_zminorgrid)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1351 render_grid (minorgridstyle, zmticks, z_min, z_max,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1352 xPlane, xPlaneN, yPlane, yPlaneN, 2, true);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1353
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1354 // minor tick marks
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1355 if (do_zminortick)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1356 {
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1357 if (xySym)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1358 {
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1359 if (xisinf (fy))
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1360 render_tickmarks (zmticks, z_min, z_max, xPlaneN, xPlane,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1361 yPlane, yPlane,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1362 signum (xPlaneN-xPlane)*fx*zticklen/2,
12684
abfcb5d5641b Disable mirrored axes ticks for plottyy in ftlk
Konstantinos Poulios <logari81@googlemail.com>
parents: 12446
diff changeset
1363 0., 0., 2, mirror);
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1364 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1365 render_tickmarks (zmticks, z_min, z_max, xPlaneN, xPlaneN,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1366 yPlane, yPlane, 0.,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1367 signum (yPlane-yPlaneN)*fy*zticklen/2,
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1368 0., 2, false);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1369 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1370 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1371 {
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1372 if (xisinf (fx))
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1373 render_tickmarks (zmticks, z_min, z_max, xPlane, xPlane,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1374 yPlaneN, yPlane, 0.,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1375 signum (yPlaneN-yPlane)*fy*zticklen/2,
12684
abfcb5d5641b Disable mirrored axes ticks for plottyy in ftlk
Konstantinos Poulios <logari81@googlemail.com>
parents: 12446
diff changeset
1376 0., 2, mirror);
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1377 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1378 render_tickmarks (zmticks, z_min, z_max, xPlane, xPlane,
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1379 yPlaneN, yPlaneN,
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
1380 signum (xPlane-xPlaneN)*fx*zticklen/2,
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1381 0., 0., 2, false);
13141
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12965
diff changeset
1382 }
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1383 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1384
12334
63dc132a1000 Move axes labels and title positioning to axes::properties
Konstantinos Poulios <logari81@gmail.com>
parents: 12333
diff changeset
1385 gh_manager::get_object (props.get_zlabel ()).set ("visible", "on");
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1386 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1387 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1388 gh_manager::get_object (props.get_zlabel ()).set ("visible", "off");
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1389 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1390
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1391 void
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1392 opengl_renderer::draw_axes_children (const axes::properties& props)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1393 {
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1394 // Children
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1395
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1396 Matrix children = props.get_all_children ();
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1397 std::list<graphics_object> obj_list;
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1398 std::list<graphics_object>::iterator it;
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1399
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1400 // 1st pass: draw light objects
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1401
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1402 // Start with the last element of the array of child objects to
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1403 // display them in the order they were added to the array.
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1404
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1405 for (octave_idx_type i = children.numel () - 1; i >= 0; i--)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1406 {
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1407 graphics_object go = gh_manager::get_object (children(i));
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1408
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1409 if (go.get_properties ().is_visible ())
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1410 {
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1411 if (go.isa ("light"))
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1412 draw (go);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1413 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1414 obj_list.push_back (go);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1415 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1416 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1417
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1418 // 2nd pass: draw other objects (with units set to "data")
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1419
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1420 it = obj_list.begin ();
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1421 while (it != obj_list.end ())
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1422 {
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1423 graphics_object go = (*it);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1424
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1425 // FIXME: check whether object has "units" property and it is set
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1426 // to "data"
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1427 if (! go.isa ("text") || go.get ("units").string_value () == "data")
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1428 {
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1429 set_clipping (go.get_properties ().is_clipping ());
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1430 draw (go);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1431
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1432 it = obj_list.erase (it);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1433 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1434 else
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1435 it++;
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1436 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1437
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1438 // 3rd pass: draw remaining objects
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1439
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1440 glDisable (GL_DEPTH_TEST);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1441
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1442 for (it = obj_list.begin (); it != obj_list.end (); it++)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1443 {
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1444 graphics_object go = (*it);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1445
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1446 set_clipping (go.get_properties ().is_clipping ());
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1447 draw (go);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1448 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1449
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1450 glEnable (GL_DEPTH_TEST);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1451
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1452 set_clipping (false);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1453
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1454 // FIXME: finalize rendering (transparency processing)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1455 // FIXME: draw zoom box, if needed
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1456 }
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1457
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1458 void
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1459 opengl_renderer::draw_axes (const axes::properties& props)
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1460 {
17726
d449f4668b72 Print warning and abort plot if data range > max float (bug #40246)
Rik <rik@octave.org>
parents: 17651
diff changeset
1461 static double floatmax = std::numeric_limits<float>::max ();
d449f4668b72 Print warning and abort plot if data range > max float (bug #40246)
Rik <rik@octave.org>
parents: 17651
diff changeset
1462
12334
63dc132a1000 Move axes labels and title positioning to axes::properties
Konstantinos Poulios <logari81@gmail.com>
parents: 12333
diff changeset
1463 double x_min = props.get_x_min ();
63dc132a1000 Move axes labels and title positioning to axes::properties
Konstantinos Poulios <logari81@gmail.com>
parents: 12333
diff changeset
1464 double x_max = props.get_x_max ();
63dc132a1000 Move axes labels and title positioning to axes::properties
Konstantinos Poulios <logari81@gmail.com>
parents: 12333
diff changeset
1465 double y_min = props.get_y_min ();
63dc132a1000 Move axes labels and title positioning to axes::properties
Konstantinos Poulios <logari81@gmail.com>
parents: 12333
diff changeset
1466 double y_max = props.get_y_max ();
63dc132a1000 Move axes labels and title positioning to axes::properties
Konstantinos Poulios <logari81@gmail.com>
parents: 12333
diff changeset
1467 double z_min = props.get_z_min ();
63dc132a1000 Move axes labels and title positioning to axes::properties
Konstantinos Poulios <logari81@gmail.com>
parents: 12333
diff changeset
1468 double z_max = props.get_z_max ();
63dc132a1000 Move axes labels and title positioning to axes::properties
Konstantinos Poulios <logari81@gmail.com>
parents: 12333
diff changeset
1469
17732
dcc88366f94b Print warning and abort FLTK plot if data values < -maxfloat (bug #40246)
Rik <rik@octave.org>
parents: 17728
diff changeset
1470 if (x_max > floatmax || y_max > floatmax || z_max > floatmax
dcc88366f94b Print warning and abort FLTK plot if data values < -maxfloat (bug #40246)
Rik <rik@octave.org>
parents: 17728
diff changeset
1471 || x_min < -floatmax || y_min < -floatmax || z_min < -floatmax)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
1472 {
18682
8c537222f1e5 gl-render.cc: Use class prefix, opengl_renderer or opengl_texture, when printing warning.
Rik <rik@octave.org>
parents: 18677
diff changeset
1473 warning ("opengl_renderer: data values greater than float capacity. (1) Scale data, or (2) Use gnuplot");
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
1474 return;
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
1475 }
17726
d449f4668b72 Print warning and abort plot if data range > max float (bug #40246)
Rik <rik@octave.org>
parents: 17651
diff changeset
1476
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1477 setup_opengl_transformation (props);
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1478
19597
db92e7e28e1f strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 19047
diff changeset
1479 // Disable line smoothing for axes
18770
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
1480 GLboolean antialias;
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
1481 glGetBooleanv (GL_LINE_SMOOTH, &antialias);
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
1482 if (antialias == GL_TRUE)
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
1483 glDisable (GL_LINE_SMOOTH);
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
1484
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1485 // draw axes object
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1486
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1487 draw_axes_planes (props);
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1488 draw_axes_boxes (props);
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1489
9403
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
1490 set_font (props);
20285
6db2ea5556a4 Make use of the axes "ticklabelinterpreter" property (bug #45438)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20232
diff changeset
1491 set_interpreter (props.get_ticklabelinterpreter ());
9403
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
1492
12327
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1493 draw_axes_x_grid (props);
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1494 draw_axes_y_grid (props);
2ad37783bf01 Move axes layout from opengl_renderer::draw_axes to axes::properties
Konstantinos Poulios <logari81@googlemail.com>
parents: 12321
diff changeset
1495 draw_axes_z_grid (props);
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1496
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1497 set_linestyle ("-");
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1498
12334
63dc132a1000 Move axes labels and title positioning to axes::properties
Konstantinos Poulios <logari81@gmail.com>
parents: 12333
diff changeset
1499 set_clipbox (x_min, x_max, y_min, y_max, z_min, z_max);
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1500
18770
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
1501 // Re-enable line smoothing for children
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
1502 if (antialias == GL_TRUE)
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
1503 glEnable (GL_LINE_SMOOTH);
be8d7721ac16 Use OpenGL line smoothing when multisample is not available.
Rik <rik@octave.org>
parents: 18769
diff changeset
1504
12321
6ba28900706b opengl_renderer::draw_axes: simplify with subfunctions
John W. Eaton <jwe@octave.org>
parents: 12174
diff changeset
1505 draw_axes_children (props);
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1506 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1507
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1508 void
9798
2d6a5af744b6 printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9687
diff changeset
1509 opengl_renderer::draw_line (const line::properties& props)
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1510 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1511 Matrix x = xform.xscale (props.get_xdata ().matrix_value ());
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1512 Matrix y = xform.yscale (props.get_ydata ().matrix_value ());
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1513 Matrix z = xform.zscale (props.get_zdata ().matrix_value ());
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1514
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1515 bool has_z = (z.numel () > 0);
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
1516 int n = static_cast<int> (std::min (std::min (x.numel (), y.numel ()),
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
1517 (has_z ? z.numel ()
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
1518 : std::numeric_limits<int>::max ())));
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1519 octave_uint8 clip_mask = (props.is_clipping () ? 0x7F : 0x40), clip_ok (0x40);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1520
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1521 std::vector<octave_uint8> clip (n);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1522
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1523 if (has_z)
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1524 for (int i = 0; i < n; i++)
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1525 clip[i] = (clip_code (x(i), y(i), z(i)) & clip_mask);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1526 else
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1527 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1528 double z_mid = (zmin+zmax)/2;
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1529
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1530 for (int i = 0; i < n; i++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1531 clip[i] = (clip_code (x(i), y(i), z_mid) & clip_mask);
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1532 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1533
20738
f90295782d60 Accept color value of "none" for line objects (bug #44224).
Rik <rik@octave.org>
parents: 20711
diff changeset
1534 if (! props.linestyle_is ("none") && ! props.color_is ("none"))
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1535 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1536 set_color (props.get_color_rgb ());
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1537 set_linestyle (props.get_linestyle (), false);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1538 set_linewidth (props.get_linewidth ());
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1539
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1540 if (has_z)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1541 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1542 bool flag = false;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1543
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1544 for (int i = 1; i < n; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1545 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1546 if ((clip[i-1] & clip[i]) == clip_ok)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1547 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1548 if (! flag)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1549 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1550 flag = true;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1551 glBegin (GL_LINE_STRIP);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1552 glVertex3d (x(i-1), y(i-1), z(i-1));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1553 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1554 glVertex3d (x(i), y(i), z(i));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1555 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1556 else if (flag)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1557 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1558 flag = false;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1559 glEnd ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1560 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1561 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1562
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1563 if (flag)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1564 glEnd ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1565 }
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1566 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1567 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1568 bool flag = false;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1569
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1570 for (int i = 1; i < n; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1571 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1572 if ((clip[i-1] & clip[i]) == clip_ok)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1573 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1574 if (! flag)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1575 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1576 flag = true;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1577 glBegin (GL_LINE_STRIP);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1578 glVertex2d (x(i-1), y(i-1));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1579 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1580 glVertex2d (x(i), y(i));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1581 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1582 else if (flag)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1583 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1584 flag = false;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1585 glEnd ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1586 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1587 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1588
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1589 if (flag)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1590 glEnd ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1591 }
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
1592
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1593 set_linewidth (0.5);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1594 set_linestyle ("-");
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1595 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1596
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1597 set_clipping (false);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1598
19864
17d647821d61 maint: More cleanup of C++ code to follow Octave coding conventions.
John W. Eaton <jwe@octave.org>
parents: 19861
diff changeset
1599 if (! props.marker_is ("none")
17d647821d61 maint: More cleanup of C++ code to follow Octave coding conventions.
John W. Eaton <jwe@octave.org>
parents: 19861
diff changeset
1600 && ! (props.markeredgecolor_is ("none")
17d647821d61 maint: More cleanup of C++ code to follow Octave coding conventions.
John W. Eaton <jwe@octave.org>
parents: 19861
diff changeset
1601 && props.markerfacecolor_is ("none")))
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1602 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1603 Matrix lc, fc;
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1604
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1605 if (props.markeredgecolor_is ("auto"))
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1606 lc = props.get_color_rgb ();
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1607 else if (! props.markeredgecolor_is ("none"))
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1608 lc = props.get_markeredgecolor_rgb ();
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1609
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1610 if (props.markerfacecolor_is ("auto"))
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1611 fc = props.get_color_rgb ();
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1612 else if (! props.markerfacecolor_is ("none"))
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1613 fc = props.get_markerfacecolor_rgb ();
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1614
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1615 init_marker (props.get_marker (), props.get_markersize (),
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1616 props.get_linewidth ());
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1617
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1618 for (int i = 0; i < n; i++)
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1619 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1620 if (clip[i] == clip_ok)
11266
be710ed252ff gl-render.cc (opengl_renderer::draw_line): layer markers in 2D plots
Daisuke TAKAGO <takago@neptune.kanazawa-it.ac.jp>
parents: 11209
diff changeset
1621 draw_marker (x(i), y(i),
18658
75ec138ba53b Fix Z-order stacking of line markers and other graphic objects (bug #40054).
Rik <rik@octave.org>
parents: 18296
diff changeset
1622 has_z ? z(i) : 0.0,
11266
be710ed252ff gl-render.cc (opengl_renderer::draw_line): layer markers in 2D plots
Daisuke TAKAGO <takago@neptune.kanazawa-it.ac.jp>
parents: 11209
diff changeset
1623 lc, fc);
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1624 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1625
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1626 end_marker ();
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1627 }
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
1628
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1629 set_clipping (props.is_clipping ());
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1630 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1631
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
1632 void
9798
2d6a5af744b6 printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9687
diff changeset
1633 opengl_renderer::draw_surface (const surface::properties& props)
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1634 {
9681
40775386ab58 gl-render.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 9680
diff changeset
1635 const Matrix x = xform.xscale (props.get_xdata ().matrix_value ());
40775386ab58 gl-render.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 9680
diff changeset
1636 const Matrix y = xform.yscale (props.get_ydata ().matrix_value ());
40775386ab58 gl-render.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 9680
diff changeset
1637 const Matrix z = xform.zscale (props.get_zdata ().matrix_value ());
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1638
18100
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
1639 int zr = z.rows ();
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
1640 int zc = z.columns ();
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1641
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1642 NDArray c;
9681
40775386ab58 gl-render.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 9680
diff changeset
1643 const NDArray n = props.get_vertexnormals ().array_value ();
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1644
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1645 // FIXME: handle transparency
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1646 Matrix a;
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1647
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1648 if (props.facelighting_is ("phong") || props.edgelighting_is ("phong"))
18682
8c537222f1e5 gl-render.cc: Use class prefix, opengl_renderer or opengl_texture, when printing warning.
Rik <rik@octave.org>
parents: 18677
diff changeset
1649 warning ("opengl_renderer: phong light model not supported");
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1650
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1651 int fc_mode = (props.facecolor_is_rgb () ? 0 :
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1652 (props.facecolor_is ("flat") ? 1 :
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1653 (props.facecolor_is ("interp") ? 2 :
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1654 (props.facecolor_is ("texturemap") ? 3 : -1))));
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1655 int fl_mode = (props.facelighting_is ("none") ? 0 :
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1656 (props.facelighting_is ("flat") ? 1 : 2));
7846
d7737a4268b7 Fix typos in property names (edgealpha/facealpha).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7838
diff changeset
1657 int fa_mode = (props.facealpha_is_double () ? 0 :
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1658 (props.facealpha_is ("flat") ? 1 : 2));
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1659 int ec_mode = (props.edgecolor_is_rgb () ? 0 :
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1660 (props.edgecolor_is ("flat") ? 1 :
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1661 (props.edgecolor_is ("interp") ? 2 : -1)));
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1662 int el_mode = (props.edgelighting_is ("none") ? 0 :
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1663 (props.edgelighting_is ("flat") ? 1 : 2));
7846
d7737a4268b7 Fix typos in property names (edgealpha/facealpha).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7838
diff changeset
1664 int ea_mode = (props.edgealpha_is_double () ? 0 :
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1665 (props.edgealpha_is ("flat") ? 1 : 2));
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1666
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1667 Matrix fcolor = (fc_mode == TEXTURE ? Matrix (1, 3, 1.0)
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1668 : props.get_facecolor_rgb ());
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1669 Matrix ecolor = props.get_edgecolor_rgb ();
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1670
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1671 float as = props.get_ambientstrength ();
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1672 float ds = props.get_diffusestrength ();
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1673 float ss = props.get_specularstrength ();
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1674 float se = props.get_specularexponent ();
8674
0d263850d582 Fix calculation of diffuse reflectance. Calculate surface normals here now.
Kai Habel
parents: 8377
diff changeset
1675 float cb[4] = { 0.0, 0.0, 0.0, 1.0 };
0d263850d582 Fix calculation of diffuse reflectance. Calculate surface normals here now.
Kai Habel
parents: 8377
diff changeset
1676 double d = 1.0;
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1677
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
1678 opengl_texture tex;
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
1679
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1680 int i1, i2, j1, j2;
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1681 bool x_mat = (x.rows () == z.rows ());
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1682 bool y_mat = (y.columns () == z.columns ());
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1683
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1684 i1 = i2 = j1 = j2 = 0;
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1685
17558
e48a22b94727 Don't plot NaN values in cdata (bug #40114).
Rik <rik@octave.org>
parents: 17269
diff changeset
1686 if ((fc_mode > 0 && fc_mode < 3) || ec_mode > 0)
e48a22b94727 Don't plot NaN values in cdata (bug #40114).
Rik <rik@octave.org>
parents: 17269
diff changeset
1687 c = props.get_color_data ().array_value ();
e48a22b94727 Don't plot NaN values in cdata (bug #40114).
Rik <rik@octave.org>
parents: 17269
diff changeset
1688
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
1689 boolMatrix clip (z.dims (), false);
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1690
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1691 for (int i = 0; i < zr; i++)
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1692 {
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1693 if (x_mat)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1694 i1 = i;
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1695
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
1696 for (int j = 0; j < zc; j++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1697 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1698 if (y_mat)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1699 j1 = j;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1700
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1701 clip(i,j) = is_nan_or_inf (x(i1,j), y(i,j1), z(i,j));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1702 }
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1703 }
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1704
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1705 if (fa_mode > 0 || ea_mode > 0)
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1706 {
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1707 // FIXME: implement alphadata conversion
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1708 //a = props.get_alpha_data ();
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1709 }
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1710
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1711 if (fl_mode > 0 || el_mode > 0)
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1712 {
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1713 float buf[4] = { ss, ss, ss, 1 };
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1714
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1715 glMaterialfv (LIGHT_MODE, GL_SPECULAR, buf);
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1716 glMaterialf (LIGHT_MODE, GL_SHININESS, se);
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1717 }
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1718
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1719 // FIXME: good candidate for caching,
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
1720 // transferring pixel data to OpenGL is time consuming.
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1721 if (fc_mode == TEXTURE)
7831
c7925666f0bf Add OpenGL texture wrapper class (not complete yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7829
diff changeset
1722 tex = opengl_texture::create (props.get_color_data ());
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1723
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1724 if (! props.facecolor_is ("none"))
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1725 {
7846
d7737a4268b7 Fix typos in property names (edgealpha/facealpha).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7838
diff changeset
1726 if (props.get_facealpha_double () == 1)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1727 {
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1728 if (fc_mode == UNIFORM || fc_mode == TEXTURE)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1729 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1730 glColor3dv (fcolor.data ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1731 if (fl_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1732 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1733 for (int i = 0; i < 3; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1734 cb[i] = as * fcolor(i);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1735 glMaterialfv (LIGHT_MODE, GL_AMBIENT, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1736
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1737 for (int i = 0; i < 3; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1738 cb[i] = ds * fcolor(i);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1739 glMaterialfv (LIGHT_MODE, GL_DIFFUSE, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1740 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1741 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1742
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1743 if (fl_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1744 glEnable (GL_LIGHTING);
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1745 glShadeModel ((fc_mode == INTERP || fl_mode == GOURAUD) ? GL_SMOOTH
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1746 : GL_FLAT);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1747 set_polygon_offset (true, 1);
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1748 if (fc_mode == TEXTURE)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1749 glEnable (GL_TEXTURE_2D);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1750
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1751 for (int i = 1; i < zc; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1752 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1753 if (y_mat)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1754 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1755 i1 = i-1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1756 i2 = i;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1757 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1758
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1759 for (int j = 1; j < zr; j++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1760 {
17589
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1761
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1762 if (clip(j-1, i-1) || clip(j, i-1)
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1763 || clip(j-1, i) || clip(j, i))
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1764 continue;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1765
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1766 if (fc_mode == FLAT)
17589
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1767 {
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1768 // "flat" only needs color at lower-left vertex
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1769 if (! xfinite (c(j-1,i-1)))
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1770 continue;
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1771 }
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1772 else if (fc_mode == INTERP)
17589
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1773 {
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1774 // "interp" needs valid color at all 4 vertices
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1775 if (! (xfinite (c(j-1, i-1)) && xfinite (c(j, i-1))
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1776 && xfinite (c(j-1, i)) && xfinite (c(j, i))))
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1777 continue;
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1778 }
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1779
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1780 if (x_mat)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1781 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1782 j1 = j-1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1783 j2 = j;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1784 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1785
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1786 glBegin (GL_QUADS);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1787
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1788 // Vertex 1
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1789 if (fc_mode == TEXTURE)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
1790 tex.tex_coord (double (i-1) / (zc-1),
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
1791 double (j-1) / (zr-1));
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1792 else if (fc_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1793 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1794 // FIXME: is there a smarter way to do this?
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1795 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1796 cb[k] = c(j-1, i-1, k);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1797 glColor3fv (cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1798
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1799 if (fl_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1800 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1801 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1802 cb[k] *= as;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1803 glMaterialfv (LIGHT_MODE, GL_AMBIENT, cb);
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
1804
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1805 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1806 cb[k] = ds * c(j-1, i-1, k);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1807 glMaterialfv (LIGHT_MODE, GL_DIFFUSE, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1808 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1809 }
8674
0d263850d582 Fix calculation of diffuse reflectance. Calculate surface normals here now.
Kai Habel
parents: 8377
diff changeset
1810 if (fl_mode > 0)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1811 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1812 d = sqrt (n(j-1,i-1,0) * n(j-1,i-1,0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1813 + n(j-1,i-1,1) * n(j-1,i-1,1)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1814 + n(j-1,i-1,2) * n(j-1,i-1,2));
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
1815 glNormal3d (n(j-1,i-1,0)/d,
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
1816 n(j-1,i-1,1)/d,
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
1817 n(j-1,i-1,2)/d);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1818 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1819 glVertex3d (x(j1,i-1), y(j-1,i1), z(j-1,i-1));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1820
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1821 // Vertex 2
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1822 if (fc_mode == TEXTURE)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1823 tex.tex_coord (double (i) / (zc-1), double (j-1) / (zr-1));
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1824 else if (fc_mode == INTERP)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1825 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1826 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1827 cb[k] = c(j-1, i, k);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1828 glColor3fv (cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1829
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1830 if (fl_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1831 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1832 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1833 cb[k] *= as;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1834 glMaterialfv (LIGHT_MODE, GL_AMBIENT, cb);
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
1835
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1836 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1837 cb[k] = ds * c(j-1, i, k);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1838 glMaterialfv (LIGHT_MODE, GL_DIFFUSE, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1839 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1840 }
8674
0d263850d582 Fix calculation of diffuse reflectance. Calculate surface normals here now.
Kai Habel
parents: 8377
diff changeset
1841
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1842 if (fl_mode == GOURAUD)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1843 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1844 d = sqrt (n(j-1,i,0) * n(j-1,i,0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1845 + n(j-1,i,1) * n(j-1,i,1)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1846 + n(j-1,i,2) * n(j-1,i,2));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1847 glNormal3d (n(j-1,i,0)/d, n(j-1,i,1)/d, n(j-1,i,2)/d);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1848 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1849
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1850 glVertex3d (x(j1,i), y(j-1,i2), z(j-1,i));
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
1851
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1852 // Vertex 3
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1853 if (fc_mode == TEXTURE)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1854 tex.tex_coord (double (i) / (zc-1), double (j) / (zr-1));
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1855 else if (fc_mode == INTERP)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1856 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1857 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1858 cb[k] = c(j, i, k);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1859 glColor3fv (cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1860
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1861 if (fl_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1862 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1863 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1864 cb[k] *= as;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1865 glMaterialfv (LIGHT_MODE, GL_AMBIENT, cb);
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
1866
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1867 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1868 cb[k] = ds * c(j, i, k);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1869 glMaterialfv (LIGHT_MODE, GL_DIFFUSE, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1870 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1871 }
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1872 if (fl_mode == GOURAUD)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1873 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1874 d = sqrt (n(j,i,0) * n(j,i,0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1875 + n(j,i,1) * n(j,i,1)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1876 + n(j,i,2) * n(j,i,2));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1877 glNormal3d (n(j,i,0)/d, n(j,i,1)/d, n(j,i,2)/d);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1878 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1879 glVertex3d (x(j2,i), y(j,i2), z(j,i));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1880
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1881 // Vertex 4
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1882 if (fc_mode == TEXTURE)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1883 tex.tex_coord (double (i-1) / (zc-1), double (j) / (zr-1));
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1884 else if (fc_mode == INTERP)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1885 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1886 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1887 cb[k] = c(j, i-1, k);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1888 glColor3fv (cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1889
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1890 if (fl_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1891 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1892 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1893 cb[k] *= as;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1894 glMaterialfv (LIGHT_MODE, GL_AMBIENT, cb);
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
1895
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1896 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1897 cb[k] = ds * c(j, i-1, k);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1898 glMaterialfv (LIGHT_MODE, GL_DIFFUSE, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1899 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1900 }
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1901 if (fl_mode == GOURAUD)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1902 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1903 d = sqrt (n(j,i-1,0) * n(j,i-1,0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1904 + n(j,i-1,1) * n(j,i-1,1)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1905 + n(j,i-1,2) * n(j,i-1,2));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1906 glNormal3d (n(j,i-1,0)/d, n(j,i-1,1)/d, n(j,i-1,2)/d);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1907 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1908 glVertex3d (x(j2,i-1), y(j,i1), z(j,i-1));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1909
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1910 glEnd ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1911 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1912 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1913
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1914 set_polygon_offset (false);
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1915 if (fc_mode == TEXTURE)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1916 glDisable (GL_TEXTURE_2D);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1917
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1918 if (fl_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1919 glDisable (GL_LIGHTING);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1920 }
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1921 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1922 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1923 // FIXME: implement transparency
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1924 }
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1925 }
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1926
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1927 if (! props.edgecolor_is ("none"))
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
1928 {
7846
d7737a4268b7 Fix typos in property names (edgealpha/facealpha).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7838
diff changeset
1929 if (props.get_edgealpha_double () == 1)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1930 {
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1931 if (ec_mode == UNIFORM)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1932 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1933 glColor3dv (ecolor.data ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1934 if (fl_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1935 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1936 for (int i = 0; i < 3; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1937 cb[i] = as * ecolor(i);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1938 glMaterialfv (LIGHT_MODE, GL_AMBIENT, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1939
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1940 for (int i = 0; i < 3; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1941 cb[i] = ds * ecolor(i);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1942 glMaterialfv (LIGHT_MODE, GL_DIFFUSE, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1943 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1944 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1945
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1946 if (el_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1947 glEnable (GL_LIGHTING);
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1948 glShadeModel ((ec_mode == INTERP || el_mode == GOURAUD) ? GL_SMOOTH
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1949 : GL_FLAT);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1950
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1951 set_linestyle (props.get_linestyle (), false);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1952 set_linewidth (props.get_linewidth ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1953
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1954 // Mesh along Y-axis
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1955
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1956 if (props.meshstyle_is ("both") || props.meshstyle_is ("column"))
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1957 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1958 for (int i = 0; i < zc; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1959 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1960 if (y_mat)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1961 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1962 i1 = i-1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1963 i2 = i;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1964 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1965
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1966 for (int j = 1; j < zr; j++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1967 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1968 if (clip(j-1,i) || clip(j,i))
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1969 continue;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1970
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1971 if (ec_mode == FLAT)
17589
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1972 {
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1973 // "flat" only needs color at lower-left vertex
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1974 if (! xfinite (c(j-1,i)))
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1975 continue;
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1976 }
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
1977 else if (ec_mode == INTERP)
17589
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1978 {
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1979 // "interp" needs valid color at both vertices
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1980 if (! (xfinite (c(j-1, i)) && xfinite (c(j, i))))
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1981 continue;
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1982 }
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
1983
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1984 if (x_mat)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1985 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1986 j1 = j-1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1987 j2 = j;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1988 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1989
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1990 glBegin (GL_LINES);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1991
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1992 // Vertex 1
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1993 if (ec_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1994 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1995 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1996 cb[k] = c(j-1, i, k);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1997 glColor3fv (cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1998
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
1999 if (fl_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2000 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2001 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2002 cb[k] *= as;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2003 glMaterialfv (LIGHT_MODE, GL_AMBIENT, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2004
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2005 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2006 cb[k] = ds * c(j-1, i, k);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2007 glMaterialfv (LIGHT_MODE, GL_DIFFUSE, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2008 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2009 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2010 if (el_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2011 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2012 d = sqrt (n(j-1,i,0) * n(j-1,i,0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2013 + n(j-1,i,1) * n(j-1,i,1)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2014 + n(j-1,i,2) * n(j-1,i,2));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2015 glNormal3d (n(j-1,i,0)/d, n(j-1,i,1)/d, n(j-1,i,2)/d);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2016 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2017 glVertex3d (x(j1,i), y(j-1,i2), z(j-1,i));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2018
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2019 // Vertex 2
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
2020 if (ec_mode == INTERP)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2021 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2022 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2023 cb[k] = c(j, i, k);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2024 glColor3fv (cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2025
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2026 if (fl_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2027 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2028 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2029 cb[k] *= as;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2030 glMaterialfv (LIGHT_MODE, GL_AMBIENT, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2031
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2032 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2033 cb[k] = ds * c(j, i, k);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2034 glMaterialfv (LIGHT_MODE, GL_DIFFUSE, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2035 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2036 }
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
2037 if (el_mode == GOURAUD)
8674
0d263850d582 Fix calculation of diffuse reflectance. Calculate surface normals here now.
Kai Habel
parents: 8377
diff changeset
2038 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2039 d = sqrt (n(j,i,0) * n(j,i,0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2040 + n(j,i,1) * n(j,i,1)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2041 + n(j,i,2) * n(j,i,2));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2042 glNormal3d (n(j,i,0)/d, n(j,i,1)/d, n(j,i,2)/d);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2043 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2044 glVertex3d (x(j2,i), y(j,i2), z(j,i));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2045
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2046 glEnd ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2047 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2048 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2049 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2050
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2051 // Mesh along X-axis
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2052
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2053 if (props.meshstyle_is ("both") || props.meshstyle_is ("row"))
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2054 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2055 for (int j = 0; j < zr; j++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2056 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2057 if (x_mat)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2058 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2059 j1 = j-1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2060 j2 = j;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2061 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2062
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2063 for (int i = 1; i < zc; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2064 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2065 if (clip(j,i-1) || clip(j,i))
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2066 continue;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2067
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
2068 if (ec_mode == FLAT)
17589
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
2069 {
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
2070 // "flat" only needs color at lower-left vertex
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
2071 if (! xfinite (c(j,i-1)))
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
2072 continue;
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
2073 }
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
2074 else if (ec_mode == INTERP)
17589
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
2075 {
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
2076 // "interp" needs valid color at both vertices
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
2077 if (! (xfinite (c(j, i-1)) && xfinite (c(j, i))))
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
2078 continue;
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
2079 }
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
2080
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2081 if (y_mat)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2082 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2083 i1 = i-1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2084 i2 = i;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2085 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2086
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2087 glBegin (GL_LINES);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2088
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2089 // Vertex 1
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2090 if (ec_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2091 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2092 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2093 cb[k] = c(j, i-1, k);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2094 glColor3fv (cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2095
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2096 if (fl_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2097 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2098 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2099 cb[k] *= as;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2100 glMaterialfv (LIGHT_MODE, GL_AMBIENT, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2101
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2102 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2103 cb[k] = ds * c(j, i-1, k);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2104 glMaterialfv (LIGHT_MODE, GL_DIFFUSE, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2105 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2106 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2107 if (el_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2108 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2109 d = sqrt (n(j,i-1,0) * n(j,i-1,0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2110 + n(j,i-1,1) * n(j,i-1,1)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2111 + n(j,i-1,2) * n(j,i-1,2));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2112 glNormal3d (n(j,i-1,0)/d, n(j,i-1,1)/d, n(j,i-1,2)/d);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2113 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2114 glVertex3d (x(j2,i-1), y(j,i1), z(j,i-1));
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
2115
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2116 // Vertex 2
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
2117 if (ec_mode == INTERP)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2118 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2119 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2120 cb[k] = c(j, i, k);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2121 glColor3fv (cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2122
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2123 if (fl_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2124 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2125 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2126 cb[k] *= as;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2127 glMaterialfv (LIGHT_MODE, GL_AMBIENT, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2128
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2129 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2130 cb[k] = ds * c(j, i, k);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2131 glMaterialfv (LIGHT_MODE, GL_DIFFUSE, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2132 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2133 }
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
2134 if (el_mode == GOURAUD)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2135 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2136 d = sqrt (n(j,i,0) * n(j,i,0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2137 + n(j,i,1) * n(j,i,1)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2138 + n(j,i,2) * n(j,i,2));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2139 glNormal3d (n(j,i,0)/d, n(j,i,1)/d, n(j,i,2)/d);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2140 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2141 glVertex3d (x(j2,i), y(j,i2), z(j,i));
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
2142
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2143 glEnd ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2144 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2145 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2146 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2147
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2148 set_linestyle ("-");
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2149 set_linewidth (0.5);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2150
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2151 if (el_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2152 glDisable (GL_LIGHTING);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2153 }
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2154 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2155 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2156 // FIXME: implement transparency
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2157 }
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2158 }
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2159
19864
17d647821d61 maint: More cleanup of C++ code to follow Octave coding conventions.
John W. Eaton <jwe@octave.org>
parents: 19861
diff changeset
2160 if (! props.marker_is ("none")
17d647821d61 maint: More cleanup of C++ code to follow Octave coding conventions.
John W. Eaton <jwe@octave.org>
parents: 19861
diff changeset
2161 && ! (props.markeredgecolor_is ("none")
17d647821d61 maint: More cleanup of C++ code to follow Octave coding conventions.
John W. Eaton <jwe@octave.org>
parents: 19861
diff changeset
2162 && props.markerfacecolor_is ("none")))
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2163 {
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2164 // FIXME: check how transparency should be handled in markers
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2165 // FIXME: check what to do with marker facecolor set to auto
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2166 // and facecolor set to none.
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2167
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2168 bool do_edge = ! props.markeredgecolor_is ("none");
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2169 bool do_face = ! props.markerfacecolor_is ("none");
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2170
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2171 Matrix mecolor = props.get_markeredgecolor_rgb ();
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2172 Matrix mfcolor = props.get_markerfacecolor_rgb ();
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2173 Matrix cc (1, 3, 0.0);
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2174
20974
1edf15793cac maint: Use is_empty rather than "numel () == 0" for clarity.
Rik <rik@octave.org>
parents: 20955
diff changeset
2175 if (mecolor.is_empty () && props.markeredgecolor_is ("auto"))
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2176 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2177 mecolor = props.get_edgecolor_rgb ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2178 do_edge = ! props.edgecolor_is ("none");
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2179 }
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2180
20974
1edf15793cac maint: Use is_empty rather than "numel () == 0" for clarity.
Rik <rik@octave.org>
parents: 20955
diff changeset
2181 if (mfcolor.is_empty () && props.markerfacecolor_is ("auto"))
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2182 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2183 mfcolor = props.get_facecolor_rgb ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2184 do_face = ! props.facecolor_is ("none");
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2185 }
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2186
20974
1edf15793cac maint: Use is_empty rather than "numel () == 0" for clarity.
Rik <rik@octave.org>
parents: 20955
diff changeset
2187 if ((mecolor.is_empty () || mfcolor.is_empty ()) && c.is_empty ())
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2188 c = props.get_color_data ().array_value ();
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2189
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2190 init_marker (props.get_marker (), props.get_markersize (),
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2191 props.get_linewidth ());
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2192
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2193 for (int i = 0; i < zc; i++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2194 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2195 if (y_mat)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2196 i1 = i;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
2197
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2198 for (int j = 0; j < zr; j++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2199 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2200 if (clip(j,i))
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2201 continue;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2202
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2203 if (x_mat)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2204 j1 = j;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2205
20974
1edf15793cac maint: Use is_empty rather than "numel () == 0" for clarity.
Rik <rik@octave.org>
parents: 20955
diff changeset
2206 if ((do_edge && mecolor.is_empty ())
1edf15793cac maint: Use is_empty rather than "numel () == 0" for clarity.
Rik <rik@octave.org>
parents: 20955
diff changeset
2207 || (do_face && mfcolor.is_empty ()))
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2208 {
17589
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
2209 if (! xfinite (c(j,i)))
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
2210 continue; // Skip NaNs in color data
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
2211
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2212 for (int k = 0; k < 3; k++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2213 cc(k) = c(j,i,k);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2214 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2215
20974
1edf15793cac maint: Use is_empty rather than "numel () == 0" for clarity.
Rik <rik@octave.org>
parents: 20955
diff changeset
2216 Matrix lc = (do_edge ? (mecolor.is_empty () ? cc : mecolor)
17589
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
2217 : Matrix ());
20974
1edf15793cac maint: Use is_empty rather than "numel () == 0" for clarity.
Rik <rik@octave.org>
parents: 20955
diff changeset
2218 Matrix fc = (do_face ? (mfcolor.is_empty () ? cc : mfcolor)
17589
c3aadd228c37 Fix surf/mesh handling of NaN values in cdata (transparent) (bug #32275).
Rik <rik@octave.org>
parents: 17558
diff changeset
2219 : Matrix ());
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2220
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2221 draw_marker (x(j1,i), y(j,i1), z(j,i), lc, fc);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2222 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2223 }
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2224
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2225 end_marker ();
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2226 }
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2227 }
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2228
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
2229 // FIXME: global optimization (rendering, data structures...),
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
2230 // there is probably a smarter/faster/less-memory-consuming way to do this.
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2231 void
9798
2d6a5af744b6 printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9687
diff changeset
2232 opengl_renderer::draw_patch (const patch::properties &props)
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2233 {
18901
df972b9d080a Translate patch property listeners to C++ (bug #42159)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 18817
diff changeset
2234 // Do not render if the patch has incoherent data
df972b9d080a Translate patch property listeners to C++ (bug #42159)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 18817
diff changeset
2235 std::string msg;
df972b9d080a Translate patch property listeners to C++ (bug #42159)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 18817
diff changeset
2236 if (props.has_bad_data (msg))
df972b9d080a Translate patch property listeners to C++ (bug #42159)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 18817
diff changeset
2237 {
df972b9d080a Translate patch property listeners to C++ (bug #42159)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 18817
diff changeset
2238 warning ("opengl_renderer: %s. Not rendering.", msg.c_str ());
df972b9d080a Translate patch property listeners to C++ (bug #42159)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 18817
diff changeset
2239 return;
df972b9d080a Translate patch property listeners to C++ (bug #42159)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 18817
diff changeset
2240 }
df972b9d080a Translate patch property listeners to C++ (bug #42159)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 18817
diff changeset
2241
9681
40775386ab58 gl-render.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 9680
diff changeset
2242 const Matrix f = props.get_faces ().matrix_value ();
40775386ab58 gl-render.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 9680
diff changeset
2243 const Matrix v = xform.scale (props.get_vertices ().matrix_value ());
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2244 Matrix c;
9681
40775386ab58 gl-render.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 9680
diff changeset
2245 const Matrix n = props.get_vertexnormals ().matrix_value ();
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2246 Matrix a;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2247
7870
b1823dfd6ec7 style fixes
John W. Eaton <jwe@octave.org>
parents: 7866
diff changeset
2248 int nv = v.rows ();
b1823dfd6ec7 style fixes
John W. Eaton <jwe@octave.org>
parents: 7866
diff changeset
2249 int nf = f.rows ();
b1823dfd6ec7 style fixes
John W. Eaton <jwe@octave.org>
parents: 7866
diff changeset
2250 int fcmax = f.columns ();
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2251
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2252 bool has_z = (v.columns () > 2);
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2253 bool has_facecolor = false;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2254 bool has_facealpha = false;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2255
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
2256 int fc_mode = ((props.facecolor_is ("none")
11168
36442102c340 Fix treatment of facevertexcdata if facecolor is 'none' with the fltk backend
David Bateman <dbateman@free.fr>
parents: 11166
diff changeset
2257 || props.facecolor_is_rgb ()) ? 0 :
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
2258 (props.facecolor_is ("flat") ? 1 : 2));
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2259 int fl_mode = (props.facelighting_is ("none") ? 0 :
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2260 (props.facelighting_is ("flat") ? 1 : 2));
7846
d7737a4268b7 Fix typos in property names (edgealpha/facealpha).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7838
diff changeset
2261 int fa_mode = (props.facealpha_is_double () ? 0 :
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2262 (props.facealpha_is ("flat") ? 1 : 2));
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
2263 int ec_mode = ((props.edgecolor_is ("none")
11168
36442102c340 Fix treatment of facevertexcdata if facecolor is 'none' with the fltk backend
David Bateman <dbateman@free.fr>
parents: 11166
diff changeset
2264 || props.edgecolor_is_rgb ()) ? 0 :
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
2265 (props.edgecolor_is ("flat") ? 1 : 2));
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2266 int el_mode = (props.edgelighting_is ("none") ? 0 :
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2267 (props.edgelighting_is ("flat") ? 1 : 2));
7846
d7737a4268b7 Fix typos in property names (edgealpha/facealpha).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7838
diff changeset
2268 int ea_mode = (props.edgealpha_is_double () ? 0 :
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2269 (props.edgealpha_is ("flat") ? 1 : 2));
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2270
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2271 Matrix fcolor = props.get_facecolor_rgb ();
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2272 Matrix ecolor = props.get_edgecolor_rgb ();
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
2273
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2274 float as = props.get_ambientstrength ();
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2275 float ds = props.get_diffusestrength ();
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2276 float ss = props.get_specularstrength ();
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2277 float se = props.get_specularexponent ();
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2278
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2279 boolMatrix clip (1, nv, false);
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2280
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2281 if (has_z)
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2282 for (int i = 0; i < nv; i++)
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2283 clip(i) = is_nan_or_inf (v(i,0), v(i,1), v(i,2));
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2284 else
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2285 for (int i = 0; i < nv; i++)
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2286 clip(i) = is_nan_or_inf (v(i,0), v(i,1), 0);
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2287
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2288 boolMatrix clip_f (1, nf, false);
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
2289 Array<int> count_f (dim_vector (nf, 1), 0);
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2290
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2291 for (int i = 0; i < nf; i++)
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2292 {
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2293 bool fclip = false;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2294 int count = 0;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2295
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2296 for (int j = 0; j < fcmax && ! xisnan (f(i,j)); j++, count++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2297 fclip = (fclip || clip(int (f(i,j) - 1)));
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2298
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2299 clip_f(i) = fclip;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2300 count_f(i) = count;
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2301 }
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2302
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2303 if (fc_mode > 0 || ec_mode > 0)
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2304 {
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2305 c = props.get_color_data ().matrix_value ();
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2306
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2307 if (c.rows () == 1)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2308 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2309 // Single color specifications, we can simplify a little bit
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
2310
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2311 if (fc_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2312 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2313 fcolor = c;
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
2314 fc_mode = UNIFORM;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2315 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2316
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2317 if (ec_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2318 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2319 ecolor = c;
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
2320 ec_mode = UNIFORM;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2321 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2322
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2323 c = Matrix ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2324 }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2325 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2326 has_facecolor = ((c.numel () > 0) && (c.rows () == f.rows ()));
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2327 }
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2328
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2329 if (fa_mode > 0 || ea_mode > 0)
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2330 {
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2331 // FIXME: retrieve alpha data from patch object
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2332 //a = props.get_alpha_data ();
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2333 has_facealpha = ((a.numel () > 0) && (a.rows () == f.rows ()));
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2334 }
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2335
7924
4976f66d469b miscellaneous cleanup
John W. Eaton <jwe@octave.org>
parents: 7914
diff changeset
2336 octave_idx_type fr = f.rows ();
7914
e998e81224b5 Various compilation fixes for MSVC.
John W. Eaton <jwe@octave.org>
parents: 7907
diff changeset
2337 std::vector<vertex_data> vdata (f.numel ());
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2338
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2339 for (int i = 0; i < nf; i++)
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2340 for (int j = 0; j < count_f(i); j++)
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2341 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2342 int idx = int (f(i,j) - 1);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2343
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2344 Matrix vv (1, 3, 0.0);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2345 Matrix cc;
18702
8969bd721448 Fix Z-depth issues of patches and lines in 2-D plots (bug #40722).
Rik <rik@octave.org>
parents: 18683
diff changeset
2346 Matrix nn (1, 3, 0.0);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2347 double aa = 1.0;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2348
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2349 vv(0) = v(idx,0); vv(1) = v(idx,1);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2350 if (has_z)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2351 vv(2) = v(idx,2);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2352 // FIXME: uncomment when patch object has normal computation
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2353 //nn(0) = n(idx,0); nn(1) = n(idx,1); nn(2) = n(idx,2);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2354 if (c.numel () > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2355 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2356 cc.resize (1, 3);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2357 if (has_facecolor)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2358 cc(0) = c(i,0), cc(1) = c(i,1), cc(2) = c(i,2);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2359 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2360 cc(0) = c(idx,0), cc(1) = c(idx,1), cc(2) = c(idx,2);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2361 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2362 if (a.numel () > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2363 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2364 if (has_facealpha)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2365 aa = a(i);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2366 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2367 aa = a(idx);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2368 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2369
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
2370 vdata[i+j*fr] = vertex_data (vv, cc, nn, aa, as, ds, ss, se);
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2371 }
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2372
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2373 if (fl_mode > 0 || el_mode > 0)
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2374 {
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2375 float buf[4] = { ss, ss, ss, 1 };
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2376
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2377 glMaterialfv (LIGHT_MODE, GL_SPECULAR, buf);
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2378 glMaterialf (LIGHT_MODE, GL_SHININESS, se);
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2379 }
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2380
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2381 if (! props.facecolor_is ("none"))
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2382 {
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2383 // FIXME: adapt to double-radio property
7846
d7737a4268b7 Fix typos in property names (edgealpha/facealpha).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7838
diff changeset
2384 if (props.get_facealpha_double () == 1)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2385 {
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
2386 if (fc_mode == UNIFORM)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2387 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2388 glColor3dv (fcolor.data ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2389 if (fl_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2390 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2391 float cb[4] = { 0, 0, 0, 1 };
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2392
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2393 for (int i = 0; i < 3; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2394 cb[i] = (as * fcolor(i));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2395 glMaterialfv (LIGHT_MODE, GL_AMBIENT, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2396
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2397 for (int i = 0; i < 3; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2398 cb[i] = ds * fcolor(i);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2399 glMaterialfv (LIGHT_MODE, GL_DIFFUSE, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2400 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2401 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2402
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2403 if (fl_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2404 glEnable (GL_LIGHTING);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2405
18768
75f8926deef1 Fix Z-order stacking of patches and axes grid lines (bug #40722).
Rik <rik@octave.org>
parents: 18720
diff changeset
2406 // NOTE: Push filled part of patch backwards to avoid Z-fighting with
75f8926deef1 Fix Z-order stacking of patches and axes grid lines (bug #40722).
Rik <rik@octave.org>
parents: 18720
diff changeset
2407 // tesselator outline. A value of 1.0 seems to work fine. Value
75f8926deef1 Fix Z-order stacking of patches and axes grid lines (bug #40722).
Rik <rik@octave.org>
parents: 18720
diff changeset
2408 // can't be too large or the patch will be pushed below the axes
75f8926deef1 Fix Z-order stacking of patches and axes grid lines (bug #40722).
Rik <rik@octave.org>
parents: 18720
diff changeset
2409 // planes at +2.5.
75f8926deef1 Fix Z-order stacking of patches and axes grid lines (bug #40722).
Rik <rik@octave.org>
parents: 18720
diff changeset
2410 patch_tesselator tess (this, fc_mode, fl_mode, 1.0);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2411
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2412 for (int i = 0; i < nf; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2413 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2414 if (clip_f(i))
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2415 continue;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2416
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2417 tess.begin_polygon (true);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2418 tess.begin_contour ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2419
18295
2ed9498e4a74 Change diagonal of FaceColor interpolation for patch objects to match Matlab.
Rik <rik@octave.org>
parents: 18134
diff changeset
2420 // Add vertices in reverse order for Matlab compatibility
2ed9498e4a74 Change diagonal of FaceColor interpolation for patch objects to match Matlab.
Rik <rik@octave.org>
parents: 18134
diff changeset
2421 for (int j = count_f(i)-1; j > 0; j--)
2ed9498e4a74 Change diagonal of FaceColor interpolation for patch objects to match Matlab.
Rik <rik@octave.org>
parents: 18134
diff changeset
2422 {
2ed9498e4a74 Change diagonal of FaceColor interpolation for patch objects to match Matlab.
Rik <rik@octave.org>
parents: 18134
diff changeset
2423 vertex_data::vertex_data_rep *vv = vdata[i+j*fr].get_rep ();
2ed9498e4a74 Change diagonal of FaceColor interpolation for patch objects to match Matlab.
Rik <rik@octave.org>
parents: 18134
diff changeset
2424
2ed9498e4a74 Change diagonal of FaceColor interpolation for patch objects to match Matlab.
Rik <rik@octave.org>
parents: 18134
diff changeset
2425 tess.add_vertex (vv->coords.fortran_vec (), vv);
2ed9498e4a74 Change diagonal of FaceColor interpolation for patch objects to match Matlab.
Rik <rik@octave.org>
parents: 18134
diff changeset
2426 }
2ed9498e4a74 Change diagonal of FaceColor interpolation for patch objects to match Matlab.
Rik <rik@octave.org>
parents: 18134
diff changeset
2427
18134
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2428 if (count_f(i) > 0)
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2429 {
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2430 vertex_data::vertex_data_rep *vv = vdata[i].get_rep ();
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2431
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
2432 if (fc_mode == FLAT)
18134
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2433 {
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2434 // For "flat" shading, use color of 1st vertex.
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2435 Matrix col = vv->color;
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2436
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2437 if (col.numel () == 3)
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2438 {
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2439 glColor3dv (col.data ());
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2440 if (fl_mode > 0)
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2441 {
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2442 float cb[4] = { 0, 0, 0, 1 };
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2443
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2444 for (int k = 0; k < 3; k++)
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2445 cb[k] = (vv->ambient * col(k));
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2446 glMaterialfv (LIGHT_MODE, GL_AMBIENT, cb);
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2447
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2448 for (int k = 0; k < 3; k++)
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2449 cb[k] = (vv->diffuse * col(k));
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2450 glMaterialfv (LIGHT_MODE, GL_DIFFUSE, cb);
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2451 }
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2452 }
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2453 }
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2454
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2455 tess.add_vertex (vv->coords.fortran_vec (), vv);
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2456 }
647d806868ee Color patch face based upon first vertex (bug #40247).
Rik <rik@octave.org>
parents: 18100
diff changeset
2457
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2458 tess.end_contour ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2459 tess.end_polygon ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2460 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2461
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2462 if (fl_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2463 glDisable (GL_LIGHTING);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2464 }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2465 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2466 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2467 // FIXME: implement transparency
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2468 }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2469 }
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2470
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2471 if (! props.edgecolor_is ("none"))
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2472 {
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2473 // FIXME: adapt to double-radio property
7846
d7737a4268b7 Fix typos in property names (edgealpha/facealpha).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7838
diff changeset
2474 if (props.get_edgealpha_double () == 1)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2475 {
18771
79f69742971a gl-render.cc: Use enum symbolic constants for code clarity.
Rik <rik@octave.org>
parents: 18770
diff changeset
2476 if (ec_mode == UNIFORM)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2477 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2478 glColor3dv (ecolor.data ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2479 if (el_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2480 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2481 float cb[4] = { 0, 0, 0, 1 };
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2482
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2483 for (int i = 0; i < 3; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2484 cb[i] = (as * ecolor(i));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2485 glMaterialfv (LIGHT_MODE, GL_AMBIENT, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2486
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2487 for (int i = 0; i < 3; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2488 cb[i] = ds * ecolor(i);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2489 glMaterialfv (LIGHT_MODE, GL_DIFFUSE, cb);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2490 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2491 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2492
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2493 if (el_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2494 glEnable (GL_LIGHTING);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2495
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2496 set_linestyle (props.get_linestyle (), false);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2497 set_linewidth (props.get_linewidth ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2498
18768
75f8926deef1 Fix Z-order stacking of patches and axes grid lines (bug #40722).
Rik <rik@octave.org>
parents: 18720
diff changeset
2499 // NOTE: patch contour cannot be offset. Offset must occur with the
75f8926deef1 Fix Z-order stacking of patches and axes grid lines (bug #40722).
Rik <rik@octave.org>
parents: 18720
diff changeset
2500 // filled portion of the patch above. The tesselator uses
75f8926deef1 Fix Z-order stacking of patches and axes grid lines (bug #40722).
Rik <rik@octave.org>
parents: 18720
diff changeset
2501 // GLU_TESS_BOUNDARY_ONLY to get the outline of the patch and OpenGL
75f8926deef1 Fix Z-order stacking of patches and axes grid lines (bug #40722).
Rik <rik@octave.org>
parents: 18720
diff changeset
2502 // automatically sets the glType to GL_LINE_LOOP. This primitive is
19597
db92e7e28e1f strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 19047
diff changeset
2503 // not supported by glPolygonOffset which is used to do Z offsets.
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2504 patch_tesselator tess (this, ec_mode, el_mode);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2505
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2506 for (int i = 0; i < nf; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2507 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2508 if (clip_f(i))
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2509 {
18817
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2510 // This is an unclosed contour. Draw it as a line.
11175
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2511 bool flag = false;
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2512
18817
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2513 glShadeModel ((ec_mode == INTERP || el_mode == GOURAUD)
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2514 ? GL_SMOOTH : GL_FLAT);
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2515
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2516 // Add vertices in reverse order for Matlab compatibility
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2517 for (int j = count_f(i)-1; j >= 0; j--)
11175
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2518 {
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2519 if (! clip(int (f(i,j) - 1)))
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2520 {
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
2521 vertex_data::vertex_data_rep *vv
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
2522 = vdata[i+j*fr].get_rep ();
11175
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2523 const Matrix m = vv->coords;
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2524 if (! flag)
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2525 {
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2526 flag = true;
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2527 glBegin (GL_LINE_STRIP);
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2528 }
18817
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2529 if (ec_mode != UNIFORM)
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2530 {
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2531 Matrix col = vv->color;
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2532
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2533 if (col.numel () == 3)
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2534 glColor3dv (col.data ());
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2535 }
11175
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2536 glVertex3d (m(0), m(1), m(2));
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2537 }
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2538 else if (flag)
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2539 {
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2540 flag = false;
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2541 glEnd ();
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2542 }
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2543 }
18817
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2544 // Do loop body with vertex N to "close" GL_LINE_STRIP
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2545 // from vertex 0 to vertex N.
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2546 int j = count_f(i)-1;
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2547 if (flag && ! clip(int (f(i,j) - 1)))
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2548 {
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2549 vertex_data::vertex_data_rep *vv
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2550 = vdata[i+j*fr].get_rep ();
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2551 const Matrix m = vv->coords;
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2552 if (ec_mode != UNIFORM)
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2553 {
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2554 Matrix col = vv->color;
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2555
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2556 if (col.numel () == 3)
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2557 glColor3dv (col.data ());
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2558 }
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2559 glVertex3d (m(0), m(1), m(2));
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2560 }
11175
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2561
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2562 if (flag)
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2563 glEnd ();
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2564 }
18817
096b1a159d1f Correctly render unclosed contour of a patch object.
Rik <rik@octave.org>
parents: 18771
diff changeset
2565 else // Normal edge contour drawn with tesselator
11175
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2566 {
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2567 tess.begin_polygon (false);
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2568 tess.begin_contour ();
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2569
18296
c8d6ca222bcc Make "edgecolor"="flat" for patch objects compatible with Matlab.
Rik <rik@octave.org>
parents: 18295
diff changeset
2570 for (int j = count_f(i)-1; j >= 0; j--)
11175
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2571 {
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
2572 vertex_data::vertex_data_rep *vv
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
2573 = vdata[i+j*fr].get_rep ();
11175
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2574 tess.add_vertex (vv->coords.fortran_vec (), vv);
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2575 }
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2576
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2577 tess.end_contour ();
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2578 tess.end_polygon ();
c0a95a5c6d25 Address the speed of plotting large hggroup groups and in particular
David Bateman <dbateman@free.fr>
parents: 11168
diff changeset
2579 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2580 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2581
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2582 set_linestyle ("-");
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2583 set_linewidth (0.5);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2584
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2585 if (el_mode > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2586 glDisable (GL_LIGHTING);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2587 }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2588 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2589 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2590 // FIXME: implement transparency
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2591 }
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2592 }
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2593
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
2594 if (! props.marker_is ("none")
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
2595 && ! (props.markeredgecolor_is ("none")
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
2596 && props.markerfacecolor_is ("none")))
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2597 {
7838
0a2ba0053fbd Render marker of patch objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7837
diff changeset
2598 bool do_edge = ! props.markeredgecolor_is ("none");
0a2ba0053fbd Render marker of patch objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7837
diff changeset
2599 bool do_face = ! props.markerfacecolor_is ("none");
0a2ba0053fbd Render marker of patch objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7837
diff changeset
2600
0a2ba0053fbd Render marker of patch objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7837
diff changeset
2601 Matrix mecolor = props.get_markeredgecolor_rgb ();
0a2ba0053fbd Render marker of patch objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7837
diff changeset
2602 Matrix mfcolor = props.get_markerfacecolor_rgb ();
12446
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2603
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2604 bool has_markerfacecolor = false;
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2605
20974
1edf15793cac maint: Use is_empty rather than "numel () == 0" for clarity.
Rik <rik@octave.org>
parents: 20955
diff changeset
2606 if ((mecolor.is_empty () && ! props.markeredgecolor_is ("none"))
1edf15793cac maint: Use is_empty rather than "numel () == 0" for clarity.
Rik <rik@octave.org>
parents: 20955
diff changeset
2607 || (mfcolor.is_empty () && ! props.markerfacecolor_is ("none")))
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2608 {
12446
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2609 Matrix mc = props.get_color_data ().matrix_value ();
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2610
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2611 if (mc.rows () == 1)
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2612 {
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2613 // Single color specifications, we can simplify a little bit
20974
1edf15793cac maint: Use is_empty rather than "numel () == 0" for clarity.
Rik <rik@octave.org>
parents: 20955
diff changeset
2614 if (mfcolor.is_empty () && ! props.markerfacecolor_is ("none"))
12446
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2615 mfcolor = mc;
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2616
20974
1edf15793cac maint: Use is_empty rather than "numel () == 0" for clarity.
Rik <rik@octave.org>
parents: 20955
diff changeset
2617 if (mecolor.is_empty () && ! props.markeredgecolor_is ("none"))
12446
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2618 mecolor = mc;
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2619 }
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2620 else
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2621 {
20974
1edf15793cac maint: Use is_empty rather than "numel () == 0" for clarity.
Rik <rik@octave.org>
parents: 20955
diff changeset
2622 if (c.is_empty ())
12446
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2623 c = props.get_color_data ().matrix_value ();
13141
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12965
diff changeset
2624 has_markerfacecolor = ((c.numel () > 0)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
2625 && (c.rows () == f.rows ()));
12446
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2626 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2627 }
7838
0a2ba0053fbd Render marker of patch objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7837
diff changeset
2628
0a2ba0053fbd Render marker of patch objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7837
diff changeset
2629
0a2ba0053fbd Render marker of patch objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7837
diff changeset
2630 init_marker (props.get_marker (), props.get_markersize (),
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2631 props.get_linewidth ());
7838
0a2ba0053fbd Render marker of patch objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7837
diff changeset
2632
0a2ba0053fbd Render marker of patch objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7837
diff changeset
2633 for (int i = 0; i < nf; i++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2634 for (int j = 0; j < count_f(i); j++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2635 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2636 int idx = int (f(i,j) - 1);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2637
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2638 if (clip(idx))
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2639 continue;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2640
12446
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2641 Matrix cc;
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2642 if (c.numel () > 0)
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2643 {
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2644 cc.resize (1, 3);
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2645 if (has_markerfacecolor)
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2646 cc(0) = c(i,0), cc(1) = c(i,1), cc(2) = c(i,2);
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2647 else
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2648 cc(0) = c(idx,0), cc(1) = c(idx,1), cc(2) = c(idx,2);
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2649 }
f899f451fe76 Fix for fltk patch markers (#31801)
David Bateman <dbateman@free.fr>
parents: 12443
diff changeset
2650
20974
1edf15793cac maint: Use is_empty rather than "numel () == 0" for clarity.
Rik <rik@octave.org>
parents: 20955
diff changeset
2651 Matrix lc = (do_edge ? (mecolor.is_empty () ? cc : mecolor)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
2652 : Matrix ());
20974
1edf15793cac maint: Use is_empty rather than "numel () == 0" for clarity.
Rik <rik@octave.org>
parents: 20955
diff changeset
2653 Matrix fc = (do_face ? (mfcolor.is_empty () ? cc : mfcolor)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
2654 : Matrix ());
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2655
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2656 draw_marker (v(idx,0), v(idx,1), (has_z ? v(idx,2) : 0), lc, fc);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2657 }
7838
0a2ba0053fbd Render marker of patch objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7837
diff changeset
2658
0a2ba0053fbd Render marker of patch objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7837
diff changeset
2659 end_marker ();
7833
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2660 }
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2661 }
8ff92634982d Add initial support for patch rendering through GLU tessellation (no transparency, no border, no markers yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7831
diff changeset
2662
7829
8ca8e97e8c0a Add rendering interface for surface object (no implementation yet).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7825
diff changeset
2663 void
9798
2d6a5af744b6 printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9687
diff changeset
2664 opengl_renderer::draw_hggroup (const hggroup::properties &props)
7866
35e8d6199455 Add hggroup support in OpenGL renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7851
diff changeset
2665 {
35e8d6199455 Add hggroup support in OpenGL renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7851
diff changeset
2666 draw (props.get_children ());
35e8d6199455 Add hggroup support in OpenGL renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7851
diff changeset
2667 }
35e8d6199455 Add hggroup support in OpenGL renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7851
diff changeset
2668
35e8d6199455 Add hggroup support in OpenGL renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7851
diff changeset
2669 void
9798
2d6a5af744b6 printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9687
diff changeset
2670 opengl_renderer::draw_text (const text::properties& props)
9403
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
2671 {
12965
22bc9ec80c2c allow multi-line string property for text objects using cell arrays or char matrices
Ben Abbott <bpabbott@mac.com>
parents: 12684
diff changeset
2672 if (props.get_string ().is_empty ())
9403
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
2673 return;
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
2674
19047
1288a2f27769 Handle non "points" fontunits properties (bug # 40158)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 18906
diff changeset
2675 set_font (props);
1288a2f27769 Handle non "points" fontunits properties (bug # 40158)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 18906
diff changeset
2676
13961
0fea4cf22f88 restore legend text with OpenGL + FLTK graphics (bug #34907)
John W. Eaton <jwe@octave.org>
parents: 13758
diff changeset
2677 Matrix pos = xform.scale (props.get_data_position ());
11455
2be9e22796d2 improvements in text-extent calculation
Konstantinos Poulios <logari81@googlemail.com>
parents: 11385
diff changeset
2678 const Matrix bbox = props.get_extent_matrix ();
9403
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
2679
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
2680 // FIXME: handle margin and surrounding box
11455
2be9e22796d2 improvements in text-extent calculation
Konstantinos Poulios <logari81@googlemail.com>
parents: 11385
diff changeset
2681 bool blend = glIsEnabled (GL_BLEND);
2be9e22796d2 improvements in text-extent calculation
Konstantinos Poulios <logari81@googlemail.com>
parents: 11385
diff changeset
2682
2be9e22796d2 improvements in text-extent calculation
Konstantinos Poulios <logari81@googlemail.com>
parents: 11385
diff changeset
2683 glEnable (GL_BLEND);
2be9e22796d2 improvements in text-extent calculation
Konstantinos Poulios <logari81@googlemail.com>
parents: 11385
diff changeset
2684 glEnable (GL_ALPHA_TEST);
13961
0fea4cf22f88 restore legend text with OpenGL + FLTK graphics (bug #34907)
John W. Eaton <jwe@octave.org>
parents: 13758
diff changeset
2685 glRasterPos3d (pos(0), pos(1), pos.numel () > 2 ? pos(2) : 0.0);
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
2686 glBitmap (0, 0, 0, 0, bbox(0), bbox(1), 0);
11455
2be9e22796d2 improvements in text-extent calculation
Konstantinos Poulios <logari81@googlemail.com>
parents: 11385
diff changeset
2687 glDrawPixels (bbox(2), bbox(3),
2be9e22796d2 improvements in text-extent calculation
Konstantinos Poulios <logari81@googlemail.com>
parents: 11385
diff changeset
2688 GL_RGBA, GL_UNSIGNED_BYTE, props.get_pixels ().data ());
2be9e22796d2 improvements in text-extent calculation
Konstantinos Poulios <logari81@googlemail.com>
parents: 11385
diff changeset
2689 glDisable (GL_ALPHA_TEST);
2be9e22796d2 improvements in text-extent calculation
Konstantinos Poulios <logari81@googlemail.com>
parents: 11385
diff changeset
2690 if (! blend)
2be9e22796d2 improvements in text-extent calculation
Konstantinos Poulios <logari81@googlemail.com>
parents: 11385
diff changeset
2691 glDisable (GL_BLEND);
2be9e22796d2 improvements in text-extent calculation
Konstantinos Poulios <logari81@googlemail.com>
parents: 11385
diff changeset
2692
9403
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
2693 }
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
2694
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
2695 void
9798
2d6a5af744b6 printing for fltk backend using gl2ps
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9687
diff changeset
2696 opengl_renderer::draw_image (const image::properties& props)
9680
73153525df9a initial implementation of OpenGL image rendering
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9616
diff changeset
2697 {
9884
fed4aad2cdca handle indexed images in opengl renderer
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9834
diff changeset
2698 octave_value cdata = props.get_color_data ();
9680
73153525df9a initial implementation of OpenGL image rendering
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9616
diff changeset
2699 dim_vector dv (cdata.dims ());
18100
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
2700 int h = dv(0);
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
2701 int w = dv(1);
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
2702
11093
d748acc75658 gl-render.cc: Treat images with scalar unique(x/ydata) like Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11026
diff changeset
2703 Matrix x = props.get_xdata ().matrix_value ();
d748acc75658 gl-render.cc: Treat images with scalar unique(x/ydata) like Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11026
diff changeset
2704 Matrix y = props.get_ydata ().matrix_value ();
d748acc75658 gl-render.cc: Treat images with scalar unique(x/ydata) like Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11026
diff changeset
2705
15069
7a3957ca99c3 Handle complex arguments in imagesc (bug #36866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 14861
diff changeset
2706 // Someone wants us to draw an empty image? No way.
7a3957ca99c3 Handle complex arguments in imagesc (bug #36866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 14861
diff changeset
2707 if (x.is_empty () || y.is_empty ())
7a3957ca99c3 Handle complex arguments in imagesc (bug #36866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 14861
diff changeset
2708 return;
7a3957ca99c3 Handle complex arguments in imagesc (bug #36866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 14861
diff changeset
2709
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
2710 if (w > 1 && x(1) == x(0))
11093
d748acc75658 gl-render.cc: Treat images with scalar unique(x/ydata) like Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11026
diff changeset
2711 x(1) = x(1) + (w-1);
d748acc75658 gl-render.cc: Treat images with scalar unique(x/ydata) like Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11026
diff changeset
2712
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
2713 if (h > 1 && y(1) == y(0))
11093
d748acc75658 gl-render.cc: Treat images with scalar unique(x/ydata) like Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11026
diff changeset
2714 y(1) = y(1) + (h-1);
d748acc75658 gl-render.cc: Treat images with scalar unique(x/ydata) like Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11026
diff changeset
2715
9681
40775386ab58 gl-render.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 9680
diff changeset
2716 const ColumnVector p0 = xform.transform (x(0), y(0), 0);
40775386ab58 gl-render.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 9680
diff changeset
2717 const ColumnVector p1 = xform.transform (x(1), y(1), 0);
40775386ab58 gl-render.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 9680
diff changeset
2718
17727
36d646ead233 Fix segfault when x or y data values are large (bug #39925).
Rik <rik@octave.org>
parents: 17726
diff changeset
2719 if (xisnan (p0(0)) || xisnan (p0(1)) || xisnan (p1(0)) || xisnan (p1(1)))
36d646ead233 Fix segfault when x or y data values are large (bug #39925).
Rik <rik@octave.org>
parents: 17726
diff changeset
2720 {
18682
8c537222f1e5 gl-render.cc: Use class prefix, opengl_renderer or opengl_texture, when printing warning.
Rik <rik@octave.org>
parents: 18677
diff changeset
2721 warning ("opengl_renderer: image X,Y data too large to draw");
17727
36d646ead233 Fix segfault when x or y data values are large (bug #39925).
Rik <rik@octave.org>
parents: 17726
diff changeset
2722 return;
36d646ead233 Fix segfault when x or y data values are large (bug #39925).
Rik <rik@octave.org>
parents: 17726
diff changeset
2723 }
36d646ead233 Fix segfault when x or y data values are large (bug #39925).
Rik <rik@octave.org>
parents: 17726
diff changeset
2724
9687
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2725 // image pixel size in screen pixel units
9950
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2726 float pix_dx, pix_dy;
9687
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2727 // image pixel size in normalized units
9950
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2728 float nor_dx, nor_dy;
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2729
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
2730 if (w > 1)
9950
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2731 {
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2732 pix_dx = (p1(0) - p0(0))/(w-1);
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2733 nor_dx = (x(1) - x(0))/(w-1);
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2734 }
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2735 else
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2736 {
10076
4b270d1540f7 avoid various GCC warnings
John W. Eaton <jwe@octave.org>
parents: 9950
diff changeset
2737 const ColumnVector p1w = xform.transform (x(1) + 1, y(1), 0);
4b270d1540f7 avoid various GCC warnings
John W. Eaton <jwe@octave.org>
parents: 9950
diff changeset
2738 pix_dx = p1w(0) - p0(0);
9950
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2739 nor_dx = 1;
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2740 }
10076
4b270d1540f7 avoid various GCC warnings
John W. Eaton <jwe@octave.org>
parents: 9950
diff changeset
2741
9950
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2742 if (h > 1)
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2743 {
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2744 pix_dy = (p1(1) - p0(1))/(h-1);
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2745 nor_dy = (y(1) - y(0))/(h-1);
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2746 }
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2747 else
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2748 {
10076
4b270d1540f7 avoid various GCC warnings
John W. Eaton <jwe@octave.org>
parents: 9950
diff changeset
2749 const ColumnVector p1h = xform.transform (x(1), y(1) + 1, 0);
4b270d1540f7 avoid various GCC warnings
John W. Eaton <jwe@octave.org>
parents: 9950
diff changeset
2750 pix_dy = p1h(1) - p0(1);
9950
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2751 nor_dy = 1;
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2752 }
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2753
18682
8c537222f1e5 gl-render.cc: Use class prefix, opengl_renderer or opengl_texture, when printing warning.
Rik <rik@octave.org>
parents: 18677
diff changeset
2754 // OpenGL won't draw any of the image if it's origin is outside the
8c537222f1e5 gl-render.cc: Use class prefix, opengl_renderer or opengl_texture, when printing warning.
Rik <rik@octave.org>
parents: 18677
diff changeset
2755 // viewport/clipping plane so we must do the clipping ourselves.
9687
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2756
18100
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
2757 int j0, j1, i0, i1;
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
2758 j0 = 0, j1 = w;
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
2759 i0 = 0, i1 = h;
9687
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2760
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2761 float im_xmin = x(0) - nor_dx/2;
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2762 float im_xmax = x(1) + nor_dx/2;
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2763 float im_ymin = y(0) - nor_dy/2;
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2764 float im_ymax = y(1) + nor_dy/2;
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2765 if (props.is_clipping ()) // clip to axes
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2766 {
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2767 if (im_xmin < xmin)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2768 j0 += (xmin - im_xmin)/nor_dx + 1;
9687
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2769 if (im_xmax > xmax)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2770 j1 -= (im_xmax - xmax)/nor_dx ;
9687
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2771
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2772 if (im_ymin < ymin)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2773 i0 += (ymin - im_ymin)/nor_dy + 1;
9687
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2774 if (im_ymax > ymax)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2775 i1 -= (im_ymax - ymax)/nor_dy;
9687
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2776 }
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2777 else // clip to viewport
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2778 {
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2779 GLfloat vp[4];
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
2780 glGetFloatv (GL_VIEWPORT, vp);
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
2781 // FIXME: actually add the code to do it!
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
2782
9687
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2783 }
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2784
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
2785 if (i0 >= i1 || j0 >= j1)
9687
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2786 return;
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2787
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2788 glPixelZoom (pix_dx, -pix_dy);
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2789 glRasterPos3d (im_xmin + nor_dx*j0, im_ymin + nor_dy*i0, 0);
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2790
86aa08bbc887 image clipping and axes fixes
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9682
diff changeset
2791 // by default this is 4
18683
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2792 glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
9680
73153525df9a initial implementation of OpenGL image rendering
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9616
diff changeset
2793
73153525df9a initial implementation of OpenGL image rendering
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9616
diff changeset
2794 // Expect RGB data
73153525df9a initial implementation of OpenGL image rendering
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9616
diff changeset
2795 if (dv.length () == 3 && dv(2) == 3)
73153525df9a initial implementation of OpenGL image rendering
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9616
diff changeset
2796 {
73153525df9a initial implementation of OpenGL image rendering
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9616
diff changeset
2797 if (cdata.is_double_type ())
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2798 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2799 const NDArray xcdata = cdata.array_value ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2800
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2801 OCTAVE_LOCAL_BUFFER (GLfloat, a, 3*(j1-j0)*(i1-i0));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2802
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2803 for (int i = i0; i < i1; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2804 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2805 for (int j = j0, idx = (i-i0)*(j1-j0)*3; j < j1; j++, idx += 3)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2806 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2807 a[idx] = xcdata(i,j,0);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2808 a[idx+1] = xcdata(i,j,1);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2809 a[idx+2] = xcdata(i,j,2);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2810 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2811 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2812
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2813 draw_pixels (j1-j0, i1-i0, GL_RGB, GL_FLOAT, a);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2814
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2815 }
18683
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2816 else if (cdata.is_single_type ())
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2817 {
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2818 const FloatNDArray xcdata = cdata.float_array_value ();
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2819
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2820 OCTAVE_LOCAL_BUFFER (GLfloat, a, 3*(j1-j0)*(i1-i0));
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2821
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2822 for (int i = i0; i < i1; i++)
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2823 {
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2824 for (int j = j0, idx = (i-i0)*(j1-j0)*3; j < j1; j++, idx += 3)
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2825 {
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2826 a[idx] = xcdata(i,j,0);
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2827 a[idx+1] = xcdata(i,j,1);
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2828 a[idx+2] = xcdata(i,j,2);
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2829 }
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2830 }
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2831
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2832 draw_pixels (j1-j0, i1-i0, GL_RGB, GL_FLOAT, a);
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2833
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2834 }
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2835 else if (cdata.is_uint8_type ())
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2836 {
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2837 const uint8NDArray xcdata = cdata.uint8_array_value ();
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2838
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2839 OCTAVE_LOCAL_BUFFER (GLubyte, a, 3*(j1-j0)*(i1-i0));
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2840
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2841 for (int i = i0; i < i1; i++)
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2842 {
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2843 for (int j = j0, idx = (i-i0)*(j1-j0)*3; j < j1; j++, idx += 3)
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2844 {
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2845 a[idx] = xcdata(i,j,0);
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2846 a[idx+1] = xcdata(i,j,1);
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2847 a[idx+2] = xcdata(i,j,2);
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2848 }
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2849 }
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2850
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2851 draw_pixels (j1-j0, i1-i0, GL_RGB, GL_UNSIGNED_BYTE, a);
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2852
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2853 }
9680
73153525df9a initial implementation of OpenGL image rendering
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9616
diff changeset
2854 else if (cdata.is_uint16_type ())
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2855 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2856 const uint16NDArray xcdata = cdata.uint16_array_value ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2857
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2858 OCTAVE_LOCAL_BUFFER (GLushort, a, 3*(j1-j0)*(i1-i0));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2859
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2860 for (int i = i0; i < i1; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2861 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2862 for (int j = j0, idx = (i-i0)*(j1-j0)*3; j < j1; j++, idx += 3)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2863 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2864 a[idx] = xcdata(i,j,0);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2865 a[idx+1] = xcdata(i,j,1);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2866 a[idx+2] = xcdata(i,j,2);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2867 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2868 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2869
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2870 draw_pixels (j1-j0, i1-i0, GL_RGB, GL_UNSIGNED_SHORT, a);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2871
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2872 }
9680
73153525df9a initial implementation of OpenGL image rendering
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9616
diff changeset
2873 else
18683
44f0d1a53ead Add support for integer data types for image cdata.
Rik <rik@octave.org>
parents: 18682
diff changeset
2874 warning ("opengl_renderer: invalid image data type (expected double, single, uint8, or uint16)");
9680
73153525df9a initial implementation of OpenGL image rendering
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9616
diff changeset
2875 }
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
2876 else
18682
8c537222f1e5 gl-render.cc: Use class prefix, opengl_renderer or opengl_texture, when printing warning.
Rik <rik@octave.org>
parents: 18677
diff changeset
2877 warning ("opengl_renderer: invalid image size (expected MxNx3 or MxN)");
13219
cf5ebc0e47e4 fix warnings for unused but set variables and shadowed variables
John W. Eaton <jwe@octave.org>
parents: 13216
diff changeset
2878
9680
73153525df9a initial implementation of OpenGL image rendering
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9616
diff changeset
2879 glPixelZoom (1, 1);
73153525df9a initial implementation of OpenGL image rendering
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9616
diff changeset
2880 }
73153525df9a initial implementation of OpenGL image rendering
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9616
diff changeset
2881
73153525df9a initial implementation of OpenGL image rendering
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9616
diff changeset
2882 void
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2883 opengl_renderer::set_viewport (int w, int h)
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2884 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2885 glViewport (0, 0, w, h);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2886 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2887
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2888 void
9950
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2889 opengl_renderer::draw_pixels (GLsizei width, GLsizei height, GLenum format,
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2890 GLenum type, const GLvoid *data)
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2891 {
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2892 glDrawPixels (width, height, format, type, data);
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2893 }
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2894
7dedfd70dd9f image printing for fltk backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9884
diff changeset
2895 void
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2896 opengl_renderer::set_color (const Matrix& c)
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2897 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2898 glColor3dv (c.data ());
21209
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
2899
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
2900 txt_renderer.set_color (c);
9403
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
2901 }
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
2902
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
2903 void
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
2904 opengl_renderer::set_font (const base_properties& props)
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
2905 {
21209
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
2906 txt_renderer.set_font (props.get ("fontname").string_value (),
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
2907 props.get ("fontweight").string_value (),
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
2908 props.get ("fontangle").string_value (),
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
2909 props.get ("fontsize_points").double_value ());
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2910 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2911
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2912 void
18768
75f8926deef1 Fix Z-order stacking of patches and axes grid lines (bug #40722).
Rik <rik@octave.org>
parents: 18720
diff changeset
2913 opengl_renderer::set_polygon_offset (bool on, float offset)
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2914 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2915 if (on)
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2916 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2917 glEnable (GL_POLYGON_OFFSET_FILL);
7906
b3becd212f3f Draw markers above lines
John W. Eaton <jwe@octave.org>
parents: 7904
diff changeset
2918 glEnable (GL_POLYGON_OFFSET_LINE);
18768
75f8926deef1 Fix Z-order stacking of patches and axes grid lines (bug #40722).
Rik <rik@octave.org>
parents: 18720
diff changeset
2919 glPolygonOffset (offset, offset);
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2920 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2921 else
7906
b3becd212f3f Draw markers above lines
John W. Eaton <jwe@octave.org>
parents: 7904
diff changeset
2922 {
b3becd212f3f Draw markers above lines
John W. Eaton <jwe@octave.org>
parents: 7904
diff changeset
2923 glDisable (GL_POLYGON_OFFSET_FILL);
b3becd212f3f Draw markers above lines
John W. Eaton <jwe@octave.org>
parents: 7904
diff changeset
2924 glDisable (GL_POLYGON_OFFSET_LINE);
b3becd212f3f Draw markers above lines
John W. Eaton <jwe@octave.org>
parents: 7904
diff changeset
2925 }
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2926 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2927
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2928 void
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2929 opengl_renderer::set_linewidth (float w)
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2930 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2931 glLineWidth (w);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2932 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2933
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2934 void
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2935 opengl_renderer::set_linestyle (const std::string& s, bool use_stipple)
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2936 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2937 bool solid = false;
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2938
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2939 if (s == "-")
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2940 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2941 glLineStipple (1, static_cast<unsigned short> (0xFFFF));
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2942 solid = true;
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2943 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2944 else if (s == ":")
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2945 glLineStipple (1, static_cast<unsigned short> (0x8888));
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2946 else if (s == "--")
18906
c0fb31c46e87 Change OpenGL dashed line style to 50% mark / 50% space.
Rik <rik@octave.org>
parents: 18901
diff changeset
2947 glLineStipple (1, static_cast<unsigned short> (0xF0F0));
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2948 else if (s == "-.")
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2949 glLineStipple (1, static_cast<unsigned short> (0x020F));
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2950 else
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2951 glLineStipple (1, static_cast<unsigned short> (0x0000));
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2952
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2953 if (solid && ! use_stipple)
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2954 glDisable (GL_LINE_STIPPLE);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2955 else
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2956 glEnable (GL_LINE_STIPPLE);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2957 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2958
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2959 void
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2960 opengl_renderer::set_clipbox (double x1, double x2, double y1, double y2,
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
2961 double z1, double z2)
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2962 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2963 double dx = (x2-x1);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2964 double dy = (y2-y1);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2965 double dz = (z2-z1);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2966
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2967 x1 -= 0.001*dx; x2 += 0.001*dx;
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2968 y1 -= 0.001*dy; y2 += 0.001*dy;
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2969 z1 -= 0.001*dz; z2 += 0.001*dz;
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2970
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2971 ColumnVector p (4, 0.0);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2972
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2973 p(0) = -1; p(3) = x2;
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2974 glClipPlane (GL_CLIP_PLANE0, p.data ());
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2975 p(0) = 1; p(3) = -x1;
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2976 glClipPlane (GL_CLIP_PLANE1, p.data ());
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2977 p(0) = 0; p(1) = -1; p(3) = y2;
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2978 glClipPlane (GL_CLIP_PLANE2, p.data ());
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2979 p(1) = 1; p(3) = -y1;
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2980 glClipPlane (GL_CLIP_PLANE3, p.data ());
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2981 p(1) = 0; p(2) = -1; p(3) = z2;
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2982 glClipPlane (GL_CLIP_PLANE4, p.data ());
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2983 p(2) = 1; p(3) = -z1;
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2984 glClipPlane (GL_CLIP_PLANE5, p.data ());
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2985
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2986 xmin = x1; xmax = x2;
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2987 ymin = y1; ymax = y2;
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2988 zmin = z1; zmax = z2;
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2989 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2990
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2991 void
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2992 opengl_renderer::set_clipping (bool enable)
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2993 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2994 bool has_clipping = (glIsEnabled (GL_CLIP_PLANE0) == GL_TRUE);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2995
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2996 if (enable != has_clipping)
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2997 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2998 if (enable)
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
2999 for (int i = 0; i < 6; i++)
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3000 glEnable (GL_CLIP_PLANE0+i);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3001 else
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3002 for (int i = 0; i < 6; i++)
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3003 glDisable (GL_CLIP_PLANE0+i);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3004 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3005 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3006
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3007 void
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3008 opengl_renderer::init_marker (const std::string& m, double size, float width)
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3009 {
8724
a50228129dba Introduce new macro OCTAVE_GLUTESSCALLBACK_THREEDOTS. Use definitions HAVE_FRAMEWORK_OPENGL and HAVE_GLUTESSCALLBACK_THREEDOTS for Mac's framework OpenGL implementation.
Ben Abbott <bpabbott@mac.com>
parents: 8674
diff changeset
3010 #if defined (HAVE_FRAMEWORK_OPENGL)
a50228129dba Introduce new macro OCTAVE_GLUTESSCALLBACK_THREEDOTS. Use definitions HAVE_FRAMEWORK_OPENGL and HAVE_GLUTESSCALLBACK_THREEDOTS for Mac's framework OpenGL implementation.
Ben Abbott <bpabbott@mac.com>
parents: 8674
diff changeset
3011 GLint vw[4];
a50228129dba Introduce new macro OCTAVE_GLUTESSCALLBACK_THREEDOTS. Use definitions HAVE_FRAMEWORK_OPENGL and HAVE_GLUTESSCALLBACK_THREEDOTS for Mac's framework OpenGL implementation.
Ben Abbott <bpabbott@mac.com>
parents: 8674
diff changeset
3012 #else
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3013 int vw[4];
8724
a50228129dba Introduce new macro OCTAVE_GLUTESSCALLBACK_THREEDOTS. Use definitions HAVE_FRAMEWORK_OPENGL and HAVE_GLUTESSCALLBACK_THREEDOTS for Mac's framework OpenGL implementation.
Ben Abbott <bpabbott@mac.com>
parents: 8674
diff changeset
3014 #endif
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3015
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3016 glGetIntegerv (GL_VIEWPORT, vw);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3017
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3018 glMatrixMode (GL_PROJECTION);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3019 glPushMatrix ();
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3020 glLoadIdentity ();
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3021 glOrtho (0, vw[2], vw[3], 0, xZ1, xZ2);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3022 glMatrixMode (GL_MODELVIEW);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3023 glPushMatrix ();
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3024
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3025 set_clipping (false);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3026 set_linewidth (width);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3027
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3028 marker_id = make_marker_list (m, size, false);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3029 filled_marker_id = make_marker_list (m, size, true);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3030 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3031
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3032 void
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3033 opengl_renderer::end_marker (void)
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3034 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3035 glDeleteLists (marker_id, 1);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3036 glDeleteLists (filled_marker_id, 1);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3037
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3038 glMatrixMode (GL_MODELVIEW);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3039 glPopMatrix ();
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3040 glMatrixMode (GL_PROJECTION);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3041 glPopMatrix ();
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3042 set_linewidth (0.5f);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3043 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3044
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3045 void
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3046 opengl_renderer::draw_marker (double x, double y, double z,
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
3047 const Matrix& lc, const Matrix& fc)
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3048 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3049 ColumnVector tmp = xform.transform (x, y, z, false);
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
3050
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3051 glLoadIdentity ();
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3052 glTranslated (tmp(0), tmp(1), -tmp(2));
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3053
7907
c350329da645 Implement basic line antialiasing
John W. Eaton <jwe@octave.org>
parents: 7906
diff changeset
3054 if (filled_marker_id > 0 && fc.numel () > 0)
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3055 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3056 glColor3dv (fc.data ());
7906
b3becd212f3f Draw markers above lines
John W. Eaton <jwe@octave.org>
parents: 7904
diff changeset
3057 set_polygon_offset (true, -1.0);
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3058 glCallList (filled_marker_id);
7906
b3becd212f3f Draw markers above lines
John W. Eaton <jwe@octave.org>
parents: 7904
diff changeset
3059 if (lc.numel () > 0)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
3060 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
3061 glColor3dv (lc.data ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
3062 glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
3063 glEdgeFlag (GL_TRUE);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
3064 set_polygon_offset (true, -2.0);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
3065 glCallList (filled_marker_id);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
3066 glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
3067 }
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3068 set_polygon_offset (false);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3069 }
7907
c350329da645 Implement basic line antialiasing
John W. Eaton <jwe@octave.org>
parents: 7906
diff changeset
3070 else if (marker_id > 0 && lc.numel () > 0)
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3071 {
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3072 glColor3dv (lc.data ());
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3073 glCallList (marker_id);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3074 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3075 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3076
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3077 unsigned int
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3078 opengl_renderer::make_marker_list (const std::string& marker, double size,
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
3079 bool filled) const
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3080 {
7907
c350329da645 Implement basic line antialiasing
John W. Eaton <jwe@octave.org>
parents: 7906
diff changeset
3081 char c = marker[0];
c350329da645 Implement basic line antialiasing
John W. Eaton <jwe@octave.org>
parents: 7906
diff changeset
3082
c350329da645 Implement basic line antialiasing
John W. Eaton <jwe@octave.org>
parents: 7906
diff changeset
3083 if (filled && (c == '+' || c == 'x' || c == '*' || c == '.'))
c350329da645 Implement basic line antialiasing
John W. Eaton <jwe@octave.org>
parents: 7906
diff changeset
3084 return 0;
c350329da645 Implement basic line antialiasing
John W. Eaton <jwe@octave.org>
parents: 7906
diff changeset
3085
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3086 unsigned int ID = glGenLists (1);
11576
8ac9687dbe9f rename backend to graphics_toolkit
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
3087 double sz = size * toolkit.get_screen_resolution () / 72.0;
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3088
7851
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3089 // constants for the * marker
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3090 const double sqrt2d4 = 0.35355339059327;
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3091 double tt = sz*sqrt2d4;
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3092
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3093 glNewList (ID, GL_COMPILE);
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3094
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3095 switch (marker[0])
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3096 {
7851
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3097 case '+':
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3098 glBegin (GL_LINES);
18769
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3099 glVertex2d (-sz/2, 0);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3100 glVertex2d (sz/2, 0);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3101 glVertex2d (0, -sz/2);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3102 glVertex2d (0, sz/2);
7851
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3103 glEnd ();
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3104 break;
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3105 case 'x':
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
3106 glBegin (GL_LINES);
18769
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3107 glVertex2d (-sz/2, -sz/2);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3108 glVertex2d (sz/2, sz/2);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3109 glVertex2d (-sz/2, sz/2);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3110 glVertex2d (sz/2, -sz/2);
7851
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3111 glEnd ();
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3112 break;
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3113 case '*':
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3114 glBegin (GL_LINES);
18769
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3115 glVertex2d (-sz/2, 0);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3116 glVertex2d (sz/2, 0);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3117 glVertex2d (0, -sz/2);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3118 glVertex2d (0, sz/2);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3119 glVertex2d (-tt, -tt);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3120 glVertex2d (+tt, +tt);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3121 glVertex2d (-tt, +tt);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3122 glVertex2d (+tt, -tt);
7851
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3123 glEnd ();
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3124 break;
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3125 case '.':
10924
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3126 {
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3127 double ang_step = M_PI / 5;
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3128
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3129 glBegin (GL_POLYGON);
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3130 for (double ang = 0; ang < (2*M_PI); ang += ang_step)
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
3131 glVertex2d (sz*cos (ang)/3, sz*sin (ang)/3);
10924
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3132 glEnd ();
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3133 }
7851
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3134 break;
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3135 case 's':
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3136 glBegin ((filled ? GL_POLYGON : GL_LINE_LOOP));
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3137 glVertex2d (-sz/2, -sz/2);
9681
40775386ab58 gl-render.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 9680
diff changeset
3138 glVertex2d (-sz/2, sz/2);
40775386ab58 gl-render.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 9680
diff changeset
3139 glVertex2d (sz/2, sz/2);
40775386ab58 gl-render.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 9680
diff changeset
3140 glVertex2d (sz/2, -sz/2);
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14838
diff changeset
3141 glEnd ();
7851
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3142 break;
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3143 case 'o':
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3144 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
3145 double ang_step = M_PI / 5;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
3146
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
3147 glBegin ((filled ? GL_POLYGON : GL_LINE_LOOP));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
3148 for (double ang = 0; ang < (2*M_PI); ang += ang_step)
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
3149 glVertex2d (sz*cos (ang)/2, sz*sin (ang)/2);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
3150 glEnd ();
7851
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3151 }
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3152 break;
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3153 case 'd':
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3154 glBegin ((filled ? GL_POLYGON : GL_LINE_LOOP));
9681
40775386ab58 gl-render.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 9680
diff changeset
3155 glVertex2d (0, -sz/2);
40775386ab58 gl-render.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 9680
diff changeset
3156 glVertex2d (sz/2, 0);
40775386ab58 gl-render.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 9680
diff changeset
3157 glVertex2d (0, sz/2);
40775386ab58 gl-render.cc: style fixes
John W. Eaton <jwe@octave.org>
parents: 9680
diff changeset
3158 glVertex2d (-sz/2, 0);
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14838
diff changeset
3159 glEnd ();
7851
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3160 break;
10835
4bbd6f75f173 gl-render.cc: Transpose markers '^' and 'v'.
Ben Abbott <bpabbott@mac.com>
parents: 10402
diff changeset
3161 case 'v':
7851
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3162 glBegin ((filled ? GL_POLYGON : GL_LINE_LOOP));
18769
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3163 glVertex2d (0, sz/2);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3164 glVertex2d (sz/2, -sz/2);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3165 glVertex2d (-sz/2, -sz/2);
7851
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3166 glEnd ();
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3167 break;
10835
4bbd6f75f173 gl-render.cc: Transpose markers '^' and 'v'.
Ben Abbott <bpabbott@mac.com>
parents: 10402
diff changeset
3168 case '^':
7851
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3169 glBegin ((filled ? GL_POLYGON : GL_LINE_LOOP));
18769
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3170 glVertex2d (0, -sz/2);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3171 glVertex2d (-sz/2, sz/2);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3172 glVertex2d (sz/2, sz/2);
7851
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3173 glEnd ();
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3174 break;
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3175 case '>':
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3176 glBegin ((filled ? GL_POLYGON : GL_LINE_LOOP));
18769
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3177 glVertex2d (sz/2, 0);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3178 glVertex2d (-sz/2, sz/2);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3179 glVertex2d (-sz/2, -sz/2);
7851
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3180 glEnd ();
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3181 break;
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3182 case '<':
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3183 glBegin ((filled ? GL_POLYGON : GL_LINE_LOOP));
18769
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3184 glVertex2d (-sz/2, 0);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3185 glVertex2d (sz/2, -sz/2);
ff39ddf84a19 * gl-render.cc (opengl_renderer::make_marker_list): Replace glVertex2f with
Rik <rik@octave.org>
parents: 18768
diff changeset
3186 glVertex2d (sz/2, sz/2);
7851
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3187 glEnd ();
7906
b3becd212f3f Draw markers above lines
John W. Eaton <jwe@octave.org>
parents: 7904
diff changeset
3188 break;
10924
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3189 case 'p':
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3190 {
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3191 double ang;
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3192 double r;
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
3193 double dr = 1.0 - sin (M_PI/10)/sin (3*M_PI/10)*1.02;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
3194
10924
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3195 glBegin ((filled ? GL_POLYGON : GL_LINE_LOOP));
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3196 for (int i = 0; i < 2*5; i++)
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3197 {
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3198 ang = (-0.5 + double(i+1)/5) * M_PI;
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
3199 r = 1.0 - (dr * fmod (double(i+1), 2.0));
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
3200 glVertex2d (sz*r*cos (ang)/2, sz*r*sin (ang)/2);
10924
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3201 }
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3202 glEnd ();
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3203 }
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3204 break;
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3205 case 'h':
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3206 {
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3207 double ang;
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3208 double r;
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
3209 double dr = 1.0 - 0.5/sin (M_PI/3)*1.02;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11585
diff changeset
3210
10924
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3211 glBegin ((filled ? GL_POLYGON : GL_LINE_LOOP));
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3212 for (int i = 0; i < 2*6; i++)
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3213 {
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3214 ang = (0.5 + double(i+1)/6.0) * M_PI;
14861
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
3215 r = 1.0 - (dr * fmod (double(i+1), 2.0));
f7afecdd87ef maint: Use Octave coding conventions for cuddling parentheses in src/ directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
3216 glVertex2d (sz*r*cos (ang)/2, sz*r*sin (ang)/2);
10924
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3217 }
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3218 glEnd ();
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3219 }
f56255a2b890 gl-render.cc: Matlab compatible markers for the OpenGL.
Ben Abbott <bpabbott@mac.com>
parents: 10835
diff changeset
3220 break;
7851
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3221 default:
18677
f684f7075aee Don't fetch lots of axes state information for rendering if object is not visible.
Rik <rik@octave.org>
parents: 18667
diff changeset
3222 warning ("opengl_renderer: unsupported marker '%s'", marker.c_str ());
7851
002b1d8460d2 added some more markers
Shai Ayal <shaiay@users.sourceforge.net>
parents: 7846
diff changeset
3223 break;
7825
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3224 }
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3225
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3226 glEndList ();
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3227
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3228 return ID;
13871b7de124 Import sources for OpenGL-based renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff changeset
3229 }
7874
e3a502930e2a eliminate src/graphics subdirectory
John W. Eaton <jwe@octave.org>
parents: 7870
diff changeset
3230
9834
92d8f35ff217 compute bounding boxes for text in opengl graphics backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9798
diff changeset
3231 void
92d8f35ff217 compute bounding boxes for text in opengl graphics backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9798
diff changeset
3232 opengl_renderer::text_to_pixels (const std::string& txt,
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
3233 uint8NDArray& pixels,
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10202
diff changeset
3234 Matrix& bbox,
11455
2be9e22796d2 improvements in text-extent calculation
Konstantinos Poulios <logari81@googlemail.com>
parents: 11385
diff changeset
3235 int halign, int valign, double rotation)
9403
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
3236 {
21209
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3237 txt_renderer.text_to_pixels (txt, pixels, bbox, halign, valign,
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3238 rotation, interpreter);
9834
92d8f35ff217 compute bounding boxes for text in opengl graphics backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9798
diff changeset
3239 }
92d8f35ff217 compute bounding boxes for text in opengl graphics backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9798
diff changeset
3240
20623
2be59ab36110 Add method in gl_render to get a list of parsed ft_string (bug #31468)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20285
diff changeset
3241 void
2be59ab36110 Add method in gl_render to get a list of parsed ft_string (bug #31468)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20285
diff changeset
3242 opengl_renderer::text_to_strlist (const std::string& txt,
21209
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3243 std::list<text_renderer::string>& lst,
20623
2be59ab36110 Add method in gl_render to get a list of parsed ft_string (bug #31468)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20285
diff changeset
3244 Matrix& bbox,
2be59ab36110 Add method in gl_render to get a list of parsed ft_string (bug #31468)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20285
diff changeset
3245 int halign, int valign, double rotation)
2be59ab36110 Add method in gl_render to get a list of parsed ft_string (bug #31468)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20285
diff changeset
3246 {
21209
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3247 txt_renderer.text_to_strlist (txt, lst, bbox, halign, valign,
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3248 rotation, interpreter);
20623
2be59ab36110 Add method in gl_render to get a list of parsed ft_string (bug #31468)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20285
diff changeset
3249 }
2be59ab36110 Add method in gl_render to get a list of parsed ft_string (bug #31468)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20285
diff changeset
3250
9834
92d8f35ff217 compute bounding boxes for text in opengl graphics backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9798
diff changeset
3251 Matrix
92d8f35ff217 compute bounding boxes for text in opengl graphics backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9798
diff changeset
3252 opengl_renderer::render_text (const std::string& txt,
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
3253 double x, double y, double z,
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
3254 int halign, int valign, double rotation)
9834
92d8f35ff217 compute bounding boxes for text in opengl graphics backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9798
diff changeset
3255 {
21209
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3256 Matrix bbox (1, 4, 0.0);
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3257
9834
92d8f35ff217 compute bounding boxes for text in opengl graphics backend
Shai Ayal <shaiay@users.sourceforge.net>
parents: 9798
diff changeset
3258 if (txt.empty ())
21209
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3259 return bbox;
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3260
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3261 if (txt_renderer.ok ())
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3262 {
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3263 uint8NDArray pixels;
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3264 text_to_pixels (txt, pixels, bbox, halign, valign, rotation);
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3265
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3266 bool blend = glIsEnabled (GL_BLEND);
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3267
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3268 glEnable (GL_BLEND);
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3269 glEnable (GL_ALPHA_TEST);
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3270 glRasterPos3d (x, y, z);
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3271 glBitmap(0, 0, 0, 0, bbox(0), bbox(1), 0);
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3272 glDrawPixels (bbox(2), bbox(3),
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3273 GL_RGBA, GL_UNSIGNED_BYTE, pixels.data ());
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3274 glDisable (GL_ALPHA_TEST);
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3275
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3276 if (! blend)
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3277 glDisable (GL_BLEND);
67d2965af0b5 revamp text rendering classes
John W. Eaton <jwe@octave.org>
parents: 21200
diff changeset
3278 }
9403
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
3279
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
3280 return bbox;
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
3281 }
4af6e29449c1 [mq]: graphics_text_engine
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
3282
7954
3ffc34caec65 configure fixes
John W. Eaton <jwe@octave.org>
parents: 7924
diff changeset
3283 #endif