3 * SVGALib video functions
29 int vid_installed = 0;
32 extern void mouse_handler (int button, int dx, int dy, int dz, int drx, int dry, int drz);
34 GraphicsContext *physicalscreen, *screenbuffer;
40 gl_copyscreen(physicalscreen);
44 uint32_t Vid_current_mode;
47 int vid_set_mode(uint32_t mode)
51 vga_modeinfo *modeinfo;
63 Vid_current_mode = mode;
67 sprintf(vgamode, "G%dx%dx256", w, h);
68 modenum = vga_getmodenumber(vgamode);
71 mouse_seteventhandler(mouse_handler);
73 modeinfo = vga_getmodeinfo(modenum);
75 if (modeinfo->flags & CAPABLE_LINEAR)
79 vga_setlinearaddressing();
81 // Set up physical screen only
82 gl_setcontextvga(modenum);
83 physicalscreen = gl_allocatecontext();
84 gl_getcontext(physicalscreen);
85 screenbuffer = physicalscreen;
87 framebuffer = physicalscreen->vbuf;
88 rowsize = physicalscreen->bytewidth;
94 // Set up the physical screen
95 gl_setcontextvga(modenum);
96 physicalscreen = gl_allocatecontext();
97 gl_getcontext(physicalscreen);
99 // Set up the virtual screen
100 gl_setcontextvgavirtual(modenum);
101 screenbuffer = gl_allocatecontext();
102 gl_getcontext(screenbuffer);
104 framebuffer = screenbuffer->vbuf;
105 rowsize = screenbuffer->bytewidth;
108 //gamefont_choose_game_font(w,h);
110 return gr_init_screen(BM_LINEAR, w, h, 0, 0, rowsize, framebuffer);
117 int mode = SM(320,200);
119 // Only do this function once!
120 if (vid_installed == 1)
125 if ((retcode = gr_set_mode(mode)))
136 if (vid_installed == 1) {
139 gl_freecontext(screenbuffer);
140 gl_freecontext(physicalscreen);
144 // Palette functions follow.
146 static int last_r=0, last_g=0, last_b=0;
148 void gr_palette_clear ()
152 memset (colors, 0, 768 * sizeof(int));
153 vga_setpalvec (0, 256, colors);
155 gr_palette_faded_out = 1;
159 void gr_palette_step_up (int r, int g, int b)
162 ubyte *p = gr_palette;
167 if (gr_palette_faded_out) return;
169 if ((r==last_r) && (g==last_g) && (b==last_b)) return;
177 temp = (int)(*p++) + r + gr_palette_gamma.intval;
179 else if (temp>63) temp=63;
181 temp = (int)(*p++) + g + gr_palette_gamma.intval;
183 else if (temp>63) temp=63;
185 temp = (int)(*p++) + b + gr_palette_gamma.intval;
187 else if (temp>63) temp=63;
190 vga_setpalvec (0, 256, colors);
193 //added on 980913 by adb to fix palette problems
194 // need a min without side effects...
196 static inline int min(int x, int y) { return x < y ? x : y; }
199 void gr_palette_load (ubyte *pal)
204 for (i = 0; i < 768; i++)
206 gr_current_pal[i] = pal[i];
207 if (gr_current_pal[i] > 63) gr_current_pal[i] = 63;
208 colors[i] = (min(gr_current_pal[i] + gr_palette_gamma.intval, 63));
211 vga_setpalvec (0, 256, colors);
213 gr_palette_faded_out = 0;
214 init_computed_colors();
219 int gr_palette_fade_out (ubyte *pal, int nsteps, int allow_keys)
223 fix fade_palette[768];
224 fix fade_palette_delta[768];
226 int fade_colors[768];
228 if (gr_palette_faded_out) return 0;
230 if (pal==NULL) pal=gr_current_pal;
232 for (i=0; i<768; i++)
234 gr_current_pal[i] = pal[i];
235 fade_palette[i] = i2f(pal[i]);
236 fade_palette_delta[i] = fade_palette[i] / nsteps;
239 for (j=0; j<nsteps; j++)
241 for (i = 0; i < 768; i++)
243 fade_palette[i] -= fade_palette_delta[i];
244 if (fade_palette[i] > i2f(pal[i] + gr_palette_gamma.intval))
245 fade_palette[i] = i2f(pal[i] + gr_palette_gamma.intval);
246 c = f2i(fade_palette[i]);
250 vga_setpalvec (0, 256, fade_colors);
253 gr_palette_faded_out = 1;
259 int gr_palette_fade_in (ubyte *pal, int nsteps, int allow_keys)
263 fix fade_palette[768];
264 fix fade_palette_delta[768];
266 int fade_colors[768];
268 if (!gr_palette_faded_out) return 0;
270 for (i=0; i<768; i++)
272 gr_current_pal[i] = pal[i];
274 fade_palette_delta[i] = i2f(pal[i] + gr_palette_gamma.intval) / nsteps;
277 for (j=0; j<nsteps; j++ )
279 for (i = 0; i < 768; i++ )
281 fade_palette[i] += fade_palette_delta[i];
282 if (fade_palette[i] > i2f(pal[i] + gr_palette_gamma.intval))
283 fade_palette[i] = i2f(pal[i] + gr_palette_gamma.intval);
284 c = f2i(fade_palette[i]);
288 vga_setpalvec (0, 256, fade_colors);
291 gr_palette_faded_out = 0;
297 void gr_palette_read (ubyte *pal)
302 vga_getpalvec (0, 256, colors);
304 for (i = 0; i < 768; i++)