1 /* File: mesa_extend.c for wmesa-2.3
2 Written by Li Wei (liwei@aiar.xjtu.edu.cn)
5 /*******************************************************************
6 Users can use the following keys to control the view
8 The following four key combinations can shift the view correspondingly,
9 function in both stereo and normal mode.
15 F (captital letter) shift the camera far from objects
16 N (captital letter) shift the camera near from objects
17 S (captital letter) toggle between normal and stereo mode
18 I (captital letter) increase the distance between two views
19 D (captital letter) decrease the distance between two views
21 if the Key function defined by user maps any key appearing above, it will be
22 masked by the program. Hence, user should either modify his own code or
23 modify function defaultKeyProc at the end of this file
24 *******************************************************************/
28 * struct DisplayOptions defined for tk_ddmesa.c to read the initial file
31 #include "mesa_extend.h"
38 // #include "parallel.h"
41 GLenum (*userKeyProc
) (int, GLenum
) = NULL
;
43 GLfloat viewDistance
= 1.0;
44 GLfloat deltaView
= 0.1;
45 GLfloat deltaShift
= 0.1;
47 GLuint viewShift
= SHIFT_NONE
;
50 GLenum imageRendered
= GL_FALSE
;
52 GLenum
glImageRendered()
57 //Code added by Li Wei to enable stereo display
58 GLenum
defaultKeyProc(int key
, GLenum mask
)
60 GLenum flag
= GL_FALSE
;
61 if(mask
& TK_CONTROL
){
65 viewShift
= SHIFT_LEFT
;
68 viewShift
= SHIFT_RIGHT
;
74 viewShift
= SHIFT_DOWN
;
84 viewShift
= SHIFT_FAR
;
87 viewShift
= SHIFT_NEAR
;
90 #if !defined(NO_STEREO)
92 viewDistance
-= deltaView
;
95 viewDistance
+= deltaView
;
102 #if !defined(NO_PARALLEL)
104 if(machineType
== MASTER
)
105 toggleParallelMode();
114 flag
=flag
||(*userKeyProc
)(key
, mask
);
116 #if !defined(NO_PARALLEL)
117 if(parallelFlag
&&key
!=TK_P
&&machineType
== MASTER
){
125 /* The following function implemented key board control of the display,
126 availabe even in normal mode so long the driver is linked into exe file.
131 if(viewShift
!= SHIFT_NONE
){
132 /* glGetFloatv(GL_MODELVIEW_MATRIX,cm);
133 glMatrixMode(GL_MODELVIEW);
136 glGetIntegerv(GL_MATRIX_MODE
,&matrix_mode
);
137 /* if(matrix_mode!=GL_PROJECTION)
138 glMatrixMode(GL_PROJECTION);
139 glGetFloatv(GL_PROJECTION_MATRIX,cm);
143 glTranslatef(-deltaShift,0,0);
146 glTranslatef(deltaShift,0,0);
149 glTranslatef(0,deltaShift,0);
152 glTranslatef(0,-deltaShift,0);
155 glTranslatef(0,0,-deltaShift);
158 glTranslatef(0,0,deltaShift);
162 viewShift = SHIFT_NONE;
164 if(matrix_mode!=GL_PROJECTION)
165 glMatrixMode(matrix_mode);
169 if(matrix_mode
!=GL_MODELVIEW
)
170 glMatrixMode(GL_MODELVIEW
);
171 glGetFloatv(GL_MODELVIEW_MATRIX
,cm
);
175 glTranslatef(-deltaShift
,0,0);
178 glTranslatef(deltaShift
,0,0);
181 glTranslatef(0,deltaShift
,0);
184 glTranslatef(0,-deltaShift
,0);
187 glTranslatef(0,0,-deltaShift
);
190 glTranslatef(0,0,deltaShift
);
194 viewShift
= SHIFT_NONE
;
196 if(matrix_mode
!=GL_MODELVIEW
)
197 glMatrixMode(matrix_mode
);
203 void getDisplayOptions( void)
205 displayOptions
.stereo
= GetPrivateProfileInt("DISPLAY", "STEREO",1,"ddmesa.ini" );
206 displayOptions
.fullScreen
= GetPrivateProfileInt("DISPLAY", "FULLSCREEN",0,"ddmesa.ini" );
207 displayOptions
.mode
= GetPrivateProfileInt("DISPLAY", "MODE",1, "ddmesa.ini");
208 displayOptions
.bpp
= GetPrivateProfileInt("DISPLAY", "BPP", 32, "ddmesa.ini");