Mercurial > octave
changeset 21797:e5f083f9704e
eliminate some duplicate code in gl-render.cc
* gl-render.h, gl-render.cc (opengl_renderer::set_normal):
New function.
(opengl_renderer::draw_surface): Use it to eliminate duplicate code
blocks.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 30 May 2016 10:44:24 -0400 |
parents | 6c8c18f49eed |
children | 12e7456f7619 |
files | libinterp/corefcn/gl-render.cc libinterp/corefcn/gl-render.h |
diffstat | 2 files changed, 51 insertions(+), 113 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/corefcn/gl-render.cc Wed Jun 01 12:30:19 2016 -0500 +++ b/libinterp/corefcn/gl-render.cc Mon May 30 10:44:24 2016 -0400 @@ -1947,7 +1947,6 @@ float se = props.get_specularexponent () * 5; // to fit Matlab float scr = props.get_specularcolorreflectance (); float cb[4] = { 0.0, 0.0, 0.0, 1.0 }; - double d = 1.0; opengl_texture tex; @@ -2085,20 +2084,8 @@ } } if (fl_mode > 0) - { - d = sqrt (n(j-1,i-1,0) * n(j-1,i-1,0) - + n(j-1,i-1,1) * n(j-1,i-1,1) - + n(j-1,i-1,2) * n(j-1,i-1,2)); - double dir = 1.0; - if (bfl_mode > 0) - dir = ((n(j-1,i-1,0) * view_vector(0) - + n(j-1,i-1,1) * view_vector(1) - + n(j-1,i-1,2) * view_vector(2) < 0) - ? ((bfl_mode > 1) ? 0.0 : -1.0) : 1.0); - glNormal3d (dir * n(j-1,i-1,0)/d, - dir * n(j-1,i-1,1)/d, - dir * n(j-1,i-1,2)/d); - } + set_normal (bfl_mode, n, j-1, i-1); + glVertex3d (x(j1,i-1), y(j-1,i1), z(j-1,i-1)); // Vertex 2 @@ -2127,20 +2114,7 @@ } if (fl_mode == GOURAUD) - { - d = sqrt (n(j-1,i,0) * n(j-1,i,0) - + n(j-1,i,1) * n(j-1,i,1) - + n(j-1,i,2) * n(j-1,i,2)); - double dir = 1.0; - if (bfl_mode > 0) - dir = ((n(j-1,i,0) * view_vector(0) - + n(j-1,i,1) * view_vector(1) - + n(j-1,i,2) * view_vector(2) < 0) - ? ((bfl_mode > 1) ? 0.0 : -1.0) : 1.0); - glNormal3d (dir * n(j-1,i,0)/d, - dir * n(j-1,i,1)/d, - dir * n(j-1,i,2)/d); - } + set_normal (bfl_mode, n, j-1, i); glVertex3d (x(j1,i), y(j-1,i2), z(j-1,i)); @@ -2169,20 +2143,8 @@ } } if (fl_mode == GOURAUD) - { - d = sqrt (n(j,i,0) * n(j,i,0) - + n(j,i,1) * n(j,i,1) - + n(j,i,2) * n(j,i,2)); - double dir = 1.0; - if (bfl_mode > 0) - dir = ((n(j,i,0) * view_vector(0) - + n(j,i,1) * view_vector(1) - + n(j,i,2) * view_vector(2) < 0) - ? ((bfl_mode > 1) ? 0.0 : -1.0) : 1.0); - glNormal3d (dir * n(j,i,0)/d, - dir * n(j,i,1)/d, - dir * n(j,i,2)/d); - } + set_normal (bfl_mode, n, j, i); + glVertex3d (x(j2,i), y(j,i2), z(j,i)); // Vertex 4 @@ -2210,20 +2172,8 @@ } } if (fl_mode == GOURAUD) - { - d = sqrt (n(j,i-1,0) * n(j,i-1,0) - + n(j,i-1,1) * n(j,i-1,1) - + n(j,i-1,2) * n(j,i-1,2)); - double dir = 1.0; - if (bfl_mode > 0) - dir = ((n(j,i-1,0) * view_vector(0) - + n(j,i-1,1) * view_vector(1) - + n(j,i-1,2) * view_vector(2) < 0) - ? ((bfl_mode > 1) ? 0.0 : -1.0) : 1.0); - glNormal3d (dir * n(j,i-1,0)/d, - dir * n(j,i-1,1)/d, - dir * n(j,i-1,2)/d); - } + set_normal (bfl_mode, n, j, i-1); + glVertex3d (x(j2,i-1), y(j,i1), z(j,i-1)); glEnd (); @@ -2335,20 +2285,8 @@ } } if (el_mode > 0) - { - d = sqrt (n(j-1,i,0) * n(j-1,i,0) - + n(j-1,i,1) * n(j-1,i,1) - + n(j-1,i,2) * n(j-1,i,2)); - double dir = 1.0; - if (bfl_mode > 0) - dir = ((n(j-1,i,0) * view_vector(0) - + n(j-1,i,1) * view_vector(1) - + n(j-1,i,2) * view_vector(2) < 0) - ? ((bfl_mode > 1) ? 0.0 : -1.0) : 1.0); - glNormal3d (dir * n(j-1,i,0)/d, - dir * n(j-1,i,1)/d, - dir * n(j-1,i,2)/d); - } + set_normal (bfl_mode, n, j-1, i); + glVertex3d (x(j1,i), y(j-1,i2), z(j-1,i)); // Vertex 2 @@ -2374,20 +2312,8 @@ } } if (el_mode == GOURAUD) - { - d = sqrt (n(j,i,0) * n(j,i,0) - + n(j,i,1) * n(j,i,1) - + n(j,i,2) * n(j,i,2)); - double dir = 1.0; - if (bfl_mode > 0) - dir = ((n(j,i,0) * view_vector(0) - + n(j,i,1) * view_vector(1) - + n(j,i,2) * view_vector(2) < 0) - ? ((bfl_mode > 1) ? 0.0 : -1.0) : 1.0); - glNormal3d (dir * n(j,i,0)/d, - dir * n(j,i,1)/d, - dir * n(j,i,2)/d); - } + set_normal (bfl_mode, n, j, i); + glVertex3d (x(j2,i), y(j,i2), z(j,i)); glEnd (); @@ -2456,20 +2382,8 @@ } } if (el_mode > 0) - { - d = sqrt (n(j,i-1,0) * n(j,i-1,0) - + n(j,i-1,1) * n(j,i-1,1) - + n(j,i-1,2) * n(j,i-1,2)); - double dir = 1.0; - if (bfl_mode > 0) - dir = ((n(j,i-1,0) * view_vector(0) - + n(j,i-1,1) * view_vector(1) - + n(j,i-1,2) * view_vector(2) < 0) - ? ((bfl_mode > 1) ? 0.0 : -1.0) : 1.0); - glNormal3d (dir * n(j,i-1,0)/d, - dir * n(j,i-1,1)/d, - dir * n(j,i-1,2)/d); - } + set_normal (bfl_mode, n, j, i-1); + glVertex3d (x(j2,i-1), y(j,i1), z(j,i-1)); // Vertex 2 @@ -2495,20 +2409,8 @@ } } if (el_mode == GOURAUD) - { - d = sqrt (n(j,i,0) * n(j,i,0) - + n(j,i,1) * n(j,i,1) - + n(j,i,2) * n(j,i,2)); - double dir = 1.0; - if (bfl_mode > 0) - dir = ((n(j,i,0) * view_vector(0) - + n(j,i,1) * view_vector(1) - + n(j,i,2) * view_vector(2) < 0) - ? ((bfl_mode > 1) ? 0.0 : -1.0) : 1.0); - glNormal3d (dir * n(j,i,0)/d, - dir * n(j,i,1)/d, - dir * n(j,i,2)/d); - } + set_normal (bfl_mode, n, j, i); + glVertex3d (x(j2,i), y(j,i2), z(j,i)); glEnd (); @@ -3750,6 +3652,40 @@ #endif } +void +opengl_renderer::set_normal (int bfl_mode, const NDArray& n, int j, int i) +{ +#if defined (HAVE_OPENGL) + + double x = n(j,i,0); + double y = n(j,i,1); + double z = n(j,i,2); + + double d = sqrt (x*x + y*y + z*z); + + double dir = 1.0; + + if (bfl_mode > 0) + dir = ((x * view_vector(0) + y * view_vector(1) + z * view_vector(2) < 0) + ? ((bfl_mode > 1) ? 0.0 : -1.0) : 1.0); + + glNormal3d (dir*x/d, dir*y/d, dir*z/d); + +#else + + octave_unused_parameter (bfl_mode); + octave_unused_parameter (n); + octave_unused_parameter (j); + octave_unused_parameter (i); + + // This shouldn't happen because construction of opengl_renderer + // objects is supposed to be impossible if OpenGL is not available. + + panic_impossible (); + +#endif +} + unsigned int opengl_renderer::make_marker_list (const std::string& marker, double size, bool filled) const
--- a/libinterp/corefcn/gl-render.h Wed Jun 01 12:30:19 2016 -0500 +++ b/libinterp/corefcn/gl-render.h Mon May 30 10:44:24 2016 -0400 @@ -154,6 +154,8 @@ | (is_nan_or_inf (x, y, z) ? 0 : 1) << 6); } + void set_normal (int bfl_mode, const NDArray& n, int j, int i); + unsigned int make_marker_list (const std::string& m, double size, bool filled) const;