1 
2 
3 #include "graphics/2d.h"
4 #include "graphics/grinternal.h"
5 #include "bmpman/bmpman.h"
6 #include "ddsutils/ddsutils.h"
7 #include "tgautils/tgautils.h"
8 #include "pngutils/pngutils.h"
9 #include "jpgutils/jpgutils.h"
10 #include "pcxutils/pcxutils.h"
11 #include "globalincs/systemvars.h"
12 #include "anim/animplay.h"
13 #include "anim/packunpack.h"
14 #include "model/model.h"
15 
16 #define BMPMAN_INTERNAL
17 #include "bmpman/bm_internal.h"
18 
19 
gr_stub_lock()20 uint gr_stub_lock()
21 {
22 	return 1;
23 }
24 
25 // NOTE: should return a failure
gr_stub_create_buffer()26 int gr_stub_create_buffer()
27 {
28 	return -1;
29 }
30 
31 // NOTE: should return a failure
gr_stub_pack_buffer(const int buffer_id,vertex_buffer * vb)32 bool gr_stub_pack_buffer(const int buffer_id, vertex_buffer *vb)
33 {
34 	return false;
35 }
36 
37 // NOTE: should return a failure
gr_stub_config_buffer(const int buffer_id,vertex_buffer * vb)38 bool gr_stub_config_buffer(const int buffer_id, vertex_buffer *vb)
39 {
40 	return false;
41 }
42 
gr_stub_make_light(light * light,int idx,int priority)43 int	gr_stub_make_light(light *light, int idx, int priority)
44 {
45 	return 0;
46 }
47 
gr_stub_preload(int bitmap_num,int is_aabitmap)48 int gr_stub_preload(int bitmap_num, int is_aabitmap)
49 {
50 	return 0;
51 }
52 
gr_stub_save_screen()53 int gr_stub_save_screen()
54 {
55 	return 1;
56 }
57 
gr_stub_tcache_set(int bitmap_id,int bitmap_type,float * u_scale,float * v_scale,int tex_unit=0)58 int gr_stub_tcache_set(int bitmap_id, int bitmap_type, float *u_scale, float *v_scale, int tex_unit = 0)
59 {
60 	return 0;
61 }
62 
gr_stub_zbuffer_get()63 int gr_stub_zbuffer_get()
64 {
65 	return 0;
66 }
67 
gr_stub_zbuffer_set(int mode)68 int gr_stub_zbuffer_set(int mode)
69 {
70 	return 0;
71 }
72 
gr_set_fill_mode_stub(int mode)73 void gr_set_fill_mode_stub(int mode)
74 {
75 }
76 
gr_stub_aabitmap_ex(int x,int y,int w,int h,int sx,int sy,int resize_mode,bool mirror)77 void gr_stub_aabitmap_ex(int x,int y,int w,int h,int sx,int sy,int resize_mode,bool mirror)
78 {
79 }
80 
gr_stub_aabitmap(int x,int y,int resize_mode,bool mirror)81 void gr_stub_aabitmap(int x, int y,int resize_mode, bool mirror)
82 {
83 }
84 
gr_stub_aaline(vertex * v1,vertex * v2)85 void gr_stub_aaline(vertex *v1, vertex *v2)
86 {
87 }
88 
gr_stub_activate(int active)89 void gr_stub_activate(int active)
90 {
91 }
92 
gr_stub_bitmap_ex(int x,int y,int w,int h,int sx,int sy,int resize_mode)93 void gr_stub_bitmap_ex(int x, int y, int w, int h, int sx, int sy, int resize_mode)
94 {
95 }
96 
gr_stub_bitmap(int x,int y)97 void gr_stub_bitmap(int x, int y)
98 {
99 }
100 
gr_stub_center_alpha(int type)101 void gr_stub_center_alpha( int type)
102 {
103 }
104 
gr_stub_circle(int xc,int yc,int d,int resize_mode)105 void gr_stub_circle( int xc, int yc, int d, int resize_mode )
106 {
107 }
108 
gr_stub_unfilled_circle(int xc,int yc,int d,int resize_mode)109 void gr_stub_unfilled_circle( int xc, int yc, int d, int resize_mode )
110 {
111 }
112 
gr_stub_cleanup(int minimize)113 void gr_stub_cleanup(int minimize)
114 {
115 }
116 
gr_stub_clear()117 void gr_stub_clear()
118 {
119 }
120 
gr_stub_cross_fade(int bmap1,int bmap2,int x1,int y1,int x2,int y2,float pct,int resize_mode)121 void gr_stub_cross_fade(int bmap1, int bmap2, int x1, int y1, int x2, int y2, float pct, int resize_mode)
122 {
123 }
124 
gr_stub_curve(int xc,int yc,int r,int direction,int resize_mode)125 void gr_stub_curve(int xc, int yc, int r, int direction, int resize_mode)
126 {
127 }
128 
gr_stub_destroy_buffer(int idx)129 void gr_stub_destroy_buffer(int idx)
130 {
131 }
132 
gr_stub_destroy_light(int idx)133 void gr_stub_destroy_light(int idx)
134 {
135 }
136 
gr_stub_dump_frame()137 void gr_stub_dump_frame()
138 {
139 }
140 
gr_stub_dump_frame_start(int first_frame,int frames_between_dumps)141 void gr_stub_dump_frame_start(int first_frame, int frames_between_dumps)
142 {
143 }
144 
gr_stub_dump_frame_stop()145 void gr_stub_dump_frame_stop()
146 {
147 }
148 
gr_stub_end_clip_plane()149 void gr_stub_end_clip_plane()
150 {
151 }
152 
gr_stub_end_instance_matrix()153 void gr_stub_end_instance_matrix()
154 {
155 }
156 
gr_stub_end_projection_matrix()157 void gr_stub_end_projection_matrix()
158 {
159 }
160 
gr_stub_end_view_matrix()161 void gr_stub_end_view_matrix()
162 {
163 }
164 
gr_stub_fade_in(int instantaneous)165 void gr_stub_fade_in(int instantaneous)
166 {
167 }
168 
gr_stub_fade_out(int instantaneous)169 void gr_stub_fade_out(int instantaneous)
170 {
171 }
172 
gr_stub_flash_alpha(int r,int g,int b,int a)173 void gr_stub_flash_alpha(int r, int g, int b, int a)
174 {
175 }
176 
gr_stub_flash(int r,int g,int b)177 void gr_stub_flash(int r, int g, int b)
178 {
179 }
180 
gr_stub_flip()181 void gr_stub_flip()
182 {
183 }
184 
gr_stub_fog_set(int fog_mode,int r,int g,int b,float fog_near,float fog_far)185 void gr_stub_fog_set(int fog_mode, int r, int g, int b, float fog_near, float fog_far)
186 {
187 }
188 
gr_stub_free_screen(int id)189 void gr_stub_free_screen(int id)
190 {
191 }
192 
gr_stub_get_region(int front,int w,int h,ubyte * data)193 void gr_stub_get_region(int front, int w, int h, ubyte *data)
194 {
195 	data = NULL;
196 }
197 
gr_stub_gradient(int x1,int y1,int x2,int y2,int resize_mode)198 void gr_stub_gradient(int x1,int y1,int x2,int y2, int resize_mode)
199 {
200 }
201 
gr_stub_line(int x1,int y1,int x2,int y2,int resize_mode=GR_RESIZE_NONE)202 void gr_stub_line(int x1,int y1,int x2,int y2, int resize_mode = GR_RESIZE_NONE)
203 {
204 }
205 
gr_stub_modify_light(light * light,int idx,int priority)206 void gr_stub_modify_light(light* light, int idx, int priority)
207 {
208 }
209 
gr_stub_pixel(int x,int y,int resize_mode)210 void gr_stub_pixel(int x, int y, int resize_mode)
211 {
212 }
213 
gr_stub_pop_scale_matrix()214 void gr_stub_pop_scale_matrix()
215 {
216 }
217 
gr_stub_pop_texture_matrix(int unit)218 void gr_stub_pop_texture_matrix(int unit)
219 {
220 }
221 
gr_stub_preload_init()222 void gr_stub_preload_init()
223 {
224 }
225 
gr_stub_print_screen(const char * filename)226 void gr_stub_print_screen(const char *filename)
227 {
228 }
229 
gr_stub_push_scale_matrix(vec3d * scale_factor)230 void gr_stub_push_scale_matrix(vec3d *scale_factor)
231 {
232 }
233 
gr_stub_push_texture_matrix(int unit)234 void gr_stub_push_texture_matrix(int unit)
235 {
236 }
237 
gr_stub_rect(int x,int y,int w,int h,int resize_mode)238 void gr_stub_rect(int x, int y, int w, int h, int resize_mode)
239 {
240 }
241 
gr_stub_render_buffer(int start,const vertex_buffer * bufferp,int texi,int flags)242 void gr_stub_render_buffer(int start, const vertex_buffer *bufferp, int texi, int flags)
243 {
244 }
245 
gr_stub_reset_clip()246 void gr_stub_reset_clip()
247 {
248 }
249 
gr_stub_reset_lighting()250 void gr_stub_reset_lighting()
251 {
252 }
253 
gr_stub_restore_screen(int id)254 void gr_stub_restore_screen(int id)
255 {
256 }
257 
gr_stub_save_mouse_area(int x,int y,int w,int h)258 void gr_stub_save_mouse_area(int x, int y, int w, int h)
259 {
260 }
261 
gr_stub_scaler(vertex * va,vertex * vb,bool bw_bitmap)262 void gr_stub_scaler(vertex *va, vertex *vb, bool bw_bitmap )
263 {
264 }
265 
gr_stub_set_additive_tex_env()266 void gr_stub_set_additive_tex_env()
267 {
268 }
269 
gr_stub_set_buffer(int idx)270 void gr_stub_set_buffer(int idx)
271 {
272 }
273 
gr_stub_create_stream_buffer()274 int gr_stub_create_stream_buffer()
275 {
276 	return -1;
277 }
278 
gr_stub_update_stream_buffer(int buffer,effect_vertex * buffer_data,uint size)279 void gr_stub_update_stream_buffer(int buffer, effect_vertex *buffer_data, uint size)
280 {
281 }
282 
gr_stub_render_stream_buffer(int offset,int n_verts,int flags)283 void gr_stub_render_stream_buffer(int offset, int n_verts, int flags)
284 {
285 }
286 
gr_stub_render_stream_buffer_start(int buffer_id)287 void gr_stub_render_stream_buffer_start(int buffer_id)
288 {
289 }
290 
gr_stub_render_stream_buffer_end()291 void gr_stub_render_stream_buffer_end()
292 {
293 }
294 
gr_stub_set_clear_color(int r,int g,int b)295 void gr_stub_set_clear_color(int r, int g, int b)
296 {
297 }
298 
gr_stub_set_clip(int x,int y,int w,int h,int resize_mode)299 void gr_stub_set_clip(int x, int y, int w, int h, int resize_mode)
300 {
301 }
302 
gr_stub_set_cull(int cull)303 int gr_stub_set_cull(int cull)
304 {
305 	return 0;
306 }
307 
gr_stub_set_color_buffer(int mode)308 int gr_stub_set_color_buffer(int mode)
309 {
310 	return 0;
311 }
312 
gr_stub_set_gamma(float gamma)313 void gr_stub_set_gamma(float gamma)
314 {
315 }
316 
gr_stub_set_lighting(bool set,bool state)317 void gr_stub_set_lighting(bool set, bool state)
318 {
319 }
320 
gr_stub_set_light(light * light)321 void gr_stub_set_light(light *light)
322 {
323 }
324 
gr_stub_set_palette(ubyte * new_palette,int is_alphacolor)325 void gr_stub_set_palette(ubyte *new_palette, int is_alphacolor)
326 {
327 }
328 
gr_stub_set_projection_matrix(float fov,float aspect,float z_near,float z_far)329 void gr_stub_set_projection_matrix(float fov, float aspect, float z_near, float z_far)
330 {
331 }
332 
gr_stub_set_tex_env_scale(float scale)333 void gr_stub_set_tex_env_scale(float scale)
334 {
335 }
336 
gr_stub_set_texture_addressing(int mode)337 void gr_stub_set_texture_addressing(int mode)
338 {
339 }
340 
gr_stub_set_view_matrix(vec3d * pos,matrix * orient)341 void gr_stub_set_view_matrix(vec3d *pos, matrix* orient)
342 {
343 }
344 
gr_stub_start_clip_plane()345 void gr_stub_start_clip_plane()
346 {
347 }
348 
gr_stub_start_instance_angles(vec3d * pos,angles * rotation)349 void gr_stub_start_instance_angles(vec3d *pos, angles* rotation)
350 {
351 }
352 
gr_stub_start_instance_matrix(vec3d * offset,matrix * rotation)353 void gr_stub_start_instance_matrix(vec3d *offset, matrix* rotation)
354 {
355 }
356 
gr_stub_string(int sx,int sy,const char * s,int resize_mode=GR_RESIZE_NONE)357 void gr_stub_string( int sx, int sy, const char *s, int resize_mode = GR_RESIZE_NONE)
358 {
359 }
360 
gr_stub_stuff_fog_coord(vertex * v)361 void gr_stub_stuff_fog_coord(vertex *v)
362 {
363 }
364 
gr_stub_stuff_secondary_color(vertex * v,ubyte fr,ubyte fg,ubyte fb)365 void gr_stub_stuff_secondary_color(vertex *v, ubyte fr, ubyte fg, ubyte fb)
366 {
367 }
368 
gr_stub_tmapper(int nverts,vertex ** verts,uint flags)369 void gr_stub_tmapper( int nverts, vertex **verts, uint flags )
370 {
371 }
372 
gr_stub_render(int nverts,vertex * verts,uint flags)373 void gr_stub_render( int nverts, vertex *verts, uint flags )
374 {
375 }
376 
gr_stub_render_effect(int nverts,vertex * verts,float * radius_list,uint flag)377 void gr_stub_render_effect( int nverts, vertex *verts, float *radius_list, uint flag)
378 {
379 }
380 
gr_stub_translate_texture_matrix(int unit,vec3d * shift)381 void gr_stub_translate_texture_matrix(int unit, vec3d *shift)
382 {
383 }
384 
gr_stub_zbias_stub(int bias)385 void gr_stub_zbias_stub(int bias)
386 {
387 }
388 
gr_stub_zbuffer_clear(int mode)389 void gr_stub_zbuffer_clear(int mode)
390 {
391 }
392 
gr_stub_stencil_set(int mode)393 int gr_stub_stencil_set(int mode)
394 {
395 	return 0;
396 }
397 
gr_stub_stencil_clear()398 void gr_stub_stencil_clear()
399 {
400 }
401 
gr_stub_alpha_mask_set(int mode,float alpha)402 int gr_stub_alpha_mask_set(int mode, float alpha)
403 {
404 	return 0;
405 }
406 
407 /*void gr_stub_shade(int x,int y,int w,int h)
408 {
409 }*/
410 
gr_stub_post_process_set_effect(const char * name,int x)411 void gr_stub_post_process_set_effect(const char *name, int x)
412 {
413 }
414 
gr_stub_post_process_set_defaults()415 void gr_stub_post_process_set_defaults()
416 {
417 }
418 
gr_stub_post_process_save_zbuffer()419 void gr_stub_post_process_save_zbuffer()
420 {
421 }
422 
gr_stub_post_process_begin()423 void gr_stub_post_process_begin()
424 {
425 }
426 
gr_stub_post_process_end()427 void gr_stub_post_process_end()
428 {
429 }
430 
gr_stub_scene_texture_begin()431 void gr_stub_scene_texture_begin()
432 {
433 }
434 
gr_stub_scene_texture_end()435 void gr_stub_scene_texture_end()
436 {
437 }
438 
gr_stub_set_ambient_light(int red,int green,int blue)439 void gr_stub_set_ambient_light(int red, int green, int blue)
440 {
441 }
442 
gr_stub_set_texture_panning(float u,float v,bool enable)443 void gr_stub_set_texture_panning(float u, float v, bool enable)
444 {
445 }
446 
gr_stub_setup_background_fog(bool set)447 void gr_stub_setup_background_fog(bool set)
448 {
449 }
450 
gr_stub_start_state_block()451 void gr_stub_start_state_block()
452 {
453 	gr_screen.recording_state_block = false;
454 }
455 
gr_stub_end_state_block()456 int gr_stub_end_state_block()
457 {
458 	return -1;
459 }
460 
gr_stub_set_state_block(int handle)461 void gr_stub_set_state_block(int handle)
462 {
463 }
464 
gr_stub_set_line_width(float width)465 void gr_stub_set_line_width(float width)
466 {
467 }
468 
gr_stub_draw_htl_line(vec3d * start,vec3d * end)469 void gr_stub_draw_htl_line(vec3d *start, vec3d* end)
470 {
471 }
472 
gr_stub_draw_htl_sphere(float rad)473 void gr_stub_draw_htl_sphere(float rad)
474 {
475 }
476 
gr_stub_draw_line_list(colored_vector * lines,int num)477 void gr_stub_draw_line_list(colored_vector *lines, int num)
478 {
479 }
480 
gr_stub_flush_data_states()481 void gr_stub_flush_data_states()
482 {
483 }
484 
gr_stub_update_texture(int bitmap_handle,int bpp,ubyte * data,int width,int height)485 void gr_stub_update_texture(int bitmap_handle, int bpp, ubyte* data, int width, int height)
486 {
487 }
488 
489 // bitmap functions
gr_stub_bm_load(ubyte type,int n,const char * filename,CFILE * img_cfp,int * w,int * h,int * bpp,ubyte * c_type,int * mm_lvl,int * size)490 int gr_stub_bm_load(ubyte type, int n, const char *filename, CFILE *img_cfp, int *w, int *h, int *bpp, ubyte *c_type, int *mm_lvl, int *size)
491 {
492 	int dds_ct;
493 
494 	if (type == BM_TYPE_DDS) {
495 		int dds_error = dds_read_header( filename, img_cfp, w, h, bpp, &dds_ct, mm_lvl, size );
496 		if (dds_error != DDS_ERROR_NONE) {
497 			mprintf(("DDS ERROR: Couldn't open '%s' -- %s\n", filename, dds_error_string(dds_error)));
498 			return -1;
499 		}
500 
501 		switch (dds_ct) {
502 			case DDS_DXT1:
503 				*c_type = BM_TYPE_DXT1;
504 				break;
505 
506 			case DDS_DXT3:
507 				*c_type = BM_TYPE_DXT3;
508 				break;
509 
510 			case DDS_DXT5:
511 				*c_type = BM_TYPE_DXT5;
512 				break;
513 
514 			case DDS_UNCOMPRESSED:
515 				*c_type = BM_TYPE_DDS;
516 				break;
517 
518 			case DDS_CUBEMAP_DXT1:
519 				*c_type = BM_TYPE_CUBEMAP_DXT1;
520 				break;
521 
522 			case DDS_CUBEMAP_DXT3:
523 				*c_type = BM_TYPE_CUBEMAP_DXT3;
524 				break;
525 
526 			case DDS_CUBEMAP_DXT5:
527 				*c_type = BM_TYPE_CUBEMAP_DXT5;
528 				break;
529 
530 			case DDS_CUBEMAP_UNCOMPRESSED:
531 				*c_type = BM_TYPE_CUBEMAP_DDS;
532 				break;
533 
534 			default:
535 				Error(LOCATION, "bad DDS file compression.  Not using DXT1,3,5 %s", filename);
536 				return -1;
537 		}
538 	}
539 	// if its a tga file
540 	else if (type == BM_TYPE_TGA) {
541 		int tga_error = targa_read_header( filename, img_cfp, w, h, bpp, NULL );
542 		if ( tga_error != TARGA_ERROR_NONE )	{
543 			mprintf(( "tga: Couldn't open '%s'\n", filename ));
544 			return -1;
545 		}
546 	}
547  	// if its a png file
548  	else if (type == BM_TYPE_PNG) {
549  		int png_error=png_read_header( filename, img_cfp, w, h, bpp, NULL );
550  		if ( png_error != PNG_ERROR_NONE ) {
551  			mprintf(( "png: Couldn't open '%s'\n", filename ));
552  			return -1;
553  		}
554  	}
555 	// if its a jpg file
556 	else if (type == BM_TYPE_JPG) {
557 		int jpg_error=jpeg_read_header( filename, img_cfp, w, h, bpp, NULL );
558 		if ( jpg_error != JPEG_ERROR_NONE ) {
559 			mprintf(( "jpg: Couldn't open '%s'\n", filename ));
560 			return -1;
561 		}
562 	}
563 	// if its a pcx file
564 	else if (type == BM_TYPE_PCX) {
565 		int pcx_error = pcx_read_header( filename, img_cfp, w, h, bpp, NULL );
566 		if ( pcx_error != PCX_ERROR_NONE )	{
567 			mprintf(( "pcx: Couldn't open '%s'\n", filename ));
568 			return -1;
569 		}
570 	} else {
571 		Assert( 0 );
572 
573 		return -1;
574 	}
575 
576 	return 0;
577 }
578 
gr_stub_bm_lock(const char * filename,int handle,int bitmapnum,ubyte bpp,ubyte flags,bool nodebug)579 int gr_stub_bm_lock(const char *filename, int handle, int bitmapnum, ubyte bpp, ubyte flags, bool nodebug)
580 {
581 	ubyte c_type = BM_TYPE_NONE;
582 	ubyte true_bpp;
583 
584 	bitmap_entry *be = &bm_bitmaps[bitmapnum];
585 	bitmap *bmp = &be->bm;
586 
587 	true_bpp = 8;
588 
589 	// don't do a bpp check here since it could be different in OGL - taylor
590 	if ( bmp->data == 0 ) {
591 		Assert(be->ref_count == 1);
592 
593 		if ( be->type != BM_TYPE_USER ) {
594 			if ( bmp->data == 0 ) {
595 				nprintf (("BmpMan","Loading %s for the first time.\n", be->filename));
596 			}
597 		}
598 
599 		if ( !Bm_paging )	{
600 			if ( be->type != BM_TYPE_USER ) {
601 				nprintf(( "Paging", "Loading %s (%dx%dx%d)\n", be->filename, bmp->w, bmp->h, true_bpp ));
602 			}
603 		}
604 
605 		// select proper format
606 		if(flags & BMP_AABITMAP){
607 			BM_SELECT_ALPHA_TEX_FORMAT();
608 		} else if(flags & BMP_TEX_ANY){
609 			BM_SELECT_TEX_FORMAT();
610 		} else {
611 			BM_SELECT_SCREEN_FORMAT();
612 		}
613 
614 		// make sure we use the real graphic type for EFFs
615 		if ( be->type == BM_TYPE_EFF ) {
616 			c_type = be->info.ani.eff.type;
617 		} else {
618 			c_type = be->type;
619 		}
620 
621 		switch ( c_type ) {
622 			case BM_TYPE_PCX:
623 				bm_lock_pcx( handle, bitmapnum, be, bmp, true_bpp, flags );
624 				break;
625 
626 			case BM_TYPE_ANI:
627 				bm_lock_ani( handle, bitmapnum, be, bmp, true_bpp, flags );
628 				break;
629 
630 			case BM_TYPE_TGA:
631 				bm_lock_tga( handle, bitmapnum, be, bmp, true_bpp, flags );
632 				break;
633 
634  			case BM_TYPE_PNG:
635  				bm_lock_png( handle, bitmapnum, be, bmp, bmp->true_bpp, flags );
636  				break;
637 
638 			case BM_TYPE_JPG:
639 				bm_lock_jpg( handle, bitmapnum, be, bmp, bmp->true_bpp, flags );
640 				break;
641 
642 			case BM_TYPE_DDS:
643 			case BM_TYPE_DXT1:
644 			case BM_TYPE_DXT3:
645 			case BM_TYPE_DXT5:
646 			case BM_TYPE_CUBEMAP_DDS:
647 			case BM_TYPE_CUBEMAP_DXT1:
648 			case BM_TYPE_CUBEMAP_DXT3:
649 			case BM_TYPE_CUBEMAP_DXT5:
650 				bm_lock_dds( handle, bitmapnum, be, bmp, true_bpp, flags );
651 				break;
652 
653 			case BM_TYPE_USER:
654 				bm_lock_user( handle, bitmapnum, be, bmp, true_bpp, flags );
655 				break;
656 
657 			default:
658 				Warning(LOCATION, "Unsupported type in bm_lock -- %d\n", c_type );
659 				return -1;
660 		}
661 
662 		// always go back to screen format
663 		BM_SELECT_SCREEN_FORMAT();
664 	}
665 
666 	// make sure we actually did something
667 	if ( !(bmp->data) ) {
668 		// crap, bail...
669 		return -1;
670 	}
671 
672 	return 0;
673 }
gr_stub_bm_make_render_target(int n,int * width,int * height,ubyte * bpp,int * mm_lvl,int flags)674 int gr_stub_bm_make_render_target(int n, int *width, int *height, ubyte *bpp, int *mm_lvl, int flags)
675 {
676 	return 0;
677 }
678 
gr_stub_bm_set_render_target(int n,int face)679 int gr_stub_bm_set_render_target(int n, int face)
680 {
681 	return 0;
682 }
683 
gr_stub_bm_create(int n)684 void gr_stub_bm_create(int n)
685 {
686 }
687 
gr_stub_bm_free_data(int n,bool release)688 void gr_stub_bm_free_data(int n, bool release)
689 {
690 }
691 
gr_stub_bm_init(int n)692 void gr_stub_bm_init(int n)
693 {
694 }
695 
gr_stub_bm_page_in_start()696 void gr_stub_bm_page_in_start()
697 {
698 }
699 
gr_stub_maybe_create_shader(int flags)700 int gr_stub_maybe_create_shader(int flags) {
701 	return -1;
702 }
703 
gr_stub_set_team_color(const SCP_string & team,const SCP_string & secondaryteam,fix timestamp,int fadetime)704 void gr_stub_set_team_color(const SCP_string &team, const SCP_string &secondaryteam, fix timestamp, int fadetime) {
705 }
706 
gr_stub_enable_team_color()707 void gr_stub_enable_team_color() {
708 }
709 
gr_stub_disable_team_color()710 void gr_stub_disable_team_color() {
711 }
712 
gr_stub_init()713 bool gr_stub_init()
714 {
715 	if (gr_screen.res != GR_640) {
716 		gr_screen.res = GR_640;
717 		gr_screen.max_w = 640;
718 		gr_screen.max_h = 480;
719 	}
720 
721 	Gr_red.bits = 8;
722 	Gr_red.shift = 16;
723 	Gr_red.scale = 1;
724 	Gr_red.mask = 0xff0000;
725 	Gr_t_red = Gr_red;
726 
727 	Gr_green.bits = 8;
728 	Gr_green.shift = 8;
729 	Gr_green.scale = 1;
730 	Gr_green.mask = 0xff00;
731 	Gr_t_green = Gr_green;
732 
733 	Gr_blue.bits = 8;
734 	Gr_blue.shift = 0;
735 	Gr_blue.scale = 1;
736 	Gr_blue.mask = 0xff;
737 	Gr_t_blue = Gr_blue;
738 
739 	// function pointers...
740 	gr_screen.gf_flip				= gr_stub_flip;
741 	gr_screen.gf_set_clip			= gr_stub_set_clip;
742 	gr_screen.gf_reset_clip			= gr_stub_reset_clip;
743 
744 	gr_screen.gf_clear				= gr_stub_clear;
745 //	gr_screen.gf_bitmap				= gr_stub_bitmap;
746 	gr_screen.gf_bitmap_ex			= gr_stub_bitmap_ex;
747 	gr_screen.gf_aabitmap			= gr_stub_aabitmap;
748 	gr_screen.gf_aabitmap_ex		= gr_stub_aabitmap_ex;
749 
750 //	gr_screen.gf_rect				= gr_stub_rect;
751 //	gr_screen.gf_shade				= gr_stub_shade;
752 	gr_screen.gf_string				= gr_stub_string;
753 	gr_screen.gf_circle				= gr_stub_circle;
754 	gr_screen.gf_unfilled_circle	= gr_stub_unfilled_circle;
755 	gr_screen.gf_curve				= gr_stub_curve;
756 
757 	gr_screen.gf_line				= gr_stub_line;
758 	gr_screen.gf_aaline				= gr_stub_aaline;
759 	gr_screen.gf_pixel				= gr_stub_pixel;
760 	gr_screen.gf_scaler				= gr_stub_scaler;
761 	gr_screen.gf_tmapper			= gr_stub_tmapper;
762 	gr_screen.gf_render				= gr_stub_render;
763 	gr_screen.gf_render_effect		= gr_stub_render_effect;
764 
765 	gr_screen.gf_gradient			= gr_stub_gradient;
766 
767 	gr_screen.gf_set_palette		= gr_stub_set_palette;
768 	gr_screen.gf_print_screen		= gr_stub_print_screen;
769 
770 	gr_screen.gf_fade_in			= gr_stub_fade_in;
771 	gr_screen.gf_fade_out			= gr_stub_fade_out;
772 	gr_screen.gf_flash				= gr_stub_flash;
773 	gr_screen.gf_flash_alpha		= gr_stub_flash_alpha;
774 
775 	gr_screen.gf_zbuffer_get		= gr_stub_zbuffer_get;
776 	gr_screen.gf_zbuffer_set		= gr_stub_zbuffer_set;
777 	gr_screen.gf_zbuffer_clear		= gr_stub_zbuffer_clear;
778 
779 	gr_screen.gf_stencil_set		= gr_stub_stencil_set;
780 	gr_screen.gf_stencil_clear		= gr_stub_stencil_clear;
781 
782 	gr_screen.gf_alpha_mask_set		= gr_stub_alpha_mask_set;
783 
784 	gr_screen.gf_save_screen		= gr_stub_save_screen;
785 	gr_screen.gf_restore_screen		= gr_stub_restore_screen;
786 	gr_screen.gf_free_screen		= gr_stub_free_screen;
787 
788 	gr_screen.gf_dump_frame_start	= gr_stub_dump_frame_start;
789 	gr_screen.gf_dump_frame_stop	= gr_stub_dump_frame_stop;
790 	gr_screen.gf_dump_frame			= gr_stub_dump_frame;
791 
792 	gr_screen.gf_set_gamma			= gr_stub_set_gamma;
793 
794 	gr_screen.gf_fog_set			= gr_stub_fog_set;
795 
796 	// UnknownPlayer : Don't recognize this - MAY NEED DEBUGGING
797 	gr_screen.gf_get_region			= gr_stub_get_region;
798 
799 	// now for the bitmap functions
800 	gr_screen.gf_bm_free_data			= gr_stub_bm_free_data;
801 	gr_screen.gf_bm_create				= gr_stub_bm_create;
802 	gr_screen.gf_bm_init				= gr_stub_bm_init;
803 	gr_screen.gf_bm_load				= gr_stub_bm_load;
804 	gr_screen.gf_bm_page_in_start		= gr_stub_bm_page_in_start;
805 	gr_screen.gf_bm_lock				= gr_stub_bm_lock;
806 	gr_screen.gf_bm_make_render_target	= gr_stub_bm_make_render_target;
807 	gr_screen.gf_bm_set_render_target	= gr_stub_bm_set_render_target;
808 
809 	gr_screen.gf_set_cull			= gr_stub_set_cull;
810 	gr_screen.gf_set_color_buffer	= gr_stub_set_color_buffer;
811 
812 	gr_screen.gf_cross_fade			= gr_stub_cross_fade;
813 
814 	gr_screen.gf_tcache_set			= gr_stub_tcache_set;
815 
816 	gr_screen.gf_set_clear_color	= gr_stub_set_clear_color;
817 
818 	gr_screen.gf_preload			= gr_stub_preload;
819 
820 	gr_screen.gf_push_texture_matrix		= gr_stub_push_texture_matrix;
821 	gr_screen.gf_pop_texture_matrix			= gr_stub_pop_texture_matrix;
822 	gr_screen.gf_translate_texture_matrix	= gr_stub_translate_texture_matrix;
823 
824 	gr_screen.gf_set_texture_addressing	= gr_stub_set_texture_addressing;
825 	gr_screen.gf_zbias					= gr_stub_zbias_stub;
826 	gr_screen.gf_set_fill_mode			= gr_set_fill_mode_stub;
827 	gr_screen.gf_set_texture_panning	= gr_stub_set_texture_panning;
828 
829 	gr_screen.gf_create_buffer		= gr_stub_create_buffer;
830 	gr_screen.gf_config_buffer		= gr_stub_config_buffer;
831 	gr_screen.gf_pack_buffer		= gr_stub_pack_buffer;
832 	gr_screen.gf_destroy_buffer		= gr_stub_destroy_buffer;
833 	gr_screen.gf_render_buffer		= gr_stub_render_buffer;
834 	gr_screen.gf_set_buffer			= gr_stub_set_buffer;
835 
836 	gr_screen.gf_create_stream_buffer		= gr_stub_create_stream_buffer;
837 	gr_screen.gf_update_stream_buffer		= gr_stub_update_stream_buffer;
838 	gr_screen.gf_render_stream_buffer		= gr_stub_render_stream_buffer;
839 	gr_screen.gf_render_stream_buffer_start	= gr_stub_render_stream_buffer_start;
840 	gr_screen.gf_render_stream_buffer_end	= gr_stub_render_stream_buffer_end;
841 
842 	gr_screen.gf_start_instance_matrix			= gr_stub_start_instance_matrix;
843 	gr_screen.gf_end_instance_matrix			= gr_stub_end_instance_matrix;
844 	gr_screen.gf_start_angles_instance_matrix	= gr_stub_start_instance_angles;
845 
846 	gr_screen.gf_make_light			= gr_stub_make_light;
847 	gr_screen.gf_modify_light		= gr_stub_modify_light;
848 	gr_screen.gf_destroy_light		= gr_stub_destroy_light;
849 	gr_screen.gf_set_light			= gr_stub_set_light;
850 	gr_screen.gf_reset_lighting		= gr_stub_reset_lighting;
851 	gr_screen.gf_set_ambient_light	= gr_stub_set_ambient_light;
852 
853 	gr_screen.gf_post_process_set_effect	= gr_stub_post_process_set_effect;
854 	gr_screen.gf_post_process_set_defaults	= gr_stub_post_process_set_defaults;
855 
856 	gr_screen.gf_post_process_begin		= gr_stub_post_process_begin;
857 	gr_screen.gf_post_process_end		= gr_stub_post_process_end;
858 	gr_screen.gf_post_process_save_zbuffer	= gr_stub_post_process_save_zbuffer;
859 
860 	gr_screen.gf_scene_texture_begin = gr_stub_scene_texture_begin;
861 	gr_screen.gf_scene_texture_end = gr_stub_scene_texture_end;
862 
863 	gr_screen.gf_start_clip_plane	= gr_stub_start_clip_plane;
864 	gr_screen.gf_end_clip_plane		= gr_stub_end_clip_plane;
865 
866 	gr_screen.gf_lighting			= gr_stub_set_lighting;
867 
868 	gr_screen.gf_set_proj_matrix	= gr_stub_set_projection_matrix;
869 	gr_screen.gf_end_proj_matrix	= gr_stub_end_projection_matrix;
870 
871 	gr_screen.gf_set_view_matrix	= gr_stub_set_view_matrix;
872 	gr_screen.gf_end_view_matrix	= gr_stub_end_view_matrix;
873 
874 	gr_screen.gf_push_scale_matrix	= gr_stub_push_scale_matrix;
875 	gr_screen.gf_pop_scale_matrix	= gr_stub_pop_scale_matrix;
876 	gr_screen.gf_center_alpha		= gr_stub_center_alpha;
877 
878 	gr_screen.gf_setup_background_fog	= gr_stub_setup_background_fog;
879 
880 	gr_screen.gf_start_state_block	= gr_stub_start_state_block;
881 	gr_screen.gf_end_state_block	= gr_stub_end_state_block;
882 	gr_screen.gf_set_state_block	= gr_stub_set_state_block;
883 
884 	gr_screen.gf_draw_line_list		= gr_stub_draw_line_list;
885 
886 	gr_screen.gf_set_line_width		= gr_stub_set_line_width;
887 
888 	gr_screen.gf_line_htl			= gr_stub_draw_htl_line;
889 	gr_screen.gf_sphere_htl			= gr_stub_draw_htl_sphere;
890 
891 	gr_screen.gf_maybe_create_shader = gr_stub_maybe_create_shader;
892 
893 	gr_screen.gf_flush_data_states	= gr_stub_flush_data_states;
894 
895 	gr_screen.gf_set_team_color		= gr_stub_set_team_color;
896 	gr_screen.gf_enable_team_color  = gr_stub_enable_team_color;
897 	gr_screen.gf_disable_team_color = gr_stub_disable_team_color;
898 
899 	gr_screen.gf_update_texture = gr_stub_update_texture;
900 	return true;
901 }
902