Geogram Version 1.8.5
A programming library of geometric algorithms
Loading...
Searching...
No Matches
GLUP.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2000-2022 Inria
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * * Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution.
13 * * Neither the name of the ALICE Project-Team nor the names of its
14 * contributors may be used to endorse or promote products derived from this
15 * software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 * POSSIBILITY OF SUCH DAMAGE.
28 *
29 * Contact: Bruno Levy
30 *
31 * https://www.inria.fr/fr/bruno-levy
32 *
33 * Inria,
34 * Domaine de Voluceau,
35 * 78150 Le Chesnay - Rocquencourt
36 * FRANCE
37 *
38 */
39
40#ifndef GEOGRAM_GFX_GLUP_GLUP
41#define GEOGRAM_GFX_GLUP_GLUP
42
44#define GLUP_API GEOGRAM_GFX_API
45
46#ifdef __cplusplus
47extern "C" {
48#endif
49
60 typedef float GLUPfloat;
61 typedef double GLUPdouble;
62 typedef int GLUPint;
63 typedef unsigned int GLUPuint;
64 typedef int GLUPsizei;
65 typedef unsigned int GLUPenum;
66 typedef unsigned long int GLUPuint64;
67 typedef void GLUPvoid;
68 typedef int GLUPbitfield;
69
70 enum {
71 GLUP_FALSE=0, GLUP_TRUE = 1
72 };
73
74 typedef unsigned char GLUPboolean;
75
80 /************************************************/
81
94 GLUP_API const char* glupUniformStateDeclaration(void);
95
104 GLUP_API GLUPuint glupCompileShader(GLUPenum target, const char* source);
105
119 GLUP_API GLUPuint glupCompileProgram(const char* source);
120
124 typedef void* GLUPcontext;
125
133
138 void GLUP_API glupDeleteContext(GLUPcontext context);
139
145
152 GLUP_API const char* glupCurrentProfileName(void);
153
158 void GLUP_API glupMakeCurrent(GLUPcontext context);
159
166 void GLUP_API glupBindUniformState(GLUPuint program);
167
172 /************************************************/
173
179 typedef enum {
180 GLUP_LIGHTING =0,
181 GLUP_VERTEX_COLORS =1,
182 GLUP_TEXTURING =2,
183 GLUP_DRAW_MESH =3,
184 GLUP_CLIPPING =4,
185 GLUP_INDIRECT_TEXTURING =5,
186 GLUP_VERTEX_NORMALS =6,
187 GLUP_PICKING =7,
188 GLUP_ALPHA_DISCARD =8,
189 GLUP_NORMAL_MAPPING =9,
190 GLUP_PRIMITIVE_FILTERING =10
191 } GLUPtoggle;
192
193 void GLUP_API glupEnable(GLUPtoggle toggle);
194 void GLUP_API glupDisable(GLUPtoggle toggle);
195 GLUPboolean GLUP_API glupIsEnabled(GLUPtoggle toggle);
196
201 /************************************************/
202
217 enum {
218 GLUP_TEXTURE_1D_UNIT=0,
219 GLUP_TEXTURE_2D_UNIT=1,
220 GLUP_TEXTURE_3D_UNIT=2,
221 GLUP_TEXTURE_PRIMITIVE_FILTERING_UNIT=3
222 };
223
232 enum {
233 GLUP_TEXTURE_1D_TARGET=0x0DE1,
234 GLUP_TEXTURE_2D_TARGET=0x0DE1,
235 GLUP_TEXTURE_3D_TARGET=0x806F
236 };
237
238 typedef enum {
239 GLUP_TEXTURE_1D=1,
240 GLUP_TEXTURE_2D=2,
241 GLUP_TEXTURE_3D=3
242 } GLUPtextureType;
243
244 void GLUP_API glupTextureType(GLUPtextureType type);
245 GLUPtextureType GLUP_API glupGetTextureType(void);
246
247 typedef enum {
248 GLUP_TEXTURE_REPLACE=0,
249 GLUP_TEXTURE_MODULATE=1,
250 GLUP_TEXTURE_ADD=2
251 } GLUPtextureMode;
252
253 void GLUP_API glupTextureMode(GLUPtextureMode mode);
254 GLUPtextureMode GLUP_API glupGetTextureMode(void);
255
260 /************************************************/
261
262
269 typedef enum {
270 GLUP_FRONT_COLOR=0,
271 GLUP_BACK_COLOR=1,
272 GLUP_MESH_COLOR=2,
273 GLUP_FRONT_AND_BACK_COLOR=3
274 } GLUPcolor;
275
276 void GLUP_API glupSetColor4fv(GLUPcolor color, const GLUPfloat* rgba);
277 void GLUP_API glupGetColor4fv(GLUPcolor color, float* rgba);
278
279 void GLUP_API glupSetColor3fv(GLUPcolor color, const GLUPfloat* rgba);
280 void GLUP_API glupSetColor4f(
281 GLUPcolor color, GLUPfloat r, GLUPfloat g, GLUPfloat b, GLUPfloat a
282 );
283 void GLUP_API glupSetColor3f(
284 GLUPcolor color, GLUPfloat r, GLUPfloat g, GLUPfloat b
285 );
286 void GLUP_API glupSetColor4dv(GLUPcolor color, const GLUPdouble* rgba);
287 void GLUP_API glupSetColor3dv(GLUPcolor color, const GLUPdouble* rgba);
288 void GLUP_API glupSetColor4d(
289 GLUPcolor color, GLUPdouble r, GLUPdouble g, GLUPdouble b, GLUPdouble a
290 );
291 void GLUP_API glupSetColor3d(
292 GLUPcolor color, GLUPdouble r, GLUPdouble g, GLUPdouble b
293 );
294
295 void GLUP_API glupLightVector3f(GLUPfloat x, GLUPfloat y, GLUPfloat z);
296 void GLUP_API glupLightVector3fv(GLUPfloat* xyz);
297 void GLUP_API glupGetLightVector3fv(GLUPfloat* xyz);
298
299 void GLUP_API glupSetPointSize(GLUPfloat size);
300 GLUPfloat GLUP_API glupGetPointSize(void);
301
302 void GLUP_API glupSetMeshWidth(GLUPint width);
303 GLUPint GLUP_API glupGetMeshWidth(void);
304
305 void GLUP_API glupSetCellsShrink(GLUPfloat x);
306 GLUPfloat GLUP_API glupGetCellsShrink(void);
307
308 void GLUP_API glupSetAlphaThreshold(GLUPfloat x);
309 GLUPfloat GLUP_API glupGetAlphaThreshold(void);
310
311 void GLUP_API glupSetSpecular(GLUPfloat x);
312 GLUPfloat GLUP_API glupGetSpecular(void);
313
318 /************************************************/
319
325 typedef enum {
326 GLUP_PICK_PRIMITIVE=1,
327 GLUP_PICK_CONSTANT=2
328 } GLUPpickingMode;
329
330 void GLUP_API glupPickingMode(GLUPpickingMode mode);
331 GLUPpickingMode GLUP_API glupGetPickingMode(void);
332
333 void GLUP_API glupPickingId(GLUPuint64 id);
334 GLUPuint64 GLUP_API glupGetPickingId(void);
335
336 void GLUP_API glupBasePickingId(GLUPuint64 id);
337 GLUPuint64 GLUP_API glupGetBasePickingId(void);
338
343 /************************************************/
344
350 typedef enum {
351 GLUP_CLIP_STANDARD=0,
352 GLUP_CLIP_WHOLE_CELLS=1,
353 GLUP_CLIP_STRADDLING_CELLS=2,
354 GLUP_CLIP_SLICE_CELLS=3
355 } GLUPclipMode;
356
363 void GLUP_API glupClipMode(GLUPclipMode mode);
364
369 GLUPclipMode GLUP_API glupGetClipMode(void);
370
380 void GLUP_API glupClipPlane(const GLUPdouble* eqn);
381
387 void GLUP_API glupGetClipPlane(GLUPdouble* eqn);
388
393 /************************************************/
394
400 typedef enum {
401 GLUP_MODELVIEW_MATRIX = 0,
402 GLUP_PROJECTION_MATRIX = 1,
403 GLUP_TEXTURE_MATRIX = 2
404 } GLUPmatrix;
405
406 void GLUP_API glupMatrixMode(GLUPmatrix matrix);
407 GLUPmatrix GLUP_API glupGetMatrixMode(void);
408 void GLUP_API glupPushMatrix(void);
409 void GLUP_API glupPopMatrix(void);
410
418 void GLUP_API glupGetMatrixdv(GLUPmatrix matrix, GLUPdouble* ptr);
419
427 void GLUP_API glupGetMatrixfv(GLUPmatrix matrix, GLUPfloat* ptr);
428
429 void GLUP_API glupLoadIdentity(void);
430 void GLUP_API glupLoadMatrixf(const GLUPfloat* M);
431 void GLUP_API glupLoadMatrixd(const GLUPdouble* M);
432 void GLUP_API glupMultMatrixf(const GLUPfloat* M);
433 void GLUP_API glupMultMatrixd(const GLUPdouble* M);
434 void GLUP_API glupTranslatef(GLUPfloat x, GLUPfloat y, GLUPfloat z);
435 void GLUP_API glupTranslated(GLUPdouble x, GLUPdouble y, GLUPdouble z);
436 void GLUP_API glupScalef(GLUPfloat sx, GLUPfloat sy, GLUPfloat sz);
437 void GLUP_API glupScaled(GLUPdouble sx, GLUPdouble sy, GLUPdouble sz);
438 void GLUP_API glupRotatef(
439 GLUPfloat angle, GLUPfloat x, GLUPfloat y, GLUPfloat z
440 );
441 void GLUP_API glupRotated(
442 GLUPdouble angle, GLUPdouble x, GLUPdouble y, GLUPdouble z
443 );
444 void GLUP_API glupOrtho(
445 GLUPdouble left, GLUPdouble right,
446 GLUPdouble bottom, GLUPdouble top,
447 GLUPdouble nearVal, GLUPdouble farVal
448 );
449 void GLUP_API glupOrtho2D(
450 GLUPdouble left, GLUPdouble right, GLUPdouble bottom, GLUPdouble top
451 );
452 void GLUP_API glupFrustum(
453 GLUPdouble left, GLUPdouble right,
454 GLUPdouble bottom, GLUPdouble top,
455 GLUPdouble nearVal, GLUPdouble farVal
456 );
457 void GLUP_API glupPerspective(
458 GLUPdouble fovy, GLUPdouble aspect,
459 GLUPdouble zNear, GLUPdouble zFar
460 );
461
462 GLUPint GLUP_API glupProject(
463 GLUPdouble objx, GLUPdouble objy, GLUPdouble objz,
464 const GLUPdouble modelMatrix[16],
465 const GLUPdouble projMatrix[16],
466 const GLUPint viewport[4],
467 GLUPdouble* winx, GLUPdouble* winy, GLUPdouble* winz
468 );
469
470 GLUPboolean GLUP_API glupUnProject(
471 GLUPdouble winx, GLUPdouble winy, GLUPdouble winz,
472 const GLUPdouble modelMatrix[16],
473 const GLUPdouble projMatrix[16],
474 const GLUPint viewport[4],
475 GLUPdouble *objx, GLUPdouble *objy, GLUPdouble *objz
476 );
477
478 GLUPboolean GLUP_API glupInvertMatrixfv(
479 GLUPfloat Minvert[16],
480 const GLUPfloat M[16]
481 );
482
483 GLUPboolean GLUP_API glupInvertMatrixdv(
484 GLUPdouble Minvert[16],
485 const GLUPdouble M[16]
486 );
487
492 /************************************************/
493
504 typedef enum {
505 GLUP_POINTS =0,
506 GLUP_LINES =1,
507 GLUP_TRIANGLES =2,
508 GLUP_QUADS =3,
509 GLUP_TETRAHEDRA =4,
510 GLUP_HEXAHEDRA =5,
511 GLUP_PRISMS =6,
512 GLUP_PYRAMIDS =7,
513 GLUP_CONNECTORS =8,
514 GLUP_SPHERES =9,
515 GLUP_NB_PRIMITIVES = 10
517
527
528 void GLUP_API glupDrawArrays(
529 GLUPprimitive primitive, GLUPint first, GLUPsizei count
530 );
531
532 void GLUP_API glupDrawElements(
533 GLUPprimitive primitive, GLUPsizei count,
534 GLUPenum type, const GLUPvoid* indices
535 );
536
537 void GLUP_API glupBegin(GLUPprimitive primitive);
538 void GLUP_API glupEnd(void);
539
540 void GLUP_API glupVertex2fv(const GLUPfloat* xy);
541 void GLUP_API glupVertex3fv(const GLUPfloat* xyz);
542 void GLUP_API glupVertex4fv(const GLUPfloat* xyzw);
543
544 void GLUP_API glupVertex2dv(const GLUPdouble* xy);
545 void GLUP_API glupVertex3dv(const GLUPdouble* xyz);
546 void GLUP_API glupVertex4dv(const GLUPdouble* xyzw);
547
548 void GLUP_API glupVertex2f(GLUPfloat x, GLUPfloat y);
549 void GLUP_API glupVertex3f(GLUPfloat x, GLUPfloat y, GLUPfloat z);
550 void GLUP_API glupVertex4f(
551 GLUPfloat x, GLUPfloat y, GLUPfloat z, GLUPfloat w
552 );
553
554 void GLUP_API glupVertex2d(GLUPdouble x, GLUPdouble y);
555 void GLUP_API glupVertex3d(GLUPdouble x, GLUPdouble y, GLUPdouble z);
556 void GLUP_API glupVertex4d(
557 GLUPdouble x, GLUPdouble y, GLUPdouble z, GLUPdouble w
558 );
559
560 void GLUP_API glupColor3fv(const GLUPfloat* rgb);
561 void GLUP_API glupColor4fv(const GLUPfloat* rgba);
562
563 void GLUP_API glupColor3dv(const GLUPdouble* rgb);
564 void GLUP_API glupColor4dv(const GLUPdouble* rgba);
565
566 void GLUP_API glupColor3f(GLUPfloat r, GLUPfloat g, GLUPfloat b);
567 void GLUP_API glupColor4f(
568 GLUPfloat r, GLUPfloat g, GLUPfloat b, GLUPfloat a
569 );
570
571 void GLUP_API glupColor3d(GLUPdouble r, GLUPdouble g, GLUPdouble b);
572 void GLUP_API glupColor4d(
573 GLUPdouble r, GLUPdouble g, GLUPdouble b, GLUPdouble a
574 );
575
576 void GLUP_API glupTexCoord2fv(const GLUPfloat* st);
577 void GLUP_API glupTexCoord3fv(const GLUPfloat* stu);
578 void GLUP_API glupTexCoord4fv(const GLUPfloat* stuv);
579
580 void GLUP_API glupTexCoord2dv(const GLUPdouble* st);
581 void GLUP_API glupTexCoord3dv(const GLUPdouble* stu);
582 void GLUP_API glupTexCoord4dv(const GLUPdouble* stuv);
583
584 void GLUP_API glupTexCoord1f(GLUPfloat s);
585 void GLUP_API glupTexCoord2f(GLUPfloat s, GLUPfloat t);
586 void GLUP_API glupTexCoord3f(GLUPfloat s, GLUPfloat t, GLUPfloat u);
587 void GLUP_API glupTexCoord4f(
588 GLUPfloat s, GLUPfloat t, GLUPfloat u, GLUPfloat v
589 );
590
591 void GLUP_API glupTexCoord1d(GLUPdouble s);
592 void GLUP_API glupTexCoord2d(GLUPdouble s, GLUPdouble t);
593 void GLUP_API glupTexCoord3d(GLUPdouble s, GLUPdouble t, GLUPdouble u);
594 void GLUP_API glupTexCoord4d(
595 GLUPdouble s, GLUPdouble t, GLUPdouble u, GLUPdouble v
596 );
597
598
599 void GLUP_API glupNormal3fv(GLUPfloat* xyz);
600 void GLUP_API glupNormal3f(GLUPfloat x, GLUPfloat y, GLUPfloat z);
601
602 void GLUP_API glupNormal3dv(GLUPdouble* xyz);
603 void GLUP_API glupNormal3d(GLUPdouble x, GLUPdouble y, GLUPdouble z);
604
605
616 void GLUP_API glupUseProgram(GLUPuint program);
617
622 /************************************************/
623
637 void GLUP_API glupGenVertexArrays(GLUPsizei n, GLUPuint* arrays);
638
647 void GLUP_API glupDeleteVertexArrays(GLUPsizei n, const GLUPuint *arrays);
648
649
656 void GLUP_API glupBindVertexArray(GLUPuint array);
657
665 GLUPuint GLUP_API glupGetVertexArrayBinding(void);
666
671#ifdef __cplusplus
672}
673#endif
674
675#endif
void GLUP_API glupGetMatrixdv(GLUPmatrix matrix, GLUPdouble *ptr)
Queries a GLUP matrix.
GLUPcontext GLUP_API glupCreateContext(void)
Creates a new GLUP context.
void GLUP_API glupGetMatrixfv(GLUPmatrix matrix, GLUPfloat *ptr)
Queries a GLUP matrix.
void GLUP_API glupMakeCurrent(GLUPcontext context)
Makes a GLUP context the current one.
GLUPclipMode GLUP_API glupGetClipMode(void)
Gets the clipping mode.
void GLUP_API glupBindUniformState(GLUPuint program)
Binds the GLUP uniform state to a program.
GLUPboolean GLUP_API glupPrimitiveSupportsArrayMode(GLUPprimitive prim)
Tests whether a given GLUP primitive supports array mode.
GLUPuint GLUP_API glupGetVertexArrayBinding(void)
Gets the name of the bound vertex array object.
void GLUP_API glupDeleteVertexArrays(GLUPsizei n, const GLUPuint *arrays)
Deletes vertex array objects.
void GLUP_API glupClipMode(GLUPclipMode mode)
Sets the current clipping mode.
void GLUP_API glupDeleteContext(GLUPcontext context)
Deletes a GLUP context.
GLUP_API const char * glupUniformStateDeclaration(void)
Gets the GLSL declaration of GLUP uniform state.
void GLUP_API glupClipPlane(const GLUPdouble *eqn)
Defines the plane used by GLUP clipping.
void GLUP_API glupUseProgram(GLUPuint program)
Specifies a GLSL program to be used for drawing the primitives.
GLUP_API GLUPuint glupCompileProgram(const char *source)
Compiles a GLSL program.
void GLUP_API glupGenVertexArrays(GLUPsizei n, GLUPuint *arrays)
Generate vertex array object names.
void GLUP_API glupGetClipPlane(GLUPdouble *eqn)
Gets the current clipping plane.
GLUPcontext GLUP_API glupCurrentContext(void)
Gets the current GLUP context.
GLUP_API const char * glupCurrentProfileName(void)
The name of the profile implemented by the current context.
GLUP_API GLUPuint glupCompileShader(GLUPenum target, const char *source)
Compiles a GLSL shader.
void GLUP_API glupBindVertexArray(GLUPuint array)
Binds a vertex array object.
void * GLUPcontext
Opaque identifier of a GLUP context.
Definition GLUP.h:124
GLUPprimitive
Symbolic values corresponding to GLUP primitive types.
Definition GLUP.h:504
Basic definitions for the Geogram C API.