Port of Jimita's shader stuff + my lighting shader

Co-Authored-By: Jaime Passos <jimita@users.noreply.github.com>
This commit is contained in:
Sally Cochenour 2019-12-25 14:22:01 -05:00
parent 7e0152f37b
commit 7851bef929
41 changed files with 1711 additions and 1560 deletions

View File

@ -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);
} }
} }

View File

@ -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;
} }

View File

@ -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;

View File

@ -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...)

View File

@ -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.

View File

@ -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,

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -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_

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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
*/ */

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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;

View File

@ -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));

View File

@ -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)

View File

@ -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();
} }

View File

@ -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.

View File

@ -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;

View File

@ -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;

View File

@ -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:

View File

@ -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;

View File

@ -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;
} }

View File

@ -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

View File

@ -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, "/"},

View File

@ -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,

View File

@ -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

View File

@ -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);

View File

@ -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));