22#if defined(OPENGL_X11)
26#elif defined(OPENGL_AQUA)
28#include <OpenGL/glu.h>
29#if defined(OPENGL_AGL)
32#elif defined(OPENGL_WINDOWS)
33#define WIN32_LEAN_AND_MEAN
35#undef WIN32_LEAN_AND_MEAN
45#define USE_GL_NORMALIZE
47#define RED_MASK 0x000000FF
48#define GRN_MASK 0x0000FF00
49#define BLU_MASK 0x00FF0000
50#define ALP_MASK 0xFF000000
52#define INT_TO_RED(i, r) (r = (i & RED_MASK))
53#define INT_TO_GRN(i, g) (g = (i & GRN_MASK) >> 8)
54#define INT_TO_BLU(i, b) (b = (i & BLU_MASK) >> 16)
55#define INT_TO_ALP(i, a) (a = (i & ALP_MASK) >> 24)
64static int numobjs = 0;
72static float ogl_mat_amb[4];
73static float ogl_mat_diff[4];
74static float ogl_mat_spec[4];
75static float ogl_mat_emis[4];
76static float ogl_mat_shin;
208 static int first = 1;
447#if !defined(OPENGL_FBO)
459#if !defined(OPENGL_FBO)
471#if !defined(OPENGL_FBO)
483#if !defined(OPENGL_FBO)
486#if defined(OPENGL_X11)
488#elif defined(OPENGL_AGL)
490#elif defined(OPENGL_WINDOWS)
592 if (
fx < window[2] ||
fx > window[3] ||
fy < window[1] ||
fy > window[0])
637 G_warning(
_(
"gsd_rot(): %c is an invalid axis "
638 "specification. Rotation ignored. "
639 "Please advise GRASS developers of this error"),
724#ifdef USE_GL_NORMALIZE
739 ogl_mat_amb[0] = 0.1;
740 ogl_mat_amb[1] = 0.1;
741 ogl_mat_amb[2] = 0.1;
742 ogl_mat_amb[3] = 1.0;
744 ogl_mat_diff[0] = 0.8;
745 ogl_mat_diff[1] = 0.8;
746 ogl_mat_diff[2] = 0.8;
747 ogl_mat_diff[3] = 0.8;
749 ogl_mat_spec[0] = 0.8;
750 ogl_mat_spec[1] = 0.8;
751 ogl_mat_spec[2] = 0.8;
752 ogl_mat_spec[3] = 0.8;
754 ogl_mat_emis[0] = 0.0;
755 ogl_mat_emis[1] = 0.0;
756 ogl_mat_emis[2] = 0.0;
757 ogl_mat_emis[3] = 0.0;
806 ogl_mat_spec[0] =
sh;
807 ogl_mat_spec[1] =
sh;
808 ogl_mat_spec[2] =
sh;
809 ogl_mat_spec[3] =
sh;
813 ogl_mat_shin = 60. + (
int)(
sh * 68.);
819 ogl_mat_emis[0] = (em * (
emcolor & 0x0000FF)) / 255.;
820 ogl_mat_emis[1] = (em * ((
emcolor & 0x00FF00) >> 8)) / 255.;
821 ogl_mat_emis[2] = (em * ((
emcolor & 0xFF0000) >> 16)) / 255.;
838 ogl_light_pos[num - 1][0] = vals->
position[
X];
839 ogl_light_pos[num - 1][1] = vals->
position[
Y];
840 ogl_light_pos[num - 1][2] = vals->
position[
Z];
841 ogl_light_pos[num - 1][3] = vals->
position[
W];
845 ogl_light_diff[num - 1][0] = vals->
color[0];
846 ogl_light_diff[num - 1][1] = vals->
color[1];
847 ogl_light_diff[num - 1][2] = vals->
color[2];
848 ogl_light_diff[num - 1][3] = .3;
852 ogl_light_amb[num - 1][0] = vals->
ambient[0];
853 ogl_light_amb[num - 1][1] = vals->
ambient[1];
854 ogl_light_amb[num - 1][2] = vals->
ambient[2];
855 ogl_light_amb[num - 1][3] = .3;
859 ogl_light_spec[num - 1][0] = vals->
color[0];
860 ogl_light_spec[num - 1][1] = vals->
color[1];
861 ogl_light_spec[num - 1][2] = vals->
color[2];
862 ogl_light_spec[num - 1][3] = .3;
914 r = tmp[0] + tmp[2] - 1;
916 t = tmp[1] + tmp[3] - 1;
930#if !defined(OPENGL_FBO)
978#if !defined(OPENGL_FBO)
1110 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 G_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)