Files
fs2open.github.com/code/graphics/grd3d.h
T
bobboau ac3b174c27 forgot about this header in my last commit
git-svn-id: svn://svn.icculus.org/fs2open/trunk/fs2_open@3891 387891d4-d844-0410-90c0-e4c51a9137d3
2015-04-29 18:42:46 +10:00

294 lines
12 KiB
C

/*
* Copyright (C) Volition, Inc. 1999. All rights reserved.
*
* All source code herein is the property of Volition, Inc. You may not sell
* or otherwise commercially exploit the source or things you created based on the
* source.
*
*/
/*
* $Logfile: /Freespace2/code/Graphics/GrD3D.h $
* $Revision: 2.24 $
* $Date: 2007-01-11 07:08:45 $
* $Author: bobboau $
*
* Include file for our Direct3D renderer
*
* $Log: not supported by cvs2svn $
* Revision 2.23 2006/05/27 17:07:48 taylor
* remove grd3dparticle.* and grd3dbatch.*, they are obsolete
* allow us to build without D3D support under Windows (just define NO_DIRECT3D)
* clean up TMAP flags
* fix a couple of minor OpenGL state change issues with spec and env map rendering
* make sure we build again for OS X (OGL extension functions work a little different there)
* render targets always need to be power-of-2 to avoid incomplete buffer issues in the code
* when we disable culling in opengl_3dunlit be sure that we re-enable it on exit of function
* re-fix screenshots
* add true alpha blending support (with cmdline for now since the artwork has the catch up)
* draw lines with float positioning, to be more accurate with resizing on non-standard resolutions
* don't load cubemaps from file for D3D, not sure how to do it anyway
* update geometry batcher code, memory fixes, dynamic stuff, basic fixage, etc.
*
* Revision 2.22 2006/02/25 21:47:00 Goober5000
* spelling
*
* Revision 2.21 2006/01/18 16:14:04 taylor
* allow gr_render_buffer() to take TMAP flags
* let gr_render_buffer() render untextured polys (OGL only until some D3D people fix it on their side)
* add MR_SHOW_OUTLINE_HTL flag so we easily render using HTL mode for wireframe views
* make Interp_verts/Interp_norms/etc. dynamic and get rid of the extra htl_* versions
*
* Revision 2.20 2005/10/16 11:20:43 taylor
* use unsigned index buffers
*
* Revision 2.19 2005/07/13 02:50:47 Goober5000
* remove PreProcDefine #includes in FS2
* --Goober5000
*
* Revision 2.18 2005/04/05 05:53:17 taylor
* s/vector/vec3d/g, better support for different compilers (Jens Granseuer)
*
* Revision 2.17 2005/03/07 13:10:21 bobboau
* commit of render target code, d3d should be totaly functional,
* OGL still needs implementation.
*
* Revision 2.16 2004/08/11 05:06:24 Kazan
* added preprocdefines.h to prevent what happened with fred -- make sure to make all fred2 headers include this file as the _first_ include -- i have already modified fs2 files to do this
*
* Revision 2.15 2004/07/11 03:22:49 bobboau
* added the working decal code
*
* Revision 2.14 2004/07/05 05:09:19 bobboau
* FVF code, only the data that is needed is sent off to the card,,
* OGL can take advantage of this if they want but it won't break
* anything if they don't. also state block code has been implemented,
* that's totaly internal to D3D no high level code is involved.
*
* Revision 2.13 2004/07/01 01:12:31 bobboau
* implemented index buffered background bitmaps,
* OGL people you realy should get this implemented
*
* Revision 2.12 2004/06/28 02:13:07 bobboau
* high level index buffer suport and d3d implementation,
* OGL people need to get this working on your end as it's broke now
*
* Revision 2.11 2004/03/17 04:07:29 bobboau
* new fighter beam code
* fixed old after burner trails
* had to bump a few limits, working on some dynamic solutions
* a few fixed to background POF rendering
* fixing asorted bugs
*
* Revision 2.10 2004/02/20 21:45:41 randomtiger
* Removed some uneeded code between NO_DIRECT3D and added gr_zbias call, ogl is set to a stub func.
* Changed -htl param to -nohtl. Fixed some badly named functions to match convention.
* Fixed setup of center_alpha in OGL which was causing crash.
*
* Revision 2.9 2004/02/15 06:02:31 bobboau
* fixed sevral asorted matrix errors,
* OGL people make sure I didn't break anything,
* most of what I did was replaceing falses with (if graphicts_mode == D3D)
*
* Revision 2.8 2004/02/14 00:18:31 randomtiger
* Please note that from now on OGL will only run with a registry set by Launcher v4. See forum for details.
* OK, these changes effect a lot of file, I suggest everyone updates ASAP:
* Removal of many files from project.
* Removal of meanless Gr_bitmap_poly variable.
* Removal of glide, directdraw, software modules all links to them, and all code specific to those paths.
* Removal of redundant Fred paths that arent needed for Fred OGL.
* Have seriously tidied the graphics initialisation code and added generic non standard mode functionality.
* Fixed many D3D non standard mode bugs and brought OGL up to the same level.
* Removed texture section support for D3D8, voodoo 2 and 3 cards will no longer run under fs2_open in D3D, same goes for any card with a maximum texture size less than 1024.
*
* Revision 2.7 2003/11/17 04:25:56 bobboau
* made the poly list dynamicly alocated,
* started work on fixing the node model not rendering,
* but most of that got commented out so I wouldn't have to deal with it
* while mucking about with the polylist
*
* Revision 2.6 2003/11/01 21:59:21 bobboau
* new matrix handeling code, and fixed some problems with 3D lit verts,
* several other small fixes
*
* Revision 2.5 2003/10/25 03:26:39 phreak
* fixed some old bugs that reappeared after RT committed his texture code
*
* Revision 2.4 2003/10/23 18:03:24 randomtiger
* Bobs changes (take 2)
*
* Revision 2.3 2003/10/18 02:45:39 phreak
* edited gr_d3d_start_instance_matrix to make it take a vector* and a matrix*, but it doesn't do anything yet
*
* Revision 2.2 2003/10/17 17:18:42 randomtiger
* Big restructure for D3D and new modules grd3dlight and grd3dsetup
*
* Revision 2.1 2003/03/18 10:07:02 unknownplayer
* The big DX/main line merge. This has been uploaded to the main CVS since I can't manage to get it to upload to the DX branch. Apologies to all who may be affected adversely, but I'll work to debug it as fast as I can.
*
* Revision 2.0.2.5 2002/11/09 19:28:15 randomtiger
*
* Fixed small gfx initialisation bug that wasnt actually causing any problems.
* Tided DX code, shifted stuff around, removed some stuff and documented some stuff.
*
* Revision 2.0.2.4 2002/10/16 00:41:38 randomtiger
* Fixed small bug that was stopping unactive text from displaying greyed out
* Also added ability to run FS2 DX8 in 640x480, however I needed to make a small change to 2d.cpp
* which invloved calling the resolution processing code after initialising the device for D3D only.
* This is because D3D8 for the moment has its own internal launcher.
* Also I added a fair bit of documentation and tidied some stuff up. - RT
*
* Revision 2.0.2.3 2002/10/11 18:50:54 randomtiger
* Checked in fix for 16 bit problem, thanks to Righteous1
* Removed a fair bit of code that was used by the 16 bit code path which no longer exists.
* 32 bit and 16 bit should now work in exactly the same way. - RT
*
* Revision 2.0.2.2 2002/10/02 11:40:19 randomtiger
* Bmpmap has been reverted to an old non d3d8 version.
* All d3d8 code is now in the proper place.
* PCX code is now working to an extent. Problems with alpha though.
* Ani's work slowly with alpha problems.
* Also I have done a bit of tidying - RT
*
* Revision 2.0.2.1 2002/09/24 18:56:42 randomtiger
* DX8 branch commit
*
* This is the scub of UP's previous code with the more up to date RT code.
* For full details check previous dev e-mails
*
* Revision 2.0 2002/06/03 04:02:22 penguin
* Warpcore CVS sync
*
* Revision 1.1 2002/05/02 18:03:07 mharris
* Initial checkin - converted filenames and includes to lower case
*
*
* 6 9/13/99 11:25p Dave
* Fixed problem with mode-switching and D3D movies.
*
* 5 9/04/99 8:00p Dave
* Fixed up 1024 and 32 bit movie support.
*
* 4 6/29/99 10:35a Dave
* Interface polygon bitmaps! Whee!
*
* 3 1/15/99 11:29a Neilk
* Fixed D3D screen/texture pixel formatting problem.
*
* 2 10/07/98 10:52a Dave
* Initial checkin.
*
* 1 10/07/98 10:49a Dave
*
* 2 5/12/97 12:27p John
* Restructured Graphics Library to add support for multiple renderers.
*
* 1 5/01/97 2:17p John
*
* $NoKeywords: $
*/
#ifndef _GRD3D_H
#define _GRD3D_H
#ifndef NO_DIRECT3D
struct poly_list;
struct line_list;
struct colored_vector;
#include "globalincs/systemvars.h"
#include <d3dx8math.h>
void gr_d3d_exb_flush(int end_of_frame);
extern DWORD
initial_state_block,
defuse_state_block,
glow_mapped_defuse_state_block,
nonmapped_specular_state_block,
glow_mapped_nonmapped_specular_state_block,
mapped_specular_state_block,
cell_state_block,
glow_mapped_cell_state_block,
additive_glow_mapping_state_block,
//single_pass_specmapping_state_block,
//single_pass_glow_spec_mapping_state_block,
background_fog_state_block,
env_state_block,
cloak_state_block;
void d3d_start_frame();
void d3d_stop_frame();
void d3d_set_initial_render_state(bool set = false) ;
void set_stage_for_defuse(bool set = false);
void set_stage_for_glow_mapped_defuse(bool set = false);
void set_stage_for_defuse_and_non_mapped_spec(bool set = false);
void set_stage_for_glow_mapped_defuse_and_non_mapped_spec(bool set = false);
bool set_stage_for_spec_mapped(bool set = false);
void set_stage_for_cell_shaded(bool set = false);
void set_stage_for_cell_glowmapped_shaded(bool set = false);
void set_stage_for_additive_glowmapped(bool set = false);
void set_stage_for_background_fog(bool set = false);
bool set_stage_for_env_mapped(bool set = false);
//void set_stage_for_single_pass_specmapping(int SAME, bool set = true);
//void set_stage_for_single_pass_glow_specmapping(int SAME, bool set = true);
void gr_d3d_flip();
void gr_d3d_flip_cleanup();
void gr_d3d_fade_in(int instantaneous);
void gr_d3d_fade_out(int instantaneous);
int gr_d3d_save_screen();
void gr_d3d_restore_screen(int id);
void gr_d3d_free_screen(int id);
void gr_d3d_dump_frame_start(int first_frame, int frames_between_dumps);
void gr_d3d_flush_frame_dump();
void gr_d3d_dump_frame_stop();
void gr_d3d_dump_frame();
uint gr_d3d_lock();
void gr_d3d_unlock();
void gr_d3d_fog_set(int fog_mode, int r, int g, int b, float fog_near, float fog_far);
void gr_d3d_set_gamma(float gamma);
void gr_d3d_set_cull(int cull);
void gr_d3d_cross_fade(int bmap1, int bmap2, int x1, int y1, int x2, int y2, float pct);
void gr_d3d_filter_set(int filter);
void gr_d3d_set_clear_color(int r, int g, int b);
void gr_d3d_get_region(int front, int w, int h, ubyte *data);
int gr_d3d_make_buffer(poly_list *list, uint flags);
void gr_d3d_destroy_buffer(int idx);
void gr_d3d_render_buffer(int start, int n_prim, ushort* index_list, uint*, int flags);
void gr_d3d_set_buffer(int idx);
int gr_d3d_make_flat_buffer(poly_list *list);
int gr_d3d_make_line_buffer(line_list *list);
void gr_d3d_set_proj_matrix(float fov, float ratio, float n, float f);
void gr_d3d_end_proj_matrix();
void gr_d3d_set_view_matrix(vec3d* offset, matrix *orient);
void gr_d3d_end_view_matrix();
void gr_d3d_set_scale_matrix(vec3d* scale);
void gr_d3d_end_scale_matrix();
void gr_d3d_start_instance_matrix(vec3d*, matrix*);
void gr_d3d_start_angles_instance_matrix(vec3d* offset, angles *orient);
void gr_d3d_end_instance_matrix();
void d3d_set_texture_panning(float u, float v, bool enable);
void gr_d3d_start_clip();
void gr_d3d_end_clip();
extern ID3DXMatrixStack *world_matrix_stack;
extern ID3DXMatrixStack *view_matrix_stack;
extern ID3DXMatrixStack *proj_matrix_stack;
void gr_d3d_set_texture_addressing(int);
void gr_d3d_setup_background_fog(bool);
void gr_d3d_draw_line_list(colored_vector*lines, int num);
//void d3d_render_to_env(int FACE);
#endif // !NO_DIRECT3D
#endif