Go to the documentation of this file.00001
00002 #ifndef vgui_matrix_state_h_
00003 #define vgui_matrix_state_h_
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include <vcl_iosfwd.h>
00019 #include <vgui/vgui_gl.h>
00020 #include <vnl/vnl_fwd.h>
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 class vgui_matrix_state
00032 {
00033
00034 double P[16];
00035 double M[16];
00036 bool restore_on_destroy;
00037
00038 public:
00039 vgui_matrix_state(bool save_now_restore_on_destroy = true);
00040 ~vgui_matrix_state();
00041
00042 void save();
00043 void restore() const;
00044 void print(vcl_ostream& );
00045
00046
00047 static void identity_gl_matrices();
00048 static void clear_gl_matrices();
00049 static void zero_out_gl_matrices() { clear_gl_matrices(); }
00050
00051
00052 static bool gl_matrices_are_cleared();
00053 static vnl_matrix_fixed<double,4,4> projection_matrix();
00054 static vnl_matrix_fixed<double,4,4> modelview_matrix();
00055 static vnl_matrix_fixed<double,4,4> total_transformation();
00056
00057
00058 static void premultiply(vnl_matrix_fixed<double,4,4> const &,GLenum );
00059 static void premultiply_projection(vnl_matrix_fixed<double,4,4> const &M) { premultiply(M,GL_PROJECTION); }
00060 static void premultiply_modelview (vnl_matrix_fixed<double,4,4> const &M) { premultiply(M,GL_MODELVIEW); }
00061
00062 static void postmultiply(const vnl_matrix_fixed<double,4,4> &M,GLenum matrix);
00063 static void postmultiply_projection(vnl_matrix_fixed<double,4,4> const &M) { postmultiply(M,GL_PROJECTION); }
00064 static void postmultiply_modelview (vnl_matrix_fixed<double,4,4> const &M) { postmultiply(M,GL_MODELVIEW); }
00065 };
00066
00067 #endif // vgui_matrix_state_h_