26#if defined(OPENGL_X11)
30#elif defined(OPENGL_AQUA)
32#include <OpenGL/glu.h>
33#if defined(OPENGL_AGL)
36#elif defined(OPENGL_WINDOWS)
46#define USE_GL_NORMALIZE
48#define RED_MASK 0x000000FF
49#define GRN_MASK 0x0000FF00
50#define BLU_MASK 0x00FF0000
51#define ALP_MASK 0xFF000000
53#define INT_TO_RED(i, r) (r = (i & RED_MASK))
54#define INT_TO_GRN(i, g) (g = (i & GRN_MASK) >> 8)
55#define INT_TO_BLU(i, b) (b = (i & BLU_MASK) >> 16)
56#define INT_TO_ALP(i, a) (a = (i & ALP_MASK) >> 24)
65static int numobjs = 0;
73static float ogl_mat_amb[4];
74static float ogl_mat_diff[4];
75static float ogl_mat_spec[4];
76static float ogl_mat_emis[4];
77static float ogl_mat_shin;
209 static int first = 1;
448#if !defined(OPENGL_FBO)
460#if !defined(OPENGL_FBO)
472#if !defined(OPENGL_FBO)
484#if !defined(OPENGL_FBO)
487#if defined(OPENGL_X11)
489#elif defined(OPENGL_AGL)
491#elif defined(OPENGL_WINDOWS)
593 if (
fx < window[2] ||
fx > window[3] ||
fy < window[1] ||
fy > window[0])
638 G_warning(
_(
"gsd_rot(): %c is an invalid axis "
639 "specification. Rotation ignored. "
640 "Please advise GRASS developers of this error"),
725#ifdef USE_GL_NORMALIZE
740 ogl_mat_amb[0] = 0.1;
741 ogl_mat_amb[1] = 0.1;
742 ogl_mat_amb[2] = 0.1;
743 ogl_mat_amb[3] = 1.0;
745 ogl_mat_diff[0] = 0.8;
746 ogl_mat_diff[1] = 0.8;
747 ogl_mat_diff[2] = 0.8;
748 ogl_mat_diff[3] = 0.8;
750 ogl_mat_spec[0] = 0.8;
751 ogl_mat_spec[1] = 0.8;
752 ogl_mat_spec[2] = 0.8;
753 ogl_mat_spec[3] = 0.8;
755 ogl_mat_emis[0] = 0.0;
756 ogl_mat_emis[1] = 0.0;
757 ogl_mat_emis[2] = 0.0;
758 ogl_mat_emis[3] = 0.0;
807 ogl_mat_spec[0] =
sh;
808 ogl_mat_spec[1] =
sh;
809 ogl_mat_spec[2] =
sh;
810 ogl_mat_spec[3] =
sh;
814 ogl_mat_shin = 60. + (
int)(
sh * 68.);
820 ogl_mat_emis[0] = (em * (
emcolor & 0x0000FF)) / 255.;
821 ogl_mat_emis[1] = (em * ((
emcolor & 0x00FF00) >> 8)) / 255.;
822 ogl_mat_emis[2] = (em * ((
emcolor & 0xFF0000) >> 16)) / 255.;
839 ogl_light_pos[num - 1][0] = vals->
position[
X];
840 ogl_light_pos[num - 1][1] = vals->
position[
Y];
841 ogl_light_pos[num - 1][2] = vals->
position[
Z];
842 ogl_light_pos[num - 1][3] = vals->
position[
W];
846 ogl_light_diff[num - 1][0] = vals->
color[0];
847 ogl_light_diff[num - 1][1] = vals->
color[1];
848 ogl_light_diff[num - 1][2] = vals->
color[2];
849 ogl_light_diff[num - 1][3] = .3;
853 ogl_light_amb[num - 1][0] = vals->
ambient[0];
854 ogl_light_amb[num - 1][1] = vals->
ambient[1];
855 ogl_light_amb[num - 1][2] = vals->
ambient[2];
856 ogl_light_amb[num - 1][3] = .3;
860 ogl_light_spec[num - 1][0] = vals->
color[0];
861 ogl_light_spec[num - 1][1] = vals->
color[1];
862 ogl_light_spec[num - 1][2] = vals->
color[2];
863 ogl_light_spec[num - 1][3] = .3;
915 r = tmp[0] + tmp[2] - 1;
917 t = tmp[1] + tmp[3] - 1;
931#if !defined(OPENGL_FBO)
979#if !defined(OPENGL_FBO)
1111 ObjList[i] = ObjList[0] + i;
void G_warning(const char *,...) __attribute__((format(printf
void G_message(const char *,...) __attribute__((format(printf
void gsd_do_scale(int)
Set current scale.
void gsd_call_label(void)
Call display list and draw defined labels – called from gsd_prim (gsd_call_lists)
#define UNUSED
A macro for an attribute, if attached to a variable, indicating that the variable is not used.
void gsd_set_clipplane(int num, int able)
Set clip plane.
void gsd_endlist(void)
End list.
void gsd_viewport(int l, int r, int b, int t)
Set the viewport.
void gsd_endtstrip(void)
ADD.
void gsd_endtfan(void)
ADD.
void gsd_endtmesh(void)
ADD.
void gsd_swaptmesh(void)
ADD.
void gsd_backface(int n)
ADD.
void gsd_pushmatrix(void)
Push the current matrix stack.
int gsd_getViewport(GLint tmp[4], GLint num[2])
Get viewpoint.
void gsd_calllist(int listno)
ADD.
void gsd_zwritemask(unsigned long n)
Write out z-mask.
void gsd_deflight(int num, struct lightdefs *vals)
Define light.
void gsd_vert_func(float *pt)
ADD.
void gsd_bgnqstrip(void)
ADD.
void gsd_switchlight(int num, int on)
Switch light on/off.
void gsd_litvert_func(float *norm, unsigned long col, float *pt)
Set the current normal vector & specify vertex.
void gsd_colormode(int cm)
Set color mode.
void gsd_bgnpolygon(void)
Delimit the vertices of a primitive or a group of like primitives.
int gsd_writeView(unsigned char **pixbuf, unsigned int xsize, unsigned int ysize)
Write view.
void gsd_bgntstrip(void)
ADD.
void gsd_blend(int yesno)
Specify pixel arithmetic.
void gsd_init_lightmodel(void)
Initialize model light.
int gsd_getshademodel(void)
Get shaded model.
void gsd_bgnlist(int listno, int do_draw)
ADD.
int gsd_makelist(void)
ADD.
void gsd_swapbuffers(void)
Swap buffers.
void gsd_endqstrip(void)
ADD.
void gsd_sphere(float *center, float siz)
ADD.
void show_colormode(void)
Print color mode to stderr.
int gsd_getimage(unsigned char **pixbuf, unsigned int *xsize, unsigned int *ysize)
Get image of current GL screen.
void gsd_backbuffer(void)
Draw to the back buffer.
void gsd_popmatrix(void)
Pop the current matrix stack.
void gsd_flush(void)
Mostly for flushing drawing commands across a network.
void gsd_def_clipplane(int num, double *params)
Define clip plane.
void gsd_endline(void)
End line.
void gsd_finish(void)
Finish.
void gsd_calllists(int listno)
ADD.
void gsd_circ(float x, float y, float rad)
ADD.
void gsd_bgntfan(void)
ADD.
void gsd_deletelist(GLuint listno, int range)
Delete list.
int gsd_checkpoint(float pt[4], int window[4], int viewport[4], double modelMatrix[16], double projMatrix[16])
ADD.
void gsd_rot(float angle, char axis)
ADD.
void gsd_bgnline(void)
Begin line.
void gsd_scale(float xs, float ys, float zs)
Multiply the current matrix by a general scaling matrix.
void gsd_translate(float dx, float dy, float dz)
Multiply the current matrix by a translation matrix.
void gsd_bgntmesh(void)
ADD.
void gsd_disc(float x, float y, float z, float rad)
ADD.
void gsd_getwindow(int *window, int *viewport, double *modelMatrix, double *projMatrix)
Get viewport.
void gsd_litvert_func2(float *norm, unsigned long col, float *pt)
ADD.
void gsd_color_func(unsigned int col)
Set current color.
void gsd_shademodel(int shade)
Set shaded model.
void gsd_bothbuffers(void)
Draw to the front and back buffers.
void gsd_frontbuffer(void)
Draw to the front buffer.
void gsd_endpolygon(void)
Delimit the vertices of a primitive or a group of like primitives.
void gsd_linewidth(short n)
Set width of rasterized lines.
void gsd_set_material(int set_shin, int set_emis, float sh, float em, int emcolor)
Set material.
OGSF header file (structures)
float position[4]
X, Y, Z, (1=local/0=inf)