root/OpenSceneGraph/trunk/include/osg/GLU @ 11828

Revision 11828, 7.8 kB (checked in by robert, 4 years ago)

Introduced new gluScaleImage function that uses a PixelStorageModes? structure to pass in details on image packing,
rather than relying upon glGet's to get the values.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2 *
3 * This library is open source and may be redistributed and/or modified under 
4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5 * (at your option) any later version.  The full license is in LICENSE file
6 * included with this distribution, and on the openscenegraph.org website.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 * OpenSceneGraph Public License for more details.
12*/
13
14#ifndef OSG_GLU
15#define OSG_GLU 1
16
17#include <osg/GL>
18
19/* Pixel storage modes, used by gluScaleImage */
20struct OSG_EXPORT PixelStorageModes
21{
22    // sets defaults as per glGet docs in OpenGL red book
23    PixelStorageModes();
24
25    // use glGet's to retrieve all the current settings
26    void retrieveStoreModes();
27
28    // use glGet's to retrieve all the current 3D settings
29    void retrieveStoreModes3D();
30
31    GLint pack_alignment;
32    GLint pack_row_length;
33    GLint pack_skip_rows;
34    GLint pack_skip_pixels;
35    GLint pack_lsb_first;
36    GLint pack_swap_bytes;
37    GLint pack_skip_images;
38    GLint pack_image_height;
39
40    GLint unpack_alignment;
41    GLint unpack_row_length;
42    GLint unpack_skip_rows;
43    GLint unpack_skip_pixels;
44    GLint unpack_lsb_first;
45    GLint unpack_swap_bytes;
46    GLint unpack_skip_images;
47    GLint unpack_image_height;
48} ;
49
50extern OSG_EXPORT const GLubyte * gluErrorString (GLenum error);
51
52/** OSG specific gluScaleImage function that allows you to pass in the PixelStoreModes, which
53  * enables the code to avoid glGet's that are associated with the conventional gluScaleImage function.
54  * Avoiding glGet's allows this gluScaleImage function to be called at any time, from any thread, there
55  * is no need to have a graphics context current.*/
56extern OSG_EXPORT GLint gluScaleImage (PixelStorageModes* psm, GLenum format, GLsizei wIn, GLsizei hIn, GLenum typeIn, const void *dataIn, GLsizei wOut, GLsizei hOut, GLenum typeOut, GLvoid* dataOut);
57
58/** Traditional GLU gluScaleImage function that sets up the PixelStoreModes automatically by doing glGets.;
59  * The use of glGet's means that you can only call this function from a thread with a valid graphics context.
60  * The use of glGet's will also result in lower performance due to the round trip to the OpenGL driver.*/
61extern OSG_EXPORT GLint gluScaleImage (GLenum format, GLsizei wIn, GLsizei hIn, GLenum typeIn, const void *dataIn, GLsizei wOut, GLsizei hOut, GLenum typeOut, GLvoid* dataOut);
62
63extern OSG_EXPORT GLint gluBuild1DMipmapLevels (GLenum target, GLint internalFormat, GLsizei width, GLenum format, GLenum type, GLint level, GLint base, GLint max, const void *data);
64extern OSG_EXPORT GLint gluBuild1DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLenum format, GLenum type, const void *data);
65extern OSG_EXPORT GLint gluBuild2DMipmapLevels (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint level, GLint base, GLint max, const void *data);
66extern OSG_EXPORT GLint gluBuild2DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *data);
67extern OSG_EXPORT GLint gluBuild3DMipmapLevels (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLint level, GLint base, GLint max, const void *data);
68extern OSG_EXPORT GLint gluBuild3DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data);
69
70/* ErrorCode */
71#define GLU_INVALID_ENUM                   100900
72#define GLU_INVALID_VALUE                  100901
73#define GLU_OUT_OF_MEMORY                  100902
74#define GLU_INCOMPATIBLE_GL_VERSION        100903
75#define GLU_INVALID_OPERATION              100904
76
77/* Boolean */
78#define GLU_FALSE                          0
79#define GLU_TRUE                           1
80
81/* QuadricDrawStyle */
82#define GLU_POINT                          100010
83#define GLU_LINE                           100011
84#define GLU_FILL                           100012
85#define GLU_SILHOUETTE                     100013
86
87/* QuadricCallback */
88/*      GLU_ERROR */
89
90/* QuadricNormal */
91#define GLU_SMOOTH                         100000
92#define GLU_FLAT                           100001
93#define GLU_NONE                           100002
94
95/* QuadricOrientation */
96#define GLU_OUTSIDE                        100020
97#define GLU_INSIDE                         100021
98
99/* TessCallback */
100#define GLU_TESS_BEGIN                     100100
101#define GLU_BEGIN                          100100
102#define GLU_TESS_VERTEX                    100101
103#define GLU_VERTEX                         100101
104#define GLU_TESS_END                       100102
105#define GLU_END                            100102
106#define GLU_TESS_ERROR                     100103
107#define GLU_TESS_EDGE_FLAG                 100104
108#define GLU_EDGE_FLAG                      100104
109#define GLU_TESS_COMBINE                   100105
110#define GLU_TESS_BEGIN_DATA                100106
111#define GLU_TESS_VERTEX_DATA               100107
112#define GLU_TESS_END_DATA                  100108
113#define GLU_TESS_ERROR_DATA                100109
114#define GLU_TESS_EDGE_FLAG_DATA            100110
115#define GLU_TESS_COMBINE_DATA              100111
116
117/* TessContour */
118#define GLU_CW                             100120
119#define GLU_CCW                            100121
120#define GLU_INTERIOR                       100122
121#define GLU_EXTERIOR                       100123
122#define GLU_UNKNOWN                        100124
123
124/* TessProperty */
125#define GLU_TESS_WINDING_RULE              100140
126#define GLU_TESS_BOUNDARY_ONLY             100141
127#define GLU_TESS_TOLERANCE                 100142
128
129/* TessError */
130#define GLU_TESS_ERROR1                    100151
131#define GLU_TESS_ERROR2                    100152
132#define GLU_TESS_ERROR3                    100153
133#define GLU_TESS_ERROR4                    100154
134#define GLU_TESS_ERROR5                    100155
135#define GLU_TESS_ERROR6                    100156
136#define GLU_TESS_ERROR7                    100157
137#define GLU_TESS_ERROR8                    100158
138#define GLU_TESS_MISSING_BEGIN_POLYGON     100151
139#define GLU_TESS_MISSING_BEGIN_CONTOUR     100152
140#define GLU_TESS_MISSING_END_POLYGON       100153
141#define GLU_TESS_MISSING_END_CONTOUR       100154
142#define GLU_TESS_COORD_TOO_LARGE           100155
143#define GLU_TESS_NEED_COMBINE_CALLBACK     100156
144
145/* TessWinding */
146#define GLU_TESS_WINDING_ODD               100130
147#define GLU_TESS_WINDING_NONZERO           100131
148#define GLU_TESS_WINDING_POSITIVE          100132
149#define GLU_TESS_WINDING_NEGATIVE          100133
150#define GLU_TESS_WINDING_ABS_GEQ_TWO       100134
151
152struct GLUtesselator;
153typedef GLUtesselator GLUtesselatorObj;
154typedef GLUtesselator GLUtriangulatorObj;
155
156#define GLU_TESS_MAX_COORD 1.0e150
157
158/* Internal convenience typedefs */
159typedef void (GL_APIENTRY * _GLUfuncptr)();
160typedef void (GL_APIENTRY * GLU_TESS_CALLBACK)();
161
162extern OSG_EXPORT GLUtesselator* gluNewTess (void);
163extern OSG_EXPORT void gluDeleteTess (GLUtesselator* tess);
164
165extern OSG_EXPORT void gluTessBeginContour (GLUtesselator* tess);
166extern OSG_EXPORT void gluTessBeginPolygon (GLUtesselator* tess, GLvoid* data);
167extern OSG_EXPORT void gluTessCallback (GLUtesselator* tess, GLenum which, _GLUfuncptr CallBackFunc);
168extern OSG_EXPORT void gluTessEndContour (GLUtesselator* tess);
169extern OSG_EXPORT void gluTessEndPolygon (GLUtesselator* tess);
170extern OSG_EXPORT void gluTessNormal (GLUtesselator* tess, GLdouble valueX, GLdouble valueY, GLdouble valueZ);
171extern OSG_EXPORT void gluTessProperty (GLUtesselator* tess, GLenum which, GLdouble data);
172extern OSG_EXPORT void gluTessVertex (GLUtesselator* tess, GLdouble *location, GLvoid* data);
173
174
175#endif  // __osgGLU_h
Note: See TracBrowser for help on using the browser.