Partial application of linux/alpha patch. Courtesy of Falk Hueffner <falk.hueffner...
[btb/d2x.git] / 3d / setup.c
1 /*
2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
11 COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
12 */
13 /*
14  * $Source: /cvs/cvsroot/d2x/3d/setup.c,v $
15  * $Revision: 1.2 $
16  * $Author: bradleyb $
17  * $Date: 2001-01-31 15:17:48 $
18  * 
19  * Setup for 3d library
20  * 
21  * $Log: not supported by cvs2svn $
22  * Revision 1.1.1.1  2001/01/19 03:29:58  bradleyb
23  * Import of d2x-0.0.8
24  *
25  * Revision 1.3  1999/10/07 02:27:14  donut
26  * OGL includes to remove warnings
27  *
28  * Revision 1.2  1999/09/21 04:05:55  donut
29  * mostly complete OGL implementation (still needs bitmap handling (reticle), and door/fan textures are corrupt)
30  *
31  * Revision 1.1.1.1  1999/06/14 21:57:50  donut
32  * Import of d1x 1.37 source.
33  *
34  * Revision 1.4  1995/10/11  00:27:04  allender
35  * bash free_num_points to 0
36  *
37  * Revision 1.3  1995/09/13  11:31:58  allender
38  * calc for fCanv_w2 and fCanv_h2
39  *
40  * Revision 1.2  1995/06/25  21:57:57  allender
41  * *** empty log message ***
42  *
43  * Revision 1.1  1995/05/05  08:52:54  allender
44  * Initial revision
45  *
46  * Revision 1.1  1995/04/17  03:59:01  matt
47  * Initial revision
48  * 
49  * 
50  */
51
52 #ifdef HAVE_CONFIG_H
53 #include <conf.h>
54 #endif
55
56 #ifdef RCS
57 static char rcsid[] = "$Id: setup.c,v 1.2 2001-01-31 15:17:48 bradleyb Exp $";
58 #endif
59
60 #include <stdlib.h>
61
62 #include "error.h"
63
64 #include "fix.h"
65 #include "vecmat.h"
66 #include "gr.h"
67 #include "3d.h"
68 #include "globvars.h"
69 #include "clipper.h"
70
71 #ifdef OGL
72 #include "ogl_init.h"
73 #endif
74
75 //initialize the 3d system
76 void g3_init(void)
77 {
78 //      div0_init(DM_ERROR);
79         atexit(g3_close);
80 }
81
82 //close down the 3d system
83 void g3_close(void) {}
84
85 extern void init_interface_vars_to_assembler(void);
86
87 //start the frame
88 void g3_start_frame(void)
89 {
90         fix s;
91
92         //set int w,h & fixed-point w,h/2
93         Canv_w2 = (Canvas_width  = grd_curcanv->cv_bitmap.bm_w)<<15;
94         Canv_h2 = (Canvas_height = grd_curcanv->cv_bitmap.bm_h)<<15;
95 #ifdef __powerc
96         fCanv_w2 = f2fl((Canvas_width  = grd_curcanv->cv_bitmap.bm_w)<<15);
97         fCanv_h2 = f2fl((Canvas_height = grd_curcanv->cv_bitmap.bm_h)<<15);
98 #endif
99
100         //compute aspect ratio for this canvas
101
102         s = fixmuldiv(grd_curscreen->sc_aspect,Canvas_height,Canvas_width);
103
104         if (s <= f1_0) {           //scale x
105                 Window_scale.x = s;
106                 Window_scale.y = f1_0;
107         }
108         else {
109                 Window_scale.y = fixdiv(f1_0,s);
110                 Window_scale.x = f1_0;
111         }
112         
113         Window_scale.z = f1_0;          //always 1
114
115         init_free_points();
116
117 #ifdef D1XD3D
118         Win32_start_frame ();
119 #else
120 #ifdef OGL
121         ogl_start_frame();
122 #else
123         init_interface_vars_to_assembler();             //for the texture-mapper
124 #endif
125 #endif
126
127 }
128
129 //this doesn't do anything, but is here for completeness
130 void g3_end_frame(void)
131 {
132 #ifdef D1XD3D
133         Win32_end_frame ();
134 #endif
135 #ifdef OGL
136         ogl_end_frame();
137 #endif
138
139 //      Assert(free_point_num==0);
140         free_point_num = 0;
141
142 }
143
144