2 @Copyright Looking Glass Studios, Inc.
3 1996,1997,1998,1999,2000 Unpublished Work.
6 // $Header: r:/t2repos/thief2/src/render/scrnloop.c,v 1.28 2000/02/25 16:28:37 kevin Exp $
24 #include <wrloop.h> // for constraints
31 // Must be last header
34 BOOL gScrnLoopSetModeFailed
= FALSE
;
36 eLoopMessageResult LGAPI
ScrnManLoopFunc(void* context
, eLoopMessage msg
, tLoopMessageData hdata
)
38 eLoopMessageResult result
= kLoopDispatchContinue
;
40 ScrnManContext
* data
= (ScrnManContext
*)context
;
46 BOOL auto_fail
= FALSE
;
51 if (config_is_defined("scrn_loop_auto_fail"))
54 gScrnLoopSetModeFailed
= TRUE
;
59 gScrnLoopSetModeFailed
= !ScrnModeSet(data
->mode_params
.min_mode
,
60 data
->mode_params
.preferred
,
61 data
->mode_params
.max_mode
);
63 if (gScrnLoopSetModeFailed
)
65 // OK, try preferred flags and bitdepth, but default dims
67 ScrnModeCopy(&mode
, ScrnModeGetDefault(), kScrnModeAllValid
);
68 ScrnModeCopy(&mode
, data
->mode_params
.preferred
, kScrnModeBitDepthValid
| kScrnModeFlagsValid
);
69 if (auto_fail
|| (!ScrnModeSet(data
->mode_params
.min_mode
, &mode
, data
->mode_params
.max_mode
)))
71 BOOL last_resort
= auto_fail
? FALSE
: ScrnModeSet(NULL
, ScrnModeGetDefault() ,NULL
);
75 config_get_raw("scrn_loop_fail_msg",buf
,sizeof(buf
));
76 MessageBox ((HWND
)NULL
, buf
, (LPCSTR
)NULL
, MB_ICONWARNING
);
82 if (data
->pal_res
!= NULL
)
84 IResMan
* pResMan
= AppGetObj(IResMan
);
85 IRes
* pRes
= IResMan_Bind(pResMan
,
91 ScrnNewPalette(IRes_Lock(pRes
),0,256);
98 mprintf("Failed to load palette %s\n", data
->pal_res
);
102 // This now happens in ScrnSetRes()...
106 portal_set_mem_rect_row((grd_bpp
==8) ? 256 : 512);
110 case kMsgSuspendMode
:
125 { // here, we really should get a default palette from somewhere useful
126 uchar
*pal
=Malloc(768);
129 pal
[3*i
]=pal
[3*i
+1]=pal
[3*i
+2]=i
<<2;
131 { pal
[192+3*i
+0]=i
; pal
[192+3*i
+1]=pal
[192+3*i
+2]=0; }
133 { pal
[384+3*i
+1]=i
; pal
[384+3*i
+0]=pal
[384+3*i
+2]=0; }
135 { pal
[576+3*i
+2]=i
; pal
[576+3*i
+0]=pal
[576+3*i
+1]=0; }
136 ScrnNewPalette(pal
,0,256);
152 #pragma off(unreferenced)
153 ILoopClient
* LGAPI
CreateScrnManClient(sLoopClientDesc
* pDesc
, tLoopClientData data
)
155 ScrnManContext
* pContext
= (ScrnManContext
*)data
;
156 return CreateSimpleLoopClient(ScrnManLoopFunc
,pContext
,&ScrnManClientDesc
);
158 #pragma on(unreferenced)
160 sLoopClientDesc ScrnManClientDesc
=
165 kMsgsMode
|kMsgsFrameEdge
|kMsgVisual
|kMsgsAppOuter
,
173 { kConstrainAfter
, &LOOPID_Res
, kMsgsMode
},
174 { kConstrainAfter
, &LOOPID_UI
, kMsgVisual
},
175 { kConstrainBefore
, &LOOPID_Wr
, kMsgsAppOuter
},