- GZDoom project files and GZDoom related changes to main ZDoom code

This commit is contained in:
Christoph Oelckers 2013-06-23 10:46:31 +02:00
parent a73d1b792c
commit b2bb24ea0a
7 changed files with 7355 additions and 12 deletions

7159
gzdoom.vcproj Normal file

File diff suppressed because it is too large Load diff

View file

@ -8,6 +8,7 @@ include( CheckCXXSourceCompiles )
include( CheckFunctionExists ) include( CheckFunctionExists )
include( CheckCXXCompilerFlag ) include( CheckCXXCompilerFlag )
include( FindPkgConfig ) include( FindPkgConfig )
include( FindOpenGL )
option( NO_ASM "Disable assembly code" ) option( NO_ASM "Disable assembly code" )
if( CMAKE_COMPILER_IS_GNUCXX ) if( CMAKE_COMPILER_IS_GNUCXX )
@ -201,6 +202,22 @@ else( WIN32 )
endif( FPU_CONTROL_DIR ) endif( FPU_CONTROL_DIR )
endif( WIN32 ) endif( WIN32 )
if( X64 )
set( NO_ASM ON )
endif( X64 )
# Check if we have OpenGL
if( NOT OPENGL_FOUND )
message( FATAL_ERROR "OpenGL is required for building." )
endif( NOT OPENGL_FOUND )
if( NOT OPENGL_GLU_FOUND )
message( FATAL_ERROR "OpenGL GLU is required for building." )
endif( NOT OPENGL_GLU_FOUND )
set( ZDOOM_LIBS ${ZDOOM_LIBS} ${OPENGL_LIBRARIES} )
include_directories( ${OPENGL_INCLUDE_DIR} )
# Decide on the name of the FMOD library we want to use. # Decide on the name of the FMOD library we want to use.
if( NOT FMOD_LIB_NAME AND MSVC ) if( NOT FMOD_LIB_NAME AND MSVC )
@ -528,6 +545,7 @@ if( WIN32 )
win32/i_movie.cpp win32/i_movie.cpp
win32/i_system.cpp win32/i_system.cpp
win32/st_start.cpp win32/st_start.cpp
win32/win32gliface.cpp
win32/win32video.cpp ) win32/win32video.cpp )
if( CMAKE_COMPILER_IS_GNUCXX ) if( CMAKE_COMPILER_IS_GNUCXX )
# CMake is not set up to compile and link rc files with GCC. :( # CMake is not set up to compile and link rc files with GCC. :(
@ -549,6 +567,7 @@ else( WIN32 )
sdl/i_main.cpp sdl/i_main.cpp
sdl/i_movie.cpp sdl/i_movie.cpp
sdl/i_system.cpp sdl/i_system.cpp
sdl/sdlglvideo.cpp
sdl/sdlvideo.cpp sdl/sdlvideo.cpp
sdl/st_start.cpp ) sdl/st_start.cpp )
if( APPLE ) if( APPLE )
@ -841,6 +860,57 @@ add_executable( zdoom WIN32
menu/playermenu.cpp menu/playermenu.cpp
menu/readthis.cpp menu/readthis.cpp
menu/videomenu.cpp menu/videomenu.cpp
gl/data/gl_sections.cpp
gl/data/gl_data.cpp
gl/data/gl_portaldata.cpp
gl/data/gl_setup.cpp
gl/data/gl_vertexbuffer.cpp
gl/dynlights/a_dynlight.cpp
gl/utility/gl_clock.cpp
gl/utility/gl_cycler.cpp
gl/utility/gl_geometric.cpp
gl/renderer/gl_renderer.cpp
gl/renderer/gl_renderstate.cpp
gl/renderer/gl_lightdata.cpp
gl/textures/gl_hwtexture.cpp
gl/textures/gl_texture.cpp
gl/textures/gl_material.cpp
gl/textures/gl_hirestex.cpp
gl/textures/gl_bitmap.cpp
gl/textures/gl_translate.cpp
gl/textures/gl_hqresize.cpp
gl/textures/gl_skyboxtexture.cpp
gl/scene/gl_bsp.cpp
gl/scene/gl_fakeflat.cpp
gl/scene/gl_clipper.cpp
gl/scene/gl_decal.cpp
gl/scene/gl_drawinfo.cpp
gl/scene/gl_flats.cpp
gl/scene/gl_walls.cpp
gl/scene/gl_sprite.cpp
gl/scene/gl_skydome.cpp
gl/scene/gl_renderhacks.cpp
gl/scene/gl_weapon.cpp
gl/scene/gl_scene.cpp
gl/scene/gl_sky.cpp
gl/scene/gl_portal.cpp
gl/scene/gl_walls_draw.cpp
gl/scene/gl_vertex.cpp
gl/scene/gl_spritelight.cpp
gl/dynlights/gl_dynlight.cpp
gl/dynlights/gl_glow.cpp
gl/dynlights/gl_dynlight1.cpp
gl/dynlights/gl_lightbuffer.cpp
gl/shaders/gl_shader.cpp
gl/shaders/gl_texshader.cpp
gl/system/gl_interface.cpp
gl/system/gl_framebuffer.cpp
gl/system/gl_menu.cpp
gl/system/gl_wipe.cpp
gl/models/gl_models_md3.cpp
gl/models/gl_models_md2.cpp
gl/models/gl_models.cpp
gl/models/gl_voxels.cpp
oplsynth/fmopl.cpp oplsynth/fmopl.cpp
oplsynth/mlopl.cpp oplsynth/mlopl.cpp
oplsynth/mlopl_io.cpp oplsynth/mlopl_io.cpp

View file

@ -1013,6 +1013,14 @@ public:
} }
bool HasSpecialDeathStates () const; bool HasSpecialDeathStates () const;
// begin of GZDoom specific additions
TArray<TObjPtr<AActor> > dynamiclights;
void * lightassociations;
bool hasmodel;
// end of GZDoom specific additions
size_t PropagateMark();
}; };
class FActorIterator class FActorIterator

View file

@ -44,6 +44,7 @@
#include "r_data/colormaps.h" #include "r_data/colormaps.h"
#ifdef _3DFLOORS #ifdef _3DFLOORS
EXTERN_CVAR(Int, vid_renderer)
//========================================================================== //==========================================================================
// //
@ -200,7 +201,7 @@ static void P_Add3DFloor(sector_t* sec, sector_t* sec2, line_t* master, int flag
// kg3D - software renderer only hack // kg3D - software renderer only hack
// this is really required because of ceilingclip and floorclip // this is really required because of ceilingclip and floorclip
if(flags & FF_BOTHPLANES) if((vid_renderer == 0) && (flags & FF_BOTHPLANES))
{ {
P_Add3DFloor(sec, sec2, master, FF_EXISTS | FF_THISINSIDE | FF_RENDERPLANES | FF_NOSHADE | FF_SEETHROUGH | FF_SHOOTTHROUGH | P_Add3DFloor(sec, sec2, master, FF_EXISTS | FF_THISINSIDE | FF_RENDERPLANES | FF_NOSHADE | FF_SEETHROUGH | FF_SHOOTTHROUGH |
(flags & (FF_INVERTSECTOR | FF_TRANSLUCENT | FF_ADDITIVETRANS)), alpha); (flags & (FF_INVERTSECTOR | FF_TRANSLUCENT | FF_ADDITIVETRANS)), alpha);

View file

@ -389,6 +389,9 @@ void P_SerializeWorld (FArchive &arc)
<< desaturate; << desaturate;
sec->ColorMap = GetSpecialLights (color, fade, desaturate); sec->ColorMap = GetSpecialLights (color, fade, desaturate);
} }
// begin of GZDoom additions
arc << sec->reflect[sector_t::ceiling] << sec->reflect[sector_t::floor];
// end of GZDoom additions
} }
// do lines // do lines

View file

@ -35,6 +35,9 @@
// to handle sound origins in sectors. // to handle sound origins in sectors.
// SECTORS do store MObjs anyway. // SECTORS do store MObjs anyway.
#include "actor.h" #include "actor.h"
struct FLightNode;
struct FGLSection;
struct seg_t;
#include "dthinker.h" #include "dthinker.h"
@ -81,15 +84,43 @@ struct vertex_t
{ {
fixed_t x, y; fixed_t x, y;
float fx, fy; // Floating point coordinates of this vertex (excluding polyoblect translation!)
angle_t viewangle; // precalculated angle for clipping
int angletime; // recalculation time for view angle
bool dirty; // something has changed and needs to be recalculated
int numheights;
int numsectors;
sector_t ** sectors;
float * heightlist;
vertex_t()
{
x = y = 0;
fx = fy = 0;
angletime = 0;
viewangle = 0;
dirty = true;
numheights = numsectors = 0;
sectors = NULL;
heightlist = NULL;
}
bool operator== (const vertex_t &other) bool operator== (const vertex_t &other)
{ {
return x == other.x && y == other.y; return x == other.x && y == other.y;
} }
bool operator!= (const vertex_t &other)
{
return x != other.x || y != other.y;
}
void clear() void clear()
{ {
x = y = 0; x = y = 0;
} }
angle_t GetClipAngle();
}; };
// Forward of LineDefs, for Sectors. // Forward of LineDefs, for Sectors.
@ -319,6 +350,12 @@ FArchive &operator<< (FArchive &arc, secplane_t &plane);
#include "p_3dfloors.h" #include "p_3dfloors.h"
struct subsector_t;
struct sector_t;
struct side_t;
extern bool gl_plane_reflection_i;
struct FPortal;
// Ceiling/floor flags // Ceiling/floor flags
enum enum
{ {
@ -723,6 +760,41 @@ struct sector_t
int sectornum; // for comparing sector copies int sectornum; // for comparing sector copies
extsector_t * e; // This stores data that requires construction/destruction. Such data must not be copied by R_FakeFlat. extsector_t * e; // This stores data that requires construction/destruction. Such data must not be copied by R_FakeFlat.
// GL only stuff starts here
float reflect[2];
int dirtyframe[3]; // last frame this sector was marked dirty
bool dirty; // marked for recalculation
bool transdoor; // For transparent door hacks
fixed_t transdoorheight; // for transparent door hacks
int subsectorcount; // list of subsectors
subsector_t ** subsectors;
FPortal * portals[2]; // floor and ceiling portals
enum
{
vbo_fakefloor = floor+2,
vbo_fakeceiling = ceiling+2,
};
int vboindex[4]; // VBO indices of the 4 planes this sector uses during rendering
fixed_t vboheight[2]; // Last calculated height for the 2 planes of this actual sector
int vbocount[2]; // Total count of vertices belonging to this sector's planes
#ifdef IBO_TEST
int iboindex[4]; // VBO indices of the 4 planes this sector uses during rendering
int ibocount;
#endif
float GetReflect(int pos) { return gl_plane_reflection_i? reflect[pos] : 0; }
bool VBOHeightcheck(int pos) const { return vboheight[pos] == GetPlaneTexZ(pos); }
enum
{
INVALIDATE_PLANES = 1,
INVALIDATE_OTHER = 2
};
}; };
FArchive &operator<< (FArchive &arc, sector_t::splane &p); FArchive &operator<< (FArchive &arc, sector_t::splane &p);
@ -877,6 +949,13 @@ struct side_t
vertex_t *V1() const; vertex_t *V1() const;
vertex_t *V2() const; vertex_t *V2() const;
//For GL
FLightNode * lighthead[2]; // all blended lights that may affect this wall
seg_t **segs; // all segs belonging to this sidedef in ascending order. Used for precise rendering
int numsegs;
}; };
FArchive &operator<< (FArchive &arc, side_t::part &p); FArchive &operator<< (FArchive &arc, side_t::part &p);
@ -957,6 +1036,11 @@ struct seg_t
// Sector references. Could be retrieved from linedef, too. // Sector references. Could be retrieved from linedef, too.
sector_t* frontsector; sector_t* frontsector;
sector_t* backsector; // NULL for one-sided lines sector_t* backsector; // NULL for one-sided lines
seg_t* PartnerSeg;
subsector_t* Subsector;
float sidefrac; // relative position of seg's ending vertex on owning sidedef
}; };
struct glsegextra_t struct glsegextra_t
@ -965,6 +1049,9 @@ struct glsegextra_t
subsector_t *Subsector; subsector_t *Subsector;
}; };
extern seg_t *segs;
// //
// A SubSector. // A SubSector.
// References a Sector. // References a Sector.
@ -979,6 +1066,12 @@ enum
SSECF_POLYORG = 4, SSECF_POLYORG = 4,
}; };
struct FPortalCoverage
{
DWORD * subsectors;
int sscount;
};
struct subsector_t struct subsector_t
{ {
sector_t *sector; sector_t *sector;
@ -990,6 +1083,13 @@ struct subsector_t
int flags; int flags;
void BuildPolyBSP(); void BuildPolyBSP();
// subsector related GL data
FLightNode * lighthead[2]; // Light nodes (blended and additive)
int validcount;
short mapsection;
char hacked; // 1: is part of a render hack
// 2: has one-sided walls
FPortalCoverage portalcoverage[2];
}; };

View file

@ -41,12 +41,12 @@ const char *GetVersionString();
/** Lots of different version numbers **/ /** Lots of different version numbers **/
#define VERSIONSTR "2.8pre" #define VERSIONSTR "1.9pre"
// The version as seen in the Windows resource // The version as seen in the Windows resource
#define RC_FILEVERSION 2,7,9999,0 #define RC_FILEVERSION 1,8,9999,0
#define RC_PRODUCTVERSION 2,7,9999,0 #define RC_PRODUCTVERSION 1,8,9999,0
#define RC_PRODUCTVERSION2 "2.8pre" #define RC_PRODUCTVERSION2 "1.9pre"
// Version identifier for network games. // Version identifier for network games.
// Bump it every time you do a release unless you're certain you // Bump it every time you do a release unless you're certain you
@ -82,21 +82,23 @@ const char *GetVersionString();
#define SAVEVERSTRINGIFY(x) #x #define SAVEVERSTRINGIFY(x) #x
#define SAVESIG "ZDOOMSAVE" SAVEVERSTRINGIFY(SAVEVER) #define SAVESIG "ZDOOMSAVE" SAVEVERSTRINGIFY(SAVEVER)
#define DYNLIGHT
// This is so that derivates can use the same savegame versions without worrying about engine compatibility // This is so that derivates can use the same savegame versions without worrying about engine compatibility
#define GAMESIG "ZDOOM" #define GAMESIG "GZDOOM"
#define BASEWAD "zdoom.pk3" #define BASEWAD "gzdoom.pk3"
// More stuff that needs to be different for derivatives. // More stuff that needs to be different for derivatives.
#define GAMENAME "ZDoom" #define GAMENAME "GZDoom"
#define FORUM_URL "http://forum.zdoom.org" #define FORUM_URL "http://forum.drdteam.org"
#define BUGS_FORUM_URL "http://forum.zdoom.org/index.php?c=3" #define BUGS_FORUM_URL "http://forum.drdteam.org/viewforum.php?f=24"
#ifdef unix #ifdef unix
#define GAME_DIR ".config/zdoom" #define GAME_DIR ".config/gzdoom"
#elif defined(__APPLE__) #elif defined(__APPLE__)
#define GAME_DIR GAMENAME #define GAME_DIR GAMENAME
#else #else
#define CDROM_DIR "C:\\ZDOOMDAT" #define CDROM_DIR "C:\\GZDOOMDAT"
#endif #endif