]> icculus.org git repositories - btb/d2x.git/blob - 2d/gr.c
use the orientation parameter of g3_draw_bitmap
[btb/d2x.git] / 2d / gr.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-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
12 */
13
14 #ifdef HAVE_CONFIG_H
15 #include <conf.h>
16 #endif
17
18 #include "gr.h"
19 #include "u_mem.h"
20 #include "cmd.h"
21
22
23 int gr_installed = 0;
24
25 cvar_t gr_aspectratio = { "r_aspectratio", "0", CVAR_NONE };
26
27 //      Functions for GR.C
28
29 int gr_close_screen(void);
30
31 void gr_cmd_pixelaspect(int argc, char **argv);
32
33
34 void gr_close(void)
35 {
36         gr_close_screen();
37         gr_installed = 0;
38 }
39
40
41 int gr_init(void)
42 {
43         // Only do this function once!
44         if (gr_installed == 1)
45                 return 1;
46
47         cvar_registervariable(&gr_palette_gamma);
48         cvar_registervariable(&gr_aspectratio);
49
50         cmd_addcommand("pixelaspect", gr_cmd_pixelaspect, "pixelaspect [n]\n" "    set the pixel aspect ratio to <n> (1.0 is square pixels)");
51
52         // Set flags indicating that this is installed.
53         gr_installed = 1;
54
55         atexit(gr_close);
56
57         return 0;
58 }
59
60
61 int gr_close_screen(void)
62 {
63         if (grd_curscreen) {
64                 d_free(grd_curscreen);
65                 grd_curscreen = NULL;
66         }
67
68         return 0;
69 }
70
71
72 int gr_init_screen(int bitmap_type, int w, int h, int x, int y, int rowsize, ubyte *screen_addr)
73 {
74         if (!gr_installed)
75                 return 1;
76
77         if (grd_curscreen == NULL)
78                 MALLOC( grd_curscreen, grs_screen, 1 );
79
80         memset(grd_curscreen, 0, sizeof(grs_screen));
81
82         grd_curscreen->sc_mode = bitmap_type;
83         grd_curscreen->sc_w = w;
84         grd_curscreen->sc_h = h;
85         switch (gr_aspectratio.intval) {
86         default:
87         case 0:
88                 grd_curscreen->sc_aspect = fixdiv(grd_curscreen->sc_w * 3, grd_curscreen->sc_h * 4);
89                 break;
90         case 1:
91                 grd_curscreen->sc_aspect = fixdiv(grd_curscreen->sc_w * 9, grd_curscreen->sc_h * 16);
92                 break;
93         case 2:
94                 grd_curscreen->sc_aspect = fixdiv(grd_curscreen->sc_w * 10, grd_curscreen->sc_h * 16);
95                 break;
96         }
97         grd_curscreen->sc_canvas.cv_bitmap.bm_x = x;
98         grd_curscreen->sc_canvas.cv_bitmap.bm_y = y;
99         grd_curscreen->sc_canvas.cv_bitmap.bm_w = w;
100         grd_curscreen->sc_canvas.cv_bitmap.bm_h = h;
101         grd_curscreen->sc_canvas.cv_bitmap.bm_rowsize = rowsize;
102         grd_curscreen->sc_canvas.cv_bitmap.bm_type = bitmap_type;
103         grd_curscreen->sc_canvas.cv_bitmap.bm_data = (bitmap_type == BM_LINEAR) ? screen_addr : NULL;
104
105         grd_curscreen->sc_canvas.cv_color = 0;
106         grd_curscreen->sc_canvas.cv_drawmode = 0;
107         grd_curscreen->sc_canvas.cv_font = NULL;
108         grd_curscreen->sc_canvas.cv_font_fg_color = 0;
109         grd_curscreen->sc_canvas.cv_font_bg_color = 0;
110
111         gr_set_current_canvas( &grd_curscreen->sc_canvas );
112
113         return 0;
114 }
115
116
117 void gr_cmd_pixelaspect(int argc, char **argv)
118 {
119         if (argc < 2 || argc > 2) {
120                 cmd_insertf("help %s", argv[0]);
121                 return;
122         }
123
124         grd_curscreen->sc_aspect = fl2f(strtof(argv[1], NULL));
125 }