Port of Jimita's shader stuff + my lighting shader
Co-Authored-By: Jaime Passos <jimita@users.noreply.github.com>
This commit is contained in:
parent
7e0152f37b
commit
7851bef929
|
@ -2056,15 +2056,15 @@ void CV_SaveVariables(FILE *f)
|
||||||
for (cvar = consvar_vars; cvar; cvar = cvar->next)
|
for (cvar = consvar_vars; cvar; cvar = cvar->next)
|
||||||
if (cvar->flags & CV_SAVE)
|
if (cvar->flags & CV_SAVE)
|
||||||
{
|
{
|
||||||
char stringtowrite[MAXTEXTCMD+1];
|
char stringtrite[MAXTEXTCMD+1];
|
||||||
|
|
||||||
// Silly hack for Min/Max vars
|
// Silly hack for Min/Max vars
|
||||||
if (!strcmp(cvar->string, "MAX") || !strcmp(cvar->string, "MIN"))
|
if (!strcmp(cvar->string, "MAX") || !strcmp(cvar->string, "MIN"))
|
||||||
sprintf(stringtowrite, "%d", cvar->value);
|
sprintf(stringtrite, "%d", cvar->value);
|
||||||
else
|
else
|
||||||
strcpy(stringtowrite, cvar->string);
|
strcpy(stringtrite, cvar->string);
|
||||||
|
|
||||||
fprintf(f, "%s \"%s\"\n", cvar->name, stringtowrite);
|
fprintf(f, "%s \"%s\"\n", cvar->name, stringtrite);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4110,8 +4110,8 @@ static void readwipes(MYFILE *f)
|
||||||
else if (fastncmp(word, "SPECLEVEL_", 10))
|
else if (fastncmp(word, "SPECLEVEL_", 10))
|
||||||
{
|
{
|
||||||
pword = word + 10;
|
pword = word + 10;
|
||||||
if (fastcmp(pword, "TOWHITE"))
|
if (fastcmp(pword, "tHITE"))
|
||||||
wipeoffset = wipe_speclevel_towhite;
|
wipeoffset = wipe_speclevel_thite;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wipeoffset < 0)
|
if (wipeoffset < 0)
|
||||||
|
@ -4121,10 +4121,10 @@ static void readwipes(MYFILE *f)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value == UINT8_MAX
|
if (value == UINT8_MAX
|
||||||
&& (wipeoffset <= wipe_level_toblack || wipeoffset >= wipe_speclevel_towhite))
|
&& (wipeoffset <= wipe_level_toblack || wipeoffset >= wipe_speclevel_thite))
|
||||||
{
|
{
|
||||||
// Cannot disable non-toblack wipes
|
// Cannot disable non-toblack wipes
|
||||||
// (or the level toblack wipe, or the special towhite wipe)
|
// (or the level toblack wipe, or the special thite wipe)
|
||||||
deh_warning("Wipes: can't disable wipe of type '%s'", word);
|
deh_warning("Wipes: can't disable wipe of type '%s'", word);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,7 @@ typedef struct
|
||||||
{
|
{
|
||||||
INT16 textureoffset, rowoffset;
|
INT16 textureoffset, rowoffset;
|
||||||
char toptexture[8], bottomtexture[8], midtexture[8];
|
char toptexture[8], bottomtexture[8], midtexture[8];
|
||||||
// Front sector, towards viewer.
|
// Front sector, tards viewer.
|
||||||
INT16 sector;
|
INT16 sector;
|
||||||
} ATTRPACK mapsidedef_t;
|
} ATTRPACK mapsidedef_t;
|
||||||
|
|
||||||
|
|
|
@ -495,6 +495,9 @@ extern INT32 cv_debug;
|
||||||
extern UINT8 shiftdown, ctrldown, altdown;
|
extern UINT8 shiftdown, ctrldown, altdown;
|
||||||
extern boolean capslock;
|
extern boolean capslock;
|
||||||
|
|
||||||
|
// WARNING: a should be unsigned but to add with 2048, it isn't!
|
||||||
|
#define AIMINGTODY(a) (FINETANGENT((2048+(((INT32)a)>>ANGLETOFINESHIFT)) & FINEMASK)*160)
|
||||||
|
|
||||||
// if we ever make our alloc stuff...
|
// if we ever make our alloc stuff...
|
||||||
#define ZZ_Alloc(x) Z_Malloc(x, PU_STATIC, NULL)
|
#define ZZ_Alloc(x) Z_Malloc(x, PU_STATIC, NULL)
|
||||||
#define ZZ_Calloc(x) Z_Calloc(x, PU_STATIC, NULL)
|
#define ZZ_Calloc(x) Z_Calloc(x, PU_STATIC, NULL)
|
||||||
|
@ -612,17 +615,13 @@ extern const char *compdate, *comptime, *comprevision, *compbranch;
|
||||||
/// SRB2CB itself ported this from PrBoom+
|
/// SRB2CB itself ported this from PrBoom+
|
||||||
#define NEWCLIP
|
#define NEWCLIP
|
||||||
|
|
||||||
|
/// Hardware renderer: OpenGL
|
||||||
|
#define GL_SHADERS
|
||||||
|
|
||||||
/// Handle touching sector specials in P_PlayerAfterThink instead of P_PlayerThink.
|
/// Handle touching sector specials in P_PlayerAfterThink instead of P_PlayerThink.
|
||||||
/// \note Required for proper collision with moving sloped surfaces that have sector specials on them.
|
/// \note Required for proper collision with moving sloped surfaces that have sector specials on them.
|
||||||
#define SECTORSPECIALSAFTERTHINK
|
#define SECTORSPECIALSAFTERTHINK
|
||||||
|
|
||||||
/// FINALLY some real clipping that doesn't make walls dissappear AND speeds the game up
|
|
||||||
/// (that was the original comment from SRB2CB, sadly it is a lie and actually slows game down)
|
|
||||||
/// on the bright side it fixes some weird issues with translucent walls
|
|
||||||
/// \note SRB2CB port.
|
|
||||||
/// SRB2CB itself ported this from PrBoom+
|
|
||||||
#define NEWCLIP
|
|
||||||
|
|
||||||
/// Sprite rotation
|
/// Sprite rotation
|
||||||
#define ROTSPRITE
|
#define ROTSPRITE
|
||||||
#define ROTANGLES 24 // Needs to be a divisor of 360 (45, 60, 90, 120...)
|
#define ROTANGLES 24 // Needs to be a divisor of 360 (45, 60, 90, 120...)
|
||||||
|
|
|
@ -233,7 +233,7 @@ static tic_t cutscene_lasttextwrite = 0;
|
||||||
//
|
//
|
||||||
static UINT8 F_WriteText(void)
|
static UINT8 F_WriteText(void)
|
||||||
{
|
{
|
||||||
INT32 numtowrite = 1;
|
INT32 numtrite = 1;
|
||||||
const char *c;
|
const char *c;
|
||||||
tic_t ltw = I_GetTime();
|
tic_t ltw = I_GetTime();
|
||||||
|
|
||||||
|
@ -244,7 +244,7 @@ static UINT8 F_WriteText(void)
|
||||||
if (cutscene_boostspeed)
|
if (cutscene_boostspeed)
|
||||||
{
|
{
|
||||||
// for custom cutscene speedup mode
|
// for custom cutscene speedup mode
|
||||||
numtowrite = 8;
|
numtrite = 8;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -253,10 +253,10 @@ static UINT8 F_WriteText(void)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (cutscene_textspeed < 7)
|
if (cutscene_textspeed < 7)
|
||||||
numtowrite = 8 - cutscene_textspeed;
|
numtrite = 8 - cutscene_textspeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;numtowrite > 0;++cutscene_baseptr)
|
for (;numtrite > 0;++cutscene_baseptr)
|
||||||
{
|
{
|
||||||
c = &cutscene_basetext[cutscene_baseptr];
|
c = &cutscene_basetext[cutscene_baseptr];
|
||||||
if (!c || !*c || *c=='#')
|
if (!c || !*c || *c=='#')
|
||||||
|
@ -272,7 +272,7 @@ static UINT8 F_WriteText(void)
|
||||||
else if ((UINT8)*c >= 0xB0 && (UINT8)*c <= (0xB0+TICRATE-1))
|
else if ((UINT8)*c >= 0xB0 && (UINT8)*c <= (0xB0+TICRATE-1))
|
||||||
{
|
{
|
||||||
cutscene_textcount = (INT32)((UINT8)*c - 0xAF);
|
cutscene_textcount = (INT32)((UINT8)*c - 0xAF);
|
||||||
numtowrite = 0;
|
numtrite = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -280,7 +280,7 @@ static UINT8 F_WriteText(void)
|
||||||
|
|
||||||
// Ignore other control codes (color)
|
// Ignore other control codes (color)
|
||||||
if ((UINT8)*c < 0x80)
|
if ((UINT8)*c < 0x80)
|
||||||
--numtowrite;
|
--numtrite;
|
||||||
}
|
}
|
||||||
// Reset textcount for next tic based on speed
|
// Reset textcount for next tic based on speed
|
||||||
// if it wasn't already set by a delay.
|
// if it wasn't already set by a delay.
|
||||||
|
|
|
@ -154,7 +154,7 @@ typedef enum
|
||||||
{
|
{
|
||||||
WSF_FADEOUT = 1,
|
WSF_FADEOUT = 1,
|
||||||
WSF_FADEIN = 1<<1,
|
WSF_FADEIN = 1<<1,
|
||||||
WSF_TOWHITE = 1<<2,
|
WSF_tHITE = 1<<2,
|
||||||
WSF_CROSSFADE = 1<<3,
|
WSF_CROSSFADE = 1<<3,
|
||||||
} wipestyleflags_t;
|
} wipestyleflags_t;
|
||||||
extern wipestyleflags_t wipestyleflags;
|
extern wipestyleflags_t wipestyleflags;
|
||||||
|
@ -199,7 +199,7 @@ enum
|
||||||
// custom intermissions
|
// custom intermissions
|
||||||
wipe_specinter_toblack,
|
wipe_specinter_toblack,
|
||||||
wipe_multinter_toblack,
|
wipe_multinter_toblack,
|
||||||
wipe_speclevel_towhite,
|
wipe_speclevel_thite,
|
||||||
|
|
||||||
wipe_level_final,
|
wipe_level_final,
|
||||||
wipe_intermission_final,
|
wipe_intermission_final,
|
||||||
|
|
|
@ -68,7 +68,7 @@ UINT8 wipedefs[NUMWIPEDEFS] = {
|
||||||
|
|
||||||
0, // wipe_specinter_toblack
|
0, // wipe_specinter_toblack
|
||||||
0, // wipe_multinter_toblack
|
0, // wipe_multinter_toblack
|
||||||
0, // wipe_speclevel_towhite
|
0, // wipe_speclevel_thite
|
||||||
|
|
||||||
0, // wipe_level_final
|
0, // wipe_level_final
|
||||||
0, // wipe_intermission_final
|
0, // wipe_intermission_final
|
||||||
|
@ -298,7 +298,7 @@ static void F_DoWipe(fademask_t *fademask)
|
||||||
int nmask;
|
int nmask;
|
||||||
UINT8 *fade = fadecolormap;
|
UINT8 *fade = fadecolormap;
|
||||||
|
|
||||||
if (wipestyleflags & WSF_TOWHITE)
|
if (wipestyleflags & WSF_tHITE)
|
||||||
fade = fadecolormap + (FADECOLORMAPROWS * 256);
|
fade = fadecolormap + (FADECOLORMAPROWS * 256);
|
||||||
|
|
||||||
nmask = *mask;
|
nmask = *mask;
|
||||||
|
|
|
@ -77,8 +77,8 @@
|
||||||
#include "r_opengl/r_opengl.h"
|
#include "r_opengl/r_opengl.h"
|
||||||
|
|
||||||
#ifdef HAVE_SPHEREFRUSTRUM
|
#ifdef HAVE_SPHEREFRUSTRUM
|
||||||
static GLfloat viewMatrix[16];
|
static GLdouble viewMatrix[16];
|
||||||
static GLfloat projMatrix[16];
|
static GLdouble projMatrix[16];
|
||||||
float frustum[6][4];
|
float frustum[6][4];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -319,12 +319,12 @@ void gld_clipper_Clear(void)
|
||||||
|
|
||||||
#define RMUL (1.6f/1.333333f)
|
#define RMUL (1.6f/1.333333f)
|
||||||
|
|
||||||
angle_t gld_FrustumAngle(void)
|
angle_t gld_FrustumAngle(angle_t tiltangle)
|
||||||
{
|
{
|
||||||
double floatangle;
|
double floatangle;
|
||||||
angle_t a1;
|
angle_t a1;
|
||||||
|
|
||||||
float tilt = (float)fabs(((double)(int)aimingangle) / ANG1);
|
float tilt = (float)fabs(((double)(int)tiltangle) / ANG1);
|
||||||
|
|
||||||
// NEWCLIP TODO: SRB2CBTODO: make a global render_fov for this function
|
// NEWCLIP TODO: SRB2CBTODO: make a global render_fov for this function
|
||||||
|
|
||||||
|
@ -338,7 +338,7 @@ angle_t gld_FrustumAngle(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the pitch is larger than this you can look all around at a FOV of 90
|
// If the pitch is larger than this you can look all around at a FOV of 90
|
||||||
if (abs((signed)aimingangle) > 46 * ANG1)
|
if (abs((signed)tiltangle) > 46 * ANG1)
|
||||||
return 0xffffffff;
|
return 0xffffffff;
|
||||||
|
|
||||||
// ok, this is a gross hack that barely works...
|
// ok, this is a gross hack that barely works...
|
||||||
|
@ -351,7 +351,7 @@ angle_t gld_FrustumAngle(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SRB2CB I don't think used any of this stuff, let's disable for now since SRB2 probably doesn't want it either
|
// SRB2CB I don't think used any of this stuff, let's disable for now since SRB2 probably doesn't want it either
|
||||||
// compiler complains about (p)glGetDoublev anyway, in case anyone wants this
|
// compiler complains about (p)glGetFloatv anyway, in case anyone wants this
|
||||||
// only r_opengl.c can use the base gl funcs as it turns out, that's a problem for whoever wants sphere frustum checks
|
// only r_opengl.c can use the base gl funcs as it turns out, that's a problem for whoever wants sphere frustum checks
|
||||||
// btw to renable define HAVE_SPHEREFRUSTRUM in hw_clip.h
|
// btw to renable define HAVE_SPHEREFRUSTRUM in hw_clip.h
|
||||||
#ifdef HAVE_SPHEREFRUSTRUM
|
#ifdef HAVE_SPHEREFRUSTRUM
|
||||||
|
@ -380,7 +380,7 @@ void gld_FrustrumSetup(void)
|
||||||
float t;
|
float t;
|
||||||
float clip[16];
|
float clip[16];
|
||||||
|
|
||||||
pglGeFloatv(GL_PROJECTION_MATRIX, projMatrix);
|
pglGetFloatv(GL_PROJECTION_MATRIX, projMatrix);
|
||||||
pglGetFloatv(GL_MODELVIEW_MATRIX, viewMatrix);
|
pglGetFloatv(GL_MODELVIEW_MATRIX, viewMatrix);
|
||||||
|
|
||||||
clip[0] = CALCMATRIX(0, 0, 1, 4, 2, 8, 3, 12);
|
clip[0] = CALCMATRIX(0, 0, 1, 4, 2, 8, 3, 12);
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
boolean gld_clipper_SafeCheckRange(angle_t startAngle, angle_t endAngle);
|
boolean gld_clipper_SafeCheckRange(angle_t startAngle, angle_t endAngle);
|
||||||
void gld_clipper_SafeAddClipRange(angle_t startangle, angle_t endangle);
|
void gld_clipper_SafeAddClipRange(angle_t startangle, angle_t endangle);
|
||||||
void gld_clipper_Clear(void);
|
void gld_clipper_Clear(void);
|
||||||
angle_t gld_FrustumAngle(void);
|
angle_t gld_FrustumAngle(angle_t tiltangle);
|
||||||
#ifdef HAVE_SPHEREFRUSTRUM
|
#ifdef HAVE_SPHEREFRUSTRUM
|
||||||
void gld_FrustrumSetup(void);
|
void gld_FrustrumSetup(void);
|
||||||
boolean gld_SphereInFrustum(float x, float y, float z, float radius);
|
boolean gld_SphereInFrustum(float x, float y, float z, float radius);
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#ifndef _HWR_DEFS_
|
#ifndef _HWR_DEFS_
|
||||||
#define _HWR_DEFS_
|
#define _HWR_DEFS_
|
||||||
#include "../doomtype.h"
|
#include "../doomtype.h"
|
||||||
|
#include "../r_defs.h"
|
||||||
|
|
||||||
#define ZCLIP_PLANE 4.0f // Used for the actual game drawing
|
#define ZCLIP_PLANE 4.0f // Used for the actual game drawing
|
||||||
#define NZCLIP_PLANE 0.9f // Seems to be only used for the HUD and screen textures
|
#define NZCLIP_PLANE 0.9f // Seems to be only used for the HUD and screen textures
|
||||||
|
@ -79,19 +80,15 @@ typedef struct
|
||||||
FLOAT x,y;
|
FLOAT x,y;
|
||||||
} F2DCoord, v2d_t;
|
} F2DCoord, v2d_t;
|
||||||
|
|
||||||
// Simple 3D vector
|
// ======================
|
||||||
typedef struct FVector
|
// wallVert3D
|
||||||
{
|
// ----------------------
|
||||||
FLOAT x,y,z;
|
// :crab: IS GONE! :crab:
|
||||||
} FVector;
|
// ======================
|
||||||
|
|
||||||
// 3D model vector (coords + texture coords)
|
// -----------
|
||||||
typedef struct
|
// structures
|
||||||
{
|
// -----------
|
||||||
//FVector Point;
|
|
||||||
FLOAT x,y,z;
|
|
||||||
FLOAT s,t,w; // texture coordinates
|
|
||||||
} v3d_t, wallVert3D;
|
|
||||||
|
|
||||||
//Hurdler: Transform (coords + angles)
|
//Hurdler: Transform (coords + angles)
|
||||||
//BP: transform order : scale(rotation_x(rotation_y(translation(v))))
|
//BP: transform order : scale(rotation_x(rotation_y(translation(v))))
|
||||||
|
@ -125,15 +122,16 @@ typedef struct
|
||||||
#ifdef USE_FTRANSFORM_MIRROR
|
#ifdef USE_FTRANSFORM_MIRROR
|
||||||
boolean mirror; // SRB2Kart: Encore Mode
|
boolean mirror; // SRB2Kart: Encore Mode
|
||||||
#endif
|
#endif
|
||||||
|
boolean shearing; // 14042019
|
||||||
|
angle_t viewaiming; // 17052019
|
||||||
} FTransform;
|
} FTransform;
|
||||||
|
|
||||||
// Transformed vector, as passed to HWR API
|
// Transformed vector, as passed to HWR API
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
FLOAT x,y,z;
|
FLOAT x,y,z;
|
||||||
FUINT argb; // flat-shaded color
|
FLOAT s; // s texture ordinate (s over w)
|
||||||
FLOAT sow; // s texture ordinate (s over w)
|
FLOAT t; // t texture ordinate (t over w)
|
||||||
FLOAT tow; // t texture ordinate (t over w)
|
|
||||||
} FOutVector;
|
} FOutVector;
|
||||||
|
|
||||||
|
|
||||||
|
@ -164,10 +162,10 @@ enum EPolyFlags
|
||||||
PF_Invisible = 0x00000400, // Disable write to color buffer
|
PF_Invisible = 0x00000400, // Disable write to color buffer
|
||||||
PF_Decal = 0x00000800, // Enable polygon offset
|
PF_Decal = 0x00000800, // Enable polygon offset
|
||||||
PF_Modulated = 0x00001000, // Modulation (multiply output with constant ARGB)
|
PF_Modulated = 0x00001000, // Modulation (multiply output with constant ARGB)
|
||||||
// When set, pass the color constant into the FSurfaceInfo -> FlatColor
|
// When set, pass the color constant into the FSurfaceInfo -> PolyColor
|
||||||
PF_NoTexture = 0x00002000, // Use the small white texture
|
PF_NoTexture = 0x00002000, // Use the small white texture
|
||||||
PF_Corona = 0x00004000, // Tell the rendrer we are drawing a corona
|
PF_Corona = 0x00004000, // Tell the rendrer we are drawing a corona
|
||||||
PF_Unused = 0x00008000, // Unused
|
PF_Ripple = 0x00008000, // Water shader effect
|
||||||
PF_RemoveYWrap = 0x00010000, // Force clamp texture on Y
|
PF_RemoveYWrap = 0x00010000, // Force clamp texture on Y
|
||||||
PF_ForceWrapX = 0x00020000, // Force repeat texture on X
|
PF_ForceWrapX = 0x00020000, // Force repeat texture on X
|
||||||
PF_ForceWrapY = 0x00040000, // Force repeat texture on Y
|
PF_ForceWrapY = 0x00040000, // Force repeat texture on Y
|
||||||
|
@ -180,7 +178,6 @@ enum EPolyFlags
|
||||||
enum ESurfFlags
|
enum ESurfFlags
|
||||||
{
|
{
|
||||||
SF_DYNLIGHT = 0x00000001,
|
SF_DYNLIGHT = 0x00000001,
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ETextureFlags
|
enum ETextureFlags
|
||||||
|
@ -192,31 +189,31 @@ enum ETextureFlags
|
||||||
TF_TRANSPARENT = 0x00000040, // texture with some alpha == 0
|
TF_TRANSPARENT = 0x00000040, // texture with some alpha == 0
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef TODO
|
|
||||||
struct FTextureInfo
|
|
||||||
{
|
|
||||||
FUINT Width; // Pixels
|
|
||||||
FUINT Height; // Pixels
|
|
||||||
FUBYTE *TextureData; // Image data
|
|
||||||
FUINT Format; // FORMAT_RGB, ALPHA ...
|
|
||||||
FBITFIELD Flags; // Flags to tell driver about texture (see ETextureFlags)
|
|
||||||
void DriverExtra; // (OpenGL texture object nr, ...)
|
|
||||||
// chromakey enabled,...
|
|
||||||
|
|
||||||
struct FTextureInfo *Next; // Manage list of downloaded textures.
|
|
||||||
};
|
|
||||||
#else
|
|
||||||
typedef struct GLMipmap_s FTextureInfo;
|
typedef struct GLMipmap_s FTextureInfo;
|
||||||
#endif
|
|
||||||
|
// jimita 14032019
|
||||||
|
struct FLightInfo
|
||||||
|
{
|
||||||
|
FUINT light_level;
|
||||||
|
FUINT fade_start;
|
||||||
|
FUINT fade_end;
|
||||||
|
};
|
||||||
|
typedef struct FLightInfo FLightInfo;
|
||||||
|
|
||||||
// Description of a renderable surface
|
// Description of a renderable surface
|
||||||
struct FSurfaceInfo
|
struct FSurfaceInfo
|
||||||
{
|
{
|
||||||
FUINT PolyFlags; // Surface flags -- UNUSED YET --
|
FUINT PolyFlags;
|
||||||
RGBA_t FlatColor; // Flat-shaded color used with PF_Modulated mode
|
RGBA_t PolyColor;
|
||||||
|
RGBA_t TintColor;
|
||||||
|
RGBA_t FadeColor;
|
||||||
|
FLightInfo LightInfo; // jimita 14032019
|
||||||
};
|
};
|
||||||
typedef struct FSurfaceInfo FSurfaceInfo;
|
typedef struct FSurfaceInfo FSurfaceInfo;
|
||||||
|
|
||||||
|
#define GL_DEFAULTMIX 0x00000000
|
||||||
|
#define GL_DEFAULTFOG 0xFF000000
|
||||||
|
|
||||||
//Hurdler: added for backward compatibility
|
//Hurdler: added for backward compatibility
|
||||||
enum hwdsetspecialstate
|
enum hwdsetspecialstate
|
||||||
{
|
{
|
||||||
|
@ -224,6 +221,7 @@ enum hwdsetspecialstate
|
||||||
HWD_SET_FOG_MODE,
|
HWD_SET_FOG_MODE,
|
||||||
HWD_SET_FOG_COLOR,
|
HWD_SET_FOG_COLOR,
|
||||||
HWD_SET_FOG_DENSITY,
|
HWD_SET_FOG_DENSITY,
|
||||||
|
HWD_SET_SHADERS,
|
||||||
HWD_SET_TEXTUREFILTERMODE,
|
HWD_SET_TEXTUREFILTERMODE,
|
||||||
HWD_SET_TEXTUREANISOTROPICMODE,
|
HWD_SET_TEXTUREANISOTROPICMODE,
|
||||||
HWD_NUMSTATE
|
HWD_NUMSTATE
|
||||||
|
|
|
@ -54,8 +54,6 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef void (*I_Error_t) (const char *error, ...) FUNCIERROR;
|
|
||||||
|
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
// MATHS
|
// MATHS
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
|
@ -63,7 +61,8 @@ typedef void (*I_Error_t) (const char *error, ...) FUNCIERROR;
|
||||||
// Constants
|
// Constants
|
||||||
#define DEGREE (0.017453292519943295769236907684883l) // 2*PI/360
|
#define DEGREE (0.017453292519943295769236907684883l) // 2*PI/360
|
||||||
|
|
||||||
void DBG_Printf(const char *lpFmt, ...) /*FUNCPRINTF*/;
|
void GL_DBG_Printf(const char *format, ...) /*FUNCPRINTF*/;
|
||||||
|
#define GL_DBG_Printf GL_DBG_Printf
|
||||||
|
|
||||||
#ifdef _WINDOWS
|
#ifdef _WINDOWS
|
||||||
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved);
|
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved);
|
||||||
|
|
|
@ -1,17 +1,12 @@
|
||||||
// Emacs style mode select -*- C++ -*-
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
|
// Copyright (C) 1999-2019 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or
|
// This program is free software distributed under the
|
||||||
// modify it under the terms of the GNU General Public License
|
// terms of the GNU General Public License, version 2.
|
||||||
// as published by the Free Software Foundation; either version 2
|
// See the 'LICENSE' file for more details.
|
||||||
// of the License, or (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
/// \file
|
/// \file
|
||||||
/// \brief miscellaneous drawing (mainly 2d)
|
/// \brief miscellaneous drawing (mainly 2d)
|
||||||
|
@ -23,6 +18,7 @@
|
||||||
#include "../doomdef.h"
|
#include "../doomdef.h"
|
||||||
|
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
|
#include "hw_main.h"
|
||||||
#include "hw_glob.h"
|
#include "hw_glob.h"
|
||||||
#include "hw_drv.h"
|
#include "hw_drv.h"
|
||||||
|
|
||||||
|
@ -43,9 +39,6 @@
|
||||||
#define O_BINARY 0
|
#define O_BINARY 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
float gr_patch_scalex;
|
|
||||||
float gr_patch_scaley;
|
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
#pragma pack(1)
|
#pragma pack(1)
|
||||||
#endif
|
#endif
|
||||||
|
@ -65,9 +58,6 @@ typedef struct
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
#endif
|
#endif
|
||||||
typedef UINT8 GLRGB[3];
|
|
||||||
|
|
||||||
#define BLENDMODE PF_Translucent
|
|
||||||
|
|
||||||
static UINT8 softwaretranstogl[11] = { 0, 25, 51, 76,102,127,153,178,204,229,255};
|
static UINT8 softwaretranstogl[11] = { 0, 25, 51, 76,102,127,153,178,204,229,255};
|
||||||
static UINT8 softwaretranstogl_hi[11] = { 0, 51,102,153,204,255,255,255,255,255,255};
|
static UINT8 softwaretranstogl_hi[11] = { 0, 51,102,153,204,255,255,255,255,255,255};
|
||||||
|
@ -121,12 +111,12 @@ void HWR_DrawPatch(GLPatch_t *gpatch, INT32 x, INT32 y, INT32 option)
|
||||||
|
|
||||||
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
||||||
|
|
||||||
v[0].sow = v[3].sow = 0.0f;
|
v[0].s = v[3].s = 0.0f;
|
||||||
v[2].sow = v[1].sow = gpatch->max_s;
|
v[2].s = v[1].s = gpatch->max_s;
|
||||||
v[0].tow = v[1].tow = 0.0f;
|
v[0].t = v[1].t = 0.0f;
|
||||||
v[2].tow = v[3].tow = gpatch->max_t;
|
v[2].t = v[3].t = gpatch->max_t;
|
||||||
|
|
||||||
flags = BLENDMODE|PF_Clip|PF_NoZClip|PF_NoDepthTest;
|
flags = PF_Translucent|PF_NoDepthTest;
|
||||||
|
|
||||||
if (option & V_WRAPX)
|
if (option & V_WRAPX)
|
||||||
flags |= PF_ForceWrapX;
|
flags |= PF_ForceWrapX;
|
||||||
|
@ -356,19 +346,19 @@ void HWR_DrawStretchyFixedPatch(GLPatch_t *gpatch, fixed_t x, fixed_t y, fixed_t
|
||||||
|
|
||||||
if (option & V_FLIP)
|
if (option & V_FLIP)
|
||||||
{
|
{
|
||||||
v[0].sow = v[3].sow = gpatch->max_s;
|
v[0].s = v[3].s = gpatch->max_s;
|
||||||
v[2].sow = v[1].sow = 0.0f;
|
v[2].s = v[1].s = 0.0f;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
v[0].sow = v[3].sow = 0.0f;
|
v[0].s = v[3].s = 0.0f;
|
||||||
v[2].sow = v[1].sow = gpatch->max_s;
|
v[2].s = v[1].s = gpatch->max_s;
|
||||||
}
|
}
|
||||||
|
|
||||||
v[0].tow = v[1].tow = 0.0f;
|
v[0].t = v[1].t = 0.0f;
|
||||||
v[2].tow = v[3].tow = gpatch->max_t;
|
v[2].t = v[3].t = gpatch->max_t;
|
||||||
|
|
||||||
flags = BLENDMODE|PF_Clip|PF_NoZClip|PF_NoDepthTest;
|
flags = PF_Translucent|PF_NoDepthTest;
|
||||||
|
|
||||||
if (option & V_WRAPX)
|
if (option & V_WRAPX)
|
||||||
flags |= PF_ForceWrapX;
|
flags |= PF_ForceWrapX;
|
||||||
|
@ -379,11 +369,11 @@ void HWR_DrawStretchyFixedPatch(GLPatch_t *gpatch, fixed_t x, fixed_t y, fixed_t
|
||||||
if (alphalevel)
|
if (alphalevel)
|
||||||
{
|
{
|
||||||
FSurfaceInfo Surf;
|
FSurfaceInfo Surf;
|
||||||
Surf.FlatColor.s.red = Surf.FlatColor.s.green = Surf.FlatColor.s.blue = 0xff;
|
Surf.PolyColor.s.red = Surf.PolyColor.s.green = Surf.PolyColor.s.blue = 0xff;
|
||||||
if (alphalevel == 13) Surf.FlatColor.s.alpha = softwaretranstogl_lo[st_translucency];
|
if (alphalevel == 13) Surf.PolyColor.s.alpha = softwaretranstogl_lo[cv_translucenthud.value];
|
||||||
else if (alphalevel == 14) Surf.FlatColor.s.alpha = softwaretranstogl[st_translucency];
|
else if (alphalevel == 14) Surf.PolyColor.s.alpha = softwaretranstogl[cv_translucenthud.value];
|
||||||
else if (alphalevel == 15) Surf.FlatColor.s.alpha = softwaretranstogl_hi[st_translucency];
|
else if (alphalevel == 15) Surf.PolyColor.s.alpha = softwaretranstogl_hi[cv_translucenthud.value];
|
||||||
else Surf.FlatColor.s.alpha = softwaretranstogl[10-alphalevel];
|
else Surf.PolyColor.s.alpha = softwaretranstogl[10-alphalevel];
|
||||||
flags |= PF_Modulated;
|
flags |= PF_Modulated;
|
||||||
HWD.pfnDrawPolygon(&Surf, v, 4, flags);
|
HWD.pfnDrawPolygon(&Surf, v, 4, flags);
|
||||||
}
|
}
|
||||||
|
@ -514,19 +504,19 @@ void HWR_DrawCroppedPatch(GLPatch_t *gpatch, fixed_t x, fixed_t y, fixed_t pscal
|
||||||
|
|
||||||
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
||||||
|
|
||||||
v[0].sow = v[3].sow = ((sx )/(float)SHORT(gpatch->width) )*gpatch->max_s;
|
v[0].s = v[3].s = ((sx )/(float)SHORT(gpatch->width) )*gpatch->max_s;
|
||||||
if (sx + w > SHORT(gpatch->width))
|
if (sx + w > SHORT(gpatch->width))
|
||||||
v[2].sow = v[1].sow = gpatch->max_s;
|
v[2].s = v[1].s = gpatch->max_s;
|
||||||
else
|
else
|
||||||
v[2].sow = v[1].sow = ((sx+w)/(float)SHORT(gpatch->width) )*gpatch->max_s;
|
v[2].s = v[1].s = ((sx+w)/(float)SHORT(gpatch->width) )*gpatch->max_s;
|
||||||
|
|
||||||
v[0].tow = v[1].tow = ((sy )/(float)SHORT(gpatch->height))*gpatch->max_t;
|
v[0].t = v[1].t = ((sy )/(float)SHORT(gpatch->height))*gpatch->max_t;
|
||||||
if (sy + h > SHORT(gpatch->height))
|
if (sy + h > SHORT(gpatch->height))
|
||||||
v[2].tow = v[3].tow = gpatch->max_t;
|
v[2].t = v[3].t = gpatch->max_t;
|
||||||
else
|
else
|
||||||
v[2].tow = v[3].tow = ((sy+h)/(float)SHORT(gpatch->height))*gpatch->max_t;
|
v[2].t = v[3].t = ((sy+h)/(float)SHORT(gpatch->height))*gpatch->max_t;
|
||||||
|
|
||||||
flags = BLENDMODE|PF_Clip|PF_NoZClip|PF_NoDepthTest;
|
flags = PF_Translucent|PF_NoDepthTest;
|
||||||
|
|
||||||
if (option & V_WRAPX)
|
if (option & V_WRAPX)
|
||||||
flags |= PF_ForceWrapX;
|
flags |= PF_ForceWrapX;
|
||||||
|
@ -537,11 +527,11 @@ void HWR_DrawCroppedPatch(GLPatch_t *gpatch, fixed_t x, fixed_t y, fixed_t pscal
|
||||||
if (alphalevel)
|
if (alphalevel)
|
||||||
{
|
{
|
||||||
FSurfaceInfo Surf;
|
FSurfaceInfo Surf;
|
||||||
Surf.FlatColor.s.red = Surf.FlatColor.s.green = Surf.FlatColor.s.blue = 0xff;
|
Surf.PolyColor.s.red = Surf.PolyColor.s.green = Surf.PolyColor.s.blue = 0xff;
|
||||||
if (alphalevel == 13) Surf.FlatColor.s.alpha = softwaretranstogl_lo[st_translucency];
|
if (alphalevel == 13) Surf.PolyColor.s.alpha = softwaretranstogl_lo[cv_translucenthud.value];
|
||||||
else if (alphalevel == 14) Surf.FlatColor.s.alpha = softwaretranstogl[st_translucency];
|
else if (alphalevel == 14) Surf.PolyColor.s.alpha = softwaretranstogl[cv_translucenthud.value];
|
||||||
else if (alphalevel == 15) Surf.FlatColor.s.alpha = softwaretranstogl_hi[st_translucency];
|
else if (alphalevel == 15) Surf.PolyColor.s.alpha = softwaretranstogl_hi[cv_translucenthud.value];
|
||||||
else Surf.FlatColor.s.alpha = softwaretranstogl[10-alphalevel];
|
else Surf.PolyColor.s.alpha = softwaretranstogl[10-alphalevel];
|
||||||
flags |= PF_Modulated;
|
flags |= PF_Modulated;
|
||||||
HWD.pfnDrawPolygon(&Surf, v, 4, flags);
|
HWD.pfnDrawPolygon(&Surf, v, 4, flags);
|
||||||
}
|
}
|
||||||
|
@ -569,10 +559,10 @@ void HWR_DrawPic(INT32 x, INT32 y, lumpnum_t lumpnum)
|
||||||
|
|
||||||
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
||||||
|
|
||||||
v[0].sow = v[3].sow = 0;
|
v[0].s = v[3].s = 0;
|
||||||
v[2].sow = v[1].sow = patch->max_s;
|
v[2].s = v[1].s = patch->max_s;
|
||||||
v[0].tow = v[1].tow = 0;
|
v[0].t = v[1].t = 0;
|
||||||
v[2].tow = v[3].tow = patch->max_t;
|
v[2].t = v[3].t = patch->max_t;
|
||||||
|
|
||||||
|
|
||||||
//Hurdler: Boris, the same comment as above... but maybe for pics
|
//Hurdler: Boris, the same comment as above... but maybe for pics
|
||||||
|
@ -581,7 +571,7 @@ void HWR_DrawPic(INT32 x, INT32 y, lumpnum_t lumpnum)
|
||||||
// But then, the question is: why not 0 instead of PF_Masked ?
|
// But then, the question is: why not 0 instead of PF_Masked ?
|
||||||
// or maybe PF_Environment ??? (like what I said above)
|
// or maybe PF_Environment ??? (like what I said above)
|
||||||
// BP: PF_Environment don't change anything ! and 0 is undifined
|
// BP: PF_Environment don't change anything ! and 0 is undifined
|
||||||
HWD.pfnDrawPolygon(NULL, v, 4, BLENDMODE | PF_NoDepthTest | PF_Clip | PF_NoZClip);
|
HWD.pfnDrawPolygon(NULL, v, 4, PF_Translucent | PF_NoDepthTest | PF_Clip | PF_NoZClip);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
|
@ -644,10 +634,10 @@ void HWR_DrawFlatFill (INT32 x, INT32 y, INT32 w, INT32 h, lumpnum_t flatlumpnum
|
||||||
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
||||||
|
|
||||||
// flat is 64x64 lod and texture offsets are [0.0, 1.0]
|
// flat is 64x64 lod and texture offsets are [0.0, 1.0]
|
||||||
v[0].sow = v[3].sow = (float)((x & flatflag)/dflatsize);
|
v[0].s = v[3].s = (float)((x & flatflag)/dflatsize);
|
||||||
v[2].sow = v[1].sow = (float)(v[0].sow + w/dflatsize);
|
v[2].s = v[1].s = (float)(v[0].s + w/dflatsize);
|
||||||
v[0].tow = v[1].tow = (float)((y & flatflag)/dflatsize);
|
v[0].t = v[1].t = (float)((y & flatflag)/dflatsize);
|
||||||
v[2].tow = v[3].tow = (float)(v[0].tow + h/dflatsize);
|
v[2].t = v[3].t = (float)(v[0].t + h/dflatsize);
|
||||||
|
|
||||||
HWR_LiterallyGetFlat(flatlumpnum);
|
HWR_LiterallyGetFlat(flatlumpnum);
|
||||||
|
|
||||||
|
@ -679,20 +669,20 @@ void HWR_FadeScreenMenuBack(UINT16 color, UINT8 strength)
|
||||||
v[2].y = v[3].y = 1.0f;
|
v[2].y = v[3].y = 1.0f;
|
||||||
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
||||||
|
|
||||||
v[0].sow = v[3].sow = 0.0f;
|
v[0].s = v[3].s = 0.0f;
|
||||||
v[2].sow = v[1].sow = 1.0f;
|
v[2].s = v[1].s = 1.0f;
|
||||||
v[0].tow = v[1].tow = 1.0f;
|
v[0].t = v[1].t = 1.0f;
|
||||||
v[2].tow = v[3].tow = 0.0f;
|
v[2].t = v[3].t = 0.0f;
|
||||||
|
|
||||||
if (color & 0xFF00) // Do COLORMAP fade.
|
if (color & 0xFF00) // Do COLORMAP fade.
|
||||||
{
|
{
|
||||||
Surf.FlatColor.rgba = UINT2RGBA(0x01010160);
|
Surf.PolyColor.rgba = UINT2RGBA(0x01010160);
|
||||||
Surf.FlatColor.s.alpha = (strength*8);
|
Surf.PolyColor.s.alpha = (strength*8);
|
||||||
}
|
}
|
||||||
else // Do TRANSMAP** fade.
|
else // Do TRANSMAP** fade.
|
||||||
{
|
{
|
||||||
Surf.FlatColor.rgba = V_GetColor(color).rgba;
|
Surf.PolyColor.rgba = V_GetColor(color).rgba;
|
||||||
Surf.FlatColor.s.alpha = softwaretranstogl[strength];
|
Surf.PolyColor.s.alpha = softwaretranstogl[strength];
|
||||||
}
|
}
|
||||||
HWD.pfnDrawPolygon(&Surf, v, 4, PF_NoTexture|PF_Modulated|PF_Translucent|PF_NoDepthTest);
|
HWD.pfnDrawPolygon(&Surf, v, 4, PF_NoTexture|PF_Modulated|PF_Translucent|PF_NoDepthTest);
|
||||||
}
|
}
|
||||||
|
@ -850,24 +840,22 @@ void HWR_DrawFadeFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color, UINT16 ac
|
||||||
v[0].y = v[1].y = fy;
|
v[0].y = v[1].y = fy;
|
||||||
v[2].y = v[3].y = fy - fh;
|
v[2].y = v[3].y = fy - fh;
|
||||||
|
|
||||||
//Hurdler: do we still use this argb color? if not, we should remove it
|
|
||||||
v[0].argb = v[1].argb = v[2].argb = v[3].argb = 0xff00ff00; //;
|
|
||||||
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
||||||
|
|
||||||
v[0].sow = v[3].sow = 0.0f;
|
v[0].s = v[3].s = 0.0f;
|
||||||
v[2].sow = v[1].sow = 1.0f;
|
v[2].s = v[1].s = 1.0f;
|
||||||
v[0].tow = v[1].tow = 0.0f;
|
v[0].t = v[1].t = 0.0f;
|
||||||
v[2].tow = v[3].tow = 1.0f;
|
v[2].t = v[3].t = 1.0f;
|
||||||
|
|
||||||
if (actualcolor & 0xFF00) // Do COLORMAP fade.
|
if (actualcolor & 0xFF00) // Do COLORMAP fade.
|
||||||
{
|
{
|
||||||
Surf.FlatColor.rgba = UINT2RGBA(0x01010160);
|
Surf.PolyColor.rgba = UINT2RGBA(0x01010160);
|
||||||
Surf.FlatColor.s.alpha = (strength*8);
|
Surf.PolyColor.s.alpha = (strength*8);
|
||||||
}
|
}
|
||||||
else // Do TRANSMAP** fade.
|
else // Do TRANSMAP** fade.
|
||||||
{
|
{
|
||||||
Surf.FlatColor.rgba = V_GetColor(actualcolor).rgba;
|
Surf.PolyColor.rgba = V_GetColor(actualcolor).rgba;
|
||||||
Surf.FlatColor.s.alpha = softwaretranstogl[strength];
|
Surf.PolyColor.s.alpha = softwaretranstogl[strength];
|
||||||
}
|
}
|
||||||
HWD.pfnDrawPolygon(&Surf, v, 4, PF_NoTexture|PF_Modulated|PF_Translucent|PF_NoDepthTest);
|
HWD.pfnDrawPolygon(&Surf, v, 4, PF_NoTexture|PF_Modulated|PF_Translucent|PF_NoDepthTest);
|
||||||
}
|
}
|
||||||
|
@ -888,13 +876,13 @@ void HWR_DrawConsoleBack(UINT32 color, INT32 height)
|
||||||
v[2].y = v[3].y = 1.0f;
|
v[2].y = v[3].y = 1.0f;
|
||||||
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
||||||
|
|
||||||
v[0].sow = v[3].sow = 0.0f;
|
v[0].s = v[3].s = 0.0f;
|
||||||
v[2].sow = v[1].sow = 1.0f;
|
v[2].s = v[1].s = 1.0f;
|
||||||
v[0].tow = v[1].tow = 1.0f;
|
v[0].t = v[1].t = 1.0f;
|
||||||
v[2].tow = v[3].tow = 0.0f;
|
v[2].t = v[3].t = 0.0f;
|
||||||
|
|
||||||
Surf.FlatColor.rgba = UINT2RGBA(color);
|
Surf.PolyColor.rgba = UINT2RGBA(color);
|
||||||
Surf.FlatColor.s.alpha = 0x80;
|
Surf.PolyColor.s.alpha = 0x80;
|
||||||
|
|
||||||
HWD.pfnDrawPolygon(&Surf, v, 4, PF_NoTexture|PF_Modulated|PF_Translucent|PF_NoDepthTest);
|
HWD.pfnDrawPolygon(&Surf, v, 4, PF_NoTexture|PF_Modulated|PF_Translucent|PF_NoDepthTest);
|
||||||
}
|
}
|
||||||
|
@ -914,13 +902,13 @@ void HWR_DrawTutorialBack(UINT32 color, INT32 boxheight)
|
||||||
v[2].y = v[3].y = -1.0f+((height<<1)/(float)vid.height);
|
v[2].y = v[3].y = -1.0f+((height<<1)/(float)vid.height);
|
||||||
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
||||||
|
|
||||||
v[0].sow = v[3].sow = 0.0f;
|
v[0].s = v[3].s = 0.0f;
|
||||||
v[2].sow = v[1].sow = 1.0f;
|
v[2].s = v[1].s = 1.0f;
|
||||||
v[0].tow = v[1].tow = 1.0f;
|
v[0].t = v[1].t = 1.0f;
|
||||||
v[2].tow = v[3].tow = 0.0f;
|
v[2].t = v[3].t = 0.0f;
|
||||||
|
|
||||||
Surf.FlatColor.rgba = UINT2RGBA(color);
|
Surf.PolyColor.rgba = UINT2RGBA(color);
|
||||||
Surf.FlatColor.s.alpha = (color == 0 ? 0xC0 : 0x80); // make black darker, like software
|
Surf.PolyColor.s.alpha = (color == 0 ? 0xC0 : 0x80); // make black darker, like software
|
||||||
|
|
||||||
HWD.pfnDrawPolygon(&Surf, v, 4, PF_NoTexture|PF_Modulated|PF_Translucent|PF_NoDepthTest);
|
HWD.pfnDrawPolygon(&Surf, v, 4, PF_NoTexture|PF_Modulated|PF_Translucent|PF_NoDepthTest);
|
||||||
}
|
}
|
||||||
|
@ -1232,17 +1220,15 @@ void HWR_DrawConsoleFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color, UINT32
|
||||||
v[0].y = v[1].y = fy;
|
v[0].y = v[1].y = fy;
|
||||||
v[2].y = v[3].y = fy - fh;
|
v[2].y = v[3].y = fy - fh;
|
||||||
|
|
||||||
//Hurdler: do we still use this argb color? if not, we should remove it
|
|
||||||
v[0].argb = v[1].argb = v[2].argb = v[3].argb = 0xff00ff00; //;
|
|
||||||
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
||||||
|
|
||||||
v[0].sow = v[3].sow = 0.0f;
|
v[0].s = v[3].s = 0.0f;
|
||||||
v[2].sow = v[1].sow = 1.0f;
|
v[2].s = v[1].s = 1.0f;
|
||||||
v[0].tow = v[1].tow = 0.0f;
|
v[0].t = v[1].t = 0.0f;
|
||||||
v[2].tow = v[3].tow = 1.0f;
|
v[2].t = v[3].t = 1.0f;
|
||||||
|
|
||||||
Surf.FlatColor.rgba = UINT2RGBA(actualcolor);
|
Surf.PolyColor.rgba = UINT2RGBA(actualcolor);
|
||||||
Surf.FlatColor.s.alpha = 0x80;
|
Surf.PolyColor.s.alpha = 0x80;
|
||||||
|
|
||||||
HWD.pfnDrawPolygon(&Surf, v, 4, PF_NoTexture|PF_Modulated|PF_Translucent|PF_NoDepthTest);
|
HWD.pfnDrawPolygon(&Surf, v, 4, PF_NoTexture|PF_Modulated|PF_Translucent|PF_NoDepthTest);
|
||||||
}
|
}
|
||||||
|
@ -1412,16 +1398,14 @@ void HWR_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color)
|
||||||
v[0].y = v[1].y = fy;
|
v[0].y = v[1].y = fy;
|
||||||
v[2].y = v[3].y = fy - fh;
|
v[2].y = v[3].y = fy - fh;
|
||||||
|
|
||||||
//Hurdler: do we still use this argb color? if not, we should remove it
|
|
||||||
v[0].argb = v[1].argb = v[2].argb = v[3].argb = 0xff00ff00; //;
|
|
||||||
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
||||||
|
|
||||||
v[0].sow = v[3].sow = 0.0f;
|
v[0].s = v[3].s = 0.0f;
|
||||||
v[2].sow = v[1].sow = 1.0f;
|
v[2].s = v[1].s = 1.0f;
|
||||||
v[0].tow = v[1].tow = 0.0f;
|
v[0].t = v[1].t = 0.0f;
|
||||||
v[2].tow = v[3].tow = 1.0f;
|
v[2].t = v[3].t = 1.0f;
|
||||||
|
|
||||||
Surf.FlatColor = V_GetColor(color);
|
Surf.PolyColor = V_GetColor(color);
|
||||||
|
|
||||||
HWD.pfnDrawPolygon(&Surf, v, 4,
|
HWD.pfnDrawPolygon(&Surf, v, 4,
|
||||||
PF_Modulated|PF_NoTexture|PF_NoDepthTest);
|
PF_Modulated|PF_NoTexture|PF_NoDepthTest);
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
// STANDARD DLL EXPORTS
|
// STANDARD DLL EXPORTS
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
|
|
||||||
EXPORT boolean HWRAPI(Init) (I_Error_t ErrorFunction);
|
EXPORT boolean HWRAPI(Init) (void);
|
||||||
#ifndef HAVE_SDL
|
#ifndef HAVE_SDL
|
||||||
EXPORT void HWRAPI(Shutdown) (void);
|
EXPORT void HWRAPI(Shutdown) (void);
|
||||||
#endif
|
#endif
|
||||||
|
@ -55,14 +55,11 @@ EXPORT void HWRAPI(ClearMipMapCache) (void);
|
||||||
EXPORT void HWRAPI(SetSpecialState) (hwdspecialstate_t IdState, INT32 Value);
|
EXPORT void HWRAPI(SetSpecialState) (hwdspecialstate_t IdState, INT32 Value);
|
||||||
|
|
||||||
//Hurdler: added for new development
|
//Hurdler: added for new development
|
||||||
EXPORT void HWRAPI(DrawModel) (model_t *model, INT32 frameIndex, INT32 duration, INT32 tics, INT32 nextFrameIndex, FTransform *pos, float scale, UINT8 flipped, UINT8 *color);
|
EXPORT void HWRAPI(DrawModel) (model_t *model, INT32 frameIndex, INT32 duration, INT32 tics, INT32 nextFrameIndex, FTransform *pos, float scale, UINT8 flipped, FSurfaceInfo *Surface);
|
||||||
EXPORT void HWRAPI(CreateModelVBOs) (model_t *model);
|
EXPORT void HWRAPI(CreateModelVBOs) (model_t *model);
|
||||||
EXPORT void HWRAPI(SetTransform) (FTransform *ptransform);
|
EXPORT void HWRAPI(SetTransform) (FTransform *ptransform);
|
||||||
EXPORT INT32 HWRAPI(GetTextureUsed) (void);
|
EXPORT INT32 HWRAPI(GetTextureUsed) (void);
|
||||||
EXPORT INT32 HWRAPI(GetRenderVersion) (void);
|
|
||||||
|
|
||||||
#define SCREENVERTS 10
|
|
||||||
EXPORT void HWRAPI(PostImgRedraw) (float points[SCREENVERTS][SCREENVERTS][2]);
|
|
||||||
EXPORT void HWRAPI(FlushScreenTextures) (void);
|
EXPORT void HWRAPI(FlushScreenTextures) (void);
|
||||||
EXPORT void HWRAPI(StartScreenWipe) (void);
|
EXPORT void HWRAPI(StartScreenWipe) (void);
|
||||||
EXPORT void HWRAPI(EndScreenWipe) (void);
|
EXPORT void HWRAPI(EndScreenWipe) (void);
|
||||||
|
@ -71,6 +68,19 @@ EXPORT void HWRAPI(DrawIntermissionBG) (void);
|
||||||
EXPORT void HWRAPI(MakeScreenTexture) (void);
|
EXPORT void HWRAPI(MakeScreenTexture) (void);
|
||||||
EXPORT void HWRAPI(MakeScreenFinalTexture) (void);
|
EXPORT void HWRAPI(MakeScreenFinalTexture) (void);
|
||||||
EXPORT void HWRAPI(DrawScreenFinalTexture) (int width, int height);
|
EXPORT void HWRAPI(DrawScreenFinalTexture) (int width, int height);
|
||||||
|
|
||||||
|
#define SCREENVERTS 10
|
||||||
|
EXPORT void HWRAPI(PostImgRedraw) (float points[SCREENVERTS][SCREENVERTS][2]);
|
||||||
|
|
||||||
|
// jimita
|
||||||
|
EXPORT void HWRAPI(LoadShaders) (void);
|
||||||
|
EXPORT void HWRAPI(KillShaders) (void);
|
||||||
|
EXPORT void HWRAPI(SetShader) (int shader);
|
||||||
|
EXPORT void HWRAPI(UnSetShader) (void);
|
||||||
|
|
||||||
|
EXPORT void HWRAPI(LoadCustomShader) (int number, char *shader, size_t size, boolean fragment);
|
||||||
|
EXPORT void HWRAPI(InitCustomShaders) (void);
|
||||||
|
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
// HWR DRIVER OBJECT, FOR CLIENT PROGRAM
|
// HWR DRIVER OBJECT, FOR CLIENT PROGRAM
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
|
@ -96,7 +106,6 @@ struct hwdriver_s
|
||||||
CreateModelVBOs pfnCreateModelVBOs;
|
CreateModelVBOs pfnCreateModelVBOs;
|
||||||
SetTransform pfnSetTransform;
|
SetTransform pfnSetTransform;
|
||||||
GetTextureUsed pfnGetTextureUsed;
|
GetTextureUsed pfnGetTextureUsed;
|
||||||
GetRenderVersion pfnGetRenderVersion;
|
|
||||||
#ifdef _WINDOWS
|
#ifdef _WINDOWS
|
||||||
GetModeList pfnGetModeList;
|
GetModeList pfnGetModeList;
|
||||||
#endif
|
#endif
|
||||||
|
@ -112,13 +121,18 @@ struct hwdriver_s
|
||||||
MakeScreenTexture pfnMakeScreenTexture;
|
MakeScreenTexture pfnMakeScreenTexture;
|
||||||
MakeScreenFinalTexture pfnMakeScreenFinalTexture;
|
MakeScreenFinalTexture pfnMakeScreenFinalTexture;
|
||||||
DrawScreenFinalTexture pfnDrawScreenFinalTexture;
|
DrawScreenFinalTexture pfnDrawScreenFinalTexture;
|
||||||
|
|
||||||
|
LoadShaders pfnLoadShaders;
|
||||||
|
KillShaders pfnKillShaders;
|
||||||
|
SetShader pfnSetShader;
|
||||||
|
UnSetShader pfnUnSetShader;
|
||||||
|
|
||||||
|
LoadCustomShader pfnLoadCustomShader;
|
||||||
|
InitCustomShaders pfnInitCustomShaders;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct hwdriver_s hwdriver;
|
extern struct hwdriver_s hwdriver;
|
||||||
|
|
||||||
//Hurdler: 16/10/99: added for OpenGL gamma correction
|
|
||||||
//extern RGBA_t gamma_correction;
|
|
||||||
|
|
||||||
#define HWD hwdriver
|
#define HWD hwdriver
|
||||||
|
|
||||||
#endif //not defined _CREATE_DLL_
|
#endif //not defined _CREATE_DLL_
|
||||||
|
|
|
@ -118,12 +118,12 @@ GLPatch_t *HWR_GetCachedGLRotSprite(aatree_t *hwrcache, UINT16 rollangle, patch_
|
||||||
#endif
|
#endif
|
||||||
void HWR_GetFadeMask(lumpnum_t fademasklumpnum);
|
void HWR_GetFadeMask(lumpnum_t fademasklumpnum);
|
||||||
|
|
||||||
|
// hardware driver
|
||||||
|
extern INT32 gl_leveltime;
|
||||||
|
|
||||||
// --------
|
// --------
|
||||||
// hw_draw.c
|
// hw_draw.c
|
||||||
// --------
|
// --------
|
||||||
extern float gr_patch_scalex;
|
|
||||||
extern float gr_patch_scaley;
|
|
||||||
|
|
||||||
extern consvar_t cv_grrounddown; // on/off
|
extern consvar_t cv_grrounddown; // on/off
|
||||||
|
|
||||||
extern INT32 patchformat;
|
extern INT32 patchformat;
|
||||||
|
|
|
@ -877,19 +877,19 @@ void HWR_WallLighting(FOutVector *wlVerts)
|
||||||
#endif
|
#endif
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
wlVerts[i].sow = (float)(0.5f + d[i]*s);
|
wlVerts[i].s = (float)(0.5f + d[i]*s);
|
||||||
wlVerts[i].tow = (float)(0.5f + (wlVerts[i].y-LIGHT_POS(j).y)*s*1.2f);
|
wlVerts[i].t = (float)(0.5f + (wlVerts[i].y-LIGHT_POS(j).y)*s*1.2f);
|
||||||
}
|
}
|
||||||
|
|
||||||
HWR_SetLight();
|
HWR_SetLight();
|
||||||
|
|
||||||
Surf.FlatColor.rgba = LONG(dynlights->p_lspr[j]->dynamic_color);
|
Surf.PolyColor.rgba = LONG(dynlights->p_lspr[j]->dynamic_color);
|
||||||
#ifdef DL_HIGH_QUALITY
|
#ifdef DL_HIGH_QUALITY
|
||||||
Surf.FlatColor.s.alpha = (UINT8)((1-dist_p2d/DL_SQRRADIUS(j))*Surf.FlatColor.s.alpha);
|
Surf.PolyColor.s.alpha = (UINT8)((1-dist_p2d/DL_SQRRADIUS(j))*Surf.PolyColor.s.alpha);
|
||||||
#endif
|
#endif
|
||||||
// next state is null so fade out with alpha
|
// next state is null so fade out with alpha
|
||||||
if (dynlights->mo[j]->state->nextstate == S_NULL)
|
if (dynlights->mo[j]->state->nextstate == S_NULL)
|
||||||
Surf.FlatColor.s.alpha = (UINT8)(((float)dynlights->mo[j]->tics/(float)dynlights->mo[j]->state->tics)*Surf.FlatColor.s.alpha);
|
Surf.PolyColor.s.alpha = (UINT8)(((float)dynlights->mo[j]->tics/(float)dynlights->mo[j]->state->tics)*Surf.PolyColor.s.alpha);
|
||||||
|
|
||||||
HWD.pfnDrawPolygon (&Surf, wlVerts, 4, LIGHTMAPFLAGS);
|
HWD.pfnDrawPolygon (&Surf, wlVerts, 4, LIGHTMAPFLAGS);
|
||||||
|
|
||||||
|
@ -946,19 +946,19 @@ void HWR_PlaneLighting(FOutVector *clVerts, int nrClipVerts)
|
||||||
#endif
|
#endif
|
||||||
for (i = 0; i < nrClipVerts; i++)
|
for (i = 0; i < nrClipVerts; i++)
|
||||||
{
|
{
|
||||||
clVerts[i].sow = 0.5f + (clVerts[i].x-LIGHT_POS(j).x)*s;
|
clVerts[i].s = 0.5f + (clVerts[i].x-LIGHT_POS(j).x)*s;
|
||||||
clVerts[i].tow = 0.5f + (clVerts[i].z-LIGHT_POS(j).z)*s*1.2f;
|
clVerts[i].t = 0.5f + (clVerts[i].z-LIGHT_POS(j).z)*s*1.2f;
|
||||||
}
|
}
|
||||||
|
|
||||||
HWR_SetLight();
|
HWR_SetLight();
|
||||||
|
|
||||||
Surf.FlatColor.rgba = LONG(dynlights->p_lspr[j]->dynamic_color);
|
Surf.PolyColor.rgba = LONG(dynlights->p_lspr[j]->dynamic_color);
|
||||||
#ifdef DL_HIGH_QUALITY
|
#ifdef DL_HIGH_QUALITY
|
||||||
Surf.FlatColor.s.alpha = (unsigned char)((1 - dist_p2d/DL_SQRRADIUS(j))*Surf.FlatColor.s.alpha);
|
Surf.PolyColor.s.alpha = (unsigned char)((1 - dist_p2d/DL_SQRRADIUS(j))*Surf.PolyColor.s.alpha);
|
||||||
#endif
|
#endif
|
||||||
// next state is null so fade out with alpha
|
// next state is null so fade out with alpha
|
||||||
if ((dynlights->mo[j]->state->nextstate == S_NULL))
|
if ((dynlights->mo[j]->state->nextstate == S_NULL))
|
||||||
Surf.FlatColor.s.alpha = (unsigned char)(((float)dynlights->mo[j]->tics/(float)dynlights->mo[j]->state->tics)*Surf.FlatColor.s.alpha);
|
Surf.PolyColor.s.alpha = (unsigned char)(((float)dynlights->mo[j]->tics/(float)dynlights->mo[j]->state->tics)*Surf.PolyColor.s.alpha);
|
||||||
|
|
||||||
HWD.pfnDrawPolygon (&Surf, clVerts, nrClipVerts, LIGHTMAPFLAGS);
|
HWD.pfnDrawPolygon (&Surf, clVerts, nrClipVerts, LIGHTMAPFLAGS);
|
||||||
|
|
||||||
|
@ -1025,11 +1025,11 @@ void HWR_DoCoronasLighting(FOutVector *outVerts, gr_vissprite_t *spr)
|
||||||
// more realistique corona !
|
// more realistique corona !
|
||||||
if (cz >= 255*8+250)
|
if (cz >= 255*8+250)
|
||||||
return;
|
return;
|
||||||
Surf.FlatColor.rgba = p_lspr->corona_color;
|
Surf.PolyColor.rgba = p_lspr->corona_color;
|
||||||
if (cz > 250.0f)
|
if (cz > 250.0f)
|
||||||
Surf.FlatColor.s.alpha = 0xff-((int)cz-250)/8;
|
Surf.PolyColor.s.alpha = 0xff-((int)cz-250)/8;
|
||||||
else
|
else
|
||||||
Surf.FlatColor.s.alpha = 0xff;
|
Surf.PolyColor.s.alpha = 0xff;
|
||||||
|
|
||||||
// do not be hide by sprite of the light itself !
|
// do not be hide by sprite of the light itself !
|
||||||
cz = cz - 2.0f;
|
cz = cz - 2.0f;
|
||||||
|
@ -1041,19 +1041,19 @@ void HWR_DoCoronasLighting(FOutVector *outVerts, gr_vissprite_t *spr)
|
||||||
// car comme l'offset est minime sa ce voit pas !
|
// car comme l'offset est minime sa ce voit pas !
|
||||||
light[0].x = cx-size; light[0].z = cz;
|
light[0].x = cx-size; light[0].z = cz;
|
||||||
light[0].y = cy-size*1.33f+p_lspr->light_yoffset;
|
light[0].y = cy-size*1.33f+p_lspr->light_yoffset;
|
||||||
light[0].sow = 0.0f; light[0].tow = 0.0f;
|
light[0].s = 0.0f; light[0].t = 0.0f;
|
||||||
|
|
||||||
light[1].x = cx+size; light[1].z = cz;
|
light[1].x = cx+size; light[1].z = cz;
|
||||||
light[1].y = cy-size*1.33f+p_lspr->light_yoffset;
|
light[1].y = cy-size*1.33f+p_lspr->light_yoffset;
|
||||||
light[1].sow = 1.0f; light[1].tow = 0.0f;
|
light[1].s = 1.0f; light[1].t = 0.0f;
|
||||||
|
|
||||||
light[2].x = cx+size; light[2].z = cz;
|
light[2].x = cx+size; light[2].z = cz;
|
||||||
light[2].y = cy+size*1.33f+p_lspr->light_yoffset;
|
light[2].y = cy+size*1.33f+p_lspr->light_yoffset;
|
||||||
light[2].sow = 1.0f; light[2].tow = 1.0f;
|
light[2].s = 1.0f; light[2].t = 1.0f;
|
||||||
|
|
||||||
light[3].x = cx-size; light[3].z = cz;
|
light[3].x = cx-size; light[3].z = cz;
|
||||||
light[3].y = cy+size*1.33f+p_lspr->light_yoffset;
|
light[3].y = cy+size*1.33f+p_lspr->light_yoffset;
|
||||||
light[3].sow = 0.0f; light[3].tow = 1.0f;
|
light[3].s = 0.0f; light[3].t = 1.0f;
|
||||||
|
|
||||||
HWR_GetPic(coronalumpnum); /// \todo use different coronas
|
HWR_GetPic(coronalumpnum); /// \todo use different coronas
|
||||||
|
|
||||||
|
@ -1099,11 +1099,11 @@ void HWR_DrawCoronas(void)
|
||||||
// more realistique corona !
|
// more realistique corona !
|
||||||
if (cz >= 255*8+250)
|
if (cz >= 255*8+250)
|
||||||
continue;
|
continue;
|
||||||
Surf.FlatColor.rgba = p_lspr->corona_color;
|
Surf.PolyColor.rgba = p_lspr->corona_color;
|
||||||
if (cz > 250.0f)
|
if (cz > 250.0f)
|
||||||
Surf.FlatColor.s.alpha = (UINT8)(0xff-(UINT8)(((int)cz-250)/8));
|
Surf.PolyColor.s.alpha = (UINT8)(0xff-(UINT8)(((int)cz-250)/8));
|
||||||
else
|
else
|
||||||
Surf.FlatColor.s.alpha = 0xff;
|
Surf.PolyColor.s.alpha = 0xff;
|
||||||
|
|
||||||
switch (p_lspr->type)
|
switch (p_lspr->type)
|
||||||
{
|
{
|
||||||
|
@ -1111,7 +1111,7 @@ void HWR_DrawCoronas(void)
|
||||||
size = p_lspr->corona_radius * ((cz+120.0f)/950.0f); // d'ou vienne ces constante ?
|
size = p_lspr->corona_radius * ((cz+120.0f)/950.0f); // d'ou vienne ces constante ?
|
||||||
break;
|
break;
|
||||||
case ROCKET_SPR:
|
case ROCKET_SPR:
|
||||||
Surf.FlatColor.s.alpha = (UINT8)((M_RandomByte()>>1)&0xff);
|
Surf.PolyColor.s.alpha = (UINT8)((M_RandomByte()>>1)&0xff);
|
||||||
// don't need a break
|
// don't need a break
|
||||||
case CORONA_SPR:
|
case CORONA_SPR:
|
||||||
size = p_lspr->corona_radius * ((cz+60.0f)/100.0f); // d'ou vienne ces constante ?
|
size = p_lspr->corona_radius * ((cz+60.0f)/100.0f); // d'ou vienne ces constante ?
|
||||||
|
@ -1131,19 +1131,19 @@ void HWR_DrawCoronas(void)
|
||||||
|
|
||||||
light[0].x = cx-size; light[0].z = cz;
|
light[0].x = cx-size; light[0].z = cz;
|
||||||
light[0].y = cy-size*1.33f;
|
light[0].y = cy-size*1.33f;
|
||||||
light[0].sow = 0.0f; light[0].tow = 0.0f;
|
light[0].s = 0.0f; light[0].t = 0.0f;
|
||||||
|
|
||||||
light[1].x = cx+size; light[1].z = cz;
|
light[1].x = cx+size; light[1].z = cz;
|
||||||
light[1].y = cy-size*1.33f;
|
light[1].y = cy-size*1.33f;
|
||||||
light[1].sow = 1.0f; light[1].tow = 0.0f;
|
light[1].s = 1.0f; light[1].t = 0.0f;
|
||||||
|
|
||||||
light[2].x = cx+size; light[2].z = cz;
|
light[2].x = cx+size; light[2].z = cz;
|
||||||
light[2].y = cy+size*1.33f;
|
light[2].y = cy+size*1.33f;
|
||||||
light[2].sow = 1.0f; light[2].tow = 1.0f;
|
light[2].s = 1.0f; light[2].t = 1.0f;
|
||||||
|
|
||||||
light[3].x = cx-size; light[3].z = cz;
|
light[3].x = cx-size; light[3].z = cz;
|
||||||
light[3].y = cy+size*1.33f;
|
light[3].y = cy+size*1.33f;
|
||||||
light[3].sow = 0.0f; light[3].tow = 1.0f;
|
light[3].s = 0.0f; light[3].t = 1.0f;
|
||||||
|
|
||||||
HWD.pfnDrawPolygon (&Surf, light, 4, PF_Modulated | PF_Additive | PF_Clip | PF_NoDepthTest | PF_Corona);
|
HWD.pfnDrawPolygon (&Surf, light, 4, PF_Modulated | PF_Additive | PF_Clip | PF_NoDepthTest | PF_Corona);
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -72,8 +72,10 @@ void HWR_MakeScreenFinalTexture(void);
|
||||||
void HWR_DrawScreenFinalTexture(int width, int height);
|
void HWR_DrawScreenFinalTexture(int width, int height);
|
||||||
|
|
||||||
// This stuff is put here so MD2's can use them
|
// This stuff is put here so MD2's can use them
|
||||||
UINT32 HWR_Lighting(INT32 light, UINT32 color, UINT32 fadecolor, boolean fogblockpoly, boolean plane);
|
void HWR_Lighting(FSurfaceInfo *Surface, INT32 light_level, extracolormap_t *colormap);
|
||||||
FUNCMATH UINT8 LightLevelToLum(INT32 l);
|
UINT8 HWR_FogBlockAlpha(INT32 light, extracolormap_t *colormap); // Let's see if this can work
|
||||||
|
|
||||||
|
void HWR_LoadShaders(UINT16 wadnum, boolean PK3);
|
||||||
|
|
||||||
extern CV_PossibleValue_t granisotropicmode_cons_t[];
|
extern CV_PossibleValue_t granisotropicmode_cons_t[];
|
||||||
|
|
||||||
|
@ -83,6 +85,7 @@ extern consvar_t cv_grstaticlighting;
|
||||||
extern consvar_t cv_grcoronas;
|
extern consvar_t cv_grcoronas;
|
||||||
extern consvar_t cv_grcoronasize;
|
extern consvar_t cv_grcoronasize;
|
||||||
#endif
|
#endif
|
||||||
|
extern consvar_t cv_grshaders;
|
||||||
extern consvar_t cv_grfov;
|
extern consvar_t cv_grfov;
|
||||||
extern consvar_t cv_grmodels;
|
extern consvar_t cv_grmodels;
|
||||||
extern consvar_t cv_grmodelinterpolation;
|
extern consvar_t cv_grmodelinterpolation;
|
||||||
|
@ -96,6 +99,7 @@ extern consvar_t cv_granisotropicmode;
|
||||||
extern consvar_t cv_grcorrecttricks;
|
extern consvar_t cv_grcorrecttricks;
|
||||||
extern consvar_t cv_grfovchange;
|
extern consvar_t cv_grfovchange;
|
||||||
extern consvar_t cv_grsolvetjoin;
|
extern consvar_t cv_grsolvetjoin;
|
||||||
|
extern consvar_t cv_grshearing;
|
||||||
extern consvar_t cv_grspritebillboarding;
|
extern consvar_t cv_grspritebillboarding;
|
||||||
extern consvar_t cv_grskydome;
|
extern consvar_t cv_grskydome;
|
||||||
|
|
||||||
|
|
|
@ -1084,15 +1084,14 @@ static UINT8 HWR_GetModelSprite2(md2_t *md2, skin_t *skin, UINT8 spr2, player_t
|
||||||
|
|
||||||
boolean HWR_DrawModel(gr_vissprite_t *spr)
|
boolean HWR_DrawModel(gr_vissprite_t *spr)
|
||||||
{
|
{
|
||||||
FSurfaceInfo Surf;
|
md2_t *md2;
|
||||||
|
|
||||||
char filename[64];
|
char filename[64];
|
||||||
INT32 frame = 0;
|
INT32 frame = 0;
|
||||||
INT32 nextFrame = -1;
|
INT32 nextFrame = -1;
|
||||||
UINT8 spr2 = 0;
|
UINT8 spr2 = 0;
|
||||||
FTransform p;
|
FTransform p;
|
||||||
md2_t *md2;
|
FSurfaceInfo Surf;
|
||||||
UINT8 color[4];
|
|
||||||
|
|
||||||
if (!cv_grmodels.value)
|
if (!cv_grmodels.value)
|
||||||
return false;
|
return false;
|
||||||
|
@ -1131,13 +1130,10 @@ boolean HWR_DrawModel(gr_vissprite_t *spr)
|
||||||
colormap = sector->extra_colormap;
|
colormap = sector->extra_colormap;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (colormap)
|
HWR_Lighting(&Surf, lightlevel, colormap);
|
||||||
Surf.FlatColor.rgba = HWR_Lighting(lightlevel, colormap->rgba, colormap->fadergba, false, false);
|
|
||||||
else
|
|
||||||
Surf.FlatColor.rgba = HWR_Lighting(lightlevel, NORMALFOG, FADEFOG, false, false);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Surf.FlatColor.rgba = 0xFFFFFFFF;
|
Surf.PolyColor.rgba = 0xFFFFFFFF;
|
||||||
|
|
||||||
// Look at HWR_ProjectSprite for more
|
// Look at HWR_ProjectSprite for more
|
||||||
{
|
{
|
||||||
|
@ -1160,11 +1156,11 @@ boolean HWR_DrawModel(gr_vissprite_t *spr)
|
||||||
//durs = tics;
|
//durs = tics;
|
||||||
|
|
||||||
if (spr->mobj->flags2 & MF2_SHADOW)
|
if (spr->mobj->flags2 & MF2_SHADOW)
|
||||||
Surf.FlatColor.s.alpha = 0x40;
|
Surf.PolyColor.s.alpha = 0x40;
|
||||||
else if (spr->mobj->frame & FF_TRANSMASK)
|
else if (spr->mobj->frame & FF_TRANSMASK)
|
||||||
HWR_TranstableToAlpha((spr->mobj->frame & FF_TRANSMASK)>>FF_TRANSSHIFT, &Surf);
|
HWR_TranstableToAlpha((spr->mobj->frame & FF_TRANSMASK)>>FF_TRANSSHIFT, &Surf);
|
||||||
else
|
else
|
||||||
Surf.FlatColor.s.alpha = 0xFF;
|
Surf.PolyColor.s.alpha = 0xFF;
|
||||||
|
|
||||||
// dont forget to enabled the depth test because we can't do this like
|
// dont forget to enabled the depth test because we can't do this like
|
||||||
// before: polygons models are not sorted
|
// before: polygons models are not sorted
|
||||||
|
@ -1428,11 +1424,6 @@ boolean HWR_DrawModel(gr_vissprite_t *spr)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
color[0] = Surf.FlatColor.s.red;
|
|
||||||
color[1] = Surf.FlatColor.s.green;
|
|
||||||
color[2] = Surf.FlatColor.s.blue;
|
|
||||||
color[3] = Surf.FlatColor.s.alpha;
|
|
||||||
|
|
||||||
// SRB2CBTODO: MD2 scaling support
|
// SRB2CBTODO: MD2 scaling support
|
||||||
finalscale *= FIXED_TO_FLOAT(spr->mobj->scale);
|
finalscale *= FIXED_TO_FLOAT(spr->mobj->scale);
|
||||||
|
|
||||||
|
@ -1441,7 +1432,8 @@ boolean HWR_DrawModel(gr_vissprite_t *spr)
|
||||||
p.mirror = atransform.mirror; // from Kart
|
p.mirror = atransform.mirror; // from Kart
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
HWD.pfnDrawModel(md2->model, frame, durs, tics, nextFrame, &p, finalscale, flip, color);
|
HWD.pfnSetShader(4); // model shader
|
||||||
|
HWD.pfnDrawModel(md2->model, frame, durs, tics, nextFrame, &p, finalscale, flip, &Surf);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -206,7 +206,7 @@ int SetupPixelFormat(INT32 WantColorBits, INT32 WantStencilBits, INT32 WantDepth
|
||||||
|
|
||||||
if (iLastPFD)
|
if (iLastPFD)
|
||||||
{
|
{
|
||||||
DBG_Printf("WARNING : SetPixelFormat() called twise not supported by all drivers !\n");
|
GL_DBG_Printf("WARNING : SetPixelFormat() called twise not supported by all drivers !\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// set the pixel format only if different than the current
|
// set the pixel format only if different than the current
|
||||||
|
@ -215,17 +215,17 @@ int SetupPixelFormat(INT32 WantColorBits, INT32 WantStencilBits, INT32 WantDepth
|
||||||
else
|
else
|
||||||
iLastPFD = iPFD;
|
iLastPFD = iPFD;
|
||||||
|
|
||||||
DBG_Printf("SetupPixelFormat() - %d ColorBits - %d StencilBits - %d DepthBits\n",
|
GL_DBG_Printf("SetupPixelFormat() - %d ColorBits - %d StencilBits - %d DepthBits\n",
|
||||||
WantColorBits, WantStencilBits, WantDepthBits);
|
WantColorBits, WantStencilBits, WantDepthBits);
|
||||||
|
|
||||||
nPixelFormat = ChoosePixelFormat(hDC, &pfd);
|
nPixelFormat = ChoosePixelFormat(hDC, &pfd);
|
||||||
|
|
||||||
if (nPixelFormat == 0)
|
if (nPixelFormat == 0)
|
||||||
DBG_Printf("ChoosePixelFormat() FAILED\n");
|
GL_DBG_Printf("ChoosePixelFormat() FAILED\n");
|
||||||
|
|
||||||
if (SetPixelFormat(hDC, nPixelFormat, &pfd) == 0)
|
if (SetPixelFormat(hDC, nPixelFormat, &pfd) == 0)
|
||||||
{
|
{
|
||||||
DBG_Printf("SetPixelFormat() FAILED\n");
|
GL_DBG_Printf("SetPixelFormat() FAILED\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -243,7 +243,7 @@ static INT32 WINAPI SetRes(viddef_t *lvid, vmode_t *pcurrentmode)
|
||||||
BOOL WantFullScreen = !(lvid->u.windowed); //(lvid->u.windowed ? 0 : CDS_FULLSCREEN);
|
BOOL WantFullScreen = !(lvid->u.windowed); //(lvid->u.windowed ? 0 : CDS_FULLSCREEN);
|
||||||
|
|
||||||
UNREFERENCED_PARAMETER(pcurrentmode);
|
UNREFERENCED_PARAMETER(pcurrentmode);
|
||||||
DBG_Printf ("SetMode(): %dx%d %d bits (%s)\n",
|
GL_DBG_Printf ("SetMode(): %dx%d %d bits (%s)\n",
|
||||||
lvid->width, lvid->height, lvid->bpp*8,
|
lvid->width, lvid->height, lvid->bpp*8,
|
||||||
WantFullScreen ? "fullscreen" : "windowed");
|
WantFullScreen ? "fullscreen" : "windowed");
|
||||||
|
|
||||||
|
@ -301,7 +301,7 @@ static INT32 WINAPI SetRes(viddef_t *lvid, vmode_t *pcurrentmode)
|
||||||
hDC = GetDC(hWnd);
|
hDC = GetDC(hWnd);
|
||||||
if (!hDC)
|
if (!hDC)
|
||||||
{
|
{
|
||||||
DBG_Printf("GetDC() FAILED\n");
|
GL_DBG_Printf("GetDC() FAILED\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -321,12 +321,12 @@ static INT32 WINAPI SetRes(viddef_t *lvid, vmode_t *pcurrentmode)
|
||||||
hGLRC = pwglCreateContext(hDC);
|
hGLRC = pwglCreateContext(hDC);
|
||||||
if (!hGLRC)
|
if (!hGLRC)
|
||||||
{
|
{
|
||||||
DBG_Printf("pwglCreateContext() FAILED\n");
|
GL_DBG_Printf("pwglCreateContext() FAILED\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (!pwglMakeCurrent(hDC, hGLRC))
|
if (!pwglMakeCurrent(hDC, hGLRC))
|
||||||
{
|
{
|
||||||
DBG_Printf("wglMakeCurrent() FAILED\n");
|
GL_DBG_Printf("wglMakeCurrent() FAILED\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -337,15 +337,15 @@ static INT32 WINAPI SetRes(viddef_t *lvid, vmode_t *pcurrentmode)
|
||||||
//BP: why don't we make it earlier ?
|
//BP: why don't we make it earlier ?
|
||||||
//Hurdler: we cannot do that before intialising gl context
|
//Hurdler: we cannot do that before intialising gl context
|
||||||
renderer = (LPCSTR)pglGetString(GL_RENDERER);
|
renderer = (LPCSTR)pglGetString(GL_RENDERER);
|
||||||
DBG_Printf("Vendor : %s\n", pglGetString(GL_VENDOR));
|
GL_DBG_Printf("Vendor : %s\n", pglGetString(GL_VENDOR));
|
||||||
DBG_Printf("Renderer : %s\n", renderer);
|
GL_DBG_Printf("Renderer : %s\n", renderer);
|
||||||
DBG_Printf("Version : %s\n", pglGetString(GL_VERSION));
|
GL_DBG_Printf("Version : %s\n", pglGetString(GL_VERSION));
|
||||||
DBG_Printf("Extensions : %s\n", gl_extensions);
|
GL_DBG_Printf("Extensions : %s\n", gl_extensions);
|
||||||
|
|
||||||
// BP: disable advenced feature that don't work on somes hardware
|
// BP: disable advenced feature that don't work on somes hardware
|
||||||
// Hurdler: Now works on G400 with bios 1.6 and certified drivers 6.04
|
// Hurdler: Now works on G400 with bios 1.6 and certified drivers 6.04
|
||||||
if (strstr(renderer, "810")) oglflags |= GLF_NOZBUFREAD;
|
if (strstr(renderer, "810")) oglflags |= GLF_NOZBUFREAD;
|
||||||
DBG_Printf("oglflags : 0x%X\n", oglflags);
|
GL_DBG_Printf("oglflags : 0x%X\n", oglflags);
|
||||||
|
|
||||||
#ifdef USE_WGL_SWAP
|
#ifdef USE_WGL_SWAP
|
||||||
if (isExtAvailable("WGL_EXT_swap_control",gl_extensions))
|
if (isExtAvailable("WGL_EXT_swap_control",gl_extensions))
|
||||||
|
@ -386,7 +386,7 @@ static INT32 WINAPI SetRes(viddef_t *lvid, vmode_t *pcurrentmode)
|
||||||
// -----------------+
|
// -----------------+
|
||||||
static void UnSetRes(void)
|
static void UnSetRes(void)
|
||||||
{
|
{
|
||||||
DBG_Printf("UnSetRes()\n");
|
GL_DBG_Printf("UnSetRes()\n");
|
||||||
|
|
||||||
pwglMakeCurrent(hDC, NULL);
|
pwglMakeCurrent(hDC, NULL);
|
||||||
pwglDeleteContext(hGLRC);
|
pwglDeleteContext(hGLRC);
|
||||||
|
@ -437,7 +437,7 @@ EXPORT void HWRAPI(GetModeList) (vmode_t** pvidmodes, INT32 *numvidmodes)
|
||||||
video_modes[iMode].misc = 0;
|
video_modes[iMode].misc = 0;
|
||||||
video_modes[iMode].name = malloc(12 * sizeof (CHAR));
|
video_modes[iMode].name = malloc(12 * sizeof (CHAR));
|
||||||
sprintf(video_modes[iMode].name, "%dx%d", (INT32)Tmp.dmPelsWidth, (INT32)Tmp.dmPelsHeight);
|
sprintf(video_modes[iMode].name, "%dx%d", (INT32)Tmp.dmPelsWidth, (INT32)Tmp.dmPelsHeight);
|
||||||
DBG_Printf ("Mode: %s\n", video_modes[iMode].name);
|
GL_DBG_Printf ("Mode: %s\n", video_modes[iMode].name);
|
||||||
video_modes[iMode].width = Tmp.dmPelsWidth;
|
video_modes[iMode].width = Tmp.dmPelsWidth;
|
||||||
video_modes[iMode].height = Tmp.dmPelsHeight;
|
video_modes[iMode].height = Tmp.dmPelsHeight;
|
||||||
video_modes[iMode].bytesperpixel = Tmp.dmBitsPerPel/8;
|
video_modes[iMode].bytesperpixel = Tmp.dmBitsPerPel/8;
|
||||||
|
@ -474,7 +474,7 @@ EXPORT void HWRAPI(GetModeList) (vmode_t** pvidmodes, INT32 *numvidmodes)
|
||||||
HDC bpphdc;
|
HDC bpphdc;
|
||||||
INT32 iBitsPerPel;
|
INT32 iBitsPerPel;
|
||||||
|
|
||||||
DBG_Printf ("HWRAPI GetModeList()\n");
|
GL_DBG_Printf ("HWRAPI GetModeList()\n");
|
||||||
|
|
||||||
bpphdc = GetDC(NULL); // on obtient le bpp actuel
|
bpphdc = GetDC(NULL); // on obtient le bpp actuel
|
||||||
iBitsPerPel = GetDeviceCaps(bpphdc, BITSPIXEL);
|
iBitsPerPel = GetDeviceCaps(bpphdc, BITSPIXEL);
|
||||||
|
@ -490,7 +490,7 @@ EXPORT void HWRAPI(GetModeList) (vmode_t** pvidmodes, INT32 *numvidmodes)
|
||||||
video_modes[i].misc = 0;
|
video_modes[i].misc = 0;
|
||||||
video_modes[i].name = malloc(12 * sizeof (CHAR));
|
video_modes[i].name = malloc(12 * sizeof (CHAR));
|
||||||
sprintf(video_modes[i].name, "%dx%d", res[i][0], res[i][1]);
|
sprintf(video_modes[i].name, "%dx%d", res[i][0], res[i][1]);
|
||||||
DBG_Printf ("Mode: %s\n", video_modes[i].name);
|
GL_DBG_Printf ("Mode: %s\n", video_modes[i].name);
|
||||||
video_modes[i].width = res[i][0];
|
video_modes[i].width = res[i][0];
|
||||||
video_modes[i].height = res[i][1];
|
video_modes[i].height = res[i][1];
|
||||||
video_modes[i].bytesperpixel = iBitsPerPel/8;
|
video_modes[i].bytesperpixel = iBitsPerPel/8;
|
||||||
|
@ -511,9 +511,9 @@ EXPORT void HWRAPI(Shutdown) (void)
|
||||||
#ifdef DEBUG_TO_FILE
|
#ifdef DEBUG_TO_FILE
|
||||||
long nb_centiemes;
|
long nb_centiemes;
|
||||||
|
|
||||||
DBG_Printf ("HWRAPI Shutdown()\n");
|
GL_DBG_Printf ("HWRAPI Shutdown()\n");
|
||||||
nb_centiemes = ((clock()-my_clock)*100)/CLOCKS_PER_SEC;
|
nb_centiemes = ((clock()-my_clock)*100)/CLOCKS_PER_SEC;
|
||||||
DBG_Printf("Nb frames: %li; Nb sec: %2.2f -> %2.1f fps\n",
|
GL_DBG_Printf("Nb frames: %li; Nb sec: %2.2f -> %2.1f fps\n",
|
||||||
nb_frames, nb_centiemes/100.0f, (100*nb_frames)/(double)nb_centiemes);
|
nb_frames, nb_centiemes/100.0f, (100*nb_frames)/(double)nb_centiemes);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -530,7 +530,7 @@ EXPORT void HWRAPI(Shutdown) (void)
|
||||||
}
|
}
|
||||||
FreeLibrary(GLU32);
|
FreeLibrary(GLU32);
|
||||||
FreeLibrary(OGL32);
|
FreeLibrary(OGL32);
|
||||||
DBG_Printf ("HWRAPI Shutdown(DONE)\n");
|
GL_DBG_Printf ("HWRAPI Shutdown(DONE)\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------+
|
// -----------------+
|
||||||
|
@ -543,7 +543,7 @@ EXPORT void HWRAPI(FinishUpdate) (INT32 waitvbl)
|
||||||
#else
|
#else
|
||||||
UNREFERENCED_PARAMETER(waitvbl);
|
UNREFERENCED_PARAMETER(waitvbl);
|
||||||
#endif
|
#endif
|
||||||
// DBG_Printf ("FinishUpdate()\n");
|
// GL_DBG_Printf ("FinishUpdate()\n");
|
||||||
#ifdef DEBUG_TO_FILE
|
#ifdef DEBUG_TO_FILE
|
||||||
if ((++nb_frames)==2) // on ne commence pas <20> la premi<6D>re frame
|
if ((++nb_frames)==2) // on ne commence pas <20> la premi<6D>re frame
|
||||||
my_clock = clock();
|
my_clock = clock();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -57,23 +57,10 @@
|
||||||
#undef DEBUG_TO_FILE // maybe defined in previous *.h
|
#undef DEBUG_TO_FILE // maybe defined in previous *.h
|
||||||
#define DEBUG_TO_FILE // output debugging msgs to ogllog.txt
|
#define DEBUG_TO_FILE // output debugging msgs to ogllog.txt
|
||||||
|
|
||||||
// todo: find some way of getting SDL to log to ogllog.txt, without
|
|
||||||
// interfering with r_opengl.dll
|
|
||||||
#ifdef HAVE_SDL
|
|
||||||
#undef DEBUG_TO_FILE
|
|
||||||
#endif
|
|
||||||
//#if defined(HAVE_SDL) && !defined(_DEBUG)
|
|
||||||
//#undef DEBUG_TO_FILE
|
|
||||||
//#endif
|
|
||||||
|
|
||||||
#ifdef DEBUG_TO_FILE
|
#ifdef DEBUG_TO_FILE
|
||||||
extern FILE *gllogstream;
|
extern FILE *gllogstream;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef DRIVER_STRING
|
|
||||||
#define DRIVER_STRING "HWRAPI Init(): SRB2 OpenGL renderer" // Tails
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
// PROTOS
|
// PROTOS
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
|
@ -81,13 +68,15 @@ extern FILE *gllogstream;
|
||||||
boolean LoadGL(void);
|
boolean LoadGL(void);
|
||||||
void *GetGLFunc(const char *proc);
|
void *GetGLFunc(const char *proc);
|
||||||
boolean SetupGLfunc(void);
|
boolean SetupGLfunc(void);
|
||||||
boolean SetupGLFunc13(void);
|
void SetupGLFunc4(void);
|
||||||
void Flush(void);
|
void Flush(void);
|
||||||
INT32 isExtAvailable(const char *extension, const GLubyte *start);
|
INT32 isExtAvailable(const char *extension, const GLubyte *start);
|
||||||
int SetupPixelFormat(INT32 WantColorBits, INT32 WantStencilBits, INT32 WantDepthBits);
|
|
||||||
void SetModelView(GLint w, GLint h);
|
void SetModelView(GLint w, GLint h);
|
||||||
void SetStates(void);
|
void SetStates(void);
|
||||||
FUNCMATH float byteasfloat(UINT8 fbyte);
|
#ifdef USE_PALETTED_TEXTURE
|
||||||
|
extern PFNGLCOLORTABLEEXTPROC glColorTableEXT;
|
||||||
|
extern GLubyte palette_tex[256*3];
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef GL_EXT_texture_filter_anisotropic
|
#ifndef GL_EXT_texture_filter_anisotropic
|
||||||
#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
|
#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
|
||||||
|
@ -123,12 +112,15 @@ static PFNglEnableClientState pglEnableClientState;
|
||||||
// GLOBAL
|
// GLOBAL
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
|
|
||||||
extern const GLubyte *gl_extensions;
|
extern const GLubyte *gl_version;
|
||||||
extern RGBA_t myPaletteData[];
|
extern const GLubyte *gl_renderer;
|
||||||
extern GLint screen_width;
|
extern const GLubyte *gl_extensions;
|
||||||
extern GLint screen_height;
|
|
||||||
extern GLbyte screen_depth;
|
extern RGBA_t myPaletteData[];
|
||||||
extern GLint maximumAnisotropy;
|
extern GLint screen_width;
|
||||||
|
extern GLint screen_height;
|
||||||
|
extern GLbyte screen_depth;
|
||||||
|
extern GLint maximumAnisotropy;
|
||||||
|
|
||||||
/** \brief OpenGL flags for video driver
|
/** \brief OpenGL flags for video driver
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -670,7 +670,7 @@ vector3_t *FV3_IntersectionPoint(const vector3_t *vNormal, const vector3_t *vLin
|
||||||
|
|
||||||
// 3) If we take the dot product between our line vector and the normal of the polygon,
|
// 3) If we take the dot product between our line vector and the normal of the polygon,
|
||||||
// this will give us the cosine of the angle between the 2 (since they are both normalized - length 1).
|
// this will give us the cosine of the angle between the 2 (since they are both normalized - length 1).
|
||||||
// We will then divide our Numerator by this value to find the offset towards the plane from our arbitrary point.
|
// We will then divide our Numerator by this value to find the offset tards the plane from our arbitrary point.
|
||||||
Denominator = FV3_Dot(vNormal, &vLineDir); // Get the dot product of the line's vector and the normal of the plane
|
Denominator = FV3_Dot(vNormal, &vLineDir); // Get the dot product of the line's vector and the normal of the plane
|
||||||
|
|
||||||
// Since we are using division, we need to make sure we don't get a divide by zero error
|
// Since we are using division, we need to make sure we don't get a divide by zero error
|
||||||
|
|
|
@ -264,7 +264,7 @@ FUNCMATH FUNCINLINE static ATTRINLINE fixed_t FixedTrunc(fixed_t x)
|
||||||
const fixed_t i = (a>>FRACBITS)<<FRACBITS; // cut out the fractional part
|
const fixed_t i = (a>>FRACBITS)<<FRACBITS; // cut out the fractional part
|
||||||
const fixed_t f = a-i; // cut out the integral part
|
const fixed_t f = a-i; // cut out the integral part
|
||||||
if (x != INT32_MIN)
|
if (x != INT32_MIN)
|
||||||
{ // return rounded to nearest whole number, towards zero
|
{ // return rounded to nearest whole number, tards zero
|
||||||
if (x > 0)
|
if (x > 0)
|
||||||
return x-f;
|
return x-f;
|
||||||
else
|
else
|
||||||
|
|
|
@ -1035,7 +1035,7 @@ void A_Chase(mobj_t *actor)
|
||||||
actor->threshold--;
|
actor->threshold--;
|
||||||
}
|
}
|
||||||
|
|
||||||
// turn towards movement direction if not there yet
|
// turn tards movement direction if not there yet
|
||||||
if (actor->movedir < NUMDIRS)
|
if (actor->movedir < NUMDIRS)
|
||||||
{
|
{
|
||||||
actor->angle &= (7<<29);
|
actor->angle &= (7<<29);
|
||||||
|
@ -1092,7 +1092,7 @@ nomissile:
|
||||||
&& P_LookForPlayers(actor, true, false, 0))
|
&& P_LookForPlayers(actor, true, false, 0))
|
||||||
return; // got a new target
|
return; // got a new target
|
||||||
|
|
||||||
// chase towards player
|
// chase tards player
|
||||||
if (--actor->movecount < 0 || !P_Move(actor, actor->info->speed))
|
if (--actor->movecount < 0 || !P_Move(actor, actor->info->speed))
|
||||||
P_NewChaseDir(actor);
|
P_NewChaseDir(actor);
|
||||||
}
|
}
|
||||||
|
@ -1125,7 +1125,7 @@ void A_FaceStabChase(mobj_t *actor)
|
||||||
actor->threshold--;
|
actor->threshold--;
|
||||||
}
|
}
|
||||||
|
|
||||||
// turn towards movement direction if not there yet
|
// turn tards movement direction if not there yet
|
||||||
if (actor->movedir < NUMDIRS)
|
if (actor->movedir < NUMDIRS)
|
||||||
{
|
{
|
||||||
actor->angle &= (7<<29);
|
actor->angle &= (7<<29);
|
||||||
|
@ -1182,7 +1182,7 @@ nomissile:
|
||||||
&& P_LookForPlayers(actor, true, false, 0))
|
&& P_LookForPlayers(actor, true, false, 0))
|
||||||
return; // got a new target
|
return; // got a new target
|
||||||
|
|
||||||
// chase towards player
|
// chase tards player
|
||||||
if (--actor->movecount < 0 || !P_Move(actor, actor->info->speed))
|
if (--actor->movecount < 0 || !P_Move(actor, actor->info->speed))
|
||||||
P_NewChaseDir(actor);
|
P_NewChaseDir(actor);
|
||||||
}
|
}
|
||||||
|
@ -1493,7 +1493,7 @@ void A_JetJawChomp(mobj_t *actor)
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// turn towards movement direction if not there yet
|
// turn tards movement direction if not there yet
|
||||||
if (actor->movedir < NUMDIRS)
|
if (actor->movedir < NUMDIRS)
|
||||||
{
|
{
|
||||||
actor->angle &= (7<<29);
|
actor->angle &= (7<<29);
|
||||||
|
@ -1513,7 +1513,7 @@ void A_JetJawChomp(mobj_t *actor)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// chase towards player
|
// chase tards player
|
||||||
if (--actor->movecount < 0 || !P_Move(actor, actor->info->speed))
|
if (--actor->movecount < 0 || !P_Move(actor, actor->info->speed))
|
||||||
P_NewChaseDir(actor);
|
P_NewChaseDir(actor);
|
||||||
}
|
}
|
||||||
|
@ -1915,7 +1915,7 @@ void A_SharpChase(mobj_t *actor)
|
||||||
|
|
||||||
actor->reactiontime--;
|
actor->reactiontime--;
|
||||||
|
|
||||||
// turn towards movement direction if not there yet
|
// turn tards movement direction if not there yet
|
||||||
if (actor->movedir < NUMDIRS)
|
if (actor->movedir < NUMDIRS)
|
||||||
{
|
{
|
||||||
actor->angle &= (7<<29);
|
actor->angle &= (7<<29);
|
||||||
|
@ -1937,7 +1937,7 @@ void A_SharpChase(mobj_t *actor)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// chase towards player
|
// chase tards player
|
||||||
if (--actor->movecount < 0 || !P_Move(actor, actor->info->speed))
|
if (--actor->movecount < 0 || !P_Move(actor, actor->info->speed))
|
||||||
P_NewChaseDir(actor);
|
P_NewChaseDir(actor);
|
||||||
}
|
}
|
||||||
|
@ -2469,7 +2469,7 @@ void A_VultureBlast(mobj_t *actor)
|
||||||
|
|
||||||
// Function: A_VultureFly
|
// Function: A_VultureFly
|
||||||
//
|
//
|
||||||
// Description: Vulture charging towards target.
|
// Description: Vulture charging tards target.
|
||||||
//
|
//
|
||||||
// var1 = unused
|
// var1 = unused
|
||||||
// var2 = unused
|
// var2 = unused
|
||||||
|
@ -2592,7 +2592,7 @@ void A_SkimChase(mobj_t *actor)
|
||||||
actor->threshold--;
|
actor->threshold--;
|
||||||
}
|
}
|
||||||
|
|
||||||
// turn towards movement direction if not there yet
|
// turn tards movement direction if not there yet
|
||||||
if (actor->movedir < NUMDIRS)
|
if (actor->movedir < NUMDIRS)
|
||||||
{
|
{
|
||||||
actor->angle &= (7<<29);
|
actor->angle &= (7<<29);
|
||||||
|
@ -2649,14 +2649,14 @@ nomissile:
|
||||||
&& P_LookForPlayers(actor, true, false, 0))
|
&& P_LookForPlayers(actor, true, false, 0))
|
||||||
return; // got a new target
|
return; // got a new target
|
||||||
|
|
||||||
// chase towards player
|
// chase tards player
|
||||||
if (--actor->movecount < 0 || !P_Move(actor, actor->info->speed))
|
if (--actor->movecount < 0 || !P_Move(actor, actor->info->speed))
|
||||||
P_NewChaseDir(actor);
|
P_NewChaseDir(actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Function: A_FaceTarget
|
// Function: A_FaceTarget
|
||||||
//
|
//
|
||||||
// Description: Immediately turn to face towards your target.
|
// Description: Immediately turn to face tards your target.
|
||||||
//
|
//
|
||||||
// var1 = unused
|
// var1 = unused
|
||||||
// var2 = unused
|
// var2 = unused
|
||||||
|
@ -2675,7 +2675,7 @@ void A_FaceTarget(mobj_t *actor)
|
||||||
|
|
||||||
// Function: A_FaceTracer
|
// Function: A_FaceTracer
|
||||||
//
|
//
|
||||||
// Description: Immediately turn to face towards your tracer.
|
// Description: Immediately turn to face tards your tracer.
|
||||||
//
|
//
|
||||||
// var1 = unused
|
// var1 = unused
|
||||||
// var2 = unused
|
// var2 = unused
|
||||||
|
@ -5371,7 +5371,7 @@ void A_JetChase(mobj_t *actor)
|
||||||
actor->threshold--;
|
actor->threshold--;
|
||||||
}
|
}
|
||||||
|
|
||||||
// turn towards movement direction if not there yet
|
// turn tards movement direction if not there yet
|
||||||
actor->angle = R_PointToAngle2(actor->x, actor->y, actor->target->x, actor->target->y);
|
actor->angle = R_PointToAngle2(actor->x, actor->y, actor->target->x, actor->target->y);
|
||||||
|
|
||||||
if ((multiplayer || netgame) && !actor->threshold && (actor->target->health <= 0 || !P_CheckSight(actor, actor->target)))
|
if ((multiplayer || netgame) && !actor->threshold && (actor->target->health <= 0 || !P_CheckSight(actor, actor->target)))
|
||||||
|
@ -5385,7 +5385,7 @@ void A_JetChase(mobj_t *actor)
|
||||||
return; // got a new target
|
return; // got a new target
|
||||||
}
|
}
|
||||||
|
|
||||||
// chase towards player
|
// chase tards player
|
||||||
if (ultimatemode)
|
if (ultimatemode)
|
||||||
P_Thrust(actor, actor->angle, FixedMul(actor->info->speed/2, actor->scale));
|
P_Thrust(actor, actor->angle, FixedMul(actor->info->speed/2, actor->scale));
|
||||||
else
|
else
|
||||||
|
@ -5938,7 +5938,7 @@ void A_DetonChase(mobj_t *actor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// chase towards player
|
// chase tards player
|
||||||
if ((dist = P_AproxDistance(xydist, actor->tracer->z-actor->z))
|
if ((dist = P_AproxDistance(xydist, actor->tracer->z-actor->z))
|
||||||
> FixedMul((actor->info->painchance << FRACBITS), actor->scale))
|
> FixedMul((actor->info->painchance << FRACBITS), actor->scale))
|
||||||
{
|
{
|
||||||
|
@ -7077,7 +7077,7 @@ void A_Boss1Chase(mobj_t *actor)
|
||||||
if (actor->reactiontime)
|
if (actor->reactiontime)
|
||||||
actor->reactiontime--;
|
actor->reactiontime--;
|
||||||
|
|
||||||
// turn towards movement direction if not there yet
|
// turn tards movement direction if not there yet
|
||||||
if (actor->movedir < NUMDIRS)
|
if (actor->movedir < NUMDIRS)
|
||||||
{
|
{
|
||||||
actor->angle &= (7<<29);
|
actor->angle &= (7<<29);
|
||||||
|
@ -7150,7 +7150,7 @@ nomissile:
|
||||||
actor->momz = FixedMul(actor->momz,7*FRACUNIT/8);
|
actor->momz = FixedMul(actor->momz,7*FRACUNIT/8);
|
||||||
}
|
}
|
||||||
|
|
||||||
// chase towards player
|
// chase tards player
|
||||||
if (P_AproxDistance(actor->target->x-actor->x, actor->target->y-actor->y) > actor->radius+actor->target->radius)
|
if (P_AproxDistance(actor->target->x-actor->x, actor->target->y-actor->y) > actor->radius+actor->target->radius)
|
||||||
{
|
{
|
||||||
if (--actor->movecount < 0 || !P_Move(actor, actor->info->speed))
|
if (--actor->movecount < 0 || !P_Move(actor, actor->info->speed))
|
||||||
|
@ -7405,7 +7405,7 @@ void A_Boss7Chase(mobj_t *actor)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// turn towards movement direction if not there yet
|
// turn tards movement direction if not there yet
|
||||||
if (actor->movedir < NUMDIRS)
|
if (actor->movedir < NUMDIRS)
|
||||||
{
|
{
|
||||||
actor->angle &= (7<<29);
|
actor->angle &= (7<<29);
|
||||||
|
@ -7499,7 +7499,7 @@ void A_Boss7Chase(mobj_t *actor)
|
||||||
|
|
||||||
if (leveltime & 1)
|
if (leveltime & 1)
|
||||||
{
|
{
|
||||||
// chase towards player
|
// chase tards player
|
||||||
if (--actor->movecount < 0 || !P_Move(actor, actor->info->speed))
|
if (--actor->movecount < 0 || !P_Move(actor, actor->info->speed))
|
||||||
P_NewChaseDir(actor);
|
P_NewChaseDir(actor);
|
||||||
}
|
}
|
||||||
|
@ -7640,7 +7640,7 @@ void A_Boss2PogoTarget(mobj_t *actor)
|
||||||
actor->angle = R_PointToAngle2(actor->x, actor->y, actor->target->x, actor->target->y);
|
actor->angle = R_PointToAngle2(actor->x, actor->y, actor->target->x, actor->target->y);
|
||||||
P_InstaThrust(actor, actor->angle, FixedDiv(P_AproxDistance(actor->x - actor->target->x, actor->y - actor->target->y), airtime));
|
P_InstaThrust(actor, actor->angle, FixedDiv(P_AproxDistance(actor->x - actor->target->x, actor->y - actor->target->y), airtime));
|
||||||
}
|
}
|
||||||
// Wander semi-randomly towards the player to get closer.
|
// Wander semi-randomly tards the player to get closer.
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UINT8 prandom = P_RandomByte();
|
UINT8 prandom = P_RandomByte();
|
||||||
|
@ -7860,7 +7860,7 @@ void A_BuzzFly(mobj_t *actor)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// turn towards movement direction if not there yet
|
// turn tards movement direction if not there yet
|
||||||
actor->angle = R_PointToAngle2(actor->x, actor->y, actor->target->x, actor->target->y);
|
actor->angle = R_PointToAngle2(actor->x, actor->y, actor->target->x, actor->target->y);
|
||||||
|
|
||||||
if (actor->target->health <= 0 || (!actor->threshold && !P_CheckSight(actor, actor->target)))
|
if (actor->target->health <= 0 || (!actor->threshold && !P_CheckSight(actor, actor->target)))
|
||||||
|
@ -7883,7 +7883,7 @@ void A_BuzzFly(mobj_t *actor)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// chase towards player
|
// chase tards player
|
||||||
{
|
{
|
||||||
INT32 dist, realspeed;
|
INT32 dist, realspeed;
|
||||||
const fixed_t mf = 5*(FRACUNIT/4);
|
const fixed_t mf = 5*(FRACUNIT/4);
|
||||||
|
@ -7975,7 +7975,7 @@ void A_GuardChase(mobj_t *actor)
|
||||||
}
|
}
|
||||||
else // Break ranks!
|
else // Break ranks!
|
||||||
{
|
{
|
||||||
// turn towards movement direction if not there yet
|
// turn tards movement direction if not there yet
|
||||||
if (actor->movedir < NUMDIRS)
|
if (actor->movedir < NUMDIRS)
|
||||||
{
|
{
|
||||||
actor->angle &= (7<<29);
|
actor->angle &= (7<<29);
|
||||||
|
@ -8002,7 +8002,7 @@ void A_GuardChase(mobj_t *actor)
|
||||||
&& P_LookForPlayers(actor, true, false, 0))
|
&& P_LookForPlayers(actor, true, false, 0))
|
||||||
return; // got a new target
|
return; // got a new target
|
||||||
|
|
||||||
// chase towards player
|
// chase tards player
|
||||||
if (--actor->movecount < 0 || !P_Move(actor, (actor->flags2 & MF2_AMBUSH) ? actor->info->speed * 2 : actor->info->speed))
|
if (--actor->movecount < 0 || !P_Move(actor, (actor->flags2 & MF2_AMBUSH) ? actor->info->speed * 2 : actor->info->speed))
|
||||||
{
|
{
|
||||||
P_NewChaseDir(actor);
|
P_NewChaseDir(actor);
|
||||||
|
@ -10940,7 +10940,7 @@ void A_RemoteDamage(mobj_t *actor)
|
||||||
|
|
||||||
// Function: A_HomingChase
|
// Function: A_HomingChase
|
||||||
//
|
//
|
||||||
// Description: Actor chases directly towards its destination object
|
// Description: Actor chases directly tards its destination object
|
||||||
//
|
//
|
||||||
// var1 = speed multiple
|
// var1 = speed multiple
|
||||||
// var2 = destination: 0 = target, 1 = tracer
|
// var2 = destination: 0 = target, 1 = tracer
|
||||||
|
@ -11400,7 +11400,7 @@ void A_BrakChase(mobj_t *actor)
|
||||||
actor->threshold--;
|
actor->threshold--;
|
||||||
}
|
}
|
||||||
|
|
||||||
// turn towards movement direction if not there yet
|
// turn tards movement direction if not there yet
|
||||||
if (actor->movedir < NUMDIRS)
|
if (actor->movedir < NUMDIRS)
|
||||||
{
|
{
|
||||||
actor->angle &= (7<<29);
|
actor->angle &= (7<<29);
|
||||||
|
@ -11458,7 +11458,7 @@ void A_BrakChase(mobj_t *actor)
|
||||||
&& P_LookForPlayers(actor, true, false, 0))
|
&& P_LookForPlayers(actor, true, false, 0))
|
||||||
return; // got a new target
|
return; // got a new target
|
||||||
|
|
||||||
// chase towards player
|
// chase tards player
|
||||||
if (--actor->movecount < 0 || !P_Move(actor, actor->info->speed))
|
if (--actor->movecount < 0 || !P_Move(actor, actor->info->speed))
|
||||||
P_NewChaseDir(actor);
|
P_NewChaseDir(actor);
|
||||||
|
|
||||||
|
@ -11519,7 +11519,7 @@ void A_BrakFireShot(mobj_t *actor)
|
||||||
|
|
||||||
// Function: A_BrakLobShot
|
// Function: A_BrakLobShot
|
||||||
//
|
//
|
||||||
// Description: Lobs an object at the floor about a third of the way toward your target.
|
// Description: Lobs an object at the floor about a third of the way tard your target.
|
||||||
// Implication is it'll bounce the rest of the way.
|
// Implication is it'll bounce the rest of the way.
|
||||||
// (You can also just aim straight at the target, but whatever)
|
// (You can also just aim straight at the target, but whatever)
|
||||||
// Formula grabbed from http://en.wikipedia.org/wiki/Trajectory_of_a_projectile#Angle_required_to_hit_coordinate_.28x.2Cy.29
|
// Formula grabbed from http://en.wikipedia.org/wiki/Trajectory_of_a_projectile#Angle_required_to_hit_coordinate_.28x.2Cy.29
|
||||||
|
|
|
@ -1349,13 +1349,13 @@ wegotit:
|
||||||
{
|
{
|
||||||
// Lower controlsec like a regular T_RaiseSector
|
// Lower controlsec like a regular T_RaiseSector
|
||||||
// Set the heights of all the other control sectors to
|
// Set the heights of all the other control sectors to
|
||||||
// be a gradient of this height toward the edges
|
// be a gradient of this height tard the edges
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Raise controlsec like a regular T_RaiseSector
|
// Raise controlsec like a regular T_RaiseSector
|
||||||
// Set the heights of all the other control sectors to
|
// Set the heights of all the other control sectors to
|
||||||
// be a gradient of this height toward the edges.
|
// be a gradient of this height tard the edges.
|
||||||
}
|
}
|
||||||
|
|
||||||
if (playeronme && controlsec)
|
if (playeronme && controlsec)
|
||||||
|
|
|
@ -2428,7 +2428,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
||||||
// Also, add to the link.
|
// Also, add to the link.
|
||||||
// I don't know if NiGHTS did this, but
|
// I don't know if NiGHTS did this, but
|
||||||
// Sonic Time Attacked did and it seems like a good enough incentive
|
// Sonic Time Attacked did and it seems like a good enough incentive
|
||||||
// to make people want to actually dash towards/paraloop enemies
|
// to make people want to actually dash tards/paraloop enemies
|
||||||
if (++source->player->linkcount > source->player->maxlink)
|
if (++source->player->linkcount > source->player->maxlink)
|
||||||
source->player->maxlink = source->player->linkcount;
|
source->player->maxlink = source->player->linkcount;
|
||||||
source->player->linktimer = nightslinktics;
|
source->player->linktimer = nightslinktics;
|
||||||
|
|
|
@ -201,7 +201,7 @@ void P_SpawnSpinMobj(player_t *player, mobjtype_t type);
|
||||||
void P_Telekinesis(player_t *player, fixed_t thrust, fixed_t range);
|
void P_Telekinesis(player_t *player, fixed_t thrust, fixed_t range);
|
||||||
|
|
||||||
void P_PlayLivesJingle(player_t *player);
|
void P_PlayLivesJingle(player_t *player);
|
||||||
#define P_PlayRinglossSound(s) S_StartSound(s, (mariomode) ? sfx_mario8 : sfx_altow1 + P_RandomKey(4));
|
#define P_PlayRinglossSound(s) S_StartSound(s, (mariomode) ? sfx_mario8 : sfx_alt1 + P_RandomKey(4));
|
||||||
#define P_PlayDeathSound(s) S_StartSound(s, sfx_altdi1 + P_RandomKey(4));
|
#define P_PlayDeathSound(s) S_StartSound(s, sfx_altdi1 + P_RandomKey(4));
|
||||||
#define P_PlayVictorySound(s) S_StartSound(s, sfx_victr1 + P_RandomKey(4));
|
#define P_PlayVictorySound(s) S_StartSound(s, sfx_victr1 + P_RandomKey(4));
|
||||||
|
|
||||||
|
|
10
src/p_mobj.c
10
src/p_mobj.c
|
@ -2601,7 +2601,7 @@ static boolean P_ZMovement(mobj_t *mo)
|
||||||
if (mo->flags & MF_FLOAT && mo->target && mo->health
|
if (mo->flags & MF_FLOAT && mo->target && mo->health
|
||||||
&& !(mo->type == MT_EGGMOBILE) && mo->target->health > 0)
|
&& !(mo->type == MT_EGGMOBILE) && mo->target->health > 0)
|
||||||
{
|
{
|
||||||
// float down towards target if too close
|
// float down tards target if too close
|
||||||
if (!(mo->flags2 & MF2_SKULLFLY) && !(mo->flags2 & MF2_INFLOAT))
|
if (!(mo->flags2 & MF2_SKULLFLY) && !(mo->flags2 & MF2_INFLOAT))
|
||||||
{
|
{
|
||||||
dist = P_AproxDistance(mo->x - mo->target->x, mo->y - mo->target->y);
|
dist = P_AproxDistance(mo->x - mo->target->x, mo->y - mo->target->y);
|
||||||
|
@ -2938,7 +2938,7 @@ static void P_PlayerZMovement(mobj_t *mo)
|
||||||
|
|
||||||
if (mo->player->powers[pw_carry] == CR_NIGHTSMODE)
|
if (mo->player->powers[pw_carry] == CR_NIGHTSMODE)
|
||||||
{
|
{
|
||||||
// bounce off floor if you were flying towards it
|
// bounce off floor if you were flying tards it
|
||||||
if ((mo->eflags & MFE_VERTICALFLIP && mo->player->flyangle > 0 && mo->player->flyangle < 180)
|
if ((mo->eflags & MFE_VERTICALFLIP && mo->player->flyangle > 0 && mo->player->flyangle < 180)
|
||||||
|| (!(mo->eflags & MFE_VERTICALFLIP) && mo->player->flyangle > 180 && mo->player->flyangle <= 359))
|
|| (!(mo->eflags & MFE_VERTICALFLIP) && mo->player->flyangle > 180 && mo->player->flyangle <= 359))
|
||||||
{
|
{
|
||||||
|
@ -3088,7 +3088,7 @@ nightsdone:
|
||||||
|
|
||||||
if (mo->player->powers[pw_carry] == CR_NIGHTSMODE)
|
if (mo->player->powers[pw_carry] == CR_NIGHTSMODE)
|
||||||
{
|
{
|
||||||
// bounce off ceiling if you were flying towards it
|
// bounce off ceiling if you were flying tards it
|
||||||
if ((mo->eflags & MFE_VERTICALFLIP && mo->player->flyangle > 180 && mo->player->flyangle <= 359)
|
if ((mo->eflags & MFE_VERTICALFLIP && mo->player->flyangle > 180 && mo->player->flyangle <= 359)
|
||||||
|| (!(mo->eflags & MFE_VERTICALFLIP) && mo->player->flyangle > 0 && mo->player->flyangle < 180))
|
|| (!(mo->eflags & MFE_VERTICALFLIP) && mo->player->flyangle > 0 && mo->player->flyangle < 180))
|
||||||
{
|
{
|
||||||
|
@ -6289,7 +6289,7 @@ static void P_MoveHoop(mobj_t *mobj)
|
||||||
y = mobj->target->y;
|
y = mobj->target->y;
|
||||||
z = mobj->target->z+mobj->target->height/2;
|
z = mobj->target->z+mobj->target->height/2;
|
||||||
|
|
||||||
// Make the sprite travel towards the center of the hoop
|
// Make the sprite travel tards the center of the hoop
|
||||||
v[0] = FixedMul(FINECOSINE(fa),fuse);
|
v[0] = FixedMul(FINECOSINE(fa),fuse);
|
||||||
v[1] = 0;
|
v[1] = 0;
|
||||||
v[2] = FixedMul(FINESINE(fa),fuse);
|
v[2] = FixedMul(FINESINE(fa),fuse);
|
||||||
|
@ -6758,7 +6758,7 @@ void P_MaceRotate(mobj_t *center, INT32 baserot, INT32 baseprevrot)
|
||||||
if (!pos_lengthways[3] || P_MobjWasRemoved(mobj) || (mobj->flags & MF_NOCLIPHEIGHT))
|
if (!pos_lengthways[3] || P_MobjWasRemoved(mobj) || (mobj->flags & MF_NOCLIPHEIGHT))
|
||||||
goto cont;
|
goto cont;
|
||||||
|
|
||||||
if ((fa = ((center->threshold & (FINEMASK/2)) << ANGLETOFINESHIFT)) > ANGLE_45 && fa < ANGLE_135) // only move towards center when the motion is towards/away from the ground, rather than alongside it
|
if ((fa = ((center->threshold & (FINEMASK/2)) << ANGLETOFINESHIFT)) > ANGLE_45 && fa < ANGLE_135) // only move tards center when the motion is tards/away from the ground, rather than alongside it
|
||||||
goto cont;
|
goto cont;
|
||||||
|
|
||||||
if (mobj->subsector->sector->ffloors)
|
if (mobj->subsector->sector->ffloors)
|
||||||
|
|
|
@ -1559,7 +1559,7 @@ static void P_CreateBlockMap(void)
|
||||||
//
|
//
|
||||||
// If current block is the same as the ending vertex's block, exit loop.
|
// If current block is the same as the ending vertex's block, exit loop.
|
||||||
//
|
//
|
||||||
// Move to an adjacent block by moving towards the ending block in
|
// Move to an adjacent block by moving tards the ending block in
|
||||||
// either the x or y direction, to the block which contains the linedef.
|
// either the x or y direction, to the block which contains the linedef.
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -2581,10 +2581,10 @@ boolean P_SetupLevel(boolean skipprecip)
|
||||||
if (RESETMUSIC ||
|
if (RESETMUSIC ||
|
||||||
strnicmp(S_MusicName(),
|
strnicmp(S_MusicName(),
|
||||||
(mapmusflags & MUSIC_RELOADRESET) ? mapheaderinfo[gamemap-1]->musname : mapmusname, 7))
|
(mapmusflags & MUSIC_RELOADRESET) ? mapheaderinfo[gamemap-1]->musname : mapmusname, 7))
|
||||||
S_FadeOutStopMusic(MUSICRATE/4); //FixedMul(FixedDiv(F_GetWipeLength(wipedefs[wipe_speclevel_towhite])*NEWTICRATERATIO, NEWTICRATE), MUSICRATE)
|
S_FadeOutStopMusic(MUSICRATE/4); //FixedMul(FixedDiv(F_GetWipeLength(wipedefs[wipe_speclevel_thite])*NEWTICRATERATIO, NEWTICRATE), MUSICRATE)
|
||||||
|
|
||||||
F_WipeStartScreen();
|
F_WipeStartScreen();
|
||||||
wipestyleflags |= (WSF_FADEOUT|WSF_TOWHITE);
|
wipestyleflags |= (WSF_FADEOUT|WSF_tHITE);
|
||||||
|
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
// uh..........
|
// uh..........
|
||||||
|
@ -2593,7 +2593,7 @@ boolean P_SetupLevel(boolean skipprecip)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
F_WipeEndScreen();
|
F_WipeEndScreen();
|
||||||
F_RunWipe(wipedefs[wipe_speclevel_towhite], false);
|
F_RunWipe(wipedefs[wipe_speclevel_thite], false);
|
||||||
|
|
||||||
I_OsPolling();
|
I_OsPolling();
|
||||||
I_FinishUpdate(); // page flip or blit buffer
|
I_FinishUpdate(); // page flip or blit buffer
|
||||||
|
@ -2619,7 +2619,7 @@ boolean P_SetupLevel(boolean skipprecip)
|
||||||
if (G_GetModeAttackRetryFlag())
|
if (G_GetModeAttackRetryFlag())
|
||||||
{
|
{
|
||||||
if (modeattacking)
|
if (modeattacking)
|
||||||
wipestyleflags |= (WSF_FADEOUT|WSF_TOWHITE);
|
wipestyleflags |= (WSF_FADEOUT|WSF_tHITE);
|
||||||
G_ClearModeAttackRetryFlag();
|
G_ClearModeAttackRetryFlag();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6043,7 +6043,7 @@ static void P_AddBlockThinker(sector_t *sec, line_t *sourceline)
|
||||||
/** Adds a raise thinker.
|
/** Adds a raise thinker.
|
||||||
* A raise thinker checks to see if the
|
* A raise thinker checks to see if the
|
||||||
* player is standing on its 3D Floor,
|
* player is standing on its 3D Floor,
|
||||||
* and if so, raises the platform towards
|
* and if so, raises the platform tards
|
||||||
* it's destination. Otherwise, it lowers
|
* it's destination. Otherwise, it lowers
|
||||||
* to the lowest nearby height if not
|
* to the lowest nearby height if not
|
||||||
* there already.
|
* there already.
|
||||||
|
|
|
@ -5189,7 +5189,7 @@ static void P_DoJumpStuff(player_t *player, ticcmd_t *cmd)
|
||||||
if (!(player->pflags & (PF_THOKKED|PF_USEDOWN)) || (player->charflags & SF_MULTIABILITY))
|
if (!(player->pflags & (PF_THOKKED|PF_USEDOWN)) || (player->charflags & SF_MULTIABILITY))
|
||||||
{
|
{
|
||||||
P_Telekinesis(player,
|
P_Telekinesis(player,
|
||||||
-FixedMul(player->actionspd, player->mo->scale), // -ve thrust (pulling towards player)
|
-FixedMul(player->actionspd, player->mo->scale), // -ve thrust (pulling tards player)
|
||||||
FixedMul(384*FRACUNIT, player->mo->scale));
|
FixedMul(384*FRACUNIT, player->mo->scale));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -6177,7 +6177,7 @@ static void P_3dMovement(player_t *player)
|
||||||
// The rest is unaffected.
|
// The rest is unaffected.
|
||||||
angle_t thrustangle = R_PointToAngle2(0, 0, totalthrust.x, totalthrust.y)-player->mo->standingslope->xydirection;
|
angle_t thrustangle = R_PointToAngle2(0, 0, totalthrust.x, totalthrust.y)-player->mo->standingslope->xydirection;
|
||||||
|
|
||||||
if (player->mo->standingslope->zdelta < 0) { // Direction goes down, so thrustangle needs to face toward
|
if (player->mo->standingslope->zdelta < 0) { // Direction goes down, so thrustangle needs to face tard
|
||||||
if (thrustangle < ANGLE_90 || thrustangle > ANGLE_270) {
|
if (thrustangle < ANGLE_90 || thrustangle > ANGLE_270) {
|
||||||
P_QuantizeMomentumToSlope(&totalthrust, player->mo->standingslope);
|
P_QuantizeMomentumToSlope(&totalthrust, player->mo->standingslope);
|
||||||
}
|
}
|
||||||
|
@ -8644,7 +8644,7 @@ static void P_MovePlayer(player_t *player)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
if (rendermode != render_soft && rendermode != render_none && cv_grfovchange.value)
|
if (rendermode == render_opengl && cv_grfovchange.value)
|
||||||
{
|
{
|
||||||
fixed_t speed;
|
fixed_t speed;
|
||||||
const fixed_t runnyspeed = 20*FRACUNIT;
|
const fixed_t runnyspeed = 20*FRACUNIT;
|
||||||
|
|
28
src/r_main.c
28
src/r_main.c
|
@ -591,11 +591,6 @@ void R_ExecuteSetViewSize(void)
|
||||||
|
|
||||||
R_InitTextureMapping();
|
R_InitTextureMapping();
|
||||||
|
|
||||||
#ifdef HWRENDER
|
|
||||||
if (rendermode != render_soft)
|
|
||||||
HWR_InitTextureMapping();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// thing clipping
|
// thing clipping
|
||||||
for (i = 0; i < viewwidth; i++)
|
for (i = 0; i < viewwidth; i++)
|
||||||
screenheightarray[i] = (INT16)viewheight;
|
screenheightarray[i] = (INT16)viewheight;
|
||||||
|
@ -725,29 +720,34 @@ subsector_t *R_IsPointInSubsector(fixed_t x, fixed_t y)
|
||||||
|
|
||||||
static mobj_t *viewmobj;
|
static mobj_t *viewmobj;
|
||||||
|
|
||||||
// WARNING: a should be unsigned but to add with 2048, it isn't!
|
|
||||||
#define AIMINGTODY(a) ((FINETANGENT((2048+(((INT32)a)>>ANGLETOFINESHIFT)) & FINEMASK)*160)>>FRACBITS)
|
|
||||||
|
|
||||||
// recalc necessary stuff for mouseaiming
|
// recalc necessary stuff for mouseaiming
|
||||||
// slopes are already calculated for the full possible view (which is 4*viewheight).
|
// slopes are already calculated for the full possible view (which is 4*viewheight).
|
||||||
// 18/08/18: (No it's actually 16*viewheight, thanks Jimita for finding this out)
|
// 18/08/18: (No it's actually 16*viewheight, thanks Jimita for finding this out)
|
||||||
static void R_SetupFreelook(void)
|
static void R_SetupFreelook(void)
|
||||||
{
|
{
|
||||||
INT32 dy = 0;
|
INT32 dy = 0;
|
||||||
|
|
||||||
|
// clip it in the case we are looking a hardware 90 degrees full aiming
|
||||||
|
// (lmps, network and use F12...)
|
||||||
|
if (rendermode == render_soft
|
||||||
|
#ifdef HWRENDER
|
||||||
|
|| cv_grshearing.value
|
||||||
|
#endif
|
||||||
|
)
|
||||||
|
{
|
||||||
|
G_SoftwareClipAimingPitch((INT32 *)&aimingangle);
|
||||||
|
}
|
||||||
|
|
||||||
if (rendermode == render_soft)
|
if (rendermode == render_soft)
|
||||||
{
|
{
|
||||||
// clip it in the case we are looking a hardware 90 degrees full aiming
|
dy = (AIMINGTODY(aimingangle)>>FRACBITS) * viewwidth/BASEVIDWIDTH;
|
||||||
// (lmps, network and use F12...)
|
|
||||||
G_SoftwareClipAimingPitch((INT32 *)&aimingangle);
|
|
||||||
dy = AIMINGTODY(aimingangle) * viewwidth/BASEVIDWIDTH;
|
|
||||||
yslope = &yslopetab[viewheight*8 - (viewheight/2 + dy)];
|
yslope = &yslopetab[viewheight*8 - (viewheight/2 + dy)];
|
||||||
}
|
}
|
||||||
|
|
||||||
centery = (viewheight/2) + dy;
|
centery = (viewheight/2) + dy;
|
||||||
centeryfrac = centery<<FRACBITS;
|
centeryfrac = centery<<FRACBITS;
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef AIMINGTODY
|
|
||||||
|
|
||||||
void R_SetupFrame(player_t *player)
|
void R_SetupFrame(player_t *player)
|
||||||
{
|
{
|
||||||
camera_t *thiscam;
|
camera_t *thiscam;
|
||||||
|
|
|
@ -758,10 +758,10 @@ void S_StartSound(const void *origin, sfxenum_t sfx_id)
|
||||||
{
|
{
|
||||||
switch (sfx_id)
|
switch (sfx_id)
|
||||||
{
|
{
|
||||||
// case sfx_altow1:
|
// case sfx_alt1:
|
||||||
// case sfx_altow2:
|
// case sfx_alt2:
|
||||||
// case sfx_altow3:
|
// case sfx_alt3:
|
||||||
// case sfx_altow4:
|
// case sfx_alt4:
|
||||||
// sfx_id = sfx_mario8;
|
// sfx_id = sfx_mario8;
|
||||||
// break;
|
// break;
|
||||||
case sfx_thok:
|
case sfx_thok:
|
||||||
|
|
|
@ -75,7 +75,8 @@ void *hwSym(const char *funcName,void *handle)
|
||||||
void *funcPointer = NULL;
|
void *funcPointer = NULL;
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
if (0 == strcmp("SetPalette", funcName))
|
if (0 == strcmp("SetPalette", funcName))
|
||||||
funcPointer = &OglSdlSetPalette;
|
funcPointer = &OglSdlSetPalette;
|
||||||
|
|
||||||
GETFUNC(Init);
|
GETFUNC(Init);
|
||||||
GETFUNC(Draw2DLine);
|
GETFUNC(Draw2DLine);
|
||||||
GETFUNC(DrawPolygon);
|
GETFUNC(DrawPolygon);
|
||||||
|
@ -91,7 +92,6 @@ void *hwSym(const char *funcName,void *handle)
|
||||||
GETFUNC(DrawModel);
|
GETFUNC(DrawModel);
|
||||||
GETFUNC(CreateModelVBOs);
|
GETFUNC(CreateModelVBOs);
|
||||||
GETFUNC(SetTransform);
|
GETFUNC(SetTransform);
|
||||||
GETFUNC(GetRenderVersion);
|
|
||||||
GETFUNC(PostImgRedraw);
|
GETFUNC(PostImgRedraw);
|
||||||
GETFUNC(FlushScreenTextures);
|
GETFUNC(FlushScreenTextures);
|
||||||
GETFUNC(StartScreenWipe);
|
GETFUNC(StartScreenWipe);
|
||||||
|
@ -101,6 +101,15 @@ void *hwSym(const char *funcName,void *handle)
|
||||||
GETFUNC(MakeScreenTexture);
|
GETFUNC(MakeScreenTexture);
|
||||||
GETFUNC(MakeScreenFinalTexture);
|
GETFUNC(MakeScreenFinalTexture);
|
||||||
GETFUNC(DrawScreenFinalTexture);
|
GETFUNC(DrawScreenFinalTexture);
|
||||||
|
|
||||||
|
GETFUNC(LoadShaders);
|
||||||
|
GETFUNC(KillShaders);
|
||||||
|
GETFUNC(SetShader);
|
||||||
|
GETFUNC(UnSetShader);
|
||||||
|
|
||||||
|
GETFUNC(LoadCustomShader);
|
||||||
|
GETFUNC(InitCustomShaders);
|
||||||
|
|
||||||
#else //HWRENDER
|
#else //HWRENDER
|
||||||
if (0 == strcmp("FinishUpdate", funcName))
|
if (0 == strcmp("FinishUpdate", funcName))
|
||||||
return funcPointer; //&FinishUpdate;
|
return funcPointer; //&FinishUpdate;
|
||||||
|
|
|
@ -350,11 +350,7 @@ static INT32 Impl_SDL_Scancode_To_Keycode(SDL_Scancode code)
|
||||||
case SDL_SCANCODE_RGUI: return KEY_RIGHTWIN;
|
case SDL_SCANCODE_RGUI: return KEY_RIGHTWIN;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
#ifdef HWRENDER
|
|
||||||
DBG_Printf("Unknown incoming scancode: %d, represented %c\n",
|
|
||||||
code,
|
|
||||||
SDL_GetKeyName(SDL_GetKeyFromScancode(code)));
|
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1627,10 +1623,17 @@ void I_StartupGraphics(void)
|
||||||
))
|
))
|
||||||
framebuffer = SDL_TRUE;
|
framebuffer = SDL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (M_CheckParm("-software"))
|
if (M_CheckParm("-software"))
|
||||||
{
|
{
|
||||||
rendermode = render_soft;
|
rendermode = render_soft;
|
||||||
}
|
}
|
||||||
|
#ifdef HWRENDER
|
||||||
|
else if (M_CheckParm("-opengl"))
|
||||||
|
{
|
||||||
|
rendermode = render_opengl;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
usesdl2soft = M_CheckParm("-softblit");
|
usesdl2soft = M_CheckParm("-softblit");
|
||||||
borderlesswindow = M_CheckParm("-borderless");
|
borderlesswindow = M_CheckParm("-borderless");
|
||||||
|
@ -1638,9 +1641,8 @@ void I_StartupGraphics(void)
|
||||||
//SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY>>1,SDL_DEFAULT_REPEAT_INTERVAL<<2);
|
//SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY>>1,SDL_DEFAULT_REPEAT_INTERVAL<<2);
|
||||||
VID_Command_ModeList_f();
|
VID_Command_ModeList_f();
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
if (M_CheckParm("-opengl") || rendermode == render_opengl)
|
if (rendermode == render_opengl)
|
||||||
{
|
{
|
||||||
rendermode = render_opengl;
|
|
||||||
HWD.pfnInit = hwSym("Init",NULL);
|
HWD.pfnInit = hwSym("Init",NULL);
|
||||||
HWD.pfnFinishUpdate = NULL;
|
HWD.pfnFinishUpdate = NULL;
|
||||||
HWD.pfnDraw2DLine = hwSym("Draw2DLine",NULL);
|
HWD.pfnDraw2DLine = hwSym("Draw2DLine",NULL);
|
||||||
|
@ -1658,7 +1660,6 @@ void I_StartupGraphics(void)
|
||||||
HWD.pfnDrawModel = hwSym("DrawModel",NULL);
|
HWD.pfnDrawModel = hwSym("DrawModel",NULL);
|
||||||
HWD.pfnCreateModelVBOs = hwSym("CreateModelVBOs",NULL);
|
HWD.pfnCreateModelVBOs = hwSym("CreateModelVBOs",NULL);
|
||||||
HWD.pfnSetTransform = hwSym("SetTransform",NULL);
|
HWD.pfnSetTransform = hwSym("SetTransform",NULL);
|
||||||
HWD.pfnGetRenderVersion = hwSym("GetRenderVersion",NULL);
|
|
||||||
HWD.pfnPostImgRedraw = hwSym("PostImgRedraw",NULL);
|
HWD.pfnPostImgRedraw = hwSym("PostImgRedraw",NULL);
|
||||||
HWD.pfnFlushScreenTextures=hwSym("FlushScreenTextures",NULL);
|
HWD.pfnFlushScreenTextures=hwSym("FlushScreenTextures",NULL);
|
||||||
HWD.pfnStartScreenWipe = hwSym("StartScreenWipe",NULL);
|
HWD.pfnStartScreenWipe = hwSym("StartScreenWipe",NULL);
|
||||||
|
@ -1668,10 +1669,16 @@ void I_StartupGraphics(void)
|
||||||
HWD.pfnMakeScreenTexture= hwSym("MakeScreenTexture",NULL);
|
HWD.pfnMakeScreenTexture= hwSym("MakeScreenTexture",NULL);
|
||||||
HWD.pfnMakeScreenFinalTexture=hwSym("MakeScreenFinalTexture",NULL);
|
HWD.pfnMakeScreenFinalTexture=hwSym("MakeScreenFinalTexture",NULL);
|
||||||
HWD.pfnDrawScreenFinalTexture=hwSym("DrawScreenFinalTexture",NULL);
|
HWD.pfnDrawScreenFinalTexture=hwSym("DrawScreenFinalTexture",NULL);
|
||||||
// check gl renderer lib
|
|
||||||
if (HWD.pfnGetRenderVersion() != VERSION)
|
HWD.pfnLoadShaders = hwSym("LoadShaders",NULL);
|
||||||
I_Error("%s", M_GetText("The version of the renderer doesn't match the version of the executable\nBe sure you have installed SRB2 properly.\n"));
|
HWD.pfnKillShaders = hwSym("KillShaders",NULL);
|
||||||
if (!HWD.pfnInit(I_Error)) // let load the OpenGL library
|
HWD.pfnSetShader = hwSym("SetShader",NULL);
|
||||||
|
HWD.pfnUnSetShader = hwSym("UnSetShader",NULL);
|
||||||
|
|
||||||
|
HWD.pfnLoadCustomShader = hwSym("LoadCustomShader",NULL);
|
||||||
|
HWD.pfnInitCustomShaders = hwSym("InitCustomShaders",NULL);
|
||||||
|
|
||||||
|
if (!HWD.pfnInit()) // load the OpenGL library
|
||||||
{
|
{
|
||||||
rendermode = render_soft;
|
rendermode = render_soft;
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
|
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
#include "../hardware/r_opengl/r_opengl.h"
|
#include "../hardware/r_opengl/r_opengl.h"
|
||||||
|
#include "../hardware/hw_main.h"
|
||||||
#include "ogl_sdl.h"
|
#include "ogl_sdl.h"
|
||||||
#include "../i_system.h"
|
#include "../i_system.h"
|
||||||
#include "hwsym_sdl.h"
|
#include "hwsym_sdl.h"
|
||||||
|
@ -90,15 +91,15 @@ boolean LoadGL(void)
|
||||||
const char *OGLLibname = NULL;
|
const char *OGLLibname = NULL;
|
||||||
const char *GLULibname = NULL;
|
const char *GLULibname = NULL;
|
||||||
|
|
||||||
if (M_CheckParm ("-OGLlib") && M_IsNextParm())
|
if (M_CheckParm("-OGLlib") && M_IsNextParm())
|
||||||
OGLLibname = M_GetNextParm();
|
OGLLibname = M_GetNextParm();
|
||||||
|
|
||||||
if (SDL_GL_LoadLibrary(OGLLibname) != 0)
|
if (SDL_GL_LoadLibrary(OGLLibname) != 0)
|
||||||
{
|
{
|
||||||
I_OutputMsg("Could not load OpenGL Library: %s\n"
|
CONS_Alert(CONS_ERROR, "Could not load OpenGL Library: %s\n"
|
||||||
"Falling back to Software mode.\n", SDL_GetError());
|
"Falling back to Software mode.\n", SDL_GetError());
|
||||||
if (!M_CheckParm ("-OGLlib"))
|
if (!M_CheckParm("-OGLlib"))
|
||||||
I_OutputMsg("If you know what is the OpenGL library's name, use -OGLlib\n");
|
CONS_Printf("If you know what is the OpenGL library's name, use -OGLlib\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,7 +119,7 @@ boolean LoadGL(void)
|
||||||
GLULibname = NULL;
|
GLULibname = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (M_CheckParm ("-GLUlib") && M_IsNextParm())
|
if (M_CheckParm("-GLUlib") && M_IsNextParm())
|
||||||
GLULibname = M_GetNextParm();
|
GLULibname = M_GetNextParm();
|
||||||
|
|
||||||
if (GLULibname)
|
if (GLULibname)
|
||||||
|
@ -152,31 +153,29 @@ boolean LoadGL(void)
|
||||||
*/
|
*/
|
||||||
boolean OglSdlSurface(INT32 w, INT32 h)
|
boolean OglSdlSurface(INT32 w, INT32 h)
|
||||||
{
|
{
|
||||||
INT32 cbpp;
|
INT32 cbpp = cv_scr_depth.value < 16 ? 16 : cv_scr_depth.value;
|
||||||
const GLvoid *glvendor = NULL, *glrenderer = NULL, *glversion = NULL;
|
static boolean first_init = false;
|
||||||
|
|
||||||
cbpp = cv_scr_depth.value < 16 ? 16 : cv_scr_depth.value;
|
|
||||||
|
|
||||||
glvendor = pglGetString(GL_VENDOR);
|
|
||||||
// Get info and extensions.
|
|
||||||
//BP: why don't we make it earlier ?
|
|
||||||
//Hurdler: we cannot do that before intialising gl context
|
|
||||||
glrenderer = pglGetString(GL_RENDERER);
|
|
||||||
glversion = pglGetString(GL_VERSION);
|
|
||||||
gl_extensions = pglGetString(GL_EXTENSIONS);
|
|
||||||
|
|
||||||
DBG_Printf("Vendor : %s\n", glvendor);
|
|
||||||
DBG_Printf("Renderer : %s\n", glrenderer);
|
|
||||||
DBG_Printf("Version : %s\n", glversion);
|
|
||||||
DBG_Printf("Extensions : %s\n", gl_extensions);
|
|
||||||
oglflags = 0;
|
oglflags = 0;
|
||||||
|
|
||||||
|
if (!first_init)
|
||||||
|
{
|
||||||
|
gl_version = pglGetString(GL_VERSION);
|
||||||
|
gl_renderer = pglGetString(GL_RENDERER);
|
||||||
|
gl_extensions = pglGetString(GL_EXTENSIONS);
|
||||||
|
|
||||||
|
GL_DBG_Printf("OpenGL %s\n", gl_version);
|
||||||
|
GL_DBG_Printf("GPU: %s\n", gl_renderer);
|
||||||
|
GL_DBG_Printf("Extensions: %s\n", gl_extensions);
|
||||||
|
}
|
||||||
|
first_init = true;
|
||||||
|
|
||||||
if (isExtAvailable("GL_EXT_texture_filter_anisotropic", gl_extensions))
|
if (isExtAvailable("GL_EXT_texture_filter_anisotropic", gl_extensions))
|
||||||
pglGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &maximumAnisotropy);
|
pglGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &maximumAnisotropy);
|
||||||
else
|
else
|
||||||
maximumAnisotropy = 1;
|
maximumAnisotropy = 1;
|
||||||
|
|
||||||
SetupGLFunc13();
|
SetupGLFunc4();
|
||||||
|
|
||||||
granisotropicmode_cons_t[1].value = maximumAnisotropy;
|
granisotropicmode_cons_t[1].value = maximumAnisotropy;
|
||||||
|
|
||||||
|
@ -222,7 +221,7 @@ void OglSdlFinishUpdate(boolean waitvbl)
|
||||||
HWR_DrawScreenFinalTexture(realwidth, realheight);
|
HWR_DrawScreenFinalTexture(realwidth, realheight);
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT void HWRAPI( OglSdlSetPalette) (RGBA_t *palette)
|
EXPORT void HWRAPI(OglSdlSetPalette) (RGBA_t *palette)
|
||||||
{
|
{
|
||||||
size_t palsize = (sizeof(RGBA_t) * 256);
|
size_t palsize = (sizeof(RGBA_t) * 256);
|
||||||
// on a palette change, you have to reload all of the textures
|
// on a palette change, you have to reload all of the textures
|
||||||
|
|
|
@ -57,10 +57,10 @@ sfxinfo_t S_sfx[NUMSFX] =
|
||||||
{"altdi2", false, 192, 16, -1, NULL, 0, SKSPLDET2, -1, LUMPERROR, "Dying"},
|
{"altdi2", false, 192, 16, -1, NULL, 0, SKSPLDET2, -1, LUMPERROR, "Dying"},
|
||||||
{"altdi3", false, 192, 16, -1, NULL, 0, SKSPLDET3, -1, LUMPERROR, "Dying"},
|
{"altdi3", false, 192, 16, -1, NULL, 0, SKSPLDET3, -1, LUMPERROR, "Dying"},
|
||||||
{"altdi4", false, 192, 16, -1, NULL, 0, SKSPLDET4, -1, LUMPERROR, "Dying"},
|
{"altdi4", false, 192, 16, -1, NULL, 0, SKSPLDET4, -1, LUMPERROR, "Dying"},
|
||||||
{"altow1", false, 192, 16, -1, NULL, 0, SKSPLPAN1, -1, LUMPERROR, "Ring loss"},
|
{"alt1", false, 192, 16, -1, NULL, 0, SKSPLPAN1, -1, LUMPERROR, "Ring loss"},
|
||||||
{"altow2", false, 192, 16, -1, NULL, 0, SKSPLPAN2, -1, LUMPERROR, "Ring loss"},
|
{"alt2", false, 192, 16, -1, NULL, 0, SKSPLPAN2, -1, LUMPERROR, "Ring loss"},
|
||||||
{"altow3", false, 192, 16, -1, NULL, 0, SKSPLPAN3, -1, LUMPERROR, "Ring loss"},
|
{"alt3", false, 192, 16, -1, NULL, 0, SKSPLPAN3, -1, LUMPERROR, "Ring loss"},
|
||||||
{"altow4", false, 192, 16, -1, NULL, 0, SKSPLPAN4, -1, LUMPERROR, "Ring loss"},
|
{"alt4", false, 192, 16, -1, NULL, 0, SKSPLPAN4, -1, LUMPERROR, "Ring loss"},
|
||||||
{"victr1", false, 64, 16, -1, NULL, 0, SKSPLVCT1, -1, LUMPERROR, "/"},
|
{"victr1", false, 64, 16, -1, NULL, 0, SKSPLVCT1, -1, LUMPERROR, "/"},
|
||||||
{"victr2", false, 64, 16, -1, NULL, 0, SKSPLVCT2, -1, LUMPERROR, "/"},
|
{"victr2", false, 64, 16, -1, NULL, 0, SKSPLVCT2, -1, LUMPERROR, "/"},
|
||||||
{"victr3", false, 64, 16, -1, NULL, 0, SKSPLVCT3, -1, LUMPERROR, "/"},
|
{"victr3", false, 64, 16, -1, NULL, 0, SKSPLVCT3, -1, LUMPERROR, "/"},
|
||||||
|
|
|
@ -106,10 +106,10 @@ typedef enum
|
||||||
sfx_altdi2,
|
sfx_altdi2,
|
||||||
sfx_altdi3,
|
sfx_altdi3,
|
||||||
sfx_altdi4,
|
sfx_altdi4,
|
||||||
sfx_altow1,
|
sfx_alt1,
|
||||||
sfx_altow2,
|
sfx_alt2,
|
||||||
sfx_altow3,
|
sfx_alt3,
|
||||||
sfx_altow4,
|
sfx_alt4,
|
||||||
sfx_victr1,
|
sfx_victr1,
|
||||||
sfx_victr2,
|
sfx_victr2,
|
||||||
sfx_victr3,
|
sfx_victr3,
|
||||||
|
|
|
@ -417,7 +417,7 @@ void V_SetPalette(INT32 palettenum)
|
||||||
LoadMapPalette();
|
LoadMapPalette();
|
||||||
|
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
if (rendermode != render_soft && rendermode != render_none)
|
if (rendermode == render_opengl)
|
||||||
HWR_SetPalette(&pLocalPalette[palettenum*256]);
|
HWR_SetPalette(&pLocalPalette[palettenum*256]);
|
||||||
#if (defined (__unix__) && !defined (MSDOS)) || defined (UNIXCOMMON) || defined (HAVE_SDL)
|
#if (defined (__unix__) && !defined (MSDOS)) || defined (UNIXCOMMON) || defined (HAVE_SDL)
|
||||||
else
|
else
|
||||||
|
@ -431,7 +431,7 @@ void V_SetPaletteLump(const char *pal)
|
||||||
{
|
{
|
||||||
LoadPalette(pal);
|
LoadPalette(pal);
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
if (rendermode != render_soft && rendermode != render_none)
|
if (rendermode == render_opengl)
|
||||||
HWR_SetPalette(pLocalPalette);
|
HWR_SetPalette(pLocalPalette);
|
||||||
#if (defined (__unix__) && !defined (MSDOS)) || defined (UNIXCOMMON) || defined (HAVE_SDL)
|
#if (defined (__unix__) && !defined (MSDOS)) || defined (UNIXCOMMON) || defined (HAVE_SDL)
|
||||||
else
|
else
|
||||||
|
@ -528,7 +528,7 @@ void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vsca
|
||||||
|
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
//if (rendermode != render_soft && !con_startup) // Why?
|
//if (rendermode != render_soft && !con_startup) // Why?
|
||||||
if (rendermode != render_soft)
|
if (rendermode == render_opengl)
|
||||||
{
|
{
|
||||||
HWR_DrawStretchyFixedPatch((GLPatch_t *)patch, x, y, pscale, vscale, scrn, colormap);
|
HWR_DrawStretchyFixedPatch((GLPatch_t *)patch, x, y, pscale, vscale, scrn, colormap);
|
||||||
return;
|
return;
|
||||||
|
@ -828,7 +828,7 @@ void V_DrawCroppedPatch(fixed_t x, fixed_t y, fixed_t pscale, INT32 scrn, patch_
|
||||||
|
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
//if (rendermode != render_soft && !con_startup) // Not this again
|
//if (rendermode != render_soft && !con_startup) // Not this again
|
||||||
if (rendermode != render_soft)
|
if (rendermode == render_opengl)
|
||||||
{
|
{
|
||||||
HWR_DrawCroppedPatch((GLPatch_t*)patch,x,y,pscale,scrn,sx,sy,w,h);
|
HWR_DrawCroppedPatch((GLPatch_t*)patch,x,y,pscale,scrn,sx,sy,w,h);
|
||||||
return;
|
return;
|
||||||
|
@ -1152,7 +1152,7 @@ void V_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c)
|
||||||
|
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
//if (rendermode != render_soft && !con_startup) // Not this again
|
//if (rendermode != render_soft && !con_startup) // Not this again
|
||||||
if (rendermode != render_soft)
|
if (rendermode == render_opengl)
|
||||||
{
|
{
|
||||||
HWR_DrawFill(x, y, w, h, c);
|
HWR_DrawFill(x, y, w, h, c);
|
||||||
return;
|
return;
|
||||||
|
@ -1349,7 +1349,7 @@ void V_DrawFillConsoleMap(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
if (rendermode != render_soft && rendermode != render_none)
|
if (rendermode == render_opengl)
|
||||||
{
|
{
|
||||||
UINT32 hwcolor = V_GetHWConsBackColor();
|
UINT32 hwcolor = V_GetHWConsBackColor();
|
||||||
HWR_DrawConsoleFill(x, y, w, h, c, hwcolor); // we still use the regular color stuff but only for flags. actual draw color is "hwcolor" for this.
|
HWR_DrawConsoleFill(x, y, w, h, c, hwcolor); // we still use the regular color stuff but only for flags. actual draw color is "hwcolor" for this.
|
||||||
|
@ -1546,7 +1546,7 @@ void V_DrawFadeFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c, UINT16 color, U
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
if (rendermode != render_soft && rendermode != render_none)
|
if (rendermode == render_opengl)
|
||||||
{
|
{
|
||||||
// ughhhhh please can someone else do this? thanks ~toast 25/7/19 in 38 degrees centigrade w/o AC
|
// ughhhhh please can someone else do this? thanks ~toast 25/7/19 in 38 degrees centigrade w/o AC
|
||||||
HWR_DrawFadeFill(x, y, w, h, c, color, strength); // toast two days later - left above comment in 'cause it's funny
|
HWR_DrawFadeFill(x, y, w, h, c, color, strength); // toast two days later - left above comment in 'cause it's funny
|
||||||
|
@ -1708,7 +1708,7 @@ void V_DrawFlatFill(INT32 x, INT32 y, INT32 w, INT32 h, lumpnum_t flatnum)
|
||||||
size_t size, lflatsize, flatshift;
|
size_t size, lflatsize, flatshift;
|
||||||
|
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
if (rendermode != render_soft && rendermode != render_none)
|
if (rendermode == render_opengl)
|
||||||
{
|
{
|
||||||
HWR_DrawFlatFill(x, y, w, h, flatnum);
|
HWR_DrawFlatFill(x, y, w, h, flatnum);
|
||||||
return;
|
return;
|
||||||
|
@ -1818,7 +1818,7 @@ void V_DrawPatchFill(patch_t *pat)
|
||||||
void V_DrawFadeScreen(UINT16 color, UINT8 strength)
|
void V_DrawFadeScreen(UINT16 color, UINT8 strength)
|
||||||
{
|
{
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
if (rendermode != render_soft && rendermode != render_none)
|
if (rendermode == render_opengl)
|
||||||
{
|
{
|
||||||
HWR_FadeScreenMenuBack(color, strength);
|
HWR_FadeScreenMenuBack(color, strength);
|
||||||
return;
|
return;
|
||||||
|
@ -1847,7 +1847,7 @@ void V_DrawFadeConsBack(INT32 plines)
|
||||||
UINT8 *deststop, *buf;
|
UINT8 *deststop, *buf;
|
||||||
|
|
||||||
#ifdef HWRENDER // not win32 only 19990829 by Kin
|
#ifdef HWRENDER // not win32 only 19990829 by Kin
|
||||||
if (rendermode != render_soft && rendermode != render_none)
|
if (rendermode == render_opengl)
|
||||||
{
|
{
|
||||||
UINT32 hwcolor = V_GetHWConsBackColor();
|
UINT32 hwcolor = V_GetHWConsBackColor();
|
||||||
HWR_DrawConsoleBack(hwcolor, plines);
|
HWR_DrawConsoleBack(hwcolor, plines);
|
||||||
|
@ -1880,7 +1880,7 @@ void V_DrawPromptBack(INT32 boxheight, INT32 color)
|
||||||
color = cons_backcolor.value;
|
color = cons_backcolor.value;
|
||||||
|
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
if (rendermode != render_soft && rendermode != render_none)
|
if (rendermode == render_opengl)
|
||||||
{
|
{
|
||||||
UINT32 hwcolor;
|
UINT32 hwcolor;
|
||||||
switch (color)
|
switch (color)
|
||||||
|
@ -3089,8 +3089,7 @@ void V_DoPostProcessor(INT32 view, postimg_t type, INT32 param)
|
||||||
INT32 height, yoffset;
|
INT32 height, yoffset;
|
||||||
|
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
// draw a hardware converted patch
|
if (rendermode != render_soft)
|
||||||
if (rendermode != render_soft && rendermode != render_none)
|
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
12
src/w_wad.c
12
src/w_wad.c
|
@ -803,6 +803,11 @@ UINT16 W_InitFile(const char *filename, boolean mainfile)
|
||||||
wadfiles[numwadfiles] = wadfile;
|
wadfiles[numwadfiles] = wadfile;
|
||||||
numwadfiles++; // must come BEFORE W_LoadDehackedLumps, so any addfile called by COM_BufInsertText called by Lua doesn't overwrite what we just loaded
|
numwadfiles++; // must come BEFORE W_LoadDehackedLumps, so any addfile called by COM_BufInsertText called by Lua doesn't overwrite what we just loaded
|
||||||
|
|
||||||
|
#ifdef HWRENDER
|
||||||
|
if (rendermode == render_opengl)
|
||||||
|
HWR_LoadShaders(numwadfiles - 1, (wadfile->type == RET_PK3));
|
||||||
|
#endif
|
||||||
|
|
||||||
// TODO: HACK ALERT - Load Lua & SOC stuff right here. I feel like this should be out of this place, but... Let's stick with this for now.
|
// TODO: HACK ALERT - Load Lua & SOC stuff right here. I feel like this should be out of this place, but... Let's stick with this for now.
|
||||||
switch (wadfile->type)
|
switch (wadfile->type)
|
||||||
{
|
{
|
||||||
|
@ -1590,7 +1595,7 @@ void W_UnlockCachedPatch(void *patch)
|
||||||
// The hardware code does its own memory management, as its patches
|
// The hardware code does its own memory management, as its patches
|
||||||
// have different lifetimes from software's.
|
// have different lifetimes from software's.
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
if (rendermode != render_soft && rendermode != render_none)
|
if (rendermode == render_opengl)
|
||||||
HWR_UnlockCachedPatch((GLPatch_t*)patch);
|
HWR_UnlockCachedPatch((GLPatch_t*)patch);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
@ -1884,6 +1889,11 @@ int W_VerifyNMUSlumps(const char *filename)
|
||||||
{"M_", 2}, // As does menu stuff
|
{"M_", 2}, // As does menu stuff
|
||||||
{"MUSICDEF", 8}, // Song definitions (thanks kart)
|
{"MUSICDEF", 8}, // Song definitions (thanks kart)
|
||||||
|
|
||||||
|
#ifdef HWRENDER
|
||||||
|
{"SHADERS", 7},
|
||||||
|
{"SH_", 3},
|
||||||
|
#endif
|
||||||
|
|
||||||
{NULL, 0},
|
{NULL, 0},
|
||||||
};
|
};
|
||||||
return W_VerifyFile(filename, NMUSlist, false);
|
return W_VerifyFile(filename, NMUSlist, false);
|
||||||
|
|
|
@ -776,7 +776,7 @@ static void Command_Memfree_f(void)
|
||||||
sizeu1(Z_TagsUsage(PU_PURGELEVEL, INT32_MAX)>>10));
|
sizeu1(Z_TagsUsage(PU_PURGELEVEL, INT32_MAX)>>10));
|
||||||
|
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
if (rendermode != render_soft && rendermode != render_none)
|
if (rendermode == render_opengl)
|
||||||
{
|
{
|
||||||
CONS_Printf(M_GetText("Patch info headers: %7s KB\n"), sizeu1(Z_TagUsage(PU_HWRPATCHINFO)>>10));
|
CONS_Printf(M_GetText("Patch info headers: %7s KB\n"), sizeu1(Z_TagUsage(PU_HWRPATCHINFO)>>10));
|
||||||
CONS_Printf(M_GetText("Mipmap patches : %7s KB\n"), sizeu1(Z_TagUsage(PU_HWRPATCHCOLMIPMAP)>>10));
|
CONS_Printf(M_GetText("Mipmap patches : %7s KB\n"), sizeu1(Z_TagUsage(PU_HWRPATCHCOLMIPMAP)>>10));
|
||||||
|
|
Loading…
Reference in New Issue