home *** CD-ROM | disk | FTP | other *** search
/ Hackers Magazine 57 / CdHackersMagazineNr57.iso / Software / Multimedia / k3d-setup-0.7.11.0.exe / include / k3d / k3dsdk / utility_gl.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-22  |  3.5 KB  |  138 lines

  1. #ifndef K3DSDK_UTILITY_GL_H
  2. #define K3DSDK_UTILITY_GL_H
  3.  
  4. // K-3D
  5. // Copyright (c) 1995-2006, Timothy M. Shead
  6. //
  7. // Contact: tshead@k-3d.com
  8. //
  9. // This program is free software; you can redistribute it and/or
  10. // modify it under the terms of the GNU General Public
  11. // License as published by the Free Software Foundation; either
  12. // version 2 of the License, or (at your option) any later version.
  13. //
  14. // This program is distributed in the hope that it will be useful,
  15. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  17. // General Public License for more details.
  18. //
  19. // You should have received a copy of the GNU General Public
  20. // License along with this program; if not, write to the Free Software
  21. // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  22.  
  23. /** \file
  24.         \author Tim Shead (tshead@k-3d.com)
  25. */
  26.  
  27. #include "algebra.h"
  28. #include "bitmap.h"
  29. #include "color.h"
  30. #include "gl.h"
  31. #include "irender_viewport_gl.h"
  32.  
  33. namespace k3d
  34. {
  35.  
  36. class bounding_box3;
  37. class idocument;
  38. class plane;
  39.  
  40. namespace gl
  41. {
  42.  
  43. /// Converts an OpenGL matrix into a standard K-3D matrix
  44. inline const matrix4 matrix(GLdouble* GLMatrix)
  45. {
  46.     matrix4 result;
  47.     memcpy(&result[0][0], &GLMatrix[0], 16 * sizeof(GLdouble));
  48.     return transpose(result);
  49. }
  50.  
  51. /// Pushes a matrix onto the OpenGL matrix stack
  52. inline void push_matrix(const matrix4& Matrix)
  53. {
  54.     double glmatrix[16];
  55.     transpose(Matrix).CopyArray(glmatrix);
  56.     glMultMatrixd(glmatrix);
  57. }
  58.  
  59. /// Passes a k3d::point4 to glVertex4d()
  60. inline void vertex4d(const point4& Vertex)
  61. {
  62.     glVertex4d(Vertex.n[0], Vertex.n[1], Vertex.n[2], Vertex.n[3]);
  63. }
  64.  
  65. /// Passes a k3d::point3 to glVertex3d()
  66. inline void vertex3d(const point3& Vertex)
  67. {
  68.     glVertex3d(Vertex.n[0], Vertex.n[1], Vertex.n[2]);
  69. }
  70.  
  71. /// Passes a k3d::vector3 to glNormal3d()
  72. inline void normal3d(const vector3& Vector)
  73. {
  74.     glNormal3d(Vector.n[0], Vector.n[1], Vector.n[2]);
  75. }
  76.  
  77. /// Passes a k3d::normal3 to glNormal3d()
  78. inline void normal3d(const normal3& Vector)
  79. {
  80.     glNormal3d(Vector.n[0], Vector.n[1], Vector.n[2]);
  81. }
  82.  
  83. /// Passes a k3d::color to glColor3d()
  84. inline void color3d(const color& Color)
  85. {
  86.     glColor3d(Color.red, Color.green, Color.blue);
  87. }
  88.  
  89. /// Passes a k3d::color to glMaterialfv()
  90. inline void material(GLenum Face, GLenum PName, const color& Color, double Alpha = 1.0)
  91. {
  92.     GLfloat color[] = { Color.red, Color.green, Color.blue, Alpha };
  93.     glMaterialfv(Face, PName, color);
  94. }
  95.  
  96. /// Sets an OpenGL state flag
  97. inline void set(GLenum Flag, const bool State)
  98. {
  99.     if(State)
  100.         glEnable(Flag);
  101.     else
  102.         glDisable(Flag);
  103. }
  104.  
  105. /// Provides exception- and return-safe RAII behavior for saving / restoring OpenGL attributes
  106. struct store_attributes
  107. {
  108.     store_attributes(const GLbitfield Mask = GL_ALL_ATTRIB_BITS)
  109.     {
  110.         glPushAttrib(Mask);
  111.     }
  112.  
  113.     ~store_attributes()
  114.     {
  115.         glPopAttrib();
  116.     }
  117. };
  118.  
  119. /// Convenience function for refreshing all OpenGL render engines
  120. void redraw_all(idocument& Document, const irender_viewport::redraw_type_t RedrawType);
  121. /// Convenience function for setting-up materials
  122. void setup_material(iunknown* const Material);
  123. /// Draws a 1x1 plane
  124. void draw(const plane& Plane);
  125. /// Draws a box
  126. void draw(const bounding_box3& Box);
  127. /// Draws a standard bounding box to make it easier to visualize an object
  128. void draw_bounding_box(const bounding_box3& Box);
  129. /// Passes a k3d::bitmap to glTexImage2D(), handling non-power-of-two sizes and translations between image formats
  130. void tex_image_2d(const bitmap& Bitmap);
  131.  
  132. } // namespace gl
  133.  
  134. } // namespace k3d
  135.  
  136. #endif // !K3DSDK_UTILITY_GL_H
  137.  
  138.