1 /***********************************************************************
11 HISTORIQUE DES MODIFICATIONS :
12 --------------------------------
13 xx-xx-xx : xxx ; Creation.
14 02-07-96 : FMN ; Suppression WSWSHeight, WSWSWidth et WSType
15 17-07-96 : FMN ; Ajout WSZbuffer
16 24-04-97 : FMN ; (PRO4063) Ajout displaylist pour le mode transient
17 27-07-97 : CAL ; Portage NT (GLuint)
18 28-08-97 : PCT ; ajout texture mapping
19 13-03-98 : FMN ; Suppression variable WSNeedsClear
20 08-07-98 : FMN ; Changement du nom de la primitive call_togl_erase_immediat_mode()
21 -> call_togl_erase_animation_mode.
23 ************************************************************************/
25 #define G003 /* EUG 11-01-00 backfacing management
28 #define OCC1188 /* SAV 23/12/02 background texture management */
30 /*----------------------------------------------------------------------*/
35 #include <OpenGl_tgl_all.hxx>
37 #include <OpenGl_tsm.hxx>
39 #include <OpenGl_tsm_ws.hxx>
40 #include <OpenGl_animation.hxx>
41 #include <OpenGl_Memory.hxx>
43 /*----------------------------------------------------------------------*/
48 #define WS_HTBL_SIZE 23
49 #define BUC61044 /* 25/10/01 SAV ; added functionality to control gl depth testing
51 #define BUC61045 /* 25/10/01 SAV ; added functionality to control gl lighting
54 /*----------------------------------------------------------------------*/
60 /* background texture properties */
66 Tint style; /* 0 - centered, 1 - tiled, 2 - stretch */
67 IMPLEMENT_MEMORY_OPERATORS
69 typedef WS_BG_TEXTURE *ws_bg_texture;
72 typedef TSM_BG_GRADIENT WS_BG_GRADIENT;
73 typedef WS_BG_GRADIENT *ws_bg_gradient;
114 WS_BG_TEXTURE bgTexture;
116 WS_BG_GRADIENT bgGradient;
117 IMPLEMENT_MEMORY_OPERATORS
119 typedef WS_REC *ws_rec;
121 /*----------------------------------------------------------------------*/
123 * Variables statiques
126 typedef NCollection_DataMap< Standard_Integer, ws_rec> WS_Map;
127 typedef WS_Map::Iterator WS_Map_Iterator;
128 Handle(NCollection_BaseAllocator) ws_Allocator = NCollection_BaseAllocator::CommonBaseAllocator();
129 WS_Map ws_map ( 1 , ws_Allocator );
131 /*----------------------------------------------------------------------*/
134 TsmRegisterWsid( Tint wsid )
136 if( ws_Allocator.IsNull() )
139 ws_rec rec = new WS_REC();
140 ws_map.Bind( wsid, rec );
145 /*----------------------------------------------------------------------*/
148 TsmSetWSAttri( Tint wsid, TWSAttri attri, cmn_key_data data )
151 if( ws_Allocator.IsNull() )
154 if ( !ws_map.IsBound( wsid ) ) {
155 ws_rec rec = new WS_REC();
156 ws_map.Bind( wsid, new WS_REC() );
158 ws_rec wsr = ws_map.ChangeFind( wsid );
163 wsr->texture_env = data->ldata;
166 case WSSurfaceDetail:
167 wsr->surface_detail = data->ldata;
171 wsr->filters = data->pdata;
175 wsr->window = data->ldata;
179 wsr->width = data->ldata;
183 wsr->height = data->ldata;
187 wsr->d_buff = data->ldata;
191 wsr->view_stid = data->ldata;
195 wsr->lights = data->pdata;
199 wsr->views = data->pdata;
203 wsr->backg[0] = ((Tfloat*)data->pdata)[0],
204 wsr->backg[1] = ((Tfloat*)data->pdata)[1],
205 wsr->backg[2] = ((Tfloat*)data->pdata)[2];
209 wsr->highlights = data->pdata;
213 wsr->depthcues = data->pdata;
217 wsr->transparency = data->ldata;
221 wsr->zbuffer = data->ldata;
225 wsr->transient = data->ldata;
229 wsr->retainMode = data->ldata;
233 wsr->update_state = data->ldata;
238 wsr->pixmap_id = data->pixmap;
242 wsr->glx_pixmap = data->glxpixmap;
246 wsr->wsdepth = data->ldata;
251 wsr -> backfacing = data -> ldata;
257 wsr->depth_test = data->ldata;
262 wsr->ws_gllight = data->ldata;
267 wsr->bgTexture.texId = ((Tuint*)data->pdata)[0],
268 wsr->bgTexture.width = ((Tint*)data->pdata)[1],
269 wsr->bgTexture.height = ((Tint*)data->pdata)[2];
270 wsr->bgTexture.style = ((Tint*)data->pdata)[3];
274 wsr->bgGradient = *((WS_BG_GRADIENT*)(data->pdata));
283 /*----------------------------------------------------------------------*/
286 TsmGetWSAttri( Tint wsid, TWSAttri attri, cmn_key_data data )
288 if( ws_Allocator.IsNull() )
291 if ( !ws_map.IsBound( wsid ) ) {
292 ws_rec rec = new WS_REC();
293 ws_map.Bind( wsid, rec );
295 ws_rec wsr = ws_map.Find( wsid );
300 data->ldata = wsr->texture_env;
303 case WSSurfaceDetail:
304 data->ldata = wsr->surface_detail;
308 data->pdata = wsr->filters;
312 data->ldata = wsr->window;
316 data->ldata = wsr->width;
320 data->ldata = wsr->height;
324 data->ldata = wsr->d_buff;
328 data->ldata = wsr->view_stid;
332 data->pdata = wsr->lights;
336 data->pdata = wsr->views;
340 data->pdata = wsr->backg;
344 data->pdata = wsr->highlights;
348 data->pdata = wsr->depthcues;
352 data->ldata = wsr->transparency;
356 data->ldata = wsr->zbuffer;
360 data->ldata = wsr->transient;
364 data->ldata = wsr->retainMode;
368 data->ldata = wsr->update_state;
373 data->pixmap = wsr->pixmap_id;
377 data->glxpixmap = wsr->glx_pixmap;
381 data->ldata = wsr->wsdepth;
386 data -> ldata = wsr -> backfacing;
392 data->ldata = wsr->depth_test;
397 data->ldata = wsr->ws_gllight;
402 data->pdata = &wsr->bgTexture;
406 data->pdata = &wsr->bgGradient;
416 /*----------------------------------------------------------------------*/
419 TsmGetWSPosted( Tint struct_id, Tint size, Tint *ws, Tint *actual_size )
421 if( ws_Allocator.IsNull() )
424 WS_Map_Iterator it(ws_map);
425 for ( ; it.More(); it.Next()) {
426 if( it.Value()->view_stid == struct_id ) {
436 /*----------------------------------------------------------------------*/
439 TsmUnregisterWsid( Tint wsid )
441 if( ws_Allocator.IsNull() )
443 if ( !ws_map.IsBound( wsid ) ) {
446 ws_rec wsr = ws_map.ChangeFind( wsid );
447 ws_map.UnBind( wsid );
453 /*----------------------------------------------------------------------*/
458 if( ws_Allocator.IsNull() )
460 WS_Map_Iterator it(ws_map);
461 for ( ; it.More(); it.Next()) {
462 it.ChangeValue()->update_state = TNotDone;
463 (void) call_togl_erase_animation_mode();
468 /*----------------------------------------------------------------------*/