use nullptr

master
Daniel Kolesa 2020-07-30 03:15:44 +02:00
parent dc27d1296d
commit d68b813f44
61 changed files with 907 additions and 912 deletions

View File

@ -39,7 +39,7 @@ static void setuptqaa(int w, int h)
if(!tqaatex[i]) glGenTextures(1, &tqaatex[i]); if(!tqaatex[i]) glGenTextures(1, &tqaatex[i]);
if(!tqaafbo[i]) glGenFramebuffers_(1, &tqaafbo[i]); if(!tqaafbo[i]) glGenFramebuffers_(1, &tqaafbo[i]);
glBindFramebuffer_(GL_FRAMEBUFFER, tqaafbo[i]); glBindFramebuffer_(GL_FRAMEBUFFER, tqaafbo[i]);
createtexture(tqaatex[i], w, h, NULL, 3, 1, GL_RGBA8, GL_TEXTURE_RECTANGLE); createtexture(tqaatex[i], w, h, nullptr, 3, 1, GL_RGBA8, GL_TEXTURE_RECTANGLE);
glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, tqaatex[i], 0); glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, tqaatex[i], 0);
bindgdepth(); bindgdepth();
if(glCheckFramebufferStatus_(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) if(glCheckFramebufferStatus_(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
@ -129,12 +129,12 @@ static void dotqaa(GLuint outfbo = 0)
static GLuint fxaafbo = 0, fxaatex = 0; static GLuint fxaafbo = 0, fxaatex = 0;
static int fxaatype = -1; static int fxaatype = -1;
static Shader *fxaashader = NULL; static Shader *fxaashader = nullptr;
static void clearfxaashaders() static void clearfxaashaders()
{ {
fxaatype = -1; fxaatype = -1;
fxaashader = NULL; fxaashader = nullptr;
} }
static void cleanupfxaa() static void cleanupfxaa()
@ -168,7 +168,7 @@ static void setupfxaa(int w, int h)
if(!fxaatex) glGenTextures(1, &fxaatex); if(!fxaatex) glGenTextures(1, &fxaatex);
if(!fxaafbo) glGenFramebuffers_(1, &fxaafbo); if(!fxaafbo) glGenFramebuffers_(1, &fxaafbo);
glBindFramebuffer_(GL_FRAMEBUFFER, fxaafbo); glBindFramebuffer_(GL_FRAMEBUFFER, fxaafbo);
createtexture(fxaatex, w, h, NULL, 3, 1, tqaa || (!fxaagreenluma && !intel_texalpha_bug) ? GL_RGBA8 : GL_RGB, GL_TEXTURE_RECTANGLE); createtexture(fxaatex, w, h, nullptr, 3, 1, tqaa || (!fxaagreenluma && !intel_texalpha_bug) ? GL_RGBA8 : GL_RGB, GL_TEXTURE_RECTANGLE);
glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, fxaatex, 0); glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, fxaatex, 0);
bindgdepth(); bindgdepth();
if(glCheckFramebufferStatus_(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) if(glCheckFramebufferStatus_(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
@ -196,7 +196,7 @@ static GLuint smaaareatex = 0, smaasearchtex = 0, smaafbo[4] = { 0, 0, 0, 0 }, s
static int smaasubsampleorder = -1; static int smaasubsampleorder = -1;
static int smaatype = -1; static int smaatype = -1;
static Shader *smaalumaedgeshader = NULL, *smaacoloredgeshader = NULL, *smaablendweightshader = NULL, *smaaneighborhoodshader = NULL; static Shader *smaalumaedgeshader = nullptr, *smaacoloredgeshader = nullptr, *smaablendweightshader = nullptr, *smaaneighborhoodshader = nullptr;
VAR(smaat2x, 1, 0, 0); VAR(smaat2x, 1, 0, 0);
VAR(smaas2x, 1, 0, 0); VAR(smaas2x, 1, 0, 0);
@ -205,10 +205,10 @@ VAR(smaa4x, 1, 0, 0);
static void clearsmaashaders() static void clearsmaashaders()
{ {
smaatype = -1; smaatype = -1;
smaalumaedgeshader = NULL; smaalumaedgeshader = nullptr;
smaacoloredgeshader = NULL; smaacoloredgeshader = nullptr;
smaablendweightshader = NULL; smaablendweightshader = nullptr;
smaaneighborhoodshader = NULL; smaaneighborhoodshader = nullptr;
} }
static void cleanupsmaa() static void cleanupsmaa()
@ -258,7 +258,7 @@ static void loadsmaashaders(bool split = false)
if(smaalumaedgeshader && smaacoloredgeshader && smaablendweightshader && smaaneighborhoodshader) return; if(smaalumaedgeshader && smaacoloredgeshader && smaablendweightshader && smaaneighborhoodshader) return;
generateshader(NULL, "smaashaders %d \"%s\"", smaaquality, opts); generateshader(nullptr, "smaashaders %d \"%s\"", smaaquality, opts);
smaalumaedgeshader = lookupshaderbyname(lumaedgename); smaalumaedgeshader = lookupshaderbyname(lumaedgename);
if(!smaalumaedgeshader) smaalumaedgeshader = nullshader; if(!smaalumaedgeshader) smaalumaedgeshader = nullshader;
smaacoloredgeshader = lookupshaderbyname(coloredgename); smaacoloredgeshader = lookupshaderbyname(coloredgename);
@ -549,12 +549,12 @@ static void setupsmaa(int w, int h)
case 1: format = hasTRG ? GL_RG8 : GL_RGBA8; break; case 1: format = hasTRG ? GL_RG8 : GL_RGBA8; break;
case 2: case 3: format = GL_RGBA8; break; case 2: case 3: format = GL_RGBA8; break;
} }
createtexture(smaatex[i], w, h, NULL, 3, 1, format, GL_TEXTURE_RECTANGLE); createtexture(smaatex[i], w, h, nullptr, 3, 1, format, GL_TEXTURE_RECTANGLE);
glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, smaatex[i], 0); glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, smaatex[i], 0);
if(!i && split) if(!i && split)
{ {
if(!smaatex[4]) glGenTextures(1, &smaatex[4]); if(!smaatex[4]) glGenTextures(1, &smaatex[4]);
createtexture(smaatex[4], w, h, NULL, 3, 1, format, GL_TEXTURE_RECTANGLE); createtexture(smaatex[4], w, h, nullptr, 3, 1, format, GL_TEXTURE_RECTANGLE);
glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_RECTANGLE, smaatex[4], 0); glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_RECTANGLE, smaatex[4], 0);
static const GLenum drawbufs[2] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 }; static const GLenum drawbufs[2] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 };
glDrawBuffers_(2, drawbufs); glDrawBuffers_(2, drawbufs);

View File

@ -116,13 +116,13 @@ struct animmodel : model
int cullface; int cullface;
shaderparamskey *key; shaderparamskey *key;
skin() : owner(0), tex(notexture), decal(NULL), masks(notexture), envmap(NULL), normalmap(NULL), shader(NULL), rsmshader(NULL), cullface(1), key(NULL) {} skin() : owner(0), tex(notexture), decal(nullptr), masks(notexture), envmap(nullptr), normalmap(nullptr), shader(nullptr), rsmshader(nullptr), cullface(1), key(nullptr) {}
bool masked() const { return masks != notexture; } bool masked() const { return masks != notexture; }
bool envmapped() const { return envmapmax>0; } bool envmapped() const { return envmapmax>0; }
bool bumpmapped() const { return normalmap != NULL; } bool bumpmapped() const { return normalmap != nullptr; }
bool alphatested() const { return alphatest > 0 && tex->type&Texture::ALPHA; } bool alphatested() const { return alphatest > 0 && tex->type&Texture::ALPHA; }
bool decaled() const { return decal != NULL; } bool decaled() const { return decal != nullptr; }
void setkey() void setkey()
{ {
@ -161,7 +161,7 @@ struct animmodel : model
{ {
#define DOMODELSHADER(name, body) \ #define DOMODELSHADER(name, body) \
do { \ do { \
static Shader *name##shader = NULL; \ static Shader *name##shader = nullptr; \
if(!name##shader) name##shader = useshaderbyname(#name); \ if(!name##shader) name##shader = useshaderbyname(#name); \
body; \ body; \
} while(0) } while(0)
@ -202,7 +202,7 @@ struct animmodel : model
void cleanup() void cleanup()
{ {
if(shader && shader->standard) shader = NULL; if(shader && shader->standard) shader = nullptr;
} }
void preloadBIH() void preloadBIH()
@ -300,7 +300,7 @@ struct animmodel : model
char *name; char *name;
bool cancollide, canrender, noclip; bool cancollide, canrender, noclip;
mesh() : group(NULL), name(NULL), cancollide(true), canrender(true), noclip(false) mesh() : group(nullptr), name(nullptr), cancollide(true), canrender(true), noclip(false)
{ {
} }
@ -506,7 +506,7 @@ struct animmodel : model
char *name; char *name;
vector<mesh *> meshes; vector<mesh *> meshes;
meshgroup() : next(NULL), shared(0), name(NULL) meshgroup() : next(nullptr), shared(0), name(nullptr)
{ {
} }
@ -627,7 +627,7 @@ struct animmodel : model
vec *pos; vec *pos;
matrix4 matrix; matrix4 matrix;
linkedpart() : p(NULL), tag(-1), anim(-1), basetime(0), translate(0, 0, 0), pos(NULL) {} linkedpart() : p(nullptr), tag(-1), anim(-1), basetime(0), translate(0, 0, 0), pos(nullptr) {}
}; };
struct part struct part
@ -641,9 +641,9 @@ struct animmodel : model
int numanimparts; int numanimparts;
float pitchscale, pitchoffset, pitchmin, pitchmax; float pitchscale, pitchoffset, pitchmin, pitchmax;
part(animmodel *model, int index = 0) : model(model), index(index), meshes(NULL), numanimparts(1), pitchscale(1), pitchoffset(0), pitchmin(0), pitchmax(0) part(animmodel *model, int index = 0) : model(model), index(index), meshes(nullptr), numanimparts(1), pitchscale(1), pitchoffset(0), pitchmin(0), pitchmax(0)
{ {
loopk(MAXANIMPARTS) anims[k] = NULL; loopk(MAXANIMPARTS) anims[k] = nullptr;
} }
virtual ~part() virtual ~part()
{ {
@ -703,7 +703,7 @@ struct animmodel : model
} }
} }
bool link(part *p, const char *tag, const vec &translate = vec(0, 0, 0), int anim = -1, int basetime = 0, vec *pos = NULL) bool link(part *p, const char *tag, const vec &translate = vec(0, 0, 0), int anim = -1, int basetime = 0, vec *pos = nullptr)
{ {
int i = meshes ? meshes->findtag(tag) : -1; int i = meshes ? meshes->findtag(tag) : -1;
if(i<0) if(i<0)
@ -785,7 +785,7 @@ struct animmodel : model
} }
else else
{ {
animspec *spec = NULL; animspec *spec = nullptr;
if(anims[animpart]) if(anims[animpart])
{ {
vector<animspec> &primary = anims[animpart][anim&ANIM_INDEX]; vector<animspec> &primary = anims[animpart][anim&ANIM_INDEX];
@ -1222,7 +1222,7 @@ struct animmodel : model
animmodel *m = (animmodel *)a[i].m; animmodel *m = (animmodel *)a[i].m;
if(!m) if(!m)
{ {
if(a[i].pos) link(NULL, a[i].tag, vec(0, 0, 0), 0, 0, a[i].pos); if(a[i].pos) link(nullptr, a[i].tag, vec(0, 0, 0), 0, 0, a[i].pos);
continue; continue;
} }
part *p = m->parts[0]; part *p = m->parts[0];
@ -1266,7 +1266,7 @@ struct animmodel : model
animmodel *m = (animmodel *)a[i].m; animmodel *m = (animmodel *)a[i].m;
if(!m) if(!m)
{ {
if(a[i].pos) unlink(NULL); if(a[i].pos) unlink(nullptr);
continue; continue;
} }
part *p = m->parts[0]; part *p = m->parts[0];
@ -1444,7 +1444,7 @@ struct animmodel : model
return bih; return bih;
} }
bool link(part *p, const char *tag, const vec &translate = vec(0, 0, 0), int anim = -1, int basetime = 0, vec *pos = NULL) bool link(part *p, const char *tag, const vec &translate = vec(0, 0, 0), int anim = -1, int basetime = 0, vec *pos = nullptr)
{ {
if(parts.empty()) return false; if(parts.empty()) return false;
return parts[0]->link(p, tag, translate, anim, basetime, pos); return parts[0]->link(p, tag, translate, anim, basetime, pos);
@ -1631,7 +1631,7 @@ struct animmodel : model
enabletc = enabletangents = enablebones = enabledepthoffset = false; enabletc = enabletangents = enablebones = enabledepthoffset = false;
enablecullface = true; enablecullface = true;
lastvbuf = lasttcbuf = lastxbuf = lastbbuf = lastebuf = lastenvmaptex = closestenvmaptex = 0; lastvbuf = lasttcbuf = lastxbuf = lastbbuf = lastebuf = lastenvmaptex = closestenvmaptex = 0;
lasttex = lastdecal = lastmasks = lastnormalmap = NULL; lasttex = lastdecal = lastmasks = lastnormalmap = nullptr;
shaderparamskey::invalidate(); shaderparamskey::invalidate();
} }
@ -1685,7 +1685,7 @@ float animmodel::sizescale = 1;
vec4 animmodel::colorscale(1, 1, 1, 1); vec4 animmodel::colorscale(1, 1, 1, 1);
GLuint animmodel::lastvbuf = 0, animmodel::lasttcbuf = 0, animmodel::lastxbuf = 0, animmodel::lastbbuf = 0, animmodel::lastebuf = 0, GLuint animmodel::lastvbuf = 0, animmodel::lasttcbuf = 0, animmodel::lastxbuf = 0, animmodel::lastbbuf = 0, animmodel::lastebuf = 0,
animmodel::lastenvmaptex = 0, animmodel::closestenvmaptex = 0; animmodel::lastenvmaptex = 0, animmodel::closestenvmaptex = 0;
Texture *animmodel::lasttex = NULL, *animmodel::lastdecal = NULL, *animmodel::lastmasks = NULL, *animmodel::lastnormalmap = NULL; Texture *animmodel::lasttex = nullptr, *animmodel::lastdecal = nullptr, *animmodel::lastmasks = nullptr, *animmodel::lastnormalmap = nullptr;
int animmodel::matrixpos = 0; int animmodel::matrixpos = 0;
matrix4 animmodel::matrixstack[64]; matrix4 animmodel::matrixstack[64];
@ -1720,7 +1720,7 @@ template<class MDL, class BASE> struct modelloader : BASE
void endload() void endload()
{ {
loading = NULL; loading = nullptr;
} }
bool loadconfig() bool loadconfig()
@ -1735,7 +1735,7 @@ template<class MDL, class BASE> struct modelloader : BASE
} }
}; };
template<class MDL, class BASE> MDL *modelloader<MDL, BASE>::loading = NULL; template<class MDL, class BASE> MDL *modelloader<MDL, BASE>::loading = nullptr;
template<class MDL, class BASE> string modelloader<MDL, BASE>::dir = {'\0'}; // crashes clang if "" is used here template<class MDL, class BASE> string modelloader<MDL, BASE>::dir = {'\0'}; // crashes clang if "" is used here
template<class MDL, class MESH> struct modelcommands template<class MDL, class MESH> struct modelcommands

View File

@ -236,7 +236,7 @@ void BIH::build(mesh &m, ushort *indices, int numindices, const ivec &vmin, cons
} }
BIH::BIH(vector<mesh> &buildmeshes) BIH::BIH(vector<mesh> &buildmeshes)
: meshes(NULL), nummeshes(0), nodes(NULL), numnodes(0), tribbs(NULL), numtris(0), bbmin(1e16f, 1e16f, 1e16f), bbmax(-1e16f, -1e16f, -1e16f), center(0, 0, 0), radius(0), entradius(0) : meshes(nullptr), nummeshes(0), nodes(nullptr), numnodes(0), tribbs(nullptr), numtris(0), bbmin(1e16f, 1e16f, 1e16f), bbmax(-1e16f, -1e16f, -1e16f), center(0, 0, 0), radius(0), entradius(0)
{ {
if(buildmeshes.empty()) return; if(buildmeshes.empty()) return;
loopv(buildmeshes) numtris += buildmeshes[i].numtris; loopv(buildmeshes) numtris += buildmeshes[i].numtris;

View File

@ -57,7 +57,7 @@ struct BIH
int flags; int flags;
vec bbmin, bbmax; vec bbmin, bbmax;
mesh() : numnodes(0), numtris(0), tex(NULL), flags(0) {} mesh() : numnodes(0), numtris(0), tex(nullptr), flags(0) {}
vec getpos(int i) const { return *(const vec *)(pos + i*posstride); } vec getpos(int i) const { return *(const vec *)(pos + i*posstride); }
vec2 gettc(int i) const { return *(const vec2 *)(tc + i*tcstride); } vec2 gettc(int i) const { return *(const vec2 *)(tc + i*tcstride); }

View File

@ -135,7 +135,7 @@ struct BlendMapCache
BlendMapCache *newblendmapcache() { return new BlendMapCache; } BlendMapCache *newblendmapcache() { return new BlendMapCache; }
void freeblendmapcache(BlendMapCache *&cache) { delete cache; cache = NULL; } void freeblendmapcache(BlendMapCache *&cache) { delete cache; cache = nullptr; }
bool setblendmaporigin(BlendMapCache *cache, const ivec &o, int size) bool setblendmaporigin(BlendMapCache *cache, const ivec &o, int size)
{ {
@ -648,7 +648,7 @@ struct BlendTexture
GLenum format; GLenum format;
bool valid; bool valid;
BlendTexture() : x(0), y(0), size(0), data(NULL), tex(0), format(GL_FALSE), valid(false) BlendTexture() : x(0), y(0), size(0), data(nullptr), tex(0), format(GL_FALSE), valid(false)
{} {}
~BlendTexture() ~BlendTexture()
@ -666,7 +666,7 @@ struct BlendTexture
if(data) delete[] data; if(data) delete[] data;
data = new uchar[size*size]; data = new uchar[size*size];
format = hasTRG ? GL_RED : GL_LUMINANCE; format = hasTRG ? GL_RED : GL_LUMINANCE;
createtexture(tex, size, size, NULL, 3, 1, hasTRG ? GL_R8 : GL_LUMINANCE8); createtexture(tex, size, size, nullptr, 3, 1, hasTRG ? GL_R8 : GL_LUMINANCE8);
valid = false; valid = false;
return true; return true;
} }
@ -674,7 +674,7 @@ struct BlendTexture
void cleanup() void cleanup()
{ {
if(tex) { glDeleteTextures(1, &tex); tex = 0; } if(tex) { glDeleteTextures(1, &tex); tex = 0; }
if(data) { delete[] data; data = NULL; } if(data) { delete[] data; data = nullptr; }
size = 0; size = 0;
valid = false; valid = false;
} }
@ -830,7 +830,7 @@ static void updateblendtextures(uchar &type, BlendMapNode &node, int bmx, int bm
ty2 = (min(bmy+bmsize, uy+uh) + (0x1000>>BM_SCALE)-1)&~((0x1000>>BM_SCALE)-1); ty2 = (min(bmy+bmsize, uy+uh) + (0x1000>>BM_SCALE)-1)&~((0x1000>>BM_SCALE)-1);
for(int ty = ty1; ty < ty2; ty += 0x1000>>BM_SCALE) for(int tx = tx1; tx < tx2; tx += 0x1000>>BM_SCALE) for(int ty = ty1; ty < ty2; ty += 0x1000>>BM_SCALE) for(int tx = tx1; tx < tx2; tx += 0x1000>>BM_SCALE)
{ {
BlendTexture *bt = NULL; BlendTexture *bt = nullptr;
loopv(blendtexs) if(blendtexs[i].contains(tx<<BM_SCALE, ty<<BM_SCALE)) { bt = &blendtexs[i]; break; } loopv(blendtexs) if(blendtexs[i].contains(tx<<BM_SCALE, ty<<BM_SCALE)) { bt = &blendtexs[i]; break; }
if(!bt) if(!bt)
{ {

View File

@ -10,7 +10,7 @@
hashnameset<ident> idents; // contains ALL vars/commands/aliases hashnameset<ident> idents; // contains ALL vars/commands/aliases
vector<ident *> identmap; vector<ident *> identmap;
ident *dummyident = NULL; ident *dummyident = nullptr;
int identflags = 0; int identflags = 0;
@ -112,7 +112,7 @@ static inline void cleancode(ident &id)
{ {
id.code[0] -= 0x100; id.code[0] -= 0x100;
if(int(id.code[0]) < 0x100) delete[] id.code; if(int(id.code[0]) < 0x100) delete[] id.code;
id.code = NULL; id.code = nullptr;
} }
} }
@ -173,7 +173,7 @@ void clearoverrides()
} }
static bool initedidents = false; static bool initedidents = false;
static vector<ident> *identinits = NULL; static vector<ident> *identinits = nullptr;
static inline ident *addident(const ident &id) static inline ident *addident(const ident &id)
{ {
@ -181,7 +181,7 @@ static inline ident *addident(const ident &id)
{ {
if(!identinits) identinits = new vector<ident>; if(!identinits) identinits = new vector<ident>;
identinits->add(id); identinits->add(id);
return NULL; return nullptr;
} }
ident &def = idents.access(id.name, id); ident &def = idents.access(id.name, id);
def.index = identmap.length(); def.index = identmap.length();
@ -206,7 +206,7 @@ static bool initidents()
} }
UNUSED static bool forceinitidents = initidents(); UNUSED static bool forceinitidents = initidents();
static const char *sourcefile = NULL, *sourcestr = NULL; static const char *sourcefile = nullptr, *sourcestr = nullptr;
static const char *debugline(const char *p, const char *fmt) static const char *debugline(const char *p, const char *fmt)
{ {
@ -237,7 +237,7 @@ static struct identlink
identlink *next; identlink *next;
int usedargs; int usedargs;
identstack *argstack; identstack *argstack;
} noalias = { NULL, NULL, (1<<MAXARGS)-1, NULL }, *aliasstack = &noalias; } noalias = { nullptr, nullptr, (1<<MAXARGS)-1, nullptr }, *aliasstack = &noalias;
VAR(dbgalias, 0, 4, 1000); VAR(dbgalias, 0, 4, 1000);
@ -463,7 +463,7 @@ ident *readident(const char *name)
{ {
ident *id = idents.access(name); ident *id = idents.access(name);
if(id && id->index < MAXARGS && !(aliasstack->usedargs&(1<<id->index))) if(id && id->index < MAXARGS && !(aliasstack->usedargs&(1<<id->index)))
return NULL; return nullptr;
return id; return id;
} }
@ -579,7 +579,7 @@ struct defvar : identval
char *name; char *name;
uint *onchange; uint *onchange;
defvar() : name(NULL), onchange(NULL) {} defvar() : name(nullptr), onchange(nullptr) {}
~defvar() ~defvar()
{ {
@ -603,18 +603,18 @@ hashnameset<defvar> defvars;
name = newstring(name); \ name = newstring(name); \
defvar &def = defvars[name]; \ defvar &def = defvars[name]; \
def.name = name; \ def.name = name; \
def.onchange = onchange[0] ? compilecode(onchange) : NULL; \ def.onchange = onchange[0] ? compilecode(onchange) : nullptr; \
body; \ body; \
}); });
#define DEFIVAR(cmdname, flags) \ #define DEFIVAR(cmdname, flags) \
DEFVAR(cmdname, "siiis", (char *name, int *min, int *cur, int *max, char *onchange), \ DEFVAR(cmdname, "siiis", (char *name, int *min, int *cur, int *max, char *onchange), \
def.i = variable(name, *min, *cur, *max, &def.i, def.onchange ? defvar::changed : NULL, flags)) def.i = variable(name, *min, *cur, *max, &def.i, def.onchange ? defvar::changed : nullptr, flags))
#define DEFFVAR(cmdname, flags) \ #define DEFFVAR(cmdname, flags) \
DEFVAR(cmdname, "sfffs", (char *name, float *min, float *cur, float *max, char *onchange), \ DEFVAR(cmdname, "sfffs", (char *name, float *min, float *cur, float *max, char *onchange), \
def.f = fvariable(name, *min, *cur, *max, &def.f, def.onchange ? defvar::changed : NULL, flags)) def.f = fvariable(name, *min, *cur, *max, &def.f, def.onchange ? defvar::changed : nullptr, flags))
#define DEFSVAR(cmdname, flags) \ #define DEFSVAR(cmdname, flags) \
DEFVAR(cmdname, "sss", (char *name, char *cur, char *onchange), \ DEFVAR(cmdname, "sss", (char *name, char *cur, char *onchange), \
def.s = svariable(name, cur, &def.s, def.onchange ? defvar::changed : NULL, flags)) def.s = svariable(name, cur, &def.s, def.onchange ? defvar::changed : nullptr, flags))
DEFIVAR(defvar, 0); DEFIVAR(defvar, 0);
DEFIVAR(defvarp, IDF_PERSIST); DEFIVAR(defvarp, IDF_PERSIST);
@ -698,7 +698,7 @@ ICOMMAND(getvarmax, "s", (char *s), intret(getvarmax(s)));
ICOMMAND(getfvarmin, "s", (char *s), floatret(getfvarmin(s))); ICOMMAND(getfvarmin, "s", (char *s), floatret(getfvarmin(s)));
ICOMMAND(getfvarmax, "s", (char *s), floatret(getfvarmax(s))); ICOMMAND(getfvarmax, "s", (char *s), floatret(getfvarmax(s)));
bool identexists(const char *name) { return idents.access(name)!=NULL; } bool identexists(const char *name) { return idents.access(name)!=nullptr; }
ICOMMAND(identexists, "s", (char *s), intret(identexists(s) ? 1 : 0)); ICOMMAND(identexists, "s", (char *s), intret(identexists(s) ? 1 : 0));
ident *getident(const char *name) { return idents.access(name); } ident *getident(const char *name) { return idents.access(name); }
@ -869,7 +869,7 @@ int unescapestring(char *dst, const char *src, const char *end)
return dst - start; return dst - start;
} }
static char *conc(vector<char> &buf, tagval *v, int n, bool space, const char *prefix = NULL, int prefixlen = 0) static char *conc(vector<char> &buf, tagval *v, int n, bool space, const char *prefix = nullptr, int prefixlen = 0)
{ {
if(prefix) if(prefix)
{ {
@ -952,7 +952,7 @@ overflow:
static inline char *conc(tagval *v, int n, bool space) static inline char *conc(tagval *v, int n, bool space)
{ {
return conc(v, n, space, NULL, 0); return conc(v, n, space, nullptr, 0);
} }
static inline char *conc(tagval *v, int n, bool space, const char *prefix) static inline char *conc(tagval *v, int n, bool space, const char *prefix)
@ -1031,7 +1031,7 @@ static inline char *cutword(const char *&p)
{ {
const char *word = p; const char *word = p;
p = parseword(p); p = parseword(p);
return p!=word ? newstring(word, p-word) : NULL; return p!=word ? newstring(word, p-word) : nullptr;
} }
#define retcode(type, defaultret) ((type) >= VAL_ANY ? ((type) == VAL_CSTR ? RET_STR : (defaultret)) : (type) << CODE_RET) #define retcode(type, defaultret) ((type) >= VAL_ANY ? ((type) == VAL_CSTR ? RET_STR : (defaultret)) : (type) << CODE_RET)
@ -1203,7 +1203,7 @@ static inline bool getbool(const tagval &v)
} }
} }
static inline void compileval(vector<uint> &code, int wordtype, const stringslice &word = stringslice(NULL, 0)) static inline void compileval(vector<uint> &code, int wordtype, const stringslice &word = stringslice(nullptr, 0))
{ {
switch(wordtype) switch(wordtype)
{ {
@ -1220,7 +1220,7 @@ static inline void compileval(vector<uint> &code, int wordtype, const stringslic
} }
} }
static stringslice unusedword(NULL, 0); static stringslice unusedword(nullptr, 0);
static bool compilearg(vector<uint> &code, const char *&p, int wordtype, int prevargs = MAXRESULTS, stringslice &word = unusedword); static bool compilearg(vector<uint> &code, const char *&p, int wordtype, int prevargs = MAXRESULTS, stringslice &word = unusedword);
static void compilelookup(vector<uint> &code, const char *&p, int ltype, int prevargs = MAXRESULTS) static void compilelookup(vector<uint> &code, const char *&p, int ltype, int prevargs = MAXRESULTS)
@ -1298,7 +1298,7 @@ static void compilelookup(vector<uint> &code, const char *&p, int ltype, int pre
for(const char *fmt = id->args; *fmt; fmt++) switch(*fmt) for(const char *fmt = id->args; *fmt; fmt++) switch(*fmt)
{ {
case 'S': compilestr(code); numargs++; break; case 'S': compilestr(code); numargs++; break;
case 's': compilestr(code, NULL, 0, true); numargs++; break; case 's': compilestr(code, nullptr, 0, true); numargs++; break;
case 'i': compileint(code); numargs++; break; case 'i': compileint(code); numargs++; break;
case 'b': compileint(code, INT_MIN); numargs++; break; case 'b': compileint(code, INT_MIN); numargs++; break;
case 'f': compilefloat(code); numargs++; break; case 'f': compilefloat(code); numargs++; break;
@ -1536,7 +1536,7 @@ done:
case VAL_CODE: if(!concs && p-1 <= start) compileblock(code); else code.add(CODE_COMPILE); break; case VAL_CODE: if(!concs && p-1 <= start) compileblock(code); else code.add(CODE_COMPILE); break;
case VAL_IDENT: if(!concs && p-1 <= start) compileident(code); else code.add(CODE_IDENTU); break; case VAL_IDENT: if(!concs && p-1 <= start) compileident(code); else code.add(CODE_IDENTU); break;
case VAL_CSTR: case VAL_CANY: case VAL_CSTR: case VAL_CANY:
if(!concs && p-1 <= start) compilestr(code, NULL, 0, true); if(!concs && p-1 <= start) compilestr(code, nullptr, 0, true);
break; break;
case VAL_STR: case VAL_NULL: case VAL_ANY: case VAL_WORD: case VAL_STR: case VAL_NULL: case VAL_ANY: case VAL_WORD:
if(!concs && p-1 <= start) compilestr(code); if(!concs && p-1 <= start) compilestr(code);
@ -1674,7 +1674,7 @@ static void compilestatements(vector<uint> &code, const char *&p, int rettype, i
for(;;) for(;;)
{ {
skipcomments(p); skipcomments(p);
idname.str = NULL; idname.str = nullptr;
bool more = compilearg(code, p, VAL_WORD, prevargs, idname); bool more = compilearg(code, p, VAL_WORD, prevargs, idname);
if(!more) goto endstatement; if(!more) goto endstatement;
skipcomments(p); skipcomments(p);
@ -1760,7 +1760,7 @@ static void compilestatements(vector<uint> &code, const char *&p, int rettype, i
if(!more) if(!more)
{ {
if(rep) break; if(rep) break;
compilestr(code, NULL, 0, *fmt=='s'); compilestr(code, nullptr, 0, *fmt=='s');
fakeargs++; fakeargs++;
} }
else if(!fmt[1]) else if(!fmt[1])
@ -2906,7 +2906,7 @@ char *executestr(const uint *code)
{ {
tagval result; tagval result;
runcode(code, result); runcode(code, result);
if(result.type == VAL_NULL) return NULL; if(result.type == VAL_NULL) return nullptr;
forcestr(result); forcestr(result);
return result.s; return result.s;
} }
@ -2915,7 +2915,7 @@ char *executestr(const char *p)
{ {
tagval result; tagval result;
executeret(p, result); executeret(p, result);
if(result.type == VAL_NULL) return NULL; if(result.type == VAL_NULL) return nullptr;
forcestr(result); forcestr(result);
return result.s; return result.s;
} }
@ -2924,7 +2924,7 @@ char *executestr(ident *id, tagval *args, int numargs, bool lookup)
{ {
tagval result; tagval result;
executeret(id, args, numargs, lookup, result); executeret(id, args, numargs, lookup, result);
if(result.type == VAL_NULL) return NULL; if(result.type == VAL_NULL) return nullptr;
forcestr(result); forcestr(result);
return result.s; return result.s;
} }
@ -2932,7 +2932,7 @@ char *executestr(ident *id, tagval *args, int numargs, bool lookup)
char *execidentstr(const char *name, bool lookup) char *execidentstr(const char *name, bool lookup)
{ {
ident *id = idents.access(name); ident *id = idents.access(name);
return id ? executestr(id, NULL, 0, lookup) : NULL; return id ? executestr(id, nullptr, 0, lookup) : nullptr;
} }
int execute(const uint *code) int execute(const uint *code)
@ -2969,7 +2969,7 @@ int execute(ident *id, tagval *args, int numargs, bool lookup)
int execident(const char *name, int noid, bool lookup) int execident(const char *name, int noid, bool lookup)
{ {
ident *id = idents.access(name); ident *id = idents.access(name);
return id ? execute(id, NULL, 0, lookup) : noid; return id ? execute(id, nullptr, 0, lookup) : noid;
} }
float executefloat(const uint *code) float executefloat(const uint *code)
@ -3002,7 +3002,7 @@ float executefloat(ident *id, tagval *args, int numargs, bool lookup)
float execidentfloat(const char *name, float noid, bool lookup) float execidentfloat(const char *name, float noid, bool lookup)
{ {
ident *id = idents.access(name); ident *id = idents.access(name);
return id ? executefloat(id, NULL, 0, lookup) : noid; return id ? executefloat(id, nullptr, 0, lookup) : noid;
} }
bool executebool(const uint *code) bool executebool(const uint *code)
@ -3035,14 +3035,14 @@ bool executebool(ident *id, tagval *args, int numargs, bool lookup)
bool execidentbool(const char *name, bool noid, bool lookup) bool execidentbool(const char *name, bool noid, bool lookup)
{ {
ident *id = idents.access(name); ident *id = idents.access(name);
return id ? executebool(id, NULL, 0, lookup) : noid; return id ? executebool(id, nullptr, 0, lookup) : noid;
} }
bool execfile(const char *cfgfile, bool msg) bool execfile(const char *cfgfile, bool msg)
{ {
string s; string s;
copystring(s, cfgfile); copystring(s, cfgfile);
char *buf = loadfile(path(s), NULL); char *buf = loadfile(path(s), nullptr);
if(!buf) if(!buf)
{ {
if(msg) conoutf(CON_ERROR, "could not read \"%s\"", cfgfile); if(msg) conoutf(CON_ERROR, "could not read \"%s\"", cfgfile);
@ -3420,7 +3420,7 @@ void format(tagval *args, int numargs)
} }
COMMAND(format, "V"); COMMAND(format, "V");
static const char *liststart = NULL, *listend = NULL, *listquotestart = NULL, *listquoteend = NULL; static const char *liststart = nullptr, *listend = nullptr, *listquotestart = nullptr, *listquoteend = nullptr;
static inline void skiplist(const char *&p) static inline void skiplist(const char *&p)
{ {
@ -3823,7 +3823,7 @@ ICOMMAND(loopfiles, "rsse", (ident *id, char *dir, char *ext, uint *body),
if(id->type!=ID_ALIAS) return; if(id->type!=ID_ALIAS) return;
identstack stack; identstack stack;
vector<char *> files; vector<char *> files;
listfiles(dir, ext[0] ? ext : NULL, files); listfiles(dir, ext[0] ? ext : nullptr, files);
files.sort(); files.sort();
files.uniquedeletearrays(); files.uniquedeletearrays();
loopv(files) loopv(files)
@ -3911,7 +3911,7 @@ void sortlist(char *list, ident *x, ident *y, uint *body, uint *unique)
for(int i = 1; i < items.length(); i++) for(int i = 1; i < items.length(); i++)
{ {
sortitem &item = items[i]; sortitem &item = items[i];
if(f(items[i-1], item)) item.quotestart = NULL; if(f(items[i-1], item)) item.quotestart = nullptr;
else { totalunique += item.quotelength(); numunique++; } else { totalunique += item.quotelength(); numunique++; }
} }
} }
@ -3927,7 +3927,7 @@ void sortlist(char *list, ident *x, ident *y, uint *body, uint *unique)
loopj(i) loopj(i)
{ {
sortitem &prev = items[j]; sortitem &prev = items[j];
if(prev.quotestart && f(item, prev)) { item.quotestart = NULL; break; } if(prev.quotestart && f(item, prev)) { item.quotestart = nullptr; break; }
} }
if(item.quotestart) { totalunique += item.quotelength(); numunique++; } if(item.quotestart) { totalunique += item.quotelength(); numunique++; }
} }
@ -3959,7 +3959,7 @@ void sortlist(char *list, ident *x, ident *y, uint *body, uint *unique)
commandret->setstr(sorted); commandret->setstr(sorted);
} }
COMMAND(sortlist, "srree"); COMMAND(sortlist, "srree");
ICOMMAND(uniquelist, "srre", (char *list, ident *x, ident *y, uint *body), sortlist(list, x, y, NULL, body)); ICOMMAND(uniquelist, "srre", (char *list, ident *x, ident *y, uint *body), sortlist(list, x, y, nullptr, body));
#define MATHCMD(name, fmt, type, op, initval, unaryop) \ #define MATHCMD(name, fmt, type, op, initval, unaryop) \
ICOMMANDS(name, #fmt "1V", (tagval *args, int numargs), \ ICOMMANDS(name, #fmt "1V", (tagval *args, int numargs), \
@ -4282,7 +4282,7 @@ void checksleep(int millis)
if(millis - s.millis >= s.delay) if(millis - s.millis >= s.delay)
{ {
char *cmd = s.command; // execute might create more sleep commands char *cmd = s.command; // execute might create more sleep commands
s.command = NULL; s.command = nullptr;
int oldflags = identflags; int oldflags = identflags;
identflags = s.flags; identflags = s.flags;
execute(cmd); execute(cmd);

View File

@ -8,7 +8,7 @@ extern hashnameset<ident> idents;
extern int identflags; extern int identflags;
void clearoverrides(); void clearoverrides();
void writecfg(const char *name = NULL); void writecfg(const char *name = nullptr);
void checksleep(int millis); void checksleep(int millis);
void clearsleep(bool clearoverrides = true); void clearsleep(bool clearoverrides = true);

View File

@ -19,7 +19,7 @@ static reversequeue<cline, MAXCONLINES> conlines;
static int commandmillis = -1; static int commandmillis = -1;
static string commandbuf; static string commandbuf;
static char *commandaction = NULL, *commandprompt = NULL; static char *commandaction = nullptr, *commandprompt = nullptr;
enum { CF_COMPLETE = 1<<0, CF_EXECUTE = 1<<1 }; enum { CF_COMPLETE = 1<<0, CF_EXECUTE = 1<<1 };
static int commandflags = 0, commandpos = -1; static int commandflags = 0, commandpos = -1;
@ -187,7 +187,7 @@ struct keym
char *actions[NUMACTIONS]; char *actions[NUMACTIONS];
bool pressed; bool pressed;
keym() : code(-1), name(NULL), pressed(false) { loopi(NUMACTIONS) actions[i] = newstring(""); } keym() : code(-1), name(nullptr), pressed(false) { loopi(NUMACTIONS) actions[i] = newstring(""); }
~keym() { DELETEA(name); loopi(NUMACTIONS) DELETEA(actions[i]); } ~keym() { DELETEA(name); loopi(NUMACTIONS) DELETEA(actions[i]); }
void clear(int type); void clear(int type);
@ -207,14 +207,14 @@ static void keymap(int *code, char *key)
COMMAND(keymap, "is"); COMMAND(keymap, "is");
static keym *keypressed = NULL; static keym *keypressed = nullptr;
static char *keyaction = NULL; static char *keyaction = nullptr;
#if 0 #if 0
static const char *getkeyname(int code) static const char *getkeyname(int code)
{ {
keym *km = keyms.access(code); keym *km = keyms.access(code);
return km ? km->name : NULL; return km ? km->name : nullptr;
} }
#endif #endif
@ -239,7 +239,7 @@ static keym *findbind(char *key)
{ {
if(!strcasecmp(km.name, key)) return &km; if(!strcasecmp(km.name, key)) return &km;
}); });
return NULL; return nullptr;
} }
static void getbind(char *key, int type) static void getbind(char *key, int type)
@ -287,7 +287,7 @@ ICOMMAND(clearspecbinds, "", (), enumerate(keyms, keym, km, km.clear(keym::ACTIO
ICOMMAND(cleareditbinds, "", (), enumerate(keyms, keym, km, km.clear(keym::ACTION_EDITING))); ICOMMAND(cleareditbinds, "", (), enumerate(keyms, keym, km, km.clear(keym::ACTION_EDITING)));
ICOMMAND(clearallbinds, "", (), enumerate(keyms, keym, km, km.clear())); ICOMMAND(clearallbinds, "", (), enumerate(keyms, keym, km, km.clear()));
static void inputcommand(char *init, char *action = NULL, char *prompt = NULL, char *flags = NULL) // turns input to the command line on or off static void inputcommand(char *init, char *action = nullptr, char *prompt = nullptr, char *flags = nullptr) // turns input to the command line on or off
{ {
commandmillis = init ? totalmillis : -1; commandmillis = init ? totalmillis : -1;
textinput(commandmillis >= 0, TI_CONSOLE); textinput(commandmillis >= 0, TI_CONSOLE);
@ -328,7 +328,7 @@ struct hline
char *buf, *action, *prompt; char *buf, *action, *prompt;
int flags; int flags;
hline() : buf(NULL), action(NULL), prompt(NULL), flags(0) {} hline() : buf(nullptr), action(nullptr), prompt(nullptr), flags(0) {}
~hline() ~hline()
{ {
DELETEA(buf); DELETEA(buf);
@ -350,8 +350,8 @@ struct hline
bool shouldsave() bool shouldsave()
{ {
return strcmp(commandbuf, buf) || return strcmp(commandbuf, buf) ||
(commandaction ? !action || strcmp(commandaction, action) : action!=NULL) || (commandaction ? !action || strcmp(commandaction, action) : action!=nullptr) ||
(commandprompt ? !prompt || strcmp(commandprompt, prompt) : prompt!=NULL) || (commandprompt ? !prompt || strcmp(commandprompt, prompt) : prompt!=nullptr) ||
commandflags != flags; commandflags != flags;
} }
@ -407,7 +407,7 @@ static vector<releaseaction> releaseactions;
const char *addreleaseaction(char *s) const char *addreleaseaction(char *s)
{ {
if(!keypressed) { delete[] s; return NULL; } if(!keypressed) { delete[] s; return nullptr; }
releaseaction &ra = releaseactions.add(); releaseaction &ra = releaseactions.add();
ra.key = keypressed; ra.key = keypressed;
ra.action = s; ra.action = s;
@ -417,7 +417,7 @@ const char *addreleaseaction(char *s)
tagval *addreleaseaction(ident *id, int numargs) tagval *addreleaseaction(ident *id, int numargs)
{ {
if(!keypressed || numargs > 3) return NULL; if(!keypressed || numargs > 3) return nullptr;
releaseaction &ra = releaseactions.add(); releaseaction &ra = releaseactions.add();
ra.key = keypressed; ra.key = keypressed;
ra.id = id; ra.id = id;
@ -444,7 +444,7 @@ static void execbind(keym &k, bool isdown)
if(!isdown) execute(ra.action); if(!isdown) execute(ra.action);
delete[] ra.action; delete[] ra.action;
} }
else execute(isdown ? NULL : ra.id, ra.args, ra.numargs); else execute(isdown ? nullptr : ra.id, ra.args, ra.numargs);
releaseactions.remove(i--); releaseactions.remove(i--);
} }
} }
@ -460,7 +460,7 @@ static void execbind(keym &k, bool isdown)
keyaction = action; keyaction = action;
keypressed = &k; keypressed = &k;
execute(keyaction); execute(keyaction);
keypressed = NULL; keypressed = nullptr;
if(keyaction!=action) delete[] keyaction; if(keyaction!=action) delete[] keyaction;
} }
k.pressed = isdown; k.pressed = isdown;
@ -556,7 +556,7 @@ static bool consolekey(int code, bool isdown)
case SDLK_TAB: case SDLK_TAB:
if(commandflags&CF_COMPLETE) if(commandflags&CF_COMPLETE)
{ {
complete(commandbuf, sizeof(commandbuf), commandflags&CF_EXECUTE ? "/" : NULL); complete(commandbuf, sizeof(commandbuf), commandflags&CF_EXECUTE ? "/" : nullptr);
if(commandpos>=0 && commandpos>=(int)strlen(commandbuf)) commandpos = -1; if(commandpos>=0 && commandpos>=(int)strlen(commandbuf)) commandpos = -1;
} }
break; break;
@ -570,7 +570,7 @@ static bool consolekey(int code, bool isdown)
{ {
if(code==SDLK_RETURN || code==SDLK_KP_ENTER) if(code==SDLK_RETURN || code==SDLK_KP_ENTER)
{ {
hline *h = NULL; hline *h = nullptr;
if(commandbuf[0]) if(commandbuf[0])
{ {
if(history.empty() || history.last()->shouldsave()) if(history.empty() || history.last()->shouldsave())
@ -585,13 +585,13 @@ static bool consolekey(int code, bool isdown)
else h = history.last(); else h = history.last();
} }
histpos = history.length(); histpos = history.length();
inputcommand(NULL); inputcommand(nullptr);
if(h) h->run(); if(h) h->run();
} }
else if(code==SDLK_ESCAPE) else if(code==SDLK_ESCAPE)
{ {
histpos = history.length(); histpos = history.length();
inputcommand(NULL); inputcommand(nullptr);
} }
} }
@ -670,7 +670,7 @@ struct filesval
vector<char *> files; vector<char *> files;
int millis; int millis;
filesval(int type, const char *dir, const char *ext) : type(type), dir(newstring(dir)), ext(ext && ext[0] ? newstring(ext) : NULL), millis(-1) {} filesval(int type, const char *dir, const char *ext) : type(type), dir(newstring(dir)), ext(ext && ext[0] ? newstring(ext) : nullptr), millis(-1) {}
~filesval() { DELETEA(dir); DELETEA(ext); files.deletearrays(); } ~filesval() { DELETEA(dir); DELETEA(ext); files.deletearrays(); }
void update() void update()
@ -698,7 +698,7 @@ static hashtable<fileskey, filesval *> completefiles;
static hashtable<char *, filesval *> completions; static hashtable<char *, filesval *> completions;
static int completesize = 0; static int completesize = 0;
static char *lastcomplete = NULL; static char *lastcomplete = nullptr;
static void resetcomplete() { completesize = 0; } static void resetcomplete() { completesize = 0; }
@ -712,7 +712,7 @@ static void addcomplete(char *command, int type, char *dir, char *ext)
if(!dir[0]) if(!dir[0])
{ {
filesval **hasfiles = completions.access(command); filesval **hasfiles = completions.access(command);
if(hasfiles) *hasfiles = NULL; if(hasfiles) *hasfiles = nullptr;
return; return;
} }
if(type==FILES_DIR) if(type==FILES_DIR)
@ -723,7 +723,7 @@ static void addcomplete(char *command, int type, char *dir, char *ext)
if(ext) if(ext)
{ {
if(strchr(ext, '*')) ext[0] = '\0'; if(strchr(ext, '*')) ext[0] = '\0';
if(!ext[0]) ext = NULL; if(!ext[0]) ext = nullptr;
} }
} }
fileskey key(type, dir, ext); fileskey key(type, dir, ext);
@ -747,7 +747,7 @@ static void addfilecomplete(char *command, char *dir, char *ext)
static void addlistcomplete(char *command, char *list) static void addlistcomplete(char *command, char *list)
{ {
addcomplete(command, FILES_LIST, list, NULL); addcomplete(command, FILES_LIST, list, nullptr);
} }
COMMANDN(complete, addfilecomplete, "sss"); COMMANDN(complete, addfilecomplete, "sss");
@ -764,14 +764,14 @@ static void complete(char *s, int maxlen, const char *cmdprefix)
if(!s[cmdlen]) return; if(!s[cmdlen]) return;
if(!completesize) { completesize = (int)strlen(&s[cmdlen]); DELETEA(lastcomplete); } if(!completesize) { completesize = (int)strlen(&s[cmdlen]); DELETEA(lastcomplete); }
filesval *f = NULL; filesval *f = nullptr;
if(completesize) if(completesize)
{ {
char *end = strchr(&s[cmdlen], ' '); char *end = strchr(&s[cmdlen], ' ');
if(end) f = completions.find(stringslice(&s[cmdlen], end), NULL); if(end) f = completions.find(stringslice(&s[cmdlen], end), nullptr);
} }
const char *nextcomplete = NULL; const char *nextcomplete = nullptr;
if(f) // complete using filenames if(f) // complete using filenames
{ {
int commandsize = strchr(&s[cmdlen], ' ')+1-s; int commandsize = strchr(&s[cmdlen], ' ')+1-s;

View File

@ -94,7 +94,7 @@ static void cleardynlights()
void removetrackeddynlights(physent *owner) void removetrackeddynlights(physent *owner)
{ {
loopvrev(dynlights) if(owner ? dynlights[i].owner == owner : dynlights[i].owner != NULL) dynlights.remove(i); loopvrev(dynlights) if(owner ? dynlights[i].owner == owner : dynlights[i].owner != nullptr) dynlights.remove(i);
} }
void updatedynlights() void updatedynlights()

View File

@ -14,7 +14,7 @@ enum
void adddynlight(const vec &o, float radius, const vec &color, int fade = 0, int peak = 0, int flags = 0, float initradius = 0, const vec &initcolor = vec(0, 0, 0), physent *owner = NULL, const vec &dir = vec(0, 0, 0), int spot = 0); void adddynlight(const vec &o, float radius, const vec &color, int fade = 0, int peak = 0, int flags = 0, float initradius = 0, const vec &initcolor = vec(0, 0, 0), physent *owner = NULL, const vec &dir = vec(0, 0, 0), int spot = 0);
void dynlightreaching(const vec &target, vec &color, vec &dir, bool hud = false); void dynlightreaching(const vec &target, vec &color, vec &dir, bool hud = false);
void removetrackeddynlights(physent *owner = NULL); void removetrackeddynlights(physent *owner = nullptr);
void updatedynlights(); void updatedynlights();
int finddynlights(); int finddynlights();

View File

@ -38,7 +38,7 @@ struct extentity : entity // part of the entity that doesn
int flags; int flags;
extentity *attached; extentity *attached;
extentity() : flags(0), attached(NULL) {} extentity() : flags(0), attached(nullptr) {}
bool spawned() const { return (flags&EF_SPAWNED) != 0; } bool spawned() const { return (flags&EF_SPAWNED) != 0; }
void setspawned(bool val) { if(val) flags |= EF_SPAWNED; else flags &= ~EF_SPAWNED; } void setspawned(bool val) { if(val) flags |= EF_SPAWNED; else flags &= ~EF_SPAWNED; }
@ -162,7 +162,7 @@ struct animinterpinfo // used for animation blending of animated characters
int lastswitch; int lastswitch;
void *lastmodel; void *lastmodel;
animinterpinfo() : lastswitch(-1), lastmodel(NULL) {} animinterpinfo() : lastswitch(-1), lastmodel(nullptr) {}
void reset() { lastswitch = -1; } void reset() { lastswitch = -1; }
}; };
@ -181,7 +181,7 @@ struct dynent : physent // animated characters, or chara
occludequery *query; occludequery *query;
int lastrendered; int lastrendered;
dynent() : ragdoll(NULL), query(NULL), lastrendered(0) dynent() : ragdoll(nullptr), query(nullptr), lastrendered(0)
{ {
reset(); reset();
} }

View File

@ -7,8 +7,8 @@ namespace sphere
{ {
vec pos; vec pos;
ushort s, t; ushort s, t;
} *verts = NULL; } *verts = nullptr;
GLushort *indices = NULL; GLushort *indices = nullptr;
int numverts = 0, numindices = 0; int numverts = 0, numindices = 0;
GLuint vbuf = 0, ebuf = 0; GLuint vbuf = 0, ebuf = 0;

View File

@ -211,7 +211,7 @@ static void gengrassquads(vtxarray *va)
s.grasstex = textureload(s.grass, 2); s.grasstex = textureload(s.grass, 2);
} }
grassgroup *group = NULL; grassgroup *group = nullptr;
loopi(NUMGRASSWEDGES) loopi(NUMGRASSWEDGES)
{ {
grasswedge &w = grasswedges[i]; grasswedge &w = grasswedges[i];
@ -250,12 +250,12 @@ void generategrass()
gle::bindvbo(grassvbo); gle::bindvbo(grassvbo);
int size = grassverts.length()*sizeof(grassvert); int size = grassverts.length()*sizeof(grassvert);
grassvbosize = max(grassvbosize, size); grassvbosize = max(grassvbosize, size);
glBufferData_(GL_ARRAY_BUFFER, grassvbosize, size == grassvbosize ? grassverts.getbuf() : NULL, GL_STREAM_DRAW); glBufferData_(GL_ARRAY_BUFFER, grassvbosize, size == grassvbosize ? grassverts.getbuf() : nullptr, GL_STREAM_DRAW);
if(size != grassvbosize) glBufferSubData_(GL_ARRAY_BUFFER, 0, size, grassverts.getbuf()); if(size != grassvbosize) glBufferSubData_(GL_ARRAY_BUFFER, 0, size, grassverts.getbuf());
gle::clearvbo(); gle::clearvbo();
} }
static Shader *grassshader = NULL; static Shader *grassshader = nullptr;
static Shader *loadgrassshader() static Shader *loadgrassshader()
{ {
@ -276,7 +276,7 @@ void loadgrassshaders()
static void cleargrassshaders() static void cleargrassshaders()
{ {
grassshader = NULL; grassshader = nullptr;
} }
void rendergrass() void rendergrass()

View File

@ -283,7 +283,7 @@ void skelbih::build(skelmodel::skelmeshgroup *m, ushort *indices, int numindices
} }
skelbih::skelbih(skelmodel::skelmeshgroup *m, int numtris, tri *tris) skelbih::skelbih(skelmodel::skelmeshgroup *m, int numtris, tri *tris)
: nodes(NULL), numnodes(0), tris(tris), bbmin(1e16f, 1e16f, 1e16f), bbmax(-1e16f, -1e16f, -1e16f) : nodes(nullptr), numnodes(0), tris(tris), bbmin(1e16f, 1e16f, 1e16f), bbmax(-1e16f, -1e16f, -1e16f)
{ {
loopi(numtris) loopi(numtris)
{ {
@ -323,10 +323,10 @@ struct skelhitzone
skelbih *bih; skelbih *bih;
}; };
skelhitzone() : numparents(0), numchildren(0), parents(NULL), children(NULL), center(0, 0, 0), animcenter(0, 0, 0), radius(0), visited(-1) skelhitzone() : numparents(0), numchildren(0), parents(nullptr), children(nullptr), center(0, 0, 0), animcenter(0, 0, 0), radius(0), visited(-1)
{ {
blend = -1; blend = -1;
bih = NULL; bih = nullptr;
} }
~skelhitzone() ~skelhitzone()
@ -561,7 +561,7 @@ struct skelhitdata
int numblends; int numblends;
skelmodel::blendcacheentry blendcache; skelmodel::blendcacheentry blendcache;
skelhitdata() : numzones(0), rootzones(0), visited(0), zones(NULL), links(NULL), tris(NULL), numblends(0) {} skelhitdata() : numzones(0), rootzones(0), visited(0), zones(nullptr), links(nullptr), tris(nullptr), numblends(0) {}
~skelhitdata() ~skelhitdata()
{ {
DELETEA(zones); DELETEA(zones);
@ -666,7 +666,7 @@ void skelhitdata::build(skelmodel::skelmeshgroup *g, const uchar *ids)
skelzonebounds *bounds = new skelzonebounds[g->skel->numbones]; skelzonebounds *bounds = new skelzonebounds[g->skel->numbones];
numblends = g->blendcombos.length(); numblends = g->blendcombos.length();
loopv(g->blendcombos) if(!g->blendcombos[i].weights[1]) { numblends = i; break; } loopv(g->blendcombos) if(!g->blendcombos[i].weights[1]) { numblends = i; break; }
blendcache.bdata = numblends > 0 ? new dualquat[numblends] : NULL; blendcache.bdata = numblends > 0 ? new dualquat[numblends] : nullptr;
loopi(min(g->meshes.length(), 0x100)) loopi(min(g->meshes.length(), 0x100))
{ {
skelmodel::skelmesh *m = (skelmodel::skelmesh *)g->meshes[i]; skelmodel::skelmesh *m = (skelmodel::skelmesh *)g->meshes[i];
@ -783,7 +783,7 @@ void skelhitdata::build(skelmodel::skelmeshgroup *g, const uchar *ids)
} }
numzones = info.length(); numzones = info.length();
zones = new skelhitzone[numzones]; zones = new skelhitzone[numzones];
links = numlinks ? new skelhitzone *[numlinks] : NULL; links = numlinks ? new skelhitzone *[numlinks] : nullptr;
tris = new skelhitzone::tri[numtris]; tris = new skelhitzone::tri[numtris];
skelhitzone **curlink = links; skelhitzone **curlink = links;
skelhitzone::tri *curtris = tris; skelhitzone::tri *curtris = tris;

View File

@ -115,8 +115,8 @@ struct iqm : skelloader<iqm>
lilswap((uint *)&buf[hdr.ofs_joints], hdr.num_joints*sizeof(iqmjoint)/sizeof(uint)); lilswap((uint *)&buf[hdr.ofs_joints], hdr.num_joints*sizeof(iqmjoint)/sizeof(uint));
const char *str = hdr.ofs_text ? (char *)&buf[hdr.ofs_text] : ""; const char *str = hdr.ofs_text ? (char *)&buf[hdr.ofs_text] : "";
float *vpos = NULL, *vnorm = NULL, *vtan = NULL, *vtc = NULL; float *vpos = nullptr, *vnorm = nullptr, *vtan = nullptr, *vtc = nullptr;
uchar *vindex = NULL, *vweight = NULL; uchar *vindex = nullptr, *vweight = nullptr;
iqmvertexarray *vas = (iqmvertexarray *)&buf[hdr.ofs_vertexarrays]; iqmvertexarray *vas = (iqmvertexarray *)&buf[hdr.ofs_vertexarrays];
loopi(hdr.num_vertexarrays) loopi(hdr.num_vertexarrays)
{ {
@ -187,10 +187,10 @@ struct iqm : skelloader<iqm>
} }
int fv = im.first_vertex; int fv = im.first_vertex;
float *mpos = vpos + 3*fv, float *mpos = vpos + 3*fv,
*mnorm = vnorm ? vnorm + 3*fv : NULL, *mnorm = vnorm ? vnorm + 3*fv : nullptr,
*mtan = vtan ? vtan + 4*fv : NULL, *mtan = vtan ? vtan + 4*fv : nullptr,
*mtc = vtc ? vtc + 2*fv : NULL; *mtc = vtc ? vtc + 2*fv : nullptr;
uchar *mindex = vindex ? vindex + 4*fv : NULL, *mweight = vweight ? vweight + 4*fv : NULL; uchar *mindex = vindex ? vindex + 4*fv : nullptr, *mweight = vweight ? vweight + 4*fv : nullptr;
loopj(im.num_vertexes) loopj(im.num_vertexes)
{ {
vert &v = m->verts[j]; vert &v = m->verts[j];
@ -325,7 +325,7 @@ struct iqm : skelloader<iqm>
stream *f = openfile(filename, "rb"); stream *f = openfile(filename, "rb");
if(!f) return false; if(!f) return false;
uchar *buf = NULL; uchar *buf = nullptr;
iqmheader hdr; iqmheader hdr;
if(f->read(&hdr, sizeof(hdr)) != sizeof(hdr) || memcmp(hdr.magic, "INTERQUAKEMODEL", sizeof(hdr.magic))) goto error; if(f->read(&hdr, sizeof(hdr)) != sizeof(hdr) || memcmp(hdr.magic, "INTERQUAKEMODEL", sizeof(hdr.magic))) goto error;
lilswap(&hdr.version, (sizeof(hdr) - sizeof(hdr.magic))/sizeof(uint)); lilswap(&hdr.version, (sizeof(hdr) - sizeof(hdr.magic))/sizeof(uint));

View File

@ -156,7 +156,7 @@ struct flarerenderer : partrenderer
} }
//square per round hole - use addflare(..) instead //square per round hole - use addflare(..) instead
particle *addpart(const vec &o, const vec &d, int fade, int color, float size, int gravity = 0) { return NULL; } particle *addpart(const vec &o, const vec &d, int fade, int color, float size, int gravity = 0) { return nullptr; }
}; };
static flarerenderer flares("<grey>media/particle/lensflares.png", 64); static flarerenderer flares("<grey>media/particle/lensflares.png", 64);

View File

@ -392,7 +392,7 @@ static void calcsurfaces(cube &c, const ivec &co, int size, int usefacemask, int
} }
VSlot &vslot = lookupvslot(c.texture[i], false), VSlot &vslot = lookupvslot(c.texture[i], false),
*layer = vslot.layer && !(c.material&MAT_ALPHA) ? &lookupvslot(vslot.layer, false) : NULL; *layer = vslot.layer && !(c.material&MAT_ALPHA) ? &lookupvslot(vslot.layer, false) : nullptr;
Shader *shader = vslot.slot->shader; Shader *shader = vslot.slot->shader;
int shadertype = shader->type; int shadertype = shader->type;
if(layer) shadertype |= layer->slot->shader->type; if(layer) shadertype |= layer->slot->shader->type;
@ -559,7 +559,7 @@ static bool previewblends(cube *c, const ivec &co, int size, const ivec &bo, con
{ {
changed = true; changed = true;
destroyva(ext->va); destroyva(ext->va);
ext->va = NULL; ext->va = nullptr;
invalidatemerges(c[i], co, size, true); invalidatemerges(c[i], co, size, true);
} }
if(c[i].children ? previewblends(c[i].children, o, size/2, bo, bs) : previewblends(c[i], o, size)) if(c[i].children ? previewblends(c[i].children, o, size/2, bo, bs) : previewblends(c[i], o, size))
@ -569,7 +569,7 @@ static bool previewblends(cube *c, const ivec &co, int size, const ivec &bo, con
if(ext && ext->va) if(ext && ext->va)
{ {
destroyva(ext->va); destroyva(ext->va);
ext->va = NULL; ext->va = nullptr;
} }
} }
} }
@ -600,7 +600,7 @@ void calclight()
lightprogress = 0; lightprogress = 0;
calclight_canceled = false; calclight_canceled = false;
check_calclight_progress = false; check_calclight_progress = false;
SDL_TimerID timer = SDL_AddTimer(250, calclighttimer, NULL); SDL_TimerID timer = SDL_AddTimer(250, calclighttimer, nullptr);
Uint32 start = SDL_GetTicks(); Uint32 start = SDL_GetTicks();
calcnormals(filltjoints > 0); calcnormals(filltjoints > 0);
calcsurfaces(worldroot, ivec(0, 0, 0), worldsize >> 1); calcsurfaces(worldroot, ivec(0, 0, 0), worldsize >> 1);

View File

@ -23,7 +23,7 @@
#include "texture.hh" #include "texture.hh"
#include "world.hh" #include "world.hh"
static SDL_Window *screen = NULL; static SDL_Window *screen = nullptr;
static int curvsync = -1; static int curvsync = -1;
static void swapbuffers(bool overlay = true); static void swapbuffers(bool overlay = true);
@ -49,7 +49,7 @@ void clearmainmenu()
if(mainmenu && isconnected()) if(mainmenu && isconnected())
{ {
mainmenu = 0; mainmenu = 0;
//UI::hideui(NULL); //UI::hideui(nullptr);
} }
} }
@ -122,7 +122,7 @@ void fatal(const char *s, ...) // failure exit
#endif #endif
} }
SDL_Quit(); SDL_Quit();
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Tesseract fatal error", msg, NULL); SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Tesseract fatal error", msg, nullptr);
} }
} }
@ -132,11 +132,11 @@ void fatal(const char *s, ...) // failure exit
VAR(desktopw, 1, 0, 0); VAR(desktopw, 1, 0, 0);
VAR(desktoph, 1, 0, 0); VAR(desktoph, 1, 0, 0);
int screenw = 0, screenh = 0; int screenw = 0, screenh = 0;
static SDL_GLContext glcontext = NULL; static SDL_GLContext glcontext = nullptr;
int curtime = 0, lastmillis = 1, elapsedtime = 0, totalmillis = 1; int curtime = 0, lastmillis = 1, elapsedtime = 0, totalmillis = 1;
dynent *player = NULL; dynent *player = nullptr;
int initing = NOT_INITING; int initing = NOT_INITING;
@ -184,9 +184,9 @@ static void getbackgroundres(int &w, int &h)
} }
static string backgroundcaption = ""; static string backgroundcaption = "";
static Texture *backgroundmapshot = NULL; static Texture *backgroundmapshot = nullptr;
static string backgroundmapname = ""; static string backgroundmapname = "";
static char *backgroundmapinfo = NULL; static char *backgroundmapinfo = nullptr;
static void bgquad(float x, float y, float w, float h, float tx = 0, float ty = 0, float tw = 1, float th = 1) static void bgquad(float x, float y, float w, float h, float tx = 0, float ty = 0, float tw = 1, float th = 1)
{ {
@ -289,7 +289,7 @@ static void renderbackgroundview(int w, int h, const char *caption, Texture *map
VAR(menumute, 0, 1, 1); VAR(menumute, 0, 1, 1);
static void setbackgroundinfo(const char *caption = NULL, Texture *mapshot = NULL, const char *mapname = NULL, const char *mapinfo = NULL) static void setbackgroundinfo(const char *caption = nullptr, Texture *mapshot = nullptr, const char *mapname = nullptr, const char *mapinfo = nullptr)
{ {
renderedframe = false; renderedframe = false;
copystring(backgroundcaption, caption ? caption : ""); copystring(backgroundcaption, caption ? caption : "");
@ -335,7 +335,7 @@ static void restorebackground(int w, int h, bool force = false)
if(!force) return; if(!force) return;
setbackgroundinfo(); setbackgroundinfo();
} }
renderbackgroundview(w, h, backgroundcaption[0] ? backgroundcaption : NULL, backgroundmapshot, backgroundmapname[0] ? backgroundmapname : NULL, backgroundmapinfo); renderbackgroundview(w, h, backgroundcaption[0] ? backgroundcaption : nullptr, backgroundmapshot, backgroundmapname[0] ? backgroundmapname : nullptr, backgroundmapinfo);
} }
float loadprogress = 0; float loadprogress = 0;
@ -574,12 +574,12 @@ static void setupscreen()
if(glcontext) if(glcontext)
{ {
SDL_GL_DeleteContext(glcontext); SDL_GL_DeleteContext(glcontext);
glcontext = NULL; glcontext = nullptr;
} }
if(screen) if(screen)
{ {
SDL_DestroyWindow(screen); SDL_DestroyWindow(screen);
screen = NULL; screen = nullptr;
} }
curvsync = -1; curvsync = -1;
@ -950,10 +950,10 @@ static void stackdumper(unsigned int type, EXCEPTION_POINTERS *ep)
CONTEXT *context = ep->ContextRecord; CONTEXT *context = ep->ContextRecord;
char out[512]; char out[512];
formatstring(out, "Tesseract Win32 Exception: 0x%x [0x%x]\n\n", er->ExceptionCode, er->ExceptionCode==EXCEPTION_ACCESS_VIOLATION ? er->ExceptionInformation[1] : -1); formatstring(out, "Tesseract Win32 Exception: 0x%x [0x%x]\n\n", er->ExceptionCode, er->ExceptionCode==EXCEPTION_ACCESS_VIOLATION ? er->ExceptionInformation[1] : -1);
SymInitialize(GetCurrentProcess(), NULL, TRUE); SymInitialize(GetCurrentProcess(), nullptr, TRUE);
#ifdef _AMD64_ #ifdef _AMD64_
STACKFRAME64 sf = {{context->Rip, 0, AddrModeFlat}, {}, {context->Rbp, 0, AddrModeFlat}, {context->Rsp, 0, AddrModeFlat}, 0}; STACKFRAME64 sf = {{context->Rip, 0, AddrModeFlat}, {}, {context->Rbp, 0, AddrModeFlat}, {context->Rsp, 0, AddrModeFlat}, 0};
while(::StackWalk64(IMAGE_FILE_MACHINE_AMD64, GetCurrentProcess(), GetCurrentThread(), &sf, context, NULL, ::SymFunctionTableAccess, ::SymGetModuleBase, NULL)) while(::StackWalk64(IMAGE_FILE_MACHINE_AMD64, GetCurrentProcess(), GetCurrentThread(), &sf, context, nullptr, ::SymFunctionTableAccess, ::SymGetModuleBase, nullptr))
{ {
union { IMAGEHLP_SYMBOL64 sym; char symext[sizeof(IMAGEHLP_SYMBOL64) + sizeof(string)]; }; union { IMAGEHLP_SYMBOL64 sym; char symext[sizeof(IMAGEHLP_SYMBOL64) + sizeof(string)]; };
sym.SizeOfStruct = sizeof(sym); sym.SizeOfStruct = sizeof(sym);
@ -965,7 +965,7 @@ static void stackdumper(unsigned int type, EXCEPTION_POINTERS *ep)
if(SymGetSymFromAddr64(GetCurrentProcess(), sf.AddrPC.Offset, &symoff, &sym) && SymGetLineFromAddr64(GetCurrentProcess(), sf.AddrPC.Offset, &lineoff, &line)) if(SymGetSymFromAddr64(GetCurrentProcess(), sf.AddrPC.Offset, &symoff, &sym) && SymGetLineFromAddr64(GetCurrentProcess(), sf.AddrPC.Offset, &lineoff, &line))
#else #else
STACKFRAME sf = {{context->Eip, 0, AddrModeFlat}, {}, {context->Ebp, 0, AddrModeFlat}, {context->Esp, 0, AddrModeFlat}, 0}; STACKFRAME sf = {{context->Eip, 0, AddrModeFlat}, {}, {context->Ebp, 0, AddrModeFlat}, {context->Esp, 0, AddrModeFlat}, 0};
while(::StackWalk(IMAGE_FILE_MACHINE_I386, GetCurrentProcess(), GetCurrentThread(), &sf, context, NULL, ::SymFunctionTableAccess, ::SymGetModuleBase, NULL)) while(::StackWalk(IMAGE_FILE_MACHINE_I386, GetCurrentProcess(), GetCurrentThread(), &sf, context, nullptr, ::SymFunctionTableAccess, ::SymGetModuleBase, nullptr))
{ {
union { IMAGEHLP_SYMBOL sym; char symext[sizeof(IMAGEHLP_SYMBOL) + sizeof(string)]; }; union { IMAGEHLP_SYMBOL sym; char symext[sizeof(IMAGEHLP_SYMBOL) + sizeof(string)]; };
sym.SizeOfStruct = sizeof(sym); sym.SizeOfStruct = sizeof(sym);
@ -1081,7 +1081,7 @@ int main(int argc, char **argv)
#endif #endif
#endif #endif
char *initscript = NULL; char *initscript = nullptr;
initing = INIT_RESET; initing = INIT_RESET;
// set home dir first // set home dir first
@ -1142,7 +1142,7 @@ int main(int argc, char **argv)
printf("init: world\n"); printf("init: world\n");
camera1 = player = game::iterdynents(0); camera1 = player = game::iterdynents(0);
emptymap(0, true, NULL, false); emptymap(0, true, nullptr, false);
printf("init: sound\n"); printf("init: sound\n");
//initsound(); //initsound();

View File

@ -34,7 +34,7 @@ bool interceptkey(int sym);
struct Texture; struct Texture;
void renderbackground(const char *caption = NULL, Texture *mapshot = NULL, const char *mapname = NULL, const char *mapinfo = NULL, bool force = false); void renderbackground(const char *caption = nullptr, Texture *mapshot = nullptr, const char *mapname = nullptr, const char *mapinfo = nullptr, bool force = false);
void renderprogress(float bar, const char *text, bool background = false); void renderprogress(float bar, const char *text, bool background = false);
void getfps(int &fps, int &bestdiff, int &worstdiff); void getfps(int &fps, int &bestdiff, int &worstdiff);

View File

@ -136,7 +136,7 @@ int findmaterial(const char *name)
const char *findmaterialname(int mat) const char *findmaterialname(int mat)
{ {
loopi(sizeof(materials)/sizeof(materials[0])) if(materials[i].id == mat) return materials[i].name; loopi(sizeof(materials)/sizeof(materials[0])) if(materials[i].id == mat) return materials[i].name;
return NULL; return nullptr;
} }
const char *getmaterialdesc(int mat, const char *prefix) const char *getmaterialdesc(int mat, const char *prefix)
@ -376,7 +376,7 @@ void setupmaterials(int start, int len)
for(int i = start; i < len; i++) for(int i = start; i < len; i++)
{ {
vtxarray *va = valist[i]; vtxarray *va = valist[i];
materialsurface *skip = NULL; materialsurface *skip = nullptr;
loopj(va->matsurfs) loopj(va->matsurfs)
{ {
materialsurface &m = va->matbuf[j]; materialsurface &m = va->matbuf[j];
@ -522,7 +522,7 @@ static void rendermatgrid()
static float glassxscale = 0, glassyscale = 0; static float glassxscale = 0, glassyscale = 0;
static void drawglass(const materialsurface &m, float offset, const vec *normal = NULL) static void drawglass(const materialsurface &m, float offset, const vec *normal = nullptr)
{ {
if(gle::attribbuf.empty()) if(gle::attribbuf.empty())
{ {

View File

@ -38,7 +38,7 @@ struct md5 : skelloader<md5>
int numweights; int numweights;
md5vert *vertinfo; md5vert *vertinfo;
md5mesh() : weightinfo(NULL), numweights(0), vertinfo(NULL) md5mesh() : weightinfo(nullptr), numweights(0), vertinfo(nullptr)
{ {
} }
@ -103,7 +103,7 @@ struct md5 : skelloader<md5>
} }
else if(strstr(buf, "shader")) else if(strstr(buf, "shader"))
{ {
char *start = strchr(buf, '"'), *end = start ? strchr(start+1, '"') : NULL; char *start = strchr(buf, '"'), *end = start ? strchr(start+1, '"') : nullptr;
if(start && end) if(start && end)
{ {
char *texname = newstring(start+1, end-(start+1)); char *texname = newstring(start+1, end-(start+1));
@ -267,28 +267,28 @@ struct md5 : skelloader<md5>
if(sa) return sa; if(sa) return sa;
stream *f = openfile(filename, "r"); stream *f = openfile(filename, "r");
if(!f) return NULL; if(!f) return nullptr;
vector<md5hierarchy> hierarchy; vector<md5hierarchy> hierarchy;
vector<md5joint> basejoints; vector<md5joint> basejoints;
int animdatalen = 0, animframes = 0; int animdatalen = 0, animframes = 0;
float *animdata = NULL; float *animdata = nullptr;
dualquat *animbones = NULL; dualquat *animbones = nullptr;
char buf[512]; char buf[512];
while(f->getline(buf, sizeof(buf))) while(f->getline(buf, sizeof(buf)))
{ {
int tmp; int tmp;
if(sscanf(buf, " MD5Version %d", &tmp)==1) if(sscanf(buf, " MD5Version %d", &tmp)==1)
{ {
if(tmp!=10) { delete f; return NULL; } if(tmp!=10) { delete f; return nullptr; }
} }
else if(sscanf(buf, " numJoints %d", &tmp)==1) else if(sscanf(buf, " numJoints %d", &tmp)==1)
{ {
if(tmp!=skel->numbones) { delete f; return NULL; } if(tmp!=skel->numbones) { delete f; return nullptr; }
} }
else if(sscanf(buf, " numFrames %d", &animframes)==1) else if(sscanf(buf, " numFrames %d", &animframes)==1)
{ {
if(animframes<1) { delete f; return NULL; } if(animframes<1) { delete f; return nullptr; }
} }
else if(sscanf(buf, " frameRate %d", &tmp)==1); else if(sscanf(buf, " frameRate %d", &tmp)==1);
else if(sscanf(buf, " numAnimatedComponents %d", &animdatalen)==1) else if(sscanf(buf, " numAnimatedComponents %d", &animdatalen)==1)
@ -322,7 +322,7 @@ struct md5 : skelloader<md5>
basejoints.add(j); basejoints.add(j);
} }
} }
if(basejoints.length()!=skel->numbones) { delete f; if(animdata) delete[] animdata; return NULL; } if(basejoints.length()!=skel->numbones) { delete f; if(animdata) delete[] animdata; return nullptr; }
animbones = new dualquat[(skel->numframes+animframes)*skel->numbones]; animbones = new dualquat[(skel->numframes+animframes)*skel->numbones];
if(skel->framebones) if(skel->framebones)
{ {

View File

@ -181,7 +181,7 @@ struct aviwriter
DELETEP(f); DELETEP(f);
} }
aviwriter(const char *name, uint w, uint h, uint fps, bool sound) : f(NULL), yuv(NULL), videoframes(0), totalsize(0), videow(w&~1), videoh(h&~1), videofps(fps), soundfrequency(0),soundchannels(0),soundformat(0) aviwriter(const char *name, uint w, uint h, uint fps, bool sound) : f(nullptr), yuv(nullptr), videoframes(0), totalsize(0), videow(w&~1), videoh(h&~1), videofps(fps), soundfrequency(0),soundchannels(0),soundformat(0)
{ {
copystring(filename, moviedir); copystring(filename, moviedir);
if(moviedir[0]) if(moviedir[0])
@ -771,7 +771,7 @@ namespace recorder
{ {
static enum { REC_OK = 0, REC_USERHALT, REC_TOOSLOW, REC_FILERROR } state = REC_OK; static enum { REC_OK = 0, REC_USERHALT, REC_TOOSLOW, REC_FILERROR } state = REC_OK;
static aviwriter *file = NULL; static aviwriter *file = nullptr;
static int starttime = 0; static int starttime = 0;
static int stats[1000]; static int stats[1000];
@ -785,7 +785,7 @@ namespace recorder
uint size, maxsize; uint size, maxsize;
uint frame; uint frame;
soundbuffer() : sound(NULL), maxsize(0) {} soundbuffer() : sound(nullptr), maxsize(0) {}
~soundbuffer() { cleanup(); } ~soundbuffer() { cleanup(); }
void load(uchar *stream, uint len, uint fnum) void load(uchar *stream, uint len, uint fnum)
@ -804,7 +804,7 @@ namespace recorder
void cleanup() { DELETEA(sound); maxsize = 0; } void cleanup() { DELETEA(sound); maxsize = 0; }
}; };
static queue<soundbuffer, MAXSOUNDBUFFERS> soundbuffers; static queue<soundbuffer, MAXSOUNDBUFFERS> soundbuffers;
static SDL_mutex *soundlock = NULL; static SDL_mutex *soundlock = nullptr;
enum { MAXVIDEOBUFFERS = 2 }; // double buffer enum { MAXVIDEOBUFFERS = 2 }; // double buffer
struct videobuffer struct videobuffer
@ -813,7 +813,7 @@ namespace recorder
uint w, h, bpp, frame; uint w, h, bpp, frame;
int format; int format;
videobuffer() : video(NULL){} videobuffer() : video(nullptr){}
~videobuffer() { cleanup(); } ~videobuffer() { cleanup(); }
void init(int nw, int nh, int nbpp) void init(int nw, int nh, int nbpp)
@ -835,11 +835,11 @@ namespace recorder
static uint scalew = 0, scaleh = 0; static uint scalew = 0, scaleh = 0;
static GLuint encodefb = 0, encoderb = 0; static GLuint encodefb = 0, encoderb = 0;
static SDL_Thread *thread = NULL; static SDL_Thread *thread = nullptr;
static SDL_mutex *videolock = NULL; static SDL_mutex *videolock = nullptr;
static SDL_cond *shouldencode = NULL, *shouldread = NULL; static SDL_cond *shouldencode = nullptr, *shouldread = nullptr;
static inline bool isrecording() { return file != NULL; } static inline bool isrecording() { return file != nullptr; }
static inline float calcquality() static inline float calcquality()
{ {
@ -964,8 +964,8 @@ namespace recorder
videolock = SDL_CreateMutex(); videolock = SDL_CreateMutex();
shouldencode = SDL_CreateCond(); shouldencode = SDL_CreateCond();
shouldread = SDL_CreateCond(); shouldread = SDL_CreateCond();
thread = SDL_CreateThread(videoencoder, "video encoder", NULL); thread = SDL_CreateThread(videoencoder, "video encoder", nullptr);
//if(file->soundfrequency > 0) Mix_SetPostMix(soundencoder, NULL); //if(file->soundfrequency > 0) Mix_SetPostMix(soundencoder, nullptr);
} }
void cleanup() void cleanup()
@ -981,13 +981,13 @@ namespace recorder
{ {
if(!file) return; if(!file) return;
if(state == REC_OK) state = REC_USERHALT; if(state == REC_OK) state = REC_USERHALT;
//if(file->soundfrequency > 0) Mix_SetPostMix(NULL, NULL); //if(file->soundfrequency > 0) Mix_SetPostMix(nullptr, nullptr);
SDL_LockMutex(videolock); // wakeup thread enough to kill it SDL_LockMutex(videolock); // wakeup thread enough to kill it
SDL_CondSignal(shouldencode); SDL_CondSignal(shouldencode);
SDL_UnlockMutex(videolock); SDL_UnlockMutex(videolock);
SDL_WaitThread(thread, NULL); // block until thread is finished SDL_WaitThread(thread, nullptr); // block until thread is finished
cleanup(); cleanup();
@ -999,9 +999,9 @@ namespace recorder
SDL_DestroyCond(shouldencode); SDL_DestroyCond(shouldencode);
SDL_DestroyCond(shouldread); SDL_DestroyCond(shouldread);
soundlock = videolock = NULL; soundlock = videolock = nullptr;
shouldencode = shouldread = NULL; shouldencode = shouldread = nullptr;
thread = NULL; thread = nullptr;
static const char * const mesgs[] = { "ok", "stopped", "computer too slow", "file error"}; static const char * const mesgs[] = { "ok", "stopped", "computer too slow", "file error"};
conoutf("movie recording halted: %s, %d frames", mesgs[state], file->videoframes); conoutf("movie recording halted: %s, %d frames", mesgs[state], file->videoframes);
@ -1031,7 +1031,7 @@ namespace recorder
loopi(2) loopi(2)
{ {
if(!scaletex[i]) glGenTextures(1, &scaletex[i]); if(!scaletex[i]) glGenTextures(1, &scaletex[i]);
createtexture(scaletex[i], tw, th, NULL, 3, 1, GL_RGB, GL_TEXTURE_RECTANGLE); createtexture(scaletex[i], tw, th, nullptr, 3, 1, GL_RGB, GL_TEXTURE_RECTANGLE);
} }
scalew = tw; scalew = tw;
scaleh = th; scaleh = th;

View File

@ -108,7 +108,7 @@ static inline void findnormal(const normalgroup &g, float lerpthreshold, const v
static inline bool findtnormal(const normalgroup &g, float lerpthreshold, const vec &surface, vec &v) static inline bool findtnormal(const normalgroup &g, float lerpthreshold, const vec &surface, vec &v)
{ {
float bestangle = lerpthreshold; float bestangle = lerpthreshold;
tnormal *bestnorm = NULL; tnormal *bestnorm = nullptr;
for(int cur = g.tnormals; cur >= 0;) for(int cur = g.tnormals; cur >= 0;)
{ {
tnormal &o = tnormals[cur]; tnormal &o = tnormals[cur];

View File

@ -46,7 +46,7 @@ struct obj : vertloader<obj>
#define STARTMESH do { \ #define STARTMESH do { \
vertmesh &m = *new vertmesh; \ vertmesh &m = *new vertmesh; \
m.group = this; \ m.group = this; \
m.name = meshname[0] ? newstring(meshname) : NULL; \ m.name = meshname[0] ? newstring(meshname) : nullptr; \
meshes.add(&m); \ meshes.add(&m); \
curmesh = &m; \ curmesh = &m; \
verthash.clear(); \ verthash.clear(); \
@ -79,7 +79,7 @@ struct obj : vertloader<obj>
} while(0) } while(0)
string meshname = ""; string meshname = "";
vertmesh *curmesh = NULL; vertmesh *curmesh = nullptr;
while(file->getline(buf, sizeof(buf))) while(file->getline(buf, sizeof(buf)))
{ {
char *c = buf; char *c = buf;
@ -102,7 +102,7 @@ struct obj : vertloader<obj>
copystring(meshname, name, min(namelen+1, sizeof(meshname))); copystring(meshname, name, min(namelen+1, sizeof(meshname)));
if(curmesh) FLUSHMESH; if(curmesh) FLUSHMESH;
curmesh = NULL; curmesh = nullptr;
break; break;
} }
case 'f': case 'f':

View File

@ -48,8 +48,8 @@ static struct emptycube : cube
{ {
emptycube() emptycube()
{ {
children = NULL; children = nullptr;
ext = NULL; ext = nullptr;
visible = 0; visible = 0;
merged = 0; merged = 0;
material = MAT_AIR; material = MAT_AIR;
@ -72,8 +72,8 @@ cubeext *growcubeext(cubeext *old, int maxverts)
} }
else else
{ {
ext->va = NULL; ext->va = nullptr;
ext->ents = NULL; ext->ents = nullptr;
ext->tjoints = -1; ext->tjoints = -1;
} }
ext->maxverts = maxverts; ext->maxverts = maxverts;
@ -110,8 +110,8 @@ cube *newcubes(uint face, int mat)
cube *c = new cube[8]; cube *c = new cube[8];
loopi(8) loopi(8)
{ {
c->children = NULL; c->children = nullptr;
c->ext = NULL; c->ext = nullptr;
c->visible = 0; c->visible = 0;
c->merged = 0; c->merged = 0;
setfaces(*c, face); setfaces(*c, face);
@ -143,7 +143,7 @@ void freecubeext(cube &c)
if(c.ext) if(c.ext)
{ {
delete[] (uchar *)c.ext; delete[] (uchar *)c.ext;
c.ext = NULL; c.ext = nullptr;
} }
} }
@ -157,7 +157,7 @@ void discardchildren(cube &c, bool fixtex, int depth)
if(c.ext) if(c.ext)
{ {
if(c.ext->va) destroyva(c.ext->va); if(c.ext->va) destroyva(c.ext->va);
c.ext->va = NULL; c.ext->va = nullptr;
c.ext->tjoints = -1; c.ext->tjoints = -1;
freeoctaentities(c); freeoctaentities(c);
freecubeext(c); freecubeext(c);
@ -568,9 +568,9 @@ bool remip(cube &c, const ivec &co, int size)
} }
cube n = c; cube n = c;
n.ext = NULL; n.ext = nullptr;
forcemip(n); forcemip(n);
n.children = NULL; n.children = nullptr;
if(!subdividecube(n, false, false)) if(!subdividecube(n, false, false))
{ freeocta(n.children); return false; } { freeocta(n.children); return false; }
@ -783,7 +783,7 @@ static uint faceedges(const cube &c, int orient)
} }
static inline int genfacevecs(const cube &cu, int orient, const ivec &pos, int size, bool solid, ivec2 *fvecs, const ivec *v = NULL) static inline int genfacevecs(const cube &cu, int orient, const ivec &pos, int size, bool solid, ivec2 *fvecs, const ivec *v = nullptr)
{ {
int i = 0; int i = 0;
if(solid) if(solid)
@ -1884,7 +1884,7 @@ static void invalidatemerges(cube &c)
{ {
if(!(c.ext->va->hasmerges&(MERGE_PART | MERGE_ORIGIN))) return; if(!(c.ext->va->hasmerges&(MERGE_PART | MERGE_ORIGIN))) return;
destroyva(c.ext->va); destroyva(c.ext->va);
c.ext->va = NULL; c.ext->va = nullptr;
} }
if(c.ext->tjoints >= 0) c.ext->tjoints = -1; if(c.ext->tjoints >= 0) c.ext->tjoints = -1;
} }

View File

@ -214,7 +214,7 @@ struct tjoint
struct cubeext struct cubeext
{ {
vtxarray *va; // vertex array for children, or NULL vtxarray *va; // vertex array for children, or nullptr
octaentities *ents; // map entities inside cube octaentities *ents; // map entities inside cube
surfaceinfo surfaces[6]; // render info for each surface surfaceinfo surfaces[6]; // render info for each surface
int tjoints; // linked list of t-joints int tjoints; // linked list of t-joints
@ -225,7 +225,7 @@ struct cubeext
struct cube struct cube
{ {
cube *children; // points to 8 cube structures which are its children, or NULL. -Z first, then -Y, -X cube *children; // points to 8 cube structures which are its children, or nullptr. -Z first, then -Y, -X
cubeext *ext; // extended info for the cube cubeext *ext; // extended info for the cube
union union
{ {
@ -256,7 +256,7 @@ struct block3
struct editinfo struct editinfo
{ {
block3 *copy; block3 *copy;
editinfo() : copy(NULL) {} editinfo() : copy(nullptr) {}
}; };
struct undoent { int i; entity e; }; struct undoent { int i; entity e; };

View File

@ -587,7 +587,7 @@ static void readychanges(const ivec &bbmin, const ivec &bbmax, cube *c, const iv
{ {
int hasmerges = c[i].ext->va->hasmerges; int hasmerges = c[i].ext->va->hasmerges;
destroyva(c[i].ext->va); destroyva(c[i].ext->va);
c[i].ext->va = NULL; c[i].ext->va = nullptr;
if(hasmerges) invalidatemerges(c[i], o, size, true); if(hasmerges) invalidatemerges(c[i], o, size, true);
} }
freeoctaentities(c[i]); freeoctaentities(c[i]);
@ -646,7 +646,7 @@ static inline void copycube(const cube &src, cube &dst)
dst = src; dst = src;
dst.visible = 0; dst.visible = 0;
dst.merged = 0; dst.merged = 0;
dst.ext = NULL; // src cube is responsible for va destruction dst.ext = nullptr; // src cube is responsible for va destruction
if(src.children) if(src.children)
{ {
dst.children = newcubes(F_EMPTY); dst.children = newcubes(F_EMPTY);
@ -670,7 +670,7 @@ static void blockcopy(const block3 &s, int rgrid, block3 *b)
static block3 *blockcopy(const block3 &s, int rgrid) static block3 *blockcopy(const block3 &s, int rgrid)
{ {
int bsize = sizeof(block3)+sizeof(cube)*s.size(); int bsize = sizeof(block3)+sizeof(cube)*s.size();
if(bsize <= 0 || bsize > (100<<20)) return NULL; if(bsize <= 0 || bsize > (100<<20)) return nullptr;
block3 *b = (block3 *)new (false) uchar[bsize]; block3 *b = (block3 *)new (false) uchar[bsize];
if(b) blockcopy(s, rgrid, b); if(b) blockcopy(s, rgrid, b);
return b; return b;
@ -723,13 +723,13 @@ struct undolist
{ {
undoblock *first, *last; undoblock *first, *last;
undolist() : first(NULL), last(NULL) {} undolist() : first(nullptr), last(nullptr) {}
bool empty() { return !first; } bool empty() { return !first; }
void add(undoblock *u) void add(undoblock *u)
{ {
u->next = NULL; u->next = nullptr;
u->prev = last; u->prev = last;
if(!first) first = last = u; if(!first) first = last = u;
else else
@ -743,8 +743,8 @@ struct undolist
{ {
undoblock *u = first; undoblock *u = first;
first = first->next; first = first->next;
if(first) first->prev = NULL; if(first) first->prev = nullptr;
else last = NULL; else last = nullptr;
return u; return u;
} }
@ -752,8 +752,8 @@ struct undolist
{ {
undoblock *u = last; undoblock *u = last;
last = last->prev; last = last->prev;
if(last) last->next = NULL; if(last) last->next = nullptr;
else first = NULL; else first = nullptr;
return u; return u;
} }
}; };
@ -788,9 +788,9 @@ static undoblock *newundocube(const selinfo &s)
int ssize = s.size(), int ssize = s.size(),
selgridsize = ssize, selgridsize = ssize,
blocksize = sizeof(block3)+ssize*sizeof(cube); blocksize = sizeof(block3)+ssize*sizeof(cube);
if(blocksize <= 0 || blocksize > (undomegs<<20)) return NULL; if(blocksize <= 0 || blocksize > (undomegs<<20)) return nullptr;
undoblock *u = (undoblock *)new (false) uchar[sizeof(undoblock) + blocksize + selgridsize]; undoblock *u = (undoblock *)new (false) uchar[sizeof(undoblock) + blocksize + selgridsize];
if(!u) return NULL; if(!u) return nullptr;
u->numents = 0; u->numents = 0;
block3 *b = u->block(); block3 *b = u->block();
blockcopy(s, -s.grid, b); blockcopy(s, -s.grid, b);
@ -894,7 +894,7 @@ static void editredo() { swapundo(redos, undos, EDIT_REDO); }
#define protectsel(f) { undoblock *_u = newundocube(sel); f; if(_u) { pasteundo(_u); freeundo(_u); } } #define protectsel(f) { undoblock *_u = newundocube(sel); f; if(_u) { pasteundo(_u); freeundo(_u); } }
static vector<editinfo *> editinfos; static vector<editinfo *> editinfos;
editinfo *localedit = NULL; editinfo *localedit = nullptr;
template<class B> template<class B>
static void packcube(cube &c, B &buf) static void packcube(cube &c, B &buf)
@ -987,7 +987,7 @@ static void unpackcube(cube &c, B &buf)
template<class B> template<class B>
static bool unpackblock(block3 *&b, B &buf) static bool unpackblock(block3 *&b, B &buf)
{ {
if(b) { freeblock(b); b = NULL; } if(b) { freeblock(b); b = nullptr; }
block3 hdr; block3 hdr;
if(buf.get((uchar *)&hdr, sizeof(hdr)) < int(sizeof(hdr))) return false; if(buf.get((uchar *)&hdr, sizeof(hdr)) < int(sizeof(hdr))) return false;
lilswap(hdr.o.v, 3); lilswap(hdr.o.v, 3);
@ -1056,7 +1056,7 @@ static bool compresseditinfo(const uchar *inbuf, int inlen, uchar *&outbuf, int
if(!outbuf || compress2((Bytef *)outbuf, &len, (const Bytef *)inbuf, inlen, Z_BEST_COMPRESSION) != Z_OK || len > (1<<16)) if(!outbuf || compress2((Bytef *)outbuf, &len, (const Bytef *)inbuf, inlen, Z_BEST_COMPRESSION) != Z_OK || len > (1<<16))
{ {
delete[] outbuf; delete[] outbuf;
outbuf = NULL; outbuf = nullptr;
return false; return false;
} }
outlen = len; outlen = len;
@ -1071,7 +1071,7 @@ static bool uncompresseditinfo(const uchar *inbuf, int inlen, uchar *&outbuf, in
if(!outbuf || uncompress((Bytef *)outbuf, &len, (const Bytef *)inbuf, inlen) != Z_OK) if(!outbuf || uncompress((Bytef *)outbuf, &len, (const Bytef *)inbuf, inlen) != Z_OK)
{ {
delete[] outbuf; delete[] outbuf;
outbuf = NULL; outbuf = nullptr;
return false; return false;
} }
outlen = len; outlen = len;
@ -1089,8 +1089,8 @@ bool packeditinfo(editinfo *e, int &inlen, uchar *&outbuf, int &outlen)
bool unpackeditinfo(editinfo *&e, const uchar *inbuf, int inlen, int outlen) bool unpackeditinfo(editinfo *&e, const uchar *inbuf, int inlen, int outlen)
{ {
if(e && e->copy) { freeblock(e->copy); e->copy = NULL; } if(e && e->copy) { freeblock(e->copy); e->copy = nullptr; }
uchar *outbuf = NULL; uchar *outbuf = nullptr;
if(!uncompresseditinfo(inbuf, inlen, outbuf, outlen)) return false; if(!uncompresseditinfo(inbuf, inlen, outbuf, outlen)) return false;
ucharbuf buf(outbuf, outlen); ucharbuf buf(outbuf, outlen);
if(!e) e = editinfos.add(new editinfo); if(!e) e = editinfos.add(new editinfo);
@ -1110,7 +1110,7 @@ void freeeditinfo(editinfo *&e)
editinfos.removeobj(e); editinfos.removeobj(e);
if(e->copy) freeblock(e->copy); if(e->copy) freeblock(e->copy);
delete e; delete e;
e = NULL; e = nullptr;
} }
static bool packundo(undoblock *u, int &inlen, uchar *&outbuf, int &outlen) static bool packundo(undoblock *u, int &inlen, uchar *&outbuf, int &outlen)
@ -1143,7 +1143,7 @@ static bool packundo(undoblock *u, int &inlen, uchar *&outbuf, int &outlen)
bool unpackundo(const uchar *inbuf, int inlen, int outlen) bool unpackundo(const uchar *inbuf, int inlen, int outlen)
{ {
uchar *outbuf = NULL; uchar *outbuf = nullptr;
if(!uncompresseditinfo(inbuf, inlen, outbuf, outlen)) return false; if(!uncompresseditinfo(inbuf, inlen, outbuf, outlen)) return false;
ucharbuf buf(outbuf, outlen); ucharbuf buf(outbuf, outlen);
if(buf.remaining() < 2) if(buf.remaining() < 2)
@ -1170,7 +1170,7 @@ bool unpackundo(const uchar *inbuf, int inlen, int outlen)
} }
else else
{ {
block3 *b = NULL; block3 *b = nullptr;
if(!unpackblock(b, buf) || b->grid >= worldsize || buf.remaining() < b->size()) if(!unpackblock(b, buf) || b->grid >= worldsize || buf.remaining() < b->size())
{ {
freeblock(b); freeblock(b);
@ -1210,7 +1210,7 @@ struct prefab : editinfo
GLuint ebo, vbo; GLuint ebo, vbo;
int numtris, numverts; int numtris, numverts;
prefab() : name(NULL), ebo(0), vbo(0), numtris(0), numverts(0) {} prefab() : name(nullptr), ebo(0), vbo(0), numtris(0), numverts(0) {}
~prefab() { DELETEA(name); if(copy) freeblock(copy); } ~prefab() { DELETEA(name); if(copy) freeblock(copy); }
void cleanup() void cleanup()
@ -1286,14 +1286,14 @@ static prefab *loadprefab(const char *name, bool msg = true)
defformatstring(filename, "media/prefab/%s.obr", name); defformatstring(filename, "media/prefab/%s.obr", name);
path(filename); path(filename);
stream *f = opengzfile(filename, "rb"); stream *f = opengzfile(filename, "rb");
if(!f) { if(msg) conoutf(CON_ERROR, "could not read prefab %s", filename); return NULL; } if(!f) { if(msg) conoutf(CON_ERROR, "could not read prefab %s", filename); return nullptr; }
prefabheader hdr; prefabheader hdr;
if(f->read(&hdr, sizeof(hdr)) != sizeof(prefabheader) || memcmp(hdr.magic, "OEBR", 4)) { delete f; if(msg) conoutf(CON_ERROR, "prefab %s has malformatted header", filename); return NULL; } if(f->read(&hdr, sizeof(hdr)) != sizeof(prefabheader) || memcmp(hdr.magic, "OEBR", 4)) { delete f; if(msg) conoutf(CON_ERROR, "prefab %s has malformatted header", filename); return nullptr; }
lilswap(&hdr.version, 1); lilswap(&hdr.version, 1);
if(hdr.version != 0) { delete f; if(msg) conoutf(CON_ERROR, "prefab %s uses unsupported version", filename); return NULL; } if(hdr.version != 0) { delete f; if(msg) conoutf(CON_ERROR, "prefab %s uses unsupported version", filename); return nullptr; }
streambuf<uchar> s(f); streambuf<uchar> s(f);
block3 *copy = NULL; block3 *copy = nullptr;
if(!unpackblock(copy, s)) { delete f; if(msg) conoutf(CON_ERROR, "could not unpack prefab %s", filename); return NULL; } if(!unpackblock(copy, s)) { delete f; if(msg) conoutf(CON_ERROR, "could not unpack prefab %s", filename); return nullptr; }
delete f; delete f;
b = &prefabs[name]; b = &prefabs[name];
@ -1519,16 +1519,16 @@ void previewprefab(const char *name, const vec &color)
void mpcopy(editinfo *&e, selinfo &sel, bool local) void mpcopy(editinfo *&e, selinfo &sel, bool local)
{ {
if(local) game::edittrigger(sel, EDIT_COPY); if(local) game::edittrigger(sel, EDIT_COPY);
if(e==NULL) e = editinfos.add(new editinfo); if(e==nullptr) e = editinfos.add(new editinfo);
if(e->copy) freeblock(e->copy); if(e->copy) freeblock(e->copy);
e->copy = NULL; e->copy = nullptr;
protectsel(e->copy = blockcopy(block3(sel), sel.grid)); protectsel(e->copy = blockcopy(block3(sel), sel.grid));
changed(sel); changed(sel);
} }
void mppaste(editinfo *&e, selinfo &sel, bool local) void mppaste(editinfo *&e, selinfo &sel, bool local)
{ {
if(e==NULL) return; if(e==nullptr) return;
if(local) game::edittrigger(sel, EDIT_PASTE); if(local) game::edittrigger(sel, EDIT_PASTE);
if(e->copy) pasteblock(*e->copy, sel, local); if(e->copy) pasteblock(*e->copy, sel, local);
} }
@ -1661,11 +1661,11 @@ namespace hmap
static cube *getcube(ivec t, int f) static cube *getcube(ivec t, int f)
{ {
t[d] += dcr*f*gridsize; t[d] += dcr*f*gridsize;
if(t[d] > nz || t[d] < mz) return NULL; if(t[d] > nz || t[d] < mz) return nullptr;
cube *c = &lookupcube(t, gridsize); cube *c = &lookupcube(t, gridsize);
if(c->children) forcemip(*c, false); if(c->children) forcemip(*c, false);
discardchildren(*c, true); discardchildren(*c, true);
if(!isheightmap(sel.orient, d, true, c)) return NULL; if(!isheightmap(sel.orient, d, true, c)) return nullptr;
if (t.x < changes.o.x) changes.o.x = t.x; if (t.x < changes.o.x) changes.o.x = t.x;
else if(t.x > changes.s.x) changes.s.x = t.x; else if(t.x > changes.s.x) changes.s.x = t.x;
if (t.y < changes.o.y) changes.o.y = t.y; if (t.y < changes.o.y) changes.o.y = t.y;
@ -1707,13 +1707,13 @@ namespace hmap
makeundo(hundo); makeundo(hundo);
cube **c = cmap[x][y]; cube **c = cmap[x][y];
loopk(4) c[k] = NULL; loopk(4) c[k] = nullptr;
c[1] = getcube(t, 0); c[1] = getcube(t, 0);
if(!c[1] || !isempty(*c[1])) if(!c[1] || !isempty(*c[1]))
{ // try up { // try up
c[2] = c[1]; c[2] = c[1];
c[1] = getcube(t, 1); c[1] = getcube(t, 1);
if(!c[1] || isempty(*c[1])) { c[0] = c[1]; c[1] = c[2]; c[2] = NULL; } if(!c[1] || isempty(*c[1])) { c[0] = c[1]; c[1] = c[2]; c[2] = nullptr; }
else { z++; t[d]+=fg; } else { z++; t[d]+=fg; }
} }
else // drop down else // drop down
@ -1732,8 +1732,8 @@ namespace hmap
if(!c[0]) c[0] = getcube(t, 1); if(!c[0]) c[0] = getcube(t, 1);
if(!c[2]) c[2] = getcube(t, -1); if(!c[2]) c[2] = getcube(t, -1);
c[3] = getcube(t, -2); c[3] = getcube(t, -2);
c[2] = !c[2] || isempty(*c[2]) ? NULL : c[2]; c[2] = !c[2] || isempty(*c[2]) ? nullptr : c[2];
c[3] = !c[3] || isempty(*c[3]) ? NULL : c[3]; c[3] = !c[3] || isempty(*c[3]) ? nullptr : c[3];
uint face = getface(c[1], d); uint face = getface(c[1], d);
if(face == 0x08080808 && (!c[0] || !isempty(*c[0]))) { flags[x][y] |= NOTHMAP; return; } if(face == 0x08080808 && (!c[0] || !isempty(*c[0]))) { flags[x][y] |= NOTHMAP; return; }
@ -2123,8 +2123,8 @@ static VSlot *remapvslot(int index, bool delta, const VSlot &ds)
{ {
loopv(remappedvslots) if(remappedvslots[i].index == index) return remappedvslots[i].vslot; loopv(remappedvslots) if(remappedvslots[i].index == index) return remappedvslots[i].vslot;
VSlot &vs = lookupvslot(index, false); VSlot &vs = lookupvslot(index, false);
if(vs.index < 0 || vs.index == DEFAULT_SKY) return NULL; if(vs.index < 0 || vs.index == DEFAULT_SKY) return nullptr;
VSlot *edit = NULL; VSlot *edit = nullptr;
if(delta) if(delta)
{ {
VSlot ms; VSlot ms;
@ -2197,7 +2197,7 @@ void mpeditvslot(int delta, VSlot &ds, int allfaces, selinfo &sel, bool local)
repsel = sel; repsel = sel;
} }
bool findrep = local && !allfaces && reptex < 0; bool findrep = local && !allfaces && reptex < 0;
VSlot *findedit = NULL; VSlot *findedit = nullptr;
loopselxyz(remapvslots(c, delta != 0, ds, allfaces ? -1 : sel.orient, findrep, findedit)); loopselxyz(remapvslots(c, delta != 0, ds, allfaces ? -1 : sel.orient, findrep, findedit));
remappedvslots.setsize(0); remappedvslots.setsize(0);
if(local && findedit) if(local && findedit)
@ -2847,9 +2847,9 @@ void rendertexturepanel(int w, int h)
int s = (i == 3 ? 285 : 220), ti = curtexindex+i-3; int s = (i == 3 ? 285 : 220), ti = curtexindex+i-3;
if(texmru.inrange(ti)) if(texmru.inrange(ti))
{ {
VSlot &vslot = lookupvslot(texmru[ti]), *layer = NULL, *detail = NULL; VSlot &vslot = lookupvslot(texmru[ti]), *layer = nullptr, *detail = nullptr;
Slot &slot = *vslot.slot; Slot &slot = *vslot.slot;
Texture *tex = slot.sts.empty() ? notexture : slot.sts[0].t, *glowtex = NULL, *layertex = NULL, *detailtex = NULL; Texture *tex = slot.sts.empty() ? notexture : slot.sts[0].t, *glowtex = nullptr, *layertex = nullptr, *detailtex = nullptr;
if(slot.texmask&(1<<TEX_GLOW)) if(slot.texmask&(1<<TEX_GLOW))
{ {
loopvj(slot.sts) if(slot.sts[j].type==TEX_GLOW) { glowtex = slot.sts[j].t; break; } loopvj(slot.sts) if(slot.sts[j].type==TEX_GLOW) { glowtex = slot.sts[j].t; break; }

View File

@ -490,7 +490,7 @@ struct vacollect : verthash
va->maxvert += va->voffset; va->maxvert += va->voffset;
} }
va->matbuf = NULL; va->matbuf = nullptr;
va->matsurfs = matsurfs.length(); va->matsurfs = matsurfs.length();
va->matmask = 0; va->matmask = 0;
if(va->matsurfs) if(va->matsurfs)
@ -521,7 +521,7 @@ struct vacollect : verthash
if(va->voffset) loopi(va->sky) skydata[i] += va->voffset; if(va->voffset) loopi(va->sky) skydata[i] += va->voffset;
} }
va->texelems = NULL; va->texelems = nullptr;
va->texs = texs.length(); va->texs = texs.length();
va->blendtris = 0; va->blendtris = 0;
va->blends = 0; va->blends = 0;
@ -587,7 +587,7 @@ struct vacollect : verthash
va->decalbuf = 0; va->decalbuf = 0;
va->decaldata = 0; va->decaldata = 0;
va->decaloffset = 0; va->decaloffset = 0;
va->decalelems = NULL; va->decalelems = nullptr;
va->decaltexs = decaltexs.length(); va->decaltexs = decaltexs.length();
va->decaltris = decaltris/3; va->decaltris = decaltris/3;
if(va->decaltexs) if(va->decaltexs)
@ -1110,7 +1110,7 @@ static void gencubeverts(cube &c, const ivec &co, int size, int csi)
loopi(6) if(vismask&(1<<i) && (vis = visibletris(c, i, co, size))) loopi(6) if(vismask&(1<<i) && (vis = visibletris(c, i, co, size)))
{ {
vec pos[MAXFACEVERTS]; vec pos[MAXFACEVERTS];
vertinfo *verts = NULL; vertinfo *verts = nullptr;
int numverts = c.ext ? c.ext->surfaces[i].numverts&MAXFACEVERTS : 0, convex = 0; int numverts = c.ext ? c.ext->surfaces[i].numverts&MAXFACEVERTS : 0, convex = 0;
if(numverts) if(numverts)
{ {
@ -1133,14 +1133,14 @@ static void gencubeverts(cube &c, const ivec &co, int size, int csi)
} }
VSlot &vslot = lookupvslot(c.texture[i], true), VSlot &vslot = lookupvslot(c.texture[i], true),
*layer = vslot.layer && !(c.material&MAT_ALPHA) ? &lookupvslot(vslot.layer, true) : NULL; *layer = vslot.layer && !(c.material&MAT_ALPHA) ? &lookupvslot(vslot.layer, true) : nullptr;
ushort envmap = vslot.slot->shader->type&SHADER_ENVMAP ? (vslot.slot->texmask&(1<<TEX_ENVMAP) ? EMID_CUSTOM : closestenvmap(i, co, size)) : EMID_NONE, ushort envmap = vslot.slot->shader->type&SHADER_ENVMAP ? (vslot.slot->texmask&(1<<TEX_ENVMAP) ? EMID_CUSTOM : closestenvmap(i, co, size)) : EMID_NONE,
envmap2 = layer && layer->slot->shader->type&SHADER_ENVMAP ? (layer->slot->texmask&(1<<TEX_ENVMAP) ? EMID_CUSTOM : closestenvmap(i, co, size)) : EMID_NONE; envmap2 = layer && layer->slot->shader->type&SHADER_ENVMAP ? (layer->slot->texmask&(1<<TEX_ENVMAP) ? EMID_CUSTOM : closestenvmap(i, co, size)) : EMID_NONE;
while(tj >= 0 && tjoints[tj].edge < i*(MAXFACEVERTS+1)) tj = tjoints[tj].next; while(tj >= 0 && tjoints[tj].edge < i*(MAXFACEVERTS+1)) tj = tjoints[tj].next;
int hastj = tj >= 0 && tjoints[tj].edge < (i+1)*(MAXFACEVERTS+1) ? tj : -1; int hastj = tj >= 0 && tjoints[tj].edge < (i+1)*(MAXFACEVERTS+1) ? tj : -1;
int grassy = vslot.slot->grass && i!=O_BOTTOM ? (vis!=3 || convex ? 1 : 2) : 0; int grassy = vslot.slot->grass && i!=O_BOTTOM ? (vis!=3 || convex ? 1 : 2) : 0;
if(!c.ext) if(!c.ext)
addcubeverts(vslot, i, size, pos, convex, c.texture[i], NULL, numverts, hastj, envmap, grassy, (c.material&MAT_ALPHA)!=0); addcubeverts(vslot, i, size, pos, convex, c.texture[i], nullptr, numverts, hastj, envmap, grassy, (c.material&MAT_ALPHA)!=0);
else else
{ {
const surfaceinfo &surf = c.ext->surfaces[i]; const surfaceinfo &surf = c.ext->surfaces[i];
@ -1161,12 +1161,12 @@ vector<vtxarray *> valist, varoot;
static vtxarray *newva(const ivec &o, int size) static vtxarray *newva(const ivec &o, int size)
{ {
vtxarray *va = new vtxarray; vtxarray *va = new vtxarray;
va->parent = NULL; va->parent = nullptr;
va->o = o; va->o = o;
va->size = size; va->size = size;
va->curvfc = VFC_NOT_VISIBLE; va->curvfc = VFC_NOT_VISIBLE;
va->occluded = OCCLUDE_NOTHING; va->occluded = OCCLUDE_NOTHING;
va->query = NULL; va->query = nullptr;
va->bbmin = va->alphamin = va->refractmin = va->skymin = ivec(-1, -1, -1); va->bbmin = va->alphamin = va->refractmin = va->skymin = ivec(-1, -1, -1);
va->bbmax = va->alphamax = va->refractmax = va->skymax = ivec(-1, -1, -1); va->bbmax = va->alphamax = va->refractmax = va->skymax = ivec(-1, -1, -1);
va->hasmerges = 0; va->hasmerges = 0;
@ -1237,7 +1237,7 @@ void clearvas(cube *c)
if(c[i].ext) if(c[i].ext)
{ {
if(c[i].ext->va) destroyva(c[i].ext->va, false); if(c[i].ext->va) destroyva(c[i].ext->va, false);
c[i].ext->va = NULL; c[i].ext->va = nullptr;
c[i].ext->tjoints = -1; c[i].ext->tjoints = -1;
} }
if(c[i].children) clearvas(c[i].children); if(c[i].children) clearvas(c[i].children);
@ -1343,7 +1343,7 @@ static int genmergedfaces(cube &c, const ivec &co, int size, int minlevel = -1)
if(tj >= 0 && tjoints[tj].edge < (i+1)*(MAXFACEVERTS+1)) mf.tjoints = tj; if(tj >= 0 && tjoints[tj].edge < (i+1)*(MAXFACEVERTS+1)) mf.tjoints = tj;
VSlot &vslot = lookupvslot(mf.tex, true), VSlot &vslot = lookupvslot(mf.tex, true),
*layer = vslot.layer && !(c.material&MAT_ALPHA) ? &lookupvslot(vslot.layer, true) : NULL; *layer = vslot.layer && !(c.material&MAT_ALPHA) ? &lookupvslot(vslot.layer, true) : nullptr;
if(vslot.slot->shader->type&SHADER_ENVMAP) if(vslot.slot->shader->type&SHADER_ENVMAP)
mf.envmap = vslot.slot->texmask&(1<<TEX_ENVMAP) ? EMID_CUSTOM : closestenvmap(i, co, size); mf.envmap = vslot.slot->texmask&(1<<TEX_ENVMAP) ? EMID_CUSTOM : closestenvmap(i, co, size);
ushort envmap2 = layer && layer->slot->shader->type&SHADER_ENVMAP ? (layer->slot->texmask&(1<<TEX_ENVMAP) ? EMID_CUSTOM : closestenvmap(i, co, size)) : EMID_NONE; ushort envmap2 = layer && layer->slot->shader->type&SHADER_ENVMAP ? (layer->slot->texmask&(1<<TEX_ENVMAP) ? EMID_CUSTOM : closestenvmap(i, co, size)) : EMID_NONE;
@ -1713,7 +1713,7 @@ void octarender() // creates va s for all leaf cub
explicitsky += va->sky; explicitsky += va->sky;
} }
visibleva = NULL; visibleva = nullptr;
} }
static void precachetextures() static void precachetextures()

View File

@ -263,7 +263,7 @@ static float shadowent(octaentities *oc, const vec &o, const vec &ray, float rad
dent = min(dent, edist); \ dent = min(dent, edist); \
} \ } \
} \ } \
if(lc->children==NULL) break; \ if(lc->children==nullptr) break; \
lc = lc->children; \ lc = lc->children; \
levels[lshift] = lc; \ levels[lshift] = lc; \
} }
@ -391,7 +391,7 @@ float rayent(const vec &o, const vec &ray, float radius, int mode, int size, int
float dist = raycube(o, ray, radius, mode, size); float dist = raycube(o, ray, radius, mode, size);
if((mode&RAY_ENTS) == RAY_ENTS) if((mode&RAY_ENTS) == RAY_ENTS)
{ {
float dent = disttooutsideent(o, ray, dist < 0 ? 1e16f : dist, mode, NULL); float dent = disttooutsideent(o, ray, dist < 0 ? 1e16f : dist, mode, nullptr);
if(dent < 1e15f && (dist < 0 || dent < dist)) dist = dent; if(dent < 1e15f && (dist < 0 || dent < dist)) dist = dent;
} }
orient = hitorient; orient = hitorient;
@ -612,7 +612,7 @@ static inline bool plcollide(physent *d, const vec &dir, physent *o)
E entvol(d); E entvol(d);
O obvol(o); O obvol(o);
vec cp; vec cp;
if(mpr::collide(entvol, obvol, NULL, NULL, &cp)) if(mpr::collide(entvol, obvol, nullptr, nullptr, &cp))
{ {
vec wn = vec(cp).sub(obvol.center()); vec wn = vec(cp).sub(obvol.center());
collidewall = obvol.contactface(wn, dir.iszero() ? vec(wn).neg() : dir); collidewall = obvol.contactface(wn, dir.iszero() ? vec(wn).neg() : dir);
@ -640,7 +640,7 @@ static bool plcollide(physent *d, const vec &dir, bool insideplayercol) // co
{ {
if(d->type==ENT_CAMERA || d->state!=CS_ALIVE) return false; if(d->type==ENT_CAMERA || d->state!=CS_ALIVE) return false;
int lastinside = collideinside; int lastinside = collideinside;
physent *insideplayer = NULL; physent *insideplayer = nullptr;
loopdynentcache(x, y, d->o, d->radius) loopdynentcache(x, y, d->o, d->radius)
{ {
const vector<physent *> &dynents = checkdynentcache(x, y); const vector<physent *> &dynents = checkdynentcache(x, y);
@ -687,7 +687,7 @@ static inline bool mmcollide(physent *d, const vec &dir, const extentity &e, con
E entvol(d); E entvol(d);
M mdlvol(e.o, center, radius, yaw, pitch, roll); M mdlvol(e.o, center, radius, yaw, pitch, roll);
vec cp; vec cp;
if(mpr::collide(entvol, mdlvol, NULL, NULL, &cp)) if(mpr::collide(entvol, mdlvol, nullptr, nullptr, &cp))
{ {
vec wn = vec(cp).sub(mdlvol.center()); vec wn = vec(cp).sub(mdlvol.center());
collidewall = mdlvol.contactface(wn, dir.iszero() ? vec(wn).neg() : dir); collidewall = mdlvol.contactface(wn, dir.iszero() ? vec(wn).neg() : dir);
@ -820,7 +820,7 @@ static bool mmcollide(physent *d, const vec &dir, float cutoff, octaentities &oc
model *m = mmi.collide; model *m = mmi.collide;
if(!m) if(!m)
{ {
if(!mmi.m && !loadmodel(NULL, e.attr1)) continue; if(!mmi.m && !loadmodel(nullptr, e.attr1)) continue;
if(mmi.m->collidemodel) m = loadmodel(mmi.m->collidemodel); if(mmi.m->collidemodel) m = loadmodel(mmi.m->collidemodel);
if(!m) m = mmi.m; if(!m) m = mmi.m;
mmi.collide = m; mmi.collide = m;
@ -1153,7 +1153,7 @@ static inline bool octacollide(physent *d, const vec &dir, float cutoff, const i
bool collide(physent *d, const vec &dir, float cutoff, bool playercol, bool insideplayercol) bool collide(physent *d, const vec &dir, float cutoff, bool playercol, bool insideplayercol)
{ {
collideinside = 0; collideinside = 0;
collideplayer = NULL; collideplayer = nullptr;
collidewall = vec(0, 0, 0); collidewall = vec(0, 0, 0);
ivec bo(int(d->o.x-d->radius), int(d->o.y-d->radius), int(d->o.z-d->eyeheight)), ivec bo(int(d->o.x-d->radius), int(d->o.y-d->radius), int(d->o.z-d->eyeheight)),
bs(int(d->o.x+d->radius), int(d->o.y+d->radius), int(d->o.z+d->aboveeye)); bs(int(d->o.x+d->radius), int(d->o.y+d->radius), int(d->o.z+d->aboveeye));
@ -1602,7 +1602,7 @@ bool bounce(physent *d, float secs, float elasticity, float waterfric, float gra
if(d->o == old) return !collideplayer; if(d->o == old) return !collideplayer;
d->physstate = PHYS_BOUNCE; d->physstate = PHYS_BOUNCE;
} }
return collideplayer!=NULL; return collideplayer!=nullptr;
} }
void avoidcollision(physent *d, const vec &dir, physent *obstacle, float space) void avoidcollision(physent *d, const vec &dir, physent *obstacle, float space)

View File

@ -14,7 +14,7 @@ extern physent *collideplayer;
bool overlapsdynent(const vec &o, float radius); bool overlapsdynent(const vec &o, float radius);
void rotatebb(vec &center, vec &radius, int yaw, int pitch, int roll = 0); void rotatebb(vec &center, vec &radius, int yaw, int pitch, int roll = 0);
float shadowray(const vec &o, const vec &ray, float radius, int mode, extentity *t = NULL); float shadowray(const vec &o, const vec &ray, float radius, int mode, extentity *t = nullptr);
void moveplayer(physent *pl, int moveres, bool local); void moveplayer(physent *pl, int moveres, bool local);
bool moveplayer(physent *pl, int moveres, bool local, int curtime); bool moveplayer(physent *pl, int moveres, bool local, int curtime);

View File

@ -266,11 +266,11 @@ static inline bool htcmp(const pvsdata &x, const pvsdata &y)
return x.len==y.len && !memcmp(&pvsbuf[x.offset], &pvsbuf[y.offset], x.len); return x.len==y.len && !memcmp(&pvsbuf[x.offset], &pvsbuf[y.offset], x.len);
} }
static SDL_mutex *pvsmutex = NULL; static SDL_mutex *pvsmutex = nullptr;
static hashtable<pvsdata, int> pvscompress; static hashtable<pvsdata, int> pvscompress;
static vector<pvsdata> pvs; static vector<pvsdata> pvs;
static SDL_mutex *viewcellmutex = NULL; static SDL_mutex *viewcellmutex = nullptr;
struct viewcellrequest struct viewcellrequest
{ {
int *result; int *result;
@ -297,7 +297,7 @@ static uint numwaterplanes = 0;
struct pvsworker struct pvsworker
{ {
pvsworker() : thread(NULL), pvsnodes(new pvsnode[origpvsnodes.length()]) pvsworker() : thread(nullptr), pvsnodes(new pvsnode[origpvsnodes.length()])
{ {
} }
~pvsworker() ~pvsworker()
@ -321,7 +321,7 @@ struct pvsworker
origin = ivec(0, 0, 0); origin = ivec(0, 0, 0);
} }
int hasvoxel(const ivec &p, int coord, int dir, int ocoord = 0, int odir = 0, int *omin = NULL) int hasvoxel(const ivec &p, int coord, int dir, int ocoord = 0, int odir = 0, int *omin = nullptr)
{ {
uint diff = (origin.x^p.x)|(origin.y^p.y)|(origin.z^p.z); uint diff = (origin.x^p.x)|(origin.y^p.y)|(origin.z^p.z);
if(diff >= uint(worldsize)) return 0; if(diff >= uint(worldsize)) return 0;
@ -773,7 +773,7 @@ struct pvsworker
serializepvs(pvsnodes[0]); serializepvs(pvsnodes[0]);
} }
uchar *testviewcell(const ivec &co, int size, int *waterpvs = NULL, int *len = NULL) uchar *testviewcell(const ivec &co, int size, int *waterpvs = nullptr, int *len = nullptr)
{ {
calcpvs(co, size); calcpvs(co, size);
@ -954,26 +954,26 @@ static void genviewcells(viewcellnode &p, cube *c, const ivec &co, int size, int
} }
} }
static viewcellnode *viewcells = NULL; static viewcellnode *viewcells = nullptr;
static int lockedwaterplanes[MAXWATERPVS]; static int lockedwaterplanes[MAXWATERPVS];
static uchar *curpvs = NULL, *lockedpvs = NULL; static uchar *curpvs = nullptr, *lockedpvs = nullptr;
static int curwaterpvs = 0, lockedwaterpvs = 0; static int curwaterpvs = 0, lockedwaterpvs = 0;
static inline pvsdata *lookupviewcell(const vec &p) static inline pvsdata *lookupviewcell(const vec &p)
{ {
uint x = uint(floor(p.x)), y = uint(floor(p.y)), z = uint(floor(p.z)); uint x = uint(floor(p.x)), y = uint(floor(p.y)), z = uint(floor(p.z));
if(!viewcells || (x|y|z)>=uint(worldsize)) return NULL; if(!viewcells || (x|y|z)>=uint(worldsize)) return nullptr;
viewcellnode *vc = viewcells; viewcellnode *vc = viewcells;
for(int scale = worldscale-1; scale>=0; scale--) for(int scale = worldscale-1; scale>=0; scale--)
{ {
int i = octastep(x, y, z, scale); int i = octastep(x, y, z, scale);
if(vc->leafmask&(1<<i)) if(vc->leafmask&(1<<i))
{ {
return vc->children[i].pvs>=0 ? &pvs[vc->children[i].pvs] : NULL; return vc->children[i].pvs>=0 ? &pvs[vc->children[i].pvs] : nullptr;
} }
vc = vc->children[i].node; vc = vc->children[i].node;
} }
return NULL; return nullptr;
} }
static void lockpvs_(bool lock) static void lockpvs_(bool lock)
@ -998,7 +998,7 @@ VARN(waterpvs, usewaterpvs, 0, 1, 1);
void setviewcell(const vec &p) void setviewcell(const vec &p)
{ {
if(!usepvs) curpvs = NULL; if(!usepvs) curpvs = nullptr;
else if(lockedpvs) else if(lockedpvs)
{ {
curpvs = lockedpvs; curpvs = lockedpvs;
@ -1007,7 +1007,7 @@ void setviewcell(const vec &p)
else else
{ {
pvsdata *d = lookupviewcell(p); pvsdata *d = lookupviewcell(p);
curpvs = d ? &pvsbuf[d->offset] : NULL; curpvs = d ? &pvsbuf[d->offset] : nullptr;
curwaterpvs = 0; curwaterpvs = 0;
if(d) if(d)
{ {
@ -1022,7 +1022,7 @@ void clearpvs()
DELETEP(viewcells); DELETEP(viewcells);
pvs.setsize(0); pvs.setsize(0);
pvsbuf.setsize(0); pvsbuf.setsize(0);
curpvs = NULL; curpvs = nullptr;
numwaterplanes = 0; numwaterplanes = 0;
lockpvs = 0; lockpvs = 0;
lockpvs_(false); lockpvs_(false);
@ -1138,7 +1138,7 @@ static void genpvs(int *viewcellsize)
if(numthreads<=1) if(numthreads<=1)
{ {
pvsworkers.add(new pvsworker); pvsworkers.add(new pvsworker);
timer = SDL_AddTimer(500, genpvs_timer, NULL); timer = SDL_AddTimer(500, genpvs_timer, nullptr);
} }
viewcells = new viewcellnode; viewcells = new viewcellnode;
genviewcells(*viewcells, worldroot, ivec(0, 0, 0), worldsize>>1, *viewcellsize>0 ? *viewcellsize : 32); genviewcells(*viewcells, worldroot, ivec(0, 0, 0), worldsize>>1, *viewcellsize>0 ? *viewcellsize : 32);
@ -1169,7 +1169,7 @@ static void genpvs(int *viewcellsize)
SDL_LockMutex(viewcellmutex); SDL_LockMutex(viewcellmutex);
viewcellrequests.setsize(0); viewcellrequests.setsize(0);
SDL_UnlockMutex(viewcellmutex); SDL_UnlockMutex(viewcellmutex);
loopv(pvsworkers) SDL_WaitThread(pvsworkers[i]->thread, NULL); loopv(pvsworkers) SDL_WaitThread(pvsworkers[i]->thread, nullptr);
} }
pvsworkers.deletecontents(); pvsworkers.deletecontents();
@ -1235,12 +1235,12 @@ static inline bool pvsoccluded(uchar *buf, const ivec &bbmin, const ivec &bbmax)
bool pvsoccluded(const ivec &bbmin, const ivec &bbmax) bool pvsoccluded(const ivec &bbmin, const ivec &bbmax)
{ {
return curpvs!=NULL && pvsoccluded(curpvs, bbmin, bbmax); return curpvs!=nullptr && pvsoccluded(curpvs, bbmin, bbmax);
} }
bool pvsoccludedsphere(const vec &center, float radius) bool pvsoccludedsphere(const vec &center, float radius)
{ {
if(curpvs==NULL) return false; if(curpvs==nullptr) return false;
ivec bbmin(vec(center).sub(radius)), bbmax(vec(center).add(radius+1)); ivec bbmin(vec(center).sub(radius)), bbmax(vec(center).add(radius+1));
return pvsoccluded(curpvs, bbmin, bbmax); return pvsoccluded(curpvs, bbmin, bbmax);
} }

View File

@ -152,8 +152,8 @@ struct ragdolldata
scale(scale), scale(scale),
verts(new vert[skel->verts.length()]), verts(new vert[skel->verts.length()]),
tris(new matrix3[skel->tris.length()]), tris(new matrix3[skel->tris.length()]),
animjoints(!skel->animjoints || skel->joints.empty() ? NULL : new matrix4x3[skel->joints.length()]), animjoints(!skel->animjoints || skel->joints.empty() ? nullptr : new matrix4x3[skel->joints.length()]),
reljoints(skel->reljoints.empty() ? NULL : new dualquat[skel->reljoints.length()]) reljoints(skel->reljoints.empty() ? nullptr : new dualquat[skel->reljoints.length()])
{ {
} }

View File

@ -39,238 +39,238 @@ VAR(glslversion, 1, 0, 0);
VAR(glcompat, 1, 0, 0); VAR(glcompat, 1, 0, 0);
// GL_EXT_timer_query // GL_EXT_timer_query
PFNGLGETQUERYOBJECTI64VEXTPROC glGetQueryObjecti64v_ = NULL; PFNGLGETQUERYOBJECTI64VEXTPROC glGetQueryObjecti64v_ = nullptr;
PFNGLGETQUERYOBJECTUI64VEXTPROC glGetQueryObjectui64v_ = NULL; PFNGLGETQUERYOBJECTUI64VEXTPROC glGetQueryObjectui64v_ = nullptr;
// GL_EXT_framebuffer_object // GL_EXT_framebuffer_object
PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer_ = NULL; PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer_ = nullptr;
PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers_ = NULL; PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers_ = nullptr;
PFNGLGENFRAMEBUFFERSPROC glGenRenderbuffers_ = NULL; PFNGLGENFRAMEBUFFERSPROC glGenRenderbuffers_ = nullptr;
PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage_ = NULL; PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage_ = nullptr;
PFNGLGETRENDERBUFFERPARAMETERIVPROC glGetRenderbufferParameteriv_ = NULL; PFNGLGETRENDERBUFFERPARAMETERIVPROC glGetRenderbufferParameteriv_ = nullptr;
PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus_ = NULL; PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus_ = nullptr;
PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer_ = NULL; PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer_ = nullptr;
PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers_ = NULL; PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers_ = nullptr;
PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers_ = NULL; PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers_ = nullptr;
PFNGLFRAMEBUFFERTEXTURE1DPROC glFramebufferTexture1D_ = NULL; PFNGLFRAMEBUFFERTEXTURE1DPROC glFramebufferTexture1D_ = nullptr;
PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D_ = NULL; PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D_ = nullptr;
PFNGLFRAMEBUFFERTEXTURE3DPROC glFramebufferTexture3D_ = NULL; PFNGLFRAMEBUFFERTEXTURE3DPROC glFramebufferTexture3D_ = nullptr;
PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer_ = NULL; PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer_ = nullptr;
PFNGLGENERATEMIPMAPPROC glGenerateMipmap_ = NULL; PFNGLGENERATEMIPMAPPROC glGenerateMipmap_ = nullptr;
// GL_EXT_framebuffer_blit // GL_EXT_framebuffer_blit
PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer_ = NULL; PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer_ = nullptr;
// GL_EXT_framebuffer_multisample // GL_EXT_framebuffer_multisample
PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample_ = NULL; PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample_ = nullptr;
// GL_ARB_texture_multisample // GL_ARB_texture_multisample
PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample_ = NULL; PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample_ = nullptr;
PFNGLTEXIMAGE3DMULTISAMPLEPROC glTexImage3DMultisample_ = NULL; PFNGLTEXIMAGE3DMULTISAMPLEPROC glTexImage3DMultisample_ = nullptr;
PFNGLGETMULTISAMPLEFVPROC glGetMultisamplefv_ = NULL; PFNGLGETMULTISAMPLEFVPROC glGetMultisamplefv_ = nullptr;
PFNGLSAMPLEMASKIPROC glSampleMaski_ = NULL; PFNGLSAMPLEMASKIPROC glSampleMaski_ = nullptr;
// GL_ARB_sample_shading // GL_ARB_sample_shading
PFNGLMINSAMPLESHADINGPROC glMinSampleShading_ = NULL; PFNGLMINSAMPLESHADINGPROC glMinSampleShading_ = nullptr;
// GL_ARB_draw_buffers_blend // GL_ARB_draw_buffers_blend
PFNGLBLENDEQUATIONIPROC glBlendEquationi_ = NULL; PFNGLBLENDEQUATIONIPROC glBlendEquationi_ = nullptr;
PFNGLBLENDEQUATIONSEPARATEIPROC glBlendEquationSeparatei_ = NULL; PFNGLBLENDEQUATIONSEPARATEIPROC glBlendEquationSeparatei_ = nullptr;
PFNGLBLENDFUNCIPROC glBlendFunci_ = NULL; PFNGLBLENDFUNCIPROC glBlendFunci_ = nullptr;
PFNGLBLENDFUNCSEPARATEIPROC glBlendFuncSeparatei_ = NULL; PFNGLBLENDFUNCSEPARATEIPROC glBlendFuncSeparatei_ = nullptr;
// OpenGL 1.3 // OpenGL 1.3
#ifdef WIN32 #ifdef WIN32
PFNGLACTIVETEXTUREPROC glActiveTexture_ = NULL; PFNGLACTIVETEXTUREPROC glActiveTexture_ = nullptr;
PFNGLBLENDEQUATIONEXTPROC glBlendEquation_ = NULL; PFNGLBLENDEQUATIONEXTPROC glBlendEquation_ = nullptr;
PFNGLBLENDCOLOREXTPROC glBlendColor_ = NULL; PFNGLBLENDCOLOREXTPROC glBlendColor_ = nullptr;
PFNGLTEXIMAGE3DPROC glTexImage3D_ = NULL; PFNGLTEXIMAGE3DPROC glTexImage3D_ = nullptr;
PFNGLTEXSUBIMAGE3DPROC glTexSubImage3D_ = NULL; PFNGLTEXSUBIMAGE3DPROC glTexSubImage3D_ = nullptr;
PFNGLCOPYTEXSUBIMAGE3DPROC glCopyTexSubImage3D_ = NULL; PFNGLCOPYTEXSUBIMAGE3DPROC glCopyTexSubImage3D_ = nullptr;
PFNGLCOMPRESSEDTEXIMAGE3DPROC glCompressedTexImage3D_ = NULL; PFNGLCOMPRESSEDTEXIMAGE3DPROC glCompressedTexImage3D_ = nullptr;
PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D_ = NULL; PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D_ = nullptr;
PFNGLCOMPRESSEDTEXIMAGE1DPROC glCompressedTexImage1D_ = NULL; PFNGLCOMPRESSEDTEXIMAGE1DPROC glCompressedTexImage1D_ = nullptr;
PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glCompressedTexSubImage3D_ = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glCompressedTexSubImage3D_ = nullptr;
PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glCompressedTexSubImage2D_ = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glCompressedTexSubImage2D_ = nullptr;
PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glCompressedTexSubImage1D_ = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glCompressedTexSubImage1D_ = nullptr;
PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage_ = NULL; PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage_ = nullptr;
PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements_ = NULL; PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements_ = nullptr;
#endif #endif
// OpenGL 2.0 // OpenGL 2.0
#ifndef __APPLE__ #ifndef __APPLE__
PFNGLMULTIDRAWARRAYSPROC glMultiDrawArrays_ = NULL; PFNGLMULTIDRAWARRAYSPROC glMultiDrawArrays_ = nullptr;
PFNGLMULTIDRAWELEMENTSPROC glMultiDrawElements_ = NULL; PFNGLMULTIDRAWELEMENTSPROC glMultiDrawElements_ = nullptr;
PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate_ = NULL; PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate_ = nullptr;
PFNGLBLENDEQUATIONSEPARATEPROC glBlendEquationSeparate_ = NULL; PFNGLBLENDEQUATIONSEPARATEPROC glBlendEquationSeparate_ = nullptr;
PFNGLSTENCILOPSEPARATEPROC glStencilOpSeparate_ = NULL; PFNGLSTENCILOPSEPARATEPROC glStencilOpSeparate_ = nullptr;
PFNGLSTENCILFUNCSEPARATEPROC glStencilFuncSeparate_ = NULL; PFNGLSTENCILFUNCSEPARATEPROC glStencilFuncSeparate_ = nullptr;
PFNGLSTENCILMASKSEPARATEPROC glStencilMaskSeparate_ = NULL; PFNGLSTENCILMASKSEPARATEPROC glStencilMaskSeparate_ = nullptr;
PFNGLGENBUFFERSPROC glGenBuffers_ = NULL; PFNGLGENBUFFERSPROC glGenBuffers_ = nullptr;
PFNGLBINDBUFFERPROC glBindBuffer_ = NULL; PFNGLBINDBUFFERPROC glBindBuffer_ = nullptr;
PFNGLMAPBUFFERPROC glMapBuffer_ = NULL; PFNGLMAPBUFFERPROC glMapBuffer_ = nullptr;
PFNGLUNMAPBUFFERPROC glUnmapBuffer_ = NULL; PFNGLUNMAPBUFFERPROC glUnmapBuffer_ = nullptr;
PFNGLBUFFERDATAPROC glBufferData_ = NULL; PFNGLBUFFERDATAPROC glBufferData_ = nullptr;
PFNGLBUFFERSUBDATAPROC glBufferSubData_ = NULL; PFNGLBUFFERSUBDATAPROC glBufferSubData_ = nullptr;
PFNGLDELETEBUFFERSPROC glDeleteBuffers_ = NULL; PFNGLDELETEBUFFERSPROC glDeleteBuffers_ = nullptr;
PFNGLGETBUFFERSUBDATAPROC glGetBufferSubData_ = NULL; PFNGLGETBUFFERSUBDATAPROC glGetBufferSubData_ = nullptr;
PFNGLGENQUERIESPROC glGenQueries_ = NULL; PFNGLGENQUERIESPROC glGenQueries_ = nullptr;
PFNGLDELETEQUERIESPROC glDeleteQueries_ = NULL; PFNGLDELETEQUERIESPROC glDeleteQueries_ = nullptr;
PFNGLBEGINQUERYPROC glBeginQuery_ = NULL; PFNGLBEGINQUERYPROC glBeginQuery_ = nullptr;
PFNGLENDQUERYPROC glEndQuery_ = NULL; PFNGLENDQUERYPROC glEndQuery_ = nullptr;
PFNGLGETQUERYIVPROC glGetQueryiv_ = NULL; PFNGLGETQUERYIVPROC glGetQueryiv_ = nullptr;
PFNGLGETQUERYOBJECTIVPROC glGetQueryObjectiv_ = NULL; PFNGLGETQUERYOBJECTIVPROC glGetQueryObjectiv_ = nullptr;
PFNGLGETQUERYOBJECTUIVPROC glGetQueryObjectuiv_ = NULL; PFNGLGETQUERYOBJECTUIVPROC glGetQueryObjectuiv_ = nullptr;
PFNGLCREATEPROGRAMPROC glCreateProgram_ = NULL; PFNGLCREATEPROGRAMPROC glCreateProgram_ = nullptr;
PFNGLDELETEPROGRAMPROC glDeleteProgram_ = NULL; PFNGLDELETEPROGRAMPROC glDeleteProgram_ = nullptr;
PFNGLUSEPROGRAMPROC glUseProgram_ = NULL; PFNGLUSEPROGRAMPROC glUseProgram_ = nullptr;
PFNGLCREATESHADERPROC glCreateShader_ = NULL; PFNGLCREATESHADERPROC glCreateShader_ = nullptr;
PFNGLDELETESHADERPROC glDeleteShader_ = NULL; PFNGLDELETESHADERPROC glDeleteShader_ = nullptr;
PFNGLSHADERSOURCEPROC glShaderSource_ = NULL; PFNGLSHADERSOURCEPROC glShaderSource_ = nullptr;
PFNGLCOMPILESHADERPROC glCompileShader_ = NULL; PFNGLCOMPILESHADERPROC glCompileShader_ = nullptr;
PFNGLGETSHADERIVPROC glGetShaderiv_ = NULL; PFNGLGETSHADERIVPROC glGetShaderiv_ = nullptr;
PFNGLGETPROGRAMIVPROC glGetProgramiv_ = NULL; PFNGLGETPROGRAMIVPROC glGetProgramiv_ = nullptr;
PFNGLATTACHSHADERPROC glAttachShader_ = NULL; PFNGLATTACHSHADERPROC glAttachShader_ = nullptr;
PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog_ = NULL; PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog_ = nullptr;
PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog_ = NULL; PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog_ = nullptr;
PFNGLLINKPROGRAMPROC glLinkProgram_ = NULL; PFNGLLINKPROGRAMPROC glLinkProgram_ = nullptr;
PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation_ = NULL; PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation_ = nullptr;
PFNGLUNIFORM1FPROC glUniform1f_ = NULL; PFNGLUNIFORM1FPROC glUniform1f_ = nullptr;
PFNGLUNIFORM2FPROC glUniform2f_ = NULL; PFNGLUNIFORM2FPROC glUniform2f_ = nullptr;
PFNGLUNIFORM3FPROC glUniform3f_ = NULL; PFNGLUNIFORM3FPROC glUniform3f_ = nullptr;
PFNGLUNIFORM4FPROC glUniform4f_ = NULL; PFNGLUNIFORM4FPROC glUniform4f_ = nullptr;
PFNGLUNIFORM1FVPROC glUniform1fv_ = NULL; PFNGLUNIFORM1FVPROC glUniform1fv_ = nullptr;
PFNGLUNIFORM2FVPROC glUniform2fv_ = NULL; PFNGLUNIFORM2FVPROC glUniform2fv_ = nullptr;
PFNGLUNIFORM3FVPROC glUniform3fv_ = NULL; PFNGLUNIFORM3FVPROC glUniform3fv_ = nullptr;
PFNGLUNIFORM4FVPROC glUniform4fv_ = NULL; PFNGLUNIFORM4FVPROC glUniform4fv_ = nullptr;
PFNGLUNIFORM1IPROC glUniform1i_ = NULL; PFNGLUNIFORM1IPROC glUniform1i_ = nullptr;
PFNGLUNIFORM2IPROC glUniform2i_ = NULL; PFNGLUNIFORM2IPROC glUniform2i_ = nullptr;
PFNGLUNIFORM3IPROC glUniform3i_ = NULL; PFNGLUNIFORM3IPROC glUniform3i_ = nullptr;
PFNGLUNIFORM4IPROC glUniform4i_ = NULL; PFNGLUNIFORM4IPROC glUniform4i_ = nullptr;
PFNGLUNIFORM1IVPROC glUniform1iv_ = NULL; PFNGLUNIFORM1IVPROC glUniform1iv_ = nullptr;
PFNGLUNIFORM2IVPROC glUniform2iv_ = NULL; PFNGLUNIFORM2IVPROC glUniform2iv_ = nullptr;
PFNGLUNIFORM3IVPROC glUniform3iv_ = NULL; PFNGLUNIFORM3IVPROC glUniform3iv_ = nullptr;
PFNGLUNIFORM4IVPROC glUniform4iv_ = NULL; PFNGLUNIFORM4IVPROC glUniform4iv_ = nullptr;
PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv_ = NULL; PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv_ = nullptr;
PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv_ = NULL; PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv_ = nullptr;
PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv_ = NULL; PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv_ = nullptr;
PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation_ = NULL; PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation_ = nullptr;
PFNGLGETACTIVEUNIFORMPROC glGetActiveUniform_ = NULL; PFNGLGETACTIVEUNIFORMPROC glGetActiveUniform_ = nullptr;
PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray_ = NULL; PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray_ = nullptr;
PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray_ = NULL; PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray_ = nullptr;
PFNGLVERTEXATTRIB1FPROC glVertexAttrib1f_ = NULL; PFNGLVERTEXATTRIB1FPROC glVertexAttrib1f_ = nullptr;
PFNGLVERTEXATTRIB1FVPROC glVertexAttrib1fv_ = NULL; PFNGLVERTEXATTRIB1FVPROC glVertexAttrib1fv_ = nullptr;
PFNGLVERTEXATTRIB1SPROC glVertexAttrib1s_ = NULL; PFNGLVERTEXATTRIB1SPROC glVertexAttrib1s_ = nullptr;
PFNGLVERTEXATTRIB1SVPROC glVertexAttrib1sv_ = NULL; PFNGLVERTEXATTRIB1SVPROC glVertexAttrib1sv_ = nullptr;
PFNGLVERTEXATTRIB2FPROC glVertexAttrib2f_ = NULL; PFNGLVERTEXATTRIB2FPROC glVertexAttrib2f_ = nullptr;
PFNGLVERTEXATTRIB2FVPROC glVertexAttrib2fv_ = NULL; PFNGLVERTEXATTRIB2FVPROC glVertexAttrib2fv_ = nullptr;
PFNGLVERTEXATTRIB2SPROC glVertexAttrib2s_ = NULL; PFNGLVERTEXATTRIB2SPROC glVertexAttrib2s_ = nullptr;
PFNGLVERTEXATTRIB2SVPROC glVertexAttrib2sv_ = NULL; PFNGLVERTEXATTRIB2SVPROC glVertexAttrib2sv_ = nullptr;
PFNGLVERTEXATTRIB3FPROC glVertexAttrib3f_ = NULL; PFNGLVERTEXATTRIB3FPROC glVertexAttrib3f_ = nullptr;
PFNGLVERTEXATTRIB3FVPROC glVertexAttrib3fv_ = NULL; PFNGLVERTEXATTRIB3FVPROC glVertexAttrib3fv_ = nullptr;
PFNGLVERTEXATTRIB3SPROC glVertexAttrib3s_ = NULL; PFNGLVERTEXATTRIB3SPROC glVertexAttrib3s_ = nullptr;
PFNGLVERTEXATTRIB3SVPROC glVertexAttrib3sv_ = NULL; PFNGLVERTEXATTRIB3SVPROC glVertexAttrib3sv_ = nullptr;
PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f_ = NULL; PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f_ = nullptr;
PFNGLVERTEXATTRIB4FVPROC glVertexAttrib4fv_ = NULL; PFNGLVERTEXATTRIB4FVPROC glVertexAttrib4fv_ = nullptr;
PFNGLVERTEXATTRIB4SPROC glVertexAttrib4s_ = NULL; PFNGLVERTEXATTRIB4SPROC glVertexAttrib4s_ = nullptr;
PFNGLVERTEXATTRIB4SVPROC glVertexAttrib4sv_ = NULL; PFNGLVERTEXATTRIB4SVPROC glVertexAttrib4sv_ = nullptr;
PFNGLVERTEXATTRIB4BVPROC glVertexAttrib4bv_ = NULL; PFNGLVERTEXATTRIB4BVPROC glVertexAttrib4bv_ = nullptr;
PFNGLVERTEXATTRIB4IVPROC glVertexAttrib4iv_ = NULL; PFNGLVERTEXATTRIB4IVPROC glVertexAttrib4iv_ = nullptr;
PFNGLVERTEXATTRIB4UBVPROC glVertexAttrib4ubv_ = NULL; PFNGLVERTEXATTRIB4UBVPROC glVertexAttrib4ubv_ = nullptr;
PFNGLVERTEXATTRIB4UIVPROC glVertexAttrib4uiv_ = NULL; PFNGLVERTEXATTRIB4UIVPROC glVertexAttrib4uiv_ = nullptr;
PFNGLVERTEXATTRIB4USVPROC glVertexAttrib4usv_ = NULL; PFNGLVERTEXATTRIB4USVPROC glVertexAttrib4usv_ = nullptr;
PFNGLVERTEXATTRIB4NBVPROC glVertexAttrib4Nbv_ = NULL; PFNGLVERTEXATTRIB4NBVPROC glVertexAttrib4Nbv_ = nullptr;
PFNGLVERTEXATTRIB4NIVPROC glVertexAttrib4Niv_ = NULL; PFNGLVERTEXATTRIB4NIVPROC glVertexAttrib4Niv_ = nullptr;
PFNGLVERTEXATTRIB4NUBPROC glVertexAttrib4Nub_ = NULL; PFNGLVERTEXATTRIB4NUBPROC glVertexAttrib4Nub_ = nullptr;
PFNGLVERTEXATTRIB4NUBVPROC glVertexAttrib4Nubv_ = NULL; PFNGLVERTEXATTRIB4NUBVPROC glVertexAttrib4Nubv_ = nullptr;
PFNGLVERTEXATTRIB4NUIVPROC glVertexAttrib4Nuiv_ = NULL; PFNGLVERTEXATTRIB4NUIVPROC glVertexAttrib4Nuiv_ = nullptr;
PFNGLVERTEXATTRIB4NUSVPROC glVertexAttrib4Nusv_ = NULL; PFNGLVERTEXATTRIB4NUSVPROC glVertexAttrib4Nusv_ = nullptr;
PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer_ = NULL; PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer_ = nullptr;
PFNGLDRAWBUFFERSPROC glDrawBuffers_ = NULL; PFNGLDRAWBUFFERSPROC glDrawBuffers_ = nullptr;
#endif #endif
// OpenGL 3.0 // OpenGL 3.0
PFNGLGETSTRINGIPROC glGetStringi_ = NULL; PFNGLGETSTRINGIPROC glGetStringi_ = nullptr;
PFNGLBINDFRAGDATALOCATIONPROC glBindFragDataLocation_ = NULL; PFNGLBINDFRAGDATALOCATIONPROC glBindFragDataLocation_ = nullptr;
PFNGLUNIFORM1UIPROC glUniform1ui_ = NULL; PFNGLUNIFORM1UIPROC glUniform1ui_ = nullptr;
PFNGLUNIFORM2UIPROC glUniform2ui_ = NULL; PFNGLUNIFORM2UIPROC glUniform2ui_ = nullptr;
PFNGLUNIFORM3UIPROC glUniform3ui_ = NULL; PFNGLUNIFORM3UIPROC glUniform3ui_ = nullptr;
PFNGLUNIFORM4UIPROC glUniform4ui_ = NULL; PFNGLUNIFORM4UIPROC glUniform4ui_ = nullptr;
PFNGLUNIFORM1UIVPROC glUniform1uiv_ = NULL; PFNGLUNIFORM1UIVPROC glUniform1uiv_ = nullptr;
PFNGLUNIFORM2UIVPROC glUniform2uiv_ = NULL; PFNGLUNIFORM2UIVPROC glUniform2uiv_ = nullptr;
PFNGLUNIFORM3UIVPROC glUniform3uiv_ = NULL; PFNGLUNIFORM3UIVPROC glUniform3uiv_ = nullptr;
PFNGLUNIFORM4UIVPROC glUniform4uiv_ = NULL; PFNGLUNIFORM4UIVPROC glUniform4uiv_ = nullptr;
PFNGLCLEARBUFFERIVPROC glClearBufferiv_ = NULL; PFNGLCLEARBUFFERIVPROC glClearBufferiv_ = nullptr;
PFNGLCLEARBUFFERUIVPROC glClearBufferuiv_ = NULL; PFNGLCLEARBUFFERUIVPROC glClearBufferuiv_ = nullptr;
PFNGLCLEARBUFFERFVPROC glClearBufferfv_ = NULL; PFNGLCLEARBUFFERFVPROC glClearBufferfv_ = nullptr;
PFNGLCLEARBUFFERFIPROC glClearBufferfi_ = NULL; PFNGLCLEARBUFFERFIPROC glClearBufferfi_ = nullptr;
// GL_EXT_draw_buffers2 // GL_EXT_draw_buffers2
PFNGLCOLORMASKIPROC glColorMaski_ = NULL; PFNGLCOLORMASKIPROC glColorMaski_ = nullptr;
PFNGLENABLEIPROC glEnablei_ = NULL; PFNGLENABLEIPROC glEnablei_ = nullptr;
PFNGLDISABLEIPROC glDisablei_ = NULL; PFNGLDISABLEIPROC glDisablei_ = nullptr;
// GL_NV_conditional_render // GL_NV_conditional_render
PFNGLBEGINCONDITIONALRENDERPROC glBeginConditionalRender_ = NULL; PFNGLBEGINCONDITIONALRENDERPROC glBeginConditionalRender_ = nullptr;
PFNGLENDCONDITIONALRENDERPROC glEndConditionalRender_ = NULL; PFNGLENDCONDITIONALRENDERPROC glEndConditionalRender_ = nullptr;
// GL_EXT_texture_integer // GL_EXT_texture_integer
PFNGLTEXPARAMETERIIVPROC glTexParameterIiv_ = NULL; PFNGLTEXPARAMETERIIVPROC glTexParameterIiv_ = nullptr;
PFNGLTEXPARAMETERIUIVPROC glTexParameterIuiv_ = NULL; PFNGLTEXPARAMETERIUIVPROC glTexParameterIuiv_ = nullptr;
PFNGLGETTEXPARAMETERIIVPROC glGetTexParameterIiv_ = NULL; PFNGLGETTEXPARAMETERIIVPROC glGetTexParameterIiv_ = nullptr;
PFNGLGETTEXPARAMETERIUIVPROC glGetTexParameterIuiv_ = NULL; PFNGLGETTEXPARAMETERIUIVPROC glGetTexParameterIuiv_ = nullptr;
PFNGLCLEARCOLORIIEXTPROC glClearColorIi_ = NULL; PFNGLCLEARCOLORIIEXTPROC glClearColorIi_ = nullptr;
PFNGLCLEARCOLORIUIEXTPROC glClearColorIui_ = NULL; PFNGLCLEARCOLORIUIEXTPROC glClearColorIui_ = nullptr;
// GL_ARB_uniform_buffer_object // GL_ARB_uniform_buffer_object
PFNGLGETUNIFORMINDICESPROC glGetUniformIndices_ = NULL; PFNGLGETUNIFORMINDICESPROC glGetUniformIndices_ = nullptr;
PFNGLGETACTIVEUNIFORMSIVPROC glGetActiveUniformsiv_ = NULL; PFNGLGETACTIVEUNIFORMSIVPROC glGetActiveUniformsiv_ = nullptr;
PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex_ = NULL; PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex_ = nullptr;
PFNGLGETACTIVEUNIFORMBLOCKIVPROC glGetActiveUniformBlockiv_ = NULL; PFNGLGETACTIVEUNIFORMBLOCKIVPROC glGetActiveUniformBlockiv_ = nullptr;
PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding_ = NULL; PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding_ = nullptr;
PFNGLBINDBUFFERBASEPROC glBindBufferBase_ = NULL; PFNGLBINDBUFFERBASEPROC glBindBufferBase_ = nullptr;
PFNGLBINDBUFFERRANGEPROC glBindBufferRange_ = NULL; PFNGLBINDBUFFERRANGEPROC glBindBufferRange_ = nullptr;
// GL_ARB_copy_buffer // GL_ARB_copy_buffer
PFNGLCOPYBUFFERSUBDATAPROC glCopyBufferSubData_ = NULL; PFNGLCOPYBUFFERSUBDATAPROC glCopyBufferSubData_ = nullptr;
// GL_EXT_depth_bounds_test // GL_EXT_depth_bounds_test
PFNGLDEPTHBOUNDSEXTPROC glDepthBounds_ = NULL; PFNGLDEPTHBOUNDSEXTPROC glDepthBounds_ = nullptr;
// GL_ARB_color_buffer_float // GL_ARB_color_buffer_float
PFNGLCLAMPCOLORPROC glClampColor_ = NULL; PFNGLCLAMPCOLORPROC glClampColor_ = nullptr;
// GL_ARB_debug_output // GL_ARB_debug_output
PFNGLDEBUGMESSAGECONTROLPROC glDebugMessageControl_ = NULL; PFNGLDEBUGMESSAGECONTROLPROC glDebugMessageControl_ = nullptr;
PFNGLDEBUGMESSAGEINSERTPROC glDebugMessageInsert_ = NULL; PFNGLDEBUGMESSAGEINSERTPROC glDebugMessageInsert_ = nullptr;
PFNGLDEBUGMESSAGECALLBACKPROC glDebugMessageCallback_ = NULL; PFNGLDEBUGMESSAGECALLBACKPROC glDebugMessageCallback_ = nullptr;
PFNGLGETDEBUGMESSAGELOGPROC glGetDebugMessageLog_ = NULL; PFNGLGETDEBUGMESSAGELOGPROC glGetDebugMessageLog_ = nullptr;
// GL_ARB_map_buffer_range // GL_ARB_map_buffer_range
PFNGLMAPBUFFERRANGEPROC glMapBufferRange_ = NULL; PFNGLMAPBUFFERRANGEPROC glMapBufferRange_ = nullptr;
PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange_ = NULL; PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange_ = nullptr;
// GL_ARB_vertex_array_object // GL_ARB_vertex_array_object
PFNGLBINDVERTEXARRAYPROC glBindVertexArray_ = NULL; PFNGLBINDVERTEXARRAYPROC glBindVertexArray_ = nullptr;
PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays_ = NULL; PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays_ = nullptr;
PFNGLGENVERTEXARRAYSPROC glGenVertexArrays_ = NULL; PFNGLGENVERTEXARRAYSPROC glGenVertexArrays_ = nullptr;
PFNGLISVERTEXARRAYPROC glIsVertexArray_ = NULL; PFNGLISVERTEXARRAYPROC glIsVertexArray_ = nullptr;
// GL_ARB_blend_func_extended // GL_ARB_blend_func_extended
PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glBindFragDataLocationIndexed_ = NULL; PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glBindFragDataLocationIndexed_ = nullptr;
// GL_ARB_copy_image // GL_ARB_copy_image
PFNGLCOPYIMAGESUBDATAPROC glCopyImageSubData_ = NULL; PFNGLCOPYIMAGESUBDATAPROC glCopyImageSubData_ = nullptr;
static inline void *getprocaddress(const char *name) static inline void *getprocaddress(const char *name)
{ {
@ -361,7 +361,7 @@ static void parseglexts()
static inline bool hasext(const char *ext) static inline bool hasext(const char *ext)
{ {
return glexts.access(ext)!=NULL; return glexts.access(ext)!=nullptr;
} }
static bool checkdepthtexstencilrb() static bool checkdepthtexstencilrb()
@ -373,7 +373,7 @@ static bool checkdepthtexstencilrb()
GLuint depthtex = 0; GLuint depthtex = 0;
glGenTextures(1, &depthtex); glGenTextures(1, &depthtex);
createtexture(depthtex, w, h, NULL, 3, 0, GL_DEPTH_COMPONENT24, GL_TEXTURE_RECTANGLE); createtexture(depthtex, w, h, nullptr, 3, 0, GL_DEPTH_COMPONENT24, GL_TEXTURE_RECTANGLE);
glBindTexture(GL_TEXTURE_RECTANGLE, 0); glBindTexture(GL_TEXTURE_RECTANGLE, 0);
glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_RECTANGLE, depthtex, 0); glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_RECTANGLE, depthtex, 0);
@ -1126,7 +1126,7 @@ static timer *findtimer(const char *name, bool gpu)
timer *begintimer(const char *name, bool gpu) timer *begintimer(const char *name, bool gpu)
{ {
if(!usetimers || inbetweenframes || (gpu && (!hasTQ || deferquery))) return NULL; if(!usetimers || inbetweenframes || (gpu && (!hasTQ || deferquery))) return nullptr;
timer *t = findtimer(name, gpu); timer *t = findtimer(name, gpu);
if(t->gpu) if(t->gpu)
{ {
@ -1390,7 +1390,7 @@ VAR(thirdperson, 0, 0, 2);
FVAR(thirdpersondistance, 0, 30, 50); FVAR(thirdpersondistance, 0, 30, 50);
FVAR(thirdpersonup, -25, 0, 25); FVAR(thirdpersonup, -25, 0, 25);
FVAR(thirdpersonside, -25, 0, 25); FVAR(thirdpersonside, -25, 0, 25);
physent *camera1 = NULL; physent *camera1 = nullptr;
static bool detachedcamera = false; static bool detachedcamera = false;
static bool isthirdperson() { return player!=camera1 || detachedcamera; } static bool isthirdperson() { return player!=camera1 || detachedcamera; }
@ -2165,7 +2165,7 @@ void drawminimap()
camera1 = oldcamera; camera1 = oldcamera;
drawtex = 0; drawtex = 0;
createtexture(minimaptex, size, size, NULL, 3, 1, GL_RGB5, GL_TEXTURE_2D); createtexture(minimaptex, size, size, nullptr, 3, 1, GL_RGB5, GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
GLfloat border[4] = { minimapcolour.x/255.0f, minimapcolour.y/255.0f, minimapcolour.z/255.0f, 1.0f }; GLfloat border[4] = { minimapcolour.x/255.0f, minimapcolour.y/255.0f, minimapcolour.z/255.0f, 1.0f };
@ -2501,7 +2501,7 @@ void gl_drawview()
void gl_drawmainmenu() void gl_drawmainmenu()
{ {
renderbackground(NULL, NULL, NULL, NULL, true); renderbackground(nullptr, nullptr, nullptr, nullptr, true);
} }
VAR(hidestats, 0, 0, 1); VAR(hidestats, 0, 0, 1);
@ -2510,7 +2510,7 @@ VAR(hidehud, 0, 0, 1);
VARP(crosshairsize, 0, 15, 50); VARP(crosshairsize, 0, 15, 50);
VARP(cursorsize, 0, 15, 30); VARP(cursorsize, 0, 15, 30);
static Texture *crosshair = NULL; static Texture *crosshair = nullptr;
static void drawcrosshair(int w, int h) static void drawcrosshair(int w, int h)
{ {
@ -2521,7 +2521,7 @@ static void drawcrosshair(int w, int h)
float cx = 0.5f, cy = 0.5f, chsize; float cx = 0.5f, cy = 0.5f, chsize;
if(windowhit) if(windowhit)
{ {
static Texture *cursor = NULL; static Texture *cursor = nullptr;
if(!cursor) cursor = textureload("media/interface/cursor.png", 3, true); if(!cursor) cursor = textureload("media/interface/cursor.png", 3, true);
crosshair = cursor; crosshair = cursor;
chsize = cursorsize*w/900.0f; chsize = cursorsize*w/900.0f;
@ -2613,7 +2613,7 @@ void gl_drawhud()
if(wallclock) if(wallclock)
{ {
if(!walltime) { walltime = time(NULL); walltime -= totalmillis/1000; if(!walltime) walltime++; } if(!walltime) { walltime = time(nullptr); walltime -= totalmillis/1000; if(!walltime) walltime++; }
time_t walloffset = walltime + totalmillis/1000; time_t walloffset = walltime + totalmillis/1000;
struct tm *localvals = localtime(&walloffset); struct tm *localvals = localtime(&walloffset);
static string buf; static string buf;

View File

@ -72,22 +72,22 @@ void setupbloom(int w, int h)
loopi(5) if(!bloomfbo[i]) glGenFramebuffers_(1, &bloomfbo[i]); loopi(5) if(!bloomfbo[i]) glGenFramebuffers_(1, &bloomfbo[i]);
bloomformat = gethdrformat(bloomprec); bloomformat = gethdrformat(bloomprec);
createtexture(bloomtex[0], max(gw/2, bloomw), max(gh/2, bloomh), NULL, 3, 1, bloomformat, GL_TEXTURE_RECTANGLE); createtexture(bloomtex[0], max(gw/2, bloomw), max(gh/2, bloomh), nullptr, 3, 1, bloomformat, GL_TEXTURE_RECTANGLE);
createtexture(bloomtex[1], max(gw/4, bloomw), max(gh/4, bloomh), NULL, 3, 1, bloomformat, GL_TEXTURE_RECTANGLE); createtexture(bloomtex[1], max(gw/4, bloomw), max(gh/4, bloomh), nullptr, 3, 1, bloomformat, GL_TEXTURE_RECTANGLE);
createtexture(bloomtex[2], bloomw, bloomh, NULL, 3, 1, GL_RGB, GL_TEXTURE_RECTANGLE); createtexture(bloomtex[2], bloomw, bloomh, nullptr, 3, 1, GL_RGB, GL_TEXTURE_RECTANGLE);
createtexture(bloomtex[3], bloomw, bloomh, NULL, 3, 1, GL_RGB, GL_TEXTURE_RECTANGLE); createtexture(bloomtex[3], bloomw, bloomh, nullptr, 3, 1, GL_RGB, GL_TEXTURE_RECTANGLE);
if(bloomformat != GL_RGB) if(bloomformat != GL_RGB)
{ {
if(!bloomtex[5]) glGenTextures(1, &bloomtex[5]); if(!bloomtex[5]) glGenTextures(1, &bloomtex[5]);
if(!bloomfbo[5]) glGenFramebuffers_(1, &bloomfbo[5]); if(!bloomfbo[5]) glGenFramebuffers_(1, &bloomfbo[5]);
createtexture(bloomtex[5], bloomw, bloomh, NULL, 3, 1, bloomformat, GL_TEXTURE_RECTANGLE); createtexture(bloomtex[5], bloomw, bloomh, nullptr, 3, 1, bloomformat, GL_TEXTURE_RECTANGLE);
} }
if(hwvtexunits < 4) if(hwvtexunits < 4)
{ {
glGenBuffers_(1, &bloompbo); glGenBuffers_(1, &bloompbo);
glBindBuffer_(GL_PIXEL_PACK_BUFFER, bloompbo); glBindBuffer_(GL_PIXEL_PACK_BUFFER, bloompbo);
glBufferData_(GL_PIXEL_PACK_BUFFER, 4*(hasTF ? sizeof(GLfloat) : sizeof(GLushort))*(hasTRG ? 1 : 3), NULL, GL_DYNAMIC_COPY); glBufferData_(GL_PIXEL_PACK_BUFFER, 4*(hasTF ? sizeof(GLfloat) : sizeof(GLushort))*(hasTRG ? 1 : 3), nullptr, GL_DYNAMIC_COPY);
glBindBuffer_(GL_PIXEL_PACK_BUFFER, 0); glBindBuffer_(GL_PIXEL_PACK_BUFFER, 0);
} }
@ -118,7 +118,7 @@ void cleanupbloom()
extern int ao, aotaps, aoreduce, aoreducedepth, aonoise, aobilateral, aobilateralupscale, aopackdepth, aodepthformat, aoprec, aoderivnormal; extern int ao, aotaps, aoreduce, aoreducedepth, aonoise, aobilateral, aobilateralupscale, aopackdepth, aodepthformat, aoprec, aoderivnormal;
static Shader *bilateralshader[2] = { NULL, NULL }; static Shader *bilateralshader[2] = { nullptr, nullptr };
Shader *loadbilateralshader(int pass) Shader *loadbilateralshader(int pass)
{ {
@ -151,7 +151,7 @@ void loadbilateralshaders()
void clearbilateralshaders() void clearbilateralshaders()
{ {
loopk(2) bilateralshader[k] = NULL; loopk(2) bilateralshader[k] = nullptr;
} }
void setbilateralparams(int radius, float depth) void setbilateralparams(int radius, float depth)
@ -166,7 +166,7 @@ void setbilateralshader(int radius, int pass, float depth)
setbilateralparams(radius, depth); setbilateralparams(radius, depth);
} }
static Shader *ambientobscuranceshader = NULL; static Shader *ambientobscuranceshader = nullptr;
Shader *loadambientobscuranceshader() Shader *loadambientobscuranceshader()
{ {
@ -190,7 +190,7 @@ void loadaoshaders()
void clearaoshaders() void clearaoshaders()
{ {
ambientobscuranceshader = NULL; ambientobscuranceshader = nullptr;
} }
void setupao(int w, int h) void setupao(int w, int h)
@ -216,7 +216,7 @@ void setupao(int w, int h)
{ {
if(!aotex[i]) glGenTextures(1, &aotex[i]); if(!aotex[i]) glGenTextures(1, &aotex[i]);
if(!aofbo[i]) glGenFramebuffers_(1, &aofbo[i]); if(!aofbo[i]) glGenFramebuffers_(1, &aofbo[i]);
createtexture(aotex[i], upscale && i ? w : aow, upscale && i >= 2 ? h : aoh, NULL, 3, i < 2 ? packfilter : 1, i < 2 ? packformat : format, GL_TEXTURE_RECTANGLE); createtexture(aotex[i], upscale && i ? w : aow, upscale && i >= 2 ? h : aoh, nullptr, 3, i < 2 ? packfilter : 1, i < 2 ? packformat : format, GL_TEXTURE_RECTANGLE);
glBindFramebuffer_(GL_FRAMEBUFFER, aofbo[i]); glBindFramebuffer_(GL_FRAMEBUFFER, aofbo[i]);
glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, aotex[i], 0); glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, aotex[i], 0);
if(glCheckFramebufferStatus_(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) if(glCheckFramebufferStatus_(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
@ -232,7 +232,7 @@ void setupao(int w, int h)
{ {
if(!aotex[3]) glGenTextures(1, &aotex[3]); if(!aotex[3]) glGenTextures(1, &aotex[3]);
if(!aofbo[3]) glGenFramebuffers_(1, &aofbo[3]); if(!aofbo[3]) glGenFramebuffers_(1, &aofbo[3]);
createtexture(aotex[3], aow, aoh, NULL, 3, 0, aodepthformat > 1 ? GL_R32F : (aodepthformat ? GL_R16F : GL_RGBA8), GL_TEXTURE_RECTANGLE); createtexture(aotex[3], aow, aoh, nullptr, 3, 0, aodepthformat > 1 ? GL_R32F : (aodepthformat ? GL_R16F : GL_RGBA8), GL_TEXTURE_RECTANGLE);
glBindFramebuffer_(GL_FRAMEBUFFER, aofbo[3]); glBindFramebuffer_(GL_FRAMEBUFFER, aofbo[3]);
glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, aotex[3], 0); glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, aotex[3], 0);
if(glCheckFramebufferStatus_(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) if(glCheckFramebufferStatus_(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
@ -416,7 +416,7 @@ void setupscale(int sw, int sh, int w, int h)
glBindFramebuffer_(GL_FRAMEBUFFER, scalefbo[i]); glBindFramebuffer_(GL_FRAMEBUFFER, scalefbo[i]);
createtexture(scaletex[i], sw, i ? h : sh, NULL, 3, gscalecubic || !gscalenearest ? 1 : 0, GL_RGB, GL_TEXTURE_RECTANGLE); createtexture(scaletex[i], sw, i ? h : sh, nullptr, 3, gscalecubic || !gscalenearest ? 1 : 0, GL_RGB, GL_TEXTURE_RECTANGLE);
glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, scaletex[i], 0); glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, scaletex[i], 0);
if(!i) bindgdepth(); if(!i) bindgdepth();
@ -815,11 +815,11 @@ void setupgbuffer()
static const GLenum depthformats[] = { GL_RGBA8, GL_R16F, GL_R32F }; static const GLenum depthformats[] = { GL_RGBA8, GL_R16F, GL_R32F };
GLenum depthformat = gdepthformat ? depthformats[gdepthformat-1] : (ghasstencil > 1 ? stencilformat : GL_DEPTH_COMPONENT24); GLenum depthformat = gdepthformat ? depthformats[gdepthformat-1] : (ghasstencil > 1 ? stencilformat : GL_DEPTH_COMPONENT24);
createtexture(gdepthtex, gw, gh, NULL, 3, 0, depthformat, GL_TEXTURE_RECTANGLE); createtexture(gdepthtex, gw, gh, nullptr, 3, 0, depthformat, GL_TEXTURE_RECTANGLE);
createtexture(gcolortex, gw, gh, NULL, 3, 0, GL_RGBA8, GL_TEXTURE_RECTANGLE); createtexture(gcolortex, gw, gh, nullptr, 3, 0, GL_RGBA8, GL_TEXTURE_RECTANGLE);
createtexture(gnormaltex, gw, gh, NULL, 3, 0, GL_RGBA8, GL_TEXTURE_RECTANGLE); createtexture(gnormaltex, gw, gh, nullptr, 3, 0, GL_RGBA8, GL_TEXTURE_RECTANGLE);
createtexture(gglowtex, gw, gh, NULL, 3, 0, hasAFBO ? hdrformat : GL_RGBA8, GL_TEXTURE_RECTANGLE); createtexture(gglowtex, gw, gh, nullptr, 3, 0, hasAFBO ? hdrformat : GL_RGBA8, GL_TEXTURE_RECTANGLE);
bindgdepth(); bindgdepth();
glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, gcolortex, 0); glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, gcolortex, 0);
@ -831,7 +831,7 @@ void setupgbuffer()
{ {
if(hasAFBO) if(hasAFBO)
{ {
createtexture(gglowtex, gw, gh, NULL, 3, 0, GL_RGBA8, GL_TEXTURE_RECTANGLE); createtexture(gglowtex, gw, gh, nullptr, 3, 0, GL_RGBA8, GL_TEXTURE_RECTANGLE);
glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_TEXTURE_RECTANGLE, gglowtex, 0); glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_TEXTURE_RECTANGLE, gglowtex, 0);
if(glCheckFramebufferStatus_(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) if(glCheckFramebufferStatus_(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
fatal("failed allocating g-buffer!"); fatal("failed allocating g-buffer!");
@ -848,7 +848,7 @@ void setupgbuffer()
glBindFramebuffer_(GL_FRAMEBUFFER, hdrfbo); glBindFramebuffer_(GL_FRAMEBUFFER, hdrfbo);
createtexture(hdrtex, gw, gh, NULL, 3, 1, hdrformat, GL_TEXTURE_RECTANGLE); createtexture(hdrtex, gw, gh, nullptr, 3, 1, hdrformat, GL_TEXTURE_RECTANGLE);
glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, hdrtex, 0); glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, hdrtex, 0);
bindgdepth(); bindgdepth();
@ -863,7 +863,7 @@ void setupgbuffer()
glBindFramebuffer_(GL_FRAMEBUFFER, refractfbo); glBindFramebuffer_(GL_FRAMEBUFFER, refractfbo);
createtexture(refracttex, gw, gh, NULL, 3, 0, GL_RGB, GL_TEXTURE_RECTANGLE); createtexture(refracttex, gw, gh, nullptr, 3, 0, GL_RGB, GL_TEXTURE_RECTANGLE);
glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, refracttex, 0); glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, refracttex, 0);
bindgdepth(); bindgdepth();
@ -902,7 +902,7 @@ void resolvemsaadepth(int w = vieww, int h = viewh)
{ {
if(!msaasamples || msaalight) return; if(!msaasamples || msaalight) return;
timer *resolvetimer = drawtex ? NULL : begintimer("msaa depth resolve"); timer *resolvetimer = drawtex ? nullptr : begintimer("msaa depth resolve");
if(msaadepthblit) if(msaadepthblit)
{ {
@ -950,7 +950,7 @@ void resolvemsaacolor(int w = vieww, int h = viewh)
{ {
if(!msaalight) return; if(!msaalight) return;
timer *resolvetimer = drawtex ? NULL : begintimer("msaa resolve"); timer *resolvetimer = drawtex ? nullptr : begintimer("msaa resolve");
glBindFramebuffer_(GL_READ_FRAMEBUFFER, mshdrfbo); glBindFramebuffer_(GL_READ_FRAMEBUFFER, mshdrfbo);
glBindFramebuffer_(GL_DRAW_FRAMEBUFFER, hdrfbo); glBindFramebuffer_(GL_DRAW_FRAMEBUFFER, hdrfbo);
@ -1170,7 +1170,7 @@ void processhdr(GLuint outfbo, int aa)
{ {
glBindBuffer_(GL_PIXEL_PACK_BUFFER, bloompbo); glBindBuffer_(GL_PIXEL_PACK_BUFFER, bloompbo);
glPixelStorei(GL_PACK_ALIGNMENT, 1); glPixelStorei(GL_PACK_ALIGNMENT, 1);
glReadPixels(0, 0, 4, 1, hasTRG ? GL_RED : GL_RGB, hasTF ? GL_FLOAT : GL_UNSIGNED_SHORT, NULL); glReadPixels(0, 0, 4, 1, hasTRG ? GL_RED : GL_RGB, hasTF ? GL_FLOAT : GL_UNSIGNED_SHORT, nullptr);
glBindBuffer_(GL_PIXEL_PACK_BUFFER, 0); glBindBuffer_(GL_PIXEL_PACK_BUFFER, 0);
} }
@ -1387,8 +1387,8 @@ GLuint rsmdepthtex = 0, rsmcolortex = 0, rsmnormaltex = 0, rsmfbo = 0;
extern int rhrect, rhgrid, rhsplits, rhborder, rhprec, rhtaps, rhcache, rhforce, rsmprec, rsmdepthprec, rsmsize; extern int rhrect, rhgrid, rhsplits, rhborder, rhprec, rhtaps, rhcache, rhforce, rsmprec, rsmdepthprec, rsmsize;
static Shader *radiancehintsshader = NULL; static Shader *radiancehintsshader = nullptr;
Shader *rsmworldshader = NULL; Shader *rsmworldshader = nullptr;
Shader *loadradiancehintsshader() Shader *loadradiancehintsshader()
{ {
@ -1408,8 +1408,8 @@ void loadrhshaders()
void clearrhshaders() void clearrhshaders()
{ {
radiancehintsshader = NULL; radiancehintsshader = nullptr;
rsmworldshader = NULL; rsmworldshader = nullptr;
} }
void setupradiancehints() void setupradiancehints()
@ -1419,7 +1419,7 @@ void setupradiancehints()
loopi(!rhrect && rhcache ? 8 : 4) loopi(!rhrect && rhcache ? 8 : 4)
{ {
if(!rhtex[i]) glGenTextures(1, &rhtex[i]); if(!rhtex[i]) glGenTextures(1, &rhtex[i]);
create3dtexture(rhtex[i], rhgrid+2*rhborder, rhgrid+2*rhborder, (rhgrid+2*rhborder)*rhsplits, NULL, 7, 1, rhformat); create3dtexture(rhtex[i], rhgrid+2*rhborder, rhgrid+2*rhborder, (rhgrid+2*rhborder)*rhsplits, nullptr, 7, 1, rhformat);
if(rhborder) if(rhborder)
{ {
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
@ -1459,9 +1459,9 @@ void setupradiancehints()
GLenum rsmformat = gethdrformat(rsmprec, GL_RGBA8); GLenum rsmformat = gethdrformat(rsmprec, GL_RGBA8);
createtexture(rsmdepthtex, rsmsize, rsmsize, NULL, 3, 0, rsmdepthprec > 1 ? GL_DEPTH_COMPONENT32 : (rsmdepthprec ? GL_DEPTH_COMPONENT24 : GL_DEPTH_COMPONENT16), GL_TEXTURE_RECTANGLE); createtexture(rsmdepthtex, rsmsize, rsmsize, nullptr, 3, 0, rsmdepthprec > 1 ? GL_DEPTH_COMPONENT32 : (rsmdepthprec ? GL_DEPTH_COMPONENT24 : GL_DEPTH_COMPONENT16), GL_TEXTURE_RECTANGLE);
createtexture(rsmcolortex, rsmsize, rsmsize, NULL, 3, 0, rsmformat, GL_TEXTURE_RECTANGLE); createtexture(rsmcolortex, rsmsize, rsmsize, nullptr, 3, 0, rsmformat, GL_TEXTURE_RECTANGLE);
createtexture(rsmnormaltex, rsmsize, rsmsize, NULL, 3, 0, rsmformat, GL_TEXTURE_RECTANGLE); createtexture(rsmnormaltex, rsmsize, rsmsize, nullptr, 3, 0, rsmformat, GL_TEXTURE_RECTANGLE);
glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_RECTANGLE, rsmdepthtex, 0); glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_RECTANGLE, rsmdepthtex, 0);
glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, rsmcolortex, 0); glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, rsmcolortex, 0);
@ -1589,7 +1589,7 @@ struct lightinfo
lightinfo(const vec &o, const vec &color, float radius, int flags = 0, const vec &dir = vec(0, 0, 0), int spot = 0) lightinfo(const vec &o, const vec &color, float radius, int flags = 0, const vec &dir = vec(0, 0, 0), int spot = 0)
: ent(-1), shadowmap(-1), flags(flags), : ent(-1), shadowmap(-1), flags(flags),
o(o), color(color), radius(radius), dist(camera1->o.dist(o)), o(o), color(color), radius(radius), dist(camera1->o.dist(o)),
dir(dir), spot(spot), query(NULL) dir(dir), spot(spot), query(nullptr)
{ {
if(spot > 0) calcspot(); if(spot > 0) calcspot();
calcscissor(); calcscissor();
@ -1597,7 +1597,7 @@ struct lightinfo
lightinfo(int i, const extentity &e) lightinfo(int i, const extentity &e)
: ent(i), shadowmap(-1), flags(e.attr5), : ent(i), shadowmap(-1), flags(e.attr5),
o(e.o), color(vec(e.attr2, e.attr3, e.attr4).max(0)), radius(e.attr1), dist(camera1->o.dist(e.o)), o(e.o), color(vec(e.attr2, e.attr3, e.attr4).max(0)), radius(e.attr1), dist(camera1->o.dist(e.o)),
dir(0, 0, 0), spot(0), query(NULL) dir(0, 0, 0), spot(0), query(nullptr)
{ {
if(e.attached && e.attached->type == ET_SPOTLIGHT) if(e.attached && e.attached->type == ET_SPOTLIGHT)
{ {
@ -1771,7 +1771,7 @@ void setupshadowatlas()
if(!shadowatlastex) glGenTextures(1, &shadowatlastex); if(!shadowatlastex) glGenTextures(1, &shadowatlastex);
shadowatlastarget = usegatherforsm() ? GL_TEXTURE_2D : GL_TEXTURE_RECTANGLE; shadowatlastarget = usegatherforsm() ? GL_TEXTURE_2D : GL_TEXTURE_RECTANGLE;
createtexture(shadowatlastex, shadowatlaspacker.w, shadowatlaspacker.h, NULL, 3, 1, smdepthprec > 1 ? GL_DEPTH_COMPONENT32 : (smdepthprec ? GL_DEPTH_COMPONENT24 : GL_DEPTH_COMPONENT16), shadowatlastarget); createtexture(shadowatlastex, shadowatlaspacker.w, shadowatlaspacker.h, nullptr, 3, 1, smdepthprec > 1 ? GL_DEPTH_COMPONENT32 : (smdepthprec ? GL_DEPTH_COMPONENT24 : GL_DEPTH_COMPONENT16), shadowatlastarget);
glTexParameteri(shadowatlastarget, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE); glTexParameteri(shadowatlastarget, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE);
glTexParameteri(shadowatlastarget, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL); glTexParameteri(shadowatlastarget, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
@ -1955,7 +1955,7 @@ void clearshadowcache()
clearshadowmeshes(); clearshadowmeshes();
} }
static shadowmapinfo *addshadowmap(ushort x, ushort y, int size, int &idx, int light = -1, shadowcacheval *cached = NULL) static shadowmapinfo *addshadowmap(ushort x, ushort y, int size, int &idx, int light = -1, shadowcacheval *cached = nullptr)
{ {
idx = shadowmaps.length(); idx = shadowmaps.length();
shadowmapinfo *sm = &shadowmaps.add(); shadowmapinfo *sm = &shadowmaps.add();
@ -2423,13 +2423,13 @@ VAR(forcespotlights, 1, 0, 0);
extern int spotlights; extern int spotlights;
static Shader *volumetricshader = NULL, *volumetricbilateralshader[2] = { NULL, NULL }; static Shader *volumetricshader = nullptr, *volumetricbilateralshader[2] = { nullptr, nullptr };
void clearvolumetricshaders() void clearvolumetricshaders()
{ {
volumetricshader = NULL; volumetricshader = nullptr;
loopi(2) volumetricbilateralshader[i] = NULL; loopi(2) volumetricbilateralshader[i] = nullptr;
} }
extern int volsteps, volbilateral, volblur, volreduce; extern int volsteps, volbilateral, volblur, volreduce;
@ -2477,7 +2477,7 @@ void setupvolumetric(int w, int h)
glBindFramebuffer_(GL_FRAMEBUFFER, volfbo[i]); glBindFramebuffer_(GL_FRAMEBUFFER, volfbo[i]);
createtexture(voltex[i], volw, volh, NULL, 3, 1, hdrformat, GL_TEXTURE_RECTANGLE); createtexture(voltex[i], volw, volh, nullptr, 3, 1, hdrformat, GL_TEXTURE_RECTANGLE);
glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, voltex[i], 0); glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, voltex[i], 0);
@ -2511,19 +2511,19 @@ FVAR(voldistclamp, 0, 0.99f, 2);
CVAR1R(volcolour, 0x808080); CVAR1R(volcolour, 0x808080);
FVARR(volscale, 0, 1, 16); FVARR(volscale, 0, 1, 16);
static Shader *deferredlightshader = NULL, *deferredminimapshader = NULL, *deferredmsaapixelshader = NULL, *deferredmsaasampleshader = NULL; static Shader *deferredlightshader = nullptr, *deferredminimapshader = nullptr, *deferredmsaapixelshader = nullptr, *deferredmsaasampleshader = nullptr;
void cleardeferredlightshaders() void cleardeferredlightshaders()
{ {
deferredlightshader = NULL; deferredlightshader = nullptr;
deferredminimapshader = NULL; deferredminimapshader = nullptr;
deferredmsaapixelshader = NULL; deferredmsaapixelshader = nullptr;
deferredmsaasampleshader = NULL; deferredmsaasampleshader = nullptr;
} }
extern int nospeclights; extern int nospeclights;
Shader *loaddeferredlightshader(const char *type = NULL) Shader *loaddeferredlightshader(const char *type = nullptr)
{ {
string common, shadow, sun; string common, shadow, sun;
int commonlen = 0, shadowlen = 0, sunlen = 0; int commonlen = 0, shadowlen = 0, sunlen = 0;
@ -2665,8 +2665,8 @@ void resetlights()
namespace lightsphere namespace lightsphere
{ {
vec *verts = NULL; vec *verts = nullptr;
GLushort *indices = NULL; GLushort *indices = nullptr;
int numverts = 0, numindices = 0; int numverts = 0, numindices = 0;
GLuint vbuf = 0, ebuf = 0; GLuint vbuf = 0, ebuf = 0;
@ -3125,7 +3125,7 @@ static void renderlightbatches(Shader *s, int stencilref, bool transparent, floa
} }
} }
void renderlights(float bsx1 = -1, float bsy1 = -1, float bsx2 = 1, float bsy2 = 1, const uint *tilemask = NULL, int stencilmask = 0, int msaapass = 0, bool transparent = false) void renderlights(float bsx1 = -1, float bsy1 = -1, float bsx2 = 1, float bsy2 = 1, const uint *tilemask = nullptr, int stencilmask = 0, int msaapass = 0, bool transparent = false)
{ {
Shader *s = drawtex == DRAWTEX_MINIMAP ? deferredminimapshader : (msaapass <= 0 ? deferredlightshader : (msaapass > 1 ? deferredmsaasampleshader : deferredmsaapixelshader)); Shader *s = drawtex == DRAWTEX_MINIMAP ? deferredminimapshader : (msaapass <= 0 ? deferredlightshader : (msaapass > 1 ? deferredmsaasampleshader : deferredmsaapixelshader));
if(!s || s == nullshader) return; if(!s || s == nullshader) return;
@ -4379,7 +4379,7 @@ void rendershadowmaps(int offset = 0)
if(sm.light < 0) continue; if(sm.light < 0) continue;
lightinfo &l = lights[sm.light]; lightinfo &l = lights[sm.light];
extentity *e = l.ent >= 0 ? ents[l.ent] : NULL; extentity *e = l.ent >= 0 ? ents[l.ent] : nullptr;
int border, sidemask; int border, sidemask;
if(l.spot) if(l.spot)
@ -4403,15 +4403,15 @@ void rendershadowmaps(int offset = 0)
shadowdir = l.dir; shadowdir = l.dir;
shadowspot = l.spot; shadowspot = l.spot;
shadowmesh *mesh = e ? findshadowmesh(l.ent, *e) : NULL; shadowmesh *mesh = e ? findshadowmesh(l.ent, *e) : nullptr;
findshadowvas(); findshadowvas();
findshadowmms(); findshadowmms();
shadowmaskbatchedmodels(!(l.flags&L_NODYNSHADOW) && smdynshadow); shadowmaskbatchedmodels(!(l.flags&L_NODYNSHADOW) && smdynshadow);
batchshadowmapmodels(mesh != NULL); batchshadowmapmodels(mesh != nullptr);
shadowcacheval *cached = NULL; shadowcacheval *cached = nullptr;
int cachemask = 0; int cachemask = 0;
if(smcache) if(smcache)
{ {
@ -4851,8 +4851,8 @@ void preparegbuffer(bool depthclear)
void rendergbuffer(bool depthclear) void rendergbuffer(bool depthclear)
{ {
timer *gcputimer = drawtex ? NULL : begintimer("g-buffer", false); timer *gcputimer = drawtex ? nullptr : begintimer("g-buffer", false);
timer *gtimer = drawtex ? NULL : begintimer("g-buffer"); timer *gtimer = drawtex ? nullptr : begintimer("g-buffer");
preparegbuffer(depthclear); preparegbuffer(depthclear);
@ -4902,7 +4902,7 @@ void shademinimap(const vec &color)
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);
} }
renderlights(-1, -1, 1, 1, NULL, 0, msaalight ? -1 : 0); renderlights(-1, -1, 1, 1, nullptr, 0, msaalight ? -1 : 0);
GLERROR; GLERROR;
} }
@ -4964,8 +4964,8 @@ void shadegbuffer()
if(msaasamples && (msaalight || !drawtex)) if(msaasamples && (msaalight || !drawtex))
{ {
if((ghasstencil && msaaedgedetect) || msaalight==2) loopi(2) renderlights(-1, -1, 1, 1, NULL, 0, i+1); if((ghasstencil && msaaedgedetect) || msaalight==2) loopi(2) renderlights(-1, -1, 1, 1, nullptr, 0, i+1);
else renderlights(-1, -1, 1, 1, NULL, 0, drawtex ? -1 : 3); else renderlights(-1, -1, 1, 1, nullptr, 0, drawtex ? -1 : 3);
} }
else renderlights(); else renderlights();
GLERROR; GLERROR;

View File

@ -19,7 +19,7 @@
VAR(oqdynent, 0, 1, 1); VAR(oqdynent, 0, 1, 1);
VAR(animationinterpolationtime, 0, 200, 1000); VAR(animationinterpolationtime, 0, 200, 1000);
model *loadingmodel = NULL; model *loadingmodel = nullptr;
#include "ragdoll.hh" #include "ragdoll.hh"
#include "animmodel.hh" #include "animmodel.hh"
@ -92,7 +92,7 @@ static void mdltricollide(char *collide)
{ {
checkmdl; checkmdl;
DELETEA(loadingmodel->collidemodel); DELETEA(loadingmodel->collidemodel);
char *end = NULL; char *end = nullptr;
int val = strtol(collide, &end, 0); int val = strtol(collide, &end, 0);
if(*end) { val = 1; loadingmodel->collidemodel = newstring(collide); } if(*end) { val = 1; loadingmodel->collidemodel = newstring(collide); }
loadingmodel->collide = val ? COLLIDE_TRI : COLLIDE_NONE; loadingmodel->collide = val ? COLLIDE_TRI : COLLIDE_NONE;
@ -140,7 +140,7 @@ COMMAND(mdlglow, "fff");
static void mdlenvmap(float *envmapmax, float *envmapmin, char *envmap) static void mdlenvmap(float *envmapmax, float *envmapmin, char *envmap)
{ {
checkmdl; checkmdl;
loadingmodel->setenvmap(*envmapmin, *envmapmax, envmap[0] ? cubemapload(envmap) : NULL); loadingmodel->setenvmap(*envmapmin, *envmapmax, envmap[0] ? cubemapload(envmap) : nullptr);
} }
COMMAND(mdlenvmap, "ffs"); COMMAND(mdlenvmap, "ffs");
@ -333,7 +333,7 @@ static void mapmodel(char *name)
mapmodelinfo &mmi = mapmodels.add(); mapmodelinfo &mmi = mapmodels.add();
if(name[0]) formatstring(mmi.name, "%s%s", mmprefix, name); if(name[0]) formatstring(mmi.name, "%s%s", mmprefix, name);
else mmi.name[0] = '\0'; else mmi.name[0] = '\0';
mmi.m = mmi.collide = NULL; mmi.m = mmi.collide = nullptr;
} }
static void mapmodelreset(int *n) static void mapmodelreset(int *n)
@ -342,7 +342,7 @@ static void mapmodelreset(int *n)
mapmodels.shrink(clamp(*n, 0, mapmodels.length())); mapmodels.shrink(clamp(*n, 0, mapmodels.length()));
} }
const char *mapmodelname(int i) { return mapmodels.inrange(i) ? mapmodels[i].name : NULL; } const char *mapmodelname(int i) { return mapmodels.inrange(i) ? mapmodels[i].name : nullptr; }
ICOMMAND(mmodel, "s", (char *name), mapmodel(name)); ICOMMAND(mmodel, "s", (char *name), mapmodel(name));
COMMAND(mapmodel, "s"); COMMAND(mapmodel, "s");
@ -398,7 +398,7 @@ void preloadusedmapmodels(bool msg, bool bih)
if(!mapmodels.inrange(mmindex)) { if(msg) conoutf(CON_WARN, "could not find map model: %d", mmindex); continue; } if(!mapmodels.inrange(mmindex)) { if(msg) conoutf(CON_WARN, "could not find map model: %d", mmindex); continue; }
mapmodelinfo &mmi = mapmodels[mmindex]; mapmodelinfo &mmi = mapmodels[mmindex];
if(!mmi.name[0]) continue; if(!mmi.name[0]) continue;
model *m = loadmodel(NULL, mmindex, msg); model *m = loadmodel(nullptr, mmindex, msg);
if(!m) { if(msg) conoutf(CON_WARN, "could not load map model: %s", mmi.name); } if(!m) { if(msg) conoutf(CON_WARN, "could not load map model: %s", mmi.name); }
else else
{ {
@ -425,7 +425,7 @@ model *loadmodel(const char *name, int i, bool msg)
{ {
if(!name) if(!name)
{ {
if(!mapmodels.inrange(i)) return NULL; if(!mapmodels.inrange(i)) return nullptr;
mapmodelinfo &mmi = mapmodels[i]; mapmodelinfo &mmi = mapmodels[i];
if(mmi.m) return mmi.m; if(mmi.m) return mmi.m;
name = mmi.name; name = mmi.name;
@ -435,7 +435,7 @@ model *loadmodel(const char *name, int i, bool msg)
if(mm) m = *mm; if(mm) m = *mm;
else else
{ {
if(!name[0] || loadingmodel || failedmodels.find(name, NULL)) return NULL; if(!name[0] || loadingmodel || failedmodels.find(name, nullptr)) return nullptr;
if(msg) if(msg)
{ {
defformatstring(filename, "media/model/%s", name); defformatstring(filename, "media/model/%s", name);
@ -449,11 +449,11 @@ model *loadmodel(const char *name, int i, bool msg)
if(m->load()) break; if(m->load()) break;
DELETEP(m); DELETEP(m);
} }
loadingmodel = NULL; loadingmodel = nullptr;
if(!m) if(!m)
{ {
failedmodels.add(newstring(name)); failedmodels.add(newstring(name));
return NULL; return nullptr;
} }
models.access(m->name, m); models.access(m->name, m);
} }
@ -473,13 +473,13 @@ void cleanupmodels()
static void clearmodel(char *name) static void clearmodel(char *name)
{ {
model *m = models.find(name, NULL); model *m = models.find(name, nullptr);
if(!m) { conoutf("model %s is not loaded", name); return; } if(!m) { conoutf("model %s is not loaded", name); return; }
loopv(mapmodels) loopv(mapmodels)
{ {
mapmodelinfo &mmi = mapmodels[i]; mapmodelinfo &mmi = mapmodels[i];
if(mmi.m == m) mmi.m = NULL; if(mmi.m == m) mmi.m = nullptr;
if(mmi.collide == m) mmi.collide = NULL; if(mmi.collide == m) mmi.collide = nullptr;
} }
models.remove(name); models.remove(name);
m->cleanup(); m->cleanup();
@ -527,7 +527,7 @@ void resetmodelbatches()
static void addbatchedmodel(model *m, batchedmodel &bm, int idx) static void addbatchedmodel(model *m, batchedmodel &bm, int idx)
{ {
modelbatch *b = NULL; modelbatch *b = nullptr;
if(batches.inrange(m->batch)) if(batches.inrange(m->batch))
{ {
b = &batches[m->batch]; b = &batches[m->batch];
@ -549,7 +549,7 @@ foundbatch:
static inline void renderbatchedmodel(model *m, const batchedmodel &b) static inline void renderbatchedmodel(model *m, const batchedmodel &b)
{ {
modelattach *a = NULL; modelattach *a = nullptr;
if(b.attached>=0) a = &modelattached[b.attached]; if(b.attached>=0) a = &modelattached[b.attached];
int anim = b.anim; int anim = b.anim;
@ -578,7 +578,7 @@ static inline void rendercullmodelquery(model *m, dynent *d, const vec &center,
fabs(camera1->o.y-center.y) < radius+1 && fabs(camera1->o.y-center.y) < radius+1 &&
fabs(camera1->o.z-center.z) < radius+1) fabs(camera1->o.z-center.z) < radius+1)
{ {
d->query = NULL; d->query = nullptr;
return; return;
} }
d->query = newquery(d); d->query = newquery(d);
@ -594,7 +594,7 @@ static inline void disablecullmodelquery()
endbb(); endbb();
} }
static inline int cullmodel(model *m, const vec &center, float radius, int flags, dynent *d = NULL) static inline int cullmodel(model *m, const vec &center, float radius, int flags, dynent *d = nullptr)
{ {
if(flags&MDL_CULL_DIST && center.dist(camera1->o)/radius>maxmodelradiusdistance) return MDL_CULL_DIST; if(flags&MDL_CULL_DIST && center.dist(camera1->o)/radius>maxmodelradiusdistance) return MDL_CULL_DIST;
if(flags&MDL_CULL_VFC && isfoggedsphere(radius, center)) return MDL_CULL_VFC; if(flags&MDL_CULL_VFC && isfoggedsphere(radius, center)) return MDL_CULL_VFC;
@ -850,7 +850,7 @@ void rendertransparentmodelbatches(int stencil)
disableaamask(); disableaamask();
} }
static occludequery *modelquery = NULL; static occludequery *modelquery = nullptr;
static int modelquerybatches = -1, modelquerymodels = -1, modelqueryattached = -1; static int modelquerybatches = -1, modelquerymodels = -1, modelqueryattached = -1;
void startmodelquery(occludequery *query) void startmodelquery(occludequery *query)
@ -866,7 +866,7 @@ void endmodelquery()
if(batchedmodels.length() == modelquerymodels) if(batchedmodels.length() == modelquerymodels)
{ {
modelquery->fragments = 0; modelquery->fragments = 0;
modelquery = NULL; modelquery = nullptr;
return; return;
} }
enableaamask(); enableaamask();
@ -889,7 +889,7 @@ void endmodelquery()
b.m->endrender(); b.m->endrender();
} }
endquery(modelquery); endquery(modelquery);
modelquery = NULL; modelquery = nullptr;
batches.setsize(modelquerybatches); batches.setsize(modelquerybatches);
batchedmodels.setsize(modelquerymodels); batchedmodels.setsize(modelquerymodels);
modelattached.setsize(modelqueryattached); modelattached.setsize(modelqueryattached);
@ -951,7 +951,7 @@ void rendermapmodel(int idx, int anim, const vec &o, float yaw, float pitch, flo
b.colorscale = vec4(1, 1, 1, 1); b.colorscale = vec4(1, 1, 1, 1);
b.flags = flags | MDL_MAPMODEL; b.flags = flags | MDL_MAPMODEL;
b.visible = visible; b.visible = visible;
b.d = NULL; b.d = nullptr;
b.attached = -1; b.attached = -1;
addbatchedmodel(m, b, batchedmodels.length()-1); addbatchedmodel(m, b, batchedmodels.length()-1);
} }
@ -1125,8 +1125,8 @@ static void loadskin(const char *dir, const char *altdir, Texture *&skin, Textur
defformatstring(mdir, "media/model/%s", dir); defformatstring(mdir, "media/model/%s", dir);
defformatstring(maltdir, "media/model/%s", altdir); defformatstring(maltdir, "media/model/%s", altdir);
masks = notexture; masks = notexture;
tryload(skin, NULL, NULL, "skin"); tryload(skin, nullptr, nullptr, "skin");
tryload(masks, NULL, NULL, "masks"); tryload(masks, nullptr, nullptr, "masks");
} }
void setbbfrommodel(dynent *d, const char *mdl) void setbbfrommodel(dynent *d, const char *mdl)

View File

@ -35,15 +35,15 @@ struct model
char *collidemodel; char *collidemodel;
int collide, batch; int collide, batch;
model(const char *name) : name(name ? newstring(name) : NULL), spinyaw(0), spinpitch(0), spinroll(0), offsetyaw(0), offsetpitch(0), offsetroll(0), shadow(true), alphashadow(true), depthoffset(false), scale(1.0f), translate(0, 0, 0), bih(0), bbcenter(0, 0, 0), bbradius(-1, -1, -1), bbextend(0, 0, 0), collidecenter(0, 0, 0), collideradius(-1, -1, -1), rejectradius(-1), eyeheight(0.9f), collidexyradius(0), collideheight(0), collidemodel(NULL), collide(COLLIDE_OBB), batch(-1) {} model(const char *name) : name(name ? newstring(name) : nullptr), spinyaw(0), spinpitch(0), spinroll(0), offsetyaw(0), offsetpitch(0), offsetroll(0), shadow(true), alphashadow(true), depthoffset(false), scale(1.0f), translate(0, 0, 0), bih(0), bbcenter(0, 0, 0), bbradius(-1, -1, -1), bbextend(0, 0, 0), collidecenter(0, 0, 0), collideradius(-1, -1, -1), rejectradius(-1), eyeheight(0.9f), collidexyradius(0), collideheight(0), collidemodel(nullptr), collide(COLLIDE_OBB), batch(-1) {}
virtual ~model() { DELETEA(name); DELETEP(bih); } virtual ~model() { DELETEA(name); DELETEP(bih); }
virtual void calcbb(vec &center, vec &radius) = 0; virtual void calcbb(vec &center, vec &radius) = 0;
virtual void calctransform(matrix4x3 &m) = 0; virtual void calctransform(matrix4x3 &m) = 0;
virtual int intersect(int anim, int basetime, int basetime2, const vec &pos, float yaw, float pitch, float roll, dynent *d, modelattach *a, float size, const vec &o, const vec &ray, float &dist, int mode) = 0; virtual int intersect(int anim, int basetime, int basetime2, const vec &pos, float yaw, float pitch, float roll, dynent *d, modelattach *a, float size, const vec &o, const vec &ray, float &dist, int mode) = 0;
virtual void render(int anim, int basetime, int basetime2, const vec &o, float yaw, float pitch, float roll, dynent *d, modelattach *a = NULL, float size = 1, const vec4 &color = vec4(1, 1, 1, 1)) = 0; virtual void render(int anim, int basetime, int basetime2, const vec &o, float yaw, float pitch, float roll, dynent *d, modelattach *a = nullptr, float size = 1, const vec4 &color = vec4(1, 1, 1, 1)) = 0;
virtual bool load() = 0; virtual bool load() = 0;
virtual int type() const = 0; virtual int type() const = 0;
virtual BIH *setBIH() { return NULL; } virtual BIH *setBIH() { return nullptr; }
virtual bool envmapped() const { return false; } virtual bool envmapped() const { return false; }
virtual bool skeletal() const { return false; } virtual bool skeletal() const { return false; }
virtual bool animated() const { return false; } virtual bool animated() const { return false; }
@ -147,12 +147,12 @@ static inline model *loadmapmodel(int n)
if(mapmodels.inrange(n)) if(mapmodels.inrange(n))
{ {
model *m = mapmodels[n].m; model *m = mapmodels[n].m;
return m ? m : loadmodel(NULL, n); return m ? m : loadmodel(nullptr, n);
} }
return NULL; return nullptr;
} }
static inline mapmodelinfo *getmminfo(int n) { return mapmodels.inrange(n) ? &mapmodels[n] : NULL; } static inline mapmodelinfo *getmminfo(int n) { return mapmodels.inrange(n) ? &mapmodels[n] : nullptr; }
void flushpreloadedmodels(bool msg = true); void flushpreloadedmodels(bool msg = true);
@ -165,13 +165,13 @@ struct modelattach
vec *pos; vec *pos;
model *m; model *m;
modelattach() : tag(NULL), name(NULL), anim(-1), basetime(0), pos(NULL), m(NULL) {} modelattach() : tag(nullptr), name(nullptr), anim(-1), basetime(0), pos(nullptr), m(nullptr) {}
modelattach(const char *tag, const char *name, int anim = -1, int basetime = 0) : tag(tag), name(name), anim(anim), basetime(basetime), pos(NULL), m(NULL) {} modelattach(const char *tag, const char *name, int anim = -1, int basetime = 0) : tag(tag), name(name), anim(anim), basetime(basetime), pos(nullptr), m(nullptr) {}
modelattach(const char *tag, vec *pos) : tag(tag), name(NULL), anim(-1), basetime(0), pos(pos), m(NULL) {} modelattach(const char *tag, vec *pos) : tag(tag), name(nullptr), anim(-1), basetime(0), pos(pos), m(nullptr) {}
}; };
void rendermodel(const char *mdl, int anim, const vec &o, float yaw = 0, float pitch = 0, float roll = 0, int cull = MDL_CULL_VFC | MDL_CULL_DIST | MDL_CULL_OCCLUDED, dynent *d = NULL, modelattach *a = NULL, int basetime = 0, int basetime2 = 0, float size = 1, const vec4 &color = vec4(1, 1, 1, 1)); void rendermodel(const char *mdl, int anim, const vec &o, float yaw = 0, float pitch = 0, float roll = 0, int cull = MDL_CULL_VFC | MDL_CULL_DIST | MDL_CULL_OCCLUDED, dynent *d = nullptr, modelattach *a = nullptr, int basetime = 0, int basetime2 = 0, float size = 1, const vec4 &color = vec4(1, 1, 1, 1));
int intersectmodel(const char *mdl, int anim, const vec &pos, float yaw, float pitch, float roll, const vec &o, const vec &ray, float &dist, int mode = 0, dynent *d = NULL, modelattach *a = NULL, int basetime = 0, int basetime2 = 0, float size = 1); int intersectmodel(const char *mdl, int anim, const vec &pos, float yaw, float pitch, float roll, const vec &o, const vec &ray, float &dist, int mode = 0, dynent *d = nullptr, modelattach *a = nullptr, int basetime = 0, int basetime2 = 0, float size = 1);
void abovemodel(vec &o, const char *mdl); void abovemodel(vec &o, const char *mdl);
void setbbfrommodel(dynent *d, const char *mdl); void setbbfrommodel(dynent *d, const char *mdl);
void preloadmodel(const char *name); void preloadmodel(const char *name);

View File

@ -27,9 +27,9 @@ void particle_trail(int type, int fade, const vec &from, const vec &to, int colo
void particle_text(const vec &s, const char *t, int type, int fade = 2000, int color = 0xFFFFFF, float size = 2.0f, int gravity = 0); void particle_text(const vec &s, const char *t, int type, int fade = 2000, int color = 0xFFFFFF, float size = 2.0f, int gravity = 0);
void particle_icon(const vec &s, int ix, int iy, int type, int fade = 2000, int color = 0xFFFFFF, float size = 2.0f, int gravity = 0); void particle_icon(const vec &s, int ix, int iy, int type, int fade = 2000, int color = 0xFFFFFF, float size = 2.0f, int gravity = 0);
void particle_meter(const vec &s, float val, int type, int fade = 1, int color = 0xFFFFFF, int color2 = 0xFFFFF, float size = 2.0f); void particle_meter(const vec &s, float val, int type, int fade = 1, int color = 0xFFFFFF, int color2 = 0xFFFFF, float size = 2.0f);
void particle_flare(const vec &p, const vec &dest, int fade, int type, int color = 0xFFFFFF, float size = 0.28f, physent *owner = NULL); void particle_flare(const vec &p, const vec &dest, int fade, int type, int color = 0xFFFFFF, float size = 0.28f, physent *owner = nullptr);
void particle_fireball(const vec &dest, float max, int type, int fade = -1, int color = 0xFFFFFF, float size = 4.0f); void particle_fireball(const vec &dest, float max, int type, int fade = -1, int color = 0xFFFFFF, float size = 4.0f);
void removetrackedparticles(physent *owner = NULL); void removetrackedparticles(physent *owner = nullptr);
#endif #endif
enum enum
@ -53,7 +53,7 @@ enum
PART_LENS_FLARE PART_LENS_FLARE
}; };
Shader *particleshader = NULL, *particlenotextureshader = NULL, *particlesoftshader = NULL, *particletextshader = NULL; Shader *particleshader = nullptr, *particlenotextureshader = nullptr, *particlesoftshader = nullptr, *particletextshader = nullptr;
VARP(particlelayers, 0, 1, 1); VARP(particlelayers, 0, 1, 1);
FVARP(particlebright, 0, 2, 100); FVARP(particlebright, 0, 2, 100);
@ -120,7 +120,7 @@ struct particleemitter
}; };
static vector<particleemitter> emitters; static vector<particleemitter> emitters;
static particleemitter *seedemitter = NULL; static particleemitter *seedemitter = nullptr;
void clearparticleemitters() void clearparticleemitters()
{ {
@ -215,11 +215,11 @@ struct partrenderer
string info; string info;
partrenderer(const char *texname, int texclamp, int type, int stain = -1) partrenderer(const char *texname, int texclamp, int type, int stain = -1)
: tex(NULL), texname(texname), texclamp(texclamp), type(type), stain(stain) : tex(nullptr), texname(texname), texclamp(texclamp), type(type), stain(stain)
{ {
} }
partrenderer(int type, int stain = -1) partrenderer(int type, int stain = -1)
: tex(NULL), texname(NULL), texclamp(0), type(type), stain(stain) : tex(nullptr), texname(nullptr), texclamp(0), type(type), stain(stain)
{ {
} }
virtual ~partrenderer() virtual ~partrenderer()
@ -319,11 +319,11 @@ struct listrenderer : partrenderer
listparticle *list; listparticle *list;
listrenderer(const char *texname, int texclamp, int type, int stain = -1) listrenderer(const char *texname, int texclamp, int type, int stain = -1)
: partrenderer(texname, texclamp, type, stain), list(NULL) : partrenderer(texname, texclamp, type, stain), list(nullptr)
{ {
} }
listrenderer(int type, int stain = -1) listrenderer(int type, int stain = -1)
: partrenderer(type, stain), list(NULL) : partrenderer(type, stain), list(nullptr)
{ {
} }
@ -347,7 +347,7 @@ struct listrenderer : partrenderer
} }
p->next = parempty; p->next = parempty;
parempty = list; parempty = list;
list = NULL; list = nullptr;
} }
void resettracked(physent *owner) void resettracked(physent *owner)
@ -385,7 +385,7 @@ struct listrenderer : partrenderer
p->millis = lastmillis + emitoffset; p->millis = lastmillis + emitoffset;
p->color = bvec::hexcolor(color); p->color = bvec::hexcolor(color);
p->size = size; p->size = size;
p->owner = NULL; p->owner = nullptr;
p->flags = 0; p->flags = 0;
return p; return p;
} }
@ -400,7 +400,7 @@ struct listrenderer : partrenderer
bool haswork() bool haswork()
{ {
return (list != NULL); return (list != nullptr);
} }
virtual void startrender() = 0; virtual void startrender() = 0;
@ -437,7 +437,7 @@ struct listrenderer : partrenderer
} }
}; };
listparticle *listrenderer::parempty = NULL; listparticle *listrenderer::parempty = nullptr;
struct meterrenderer : listrenderer struct meterrenderer : listrenderer
{ {
@ -533,7 +533,7 @@ struct textrenderer : listrenderer
void endrender() void endrender()
{ {
textshader = NULL; textshader = nullptr;
popfont(); popfont();
} }
@ -554,7 +554,7 @@ struct textrenderer : listrenderer
textmatrix = &m; textmatrix = &m;
draw_text(p->text, 0, 0, p->color.r, p->color.g, p->color.b, blend); draw_text(p->text, 0, 0, p->color.r, p->color.g, p->color.b, blend);
textmatrix = NULL; textmatrix = nullptr;
} }
}; };
static textrenderer texts; static textrenderer texts;
@ -671,7 +671,7 @@ struct varenderer : partrenderer
varenderer(const char *texname, int type, int stain = -1) varenderer(const char *texname, int type, int stain = -1)
: partrenderer(texname, 3, type, stain), : partrenderer(texname, 3, type, stain),
verts(NULL), parts(NULL), maxparts(0), numparts(0), lastupdate(-1), rndmask(0), vbo(0) verts(nullptr), parts(nullptr), maxparts(0), numparts(0), lastupdate(-1), rndmask(0), vbo(0)
{ {
if(type & PT_HFLIP) rndmask |= 0x01; if(type & PT_HFLIP) rndmask |= 0x01;
if(type & PT_VFLIP) rndmask |= 0x02; if(type & PT_VFLIP) rndmask |= 0x02;
@ -732,7 +732,7 @@ struct varenderer : partrenderer
p->millis = lastmillis + emitoffset; p->millis = lastmillis + emitoffset;
p->color = bvec::hexcolor(color); p->color = bvec::hexcolor(color);
p->size = size; p->size = size;
p->owner = NULL; p->owner = nullptr;
p->flags = 0x80 | (rndmask ? rnd(0x80) & rndmask : 0); p->flags = 0x80 | (rndmask ? rnd(0x80) & rndmask : 0);
lastupdate = -1; lastupdate = -1;
return p; return p;
@ -842,7 +842,7 @@ struct varenderer : partrenderer
if(!vbo) glGenBuffers_(1, &vbo); if(!vbo) glGenBuffers_(1, &vbo);
gle::bindvbo(vbo); gle::bindvbo(vbo);
glBufferData_(GL_ARRAY_BUFFER, maxparts*4*sizeof(partvert), NULL, GL_STREAM_DRAW); glBufferData_(GL_ARRAY_BUFFER, maxparts*4*sizeof(partvert), nullptr, GL_STREAM_DRAW);
glBufferSubData_(GL_ARRAY_BUFFER, 0, numparts*4*sizeof(partvert), verts); glBufferSubData_(GL_ARRAY_BUFFER, 0, numparts*4*sizeof(partvert), verts);
gle::clearvbo(); gle::clearvbo();
} }
@ -1429,7 +1429,7 @@ void seedparticles()
seedemitter = &pe; seedemitter = &pe;
for(int millis = 0; millis < seedmillis; millis += min(emitmillis, seedmillis/10)) for(int millis = 0; millis < seedmillis; millis += min(emitmillis, seedmillis/10))
makeparticles(e); makeparticles(e);
seedemitter = NULL; seedemitter = nullptr;
pe.lastemit = -seedmillis; pe.lastemit = -seedmillis;
pe.finalize(); pe.finalize();
} }

View File

@ -41,7 +41,7 @@ static void loadsky(const char *basename, Texture *texs[6])
} }
} }
static Texture *cloudoverlay = NULL; static Texture *cloudoverlay = nullptr;
static Texture *loadskyoverlay(const char *basename) static Texture *loadskyoverlay(const char *basename)
{ {
@ -105,7 +105,7 @@ static void drawenvboxface(float s0, float t0, int x0, int y0, int z0,
xtraverts += gle::end(); xtraverts += gle::end();
} }
static void drawenvbox(Texture **sky = NULL, float z1clip = 0.0f, float z2clip = 1.0f, int faces = 0x3F) static void drawenvbox(Texture **sky = nullptr, float z1clip = 0.0f, float z2clip = 1.0f, int faces = 0x3F)
{ {
if(z1clip >= z2clip) return; if(z1clip >= z2clip) return;
@ -152,7 +152,7 @@ static void drawenvbox(Texture **sky = NULL, float z1clip = 0.0f, float z2clip =
0.0f, 1.0f, w, -w, w, sky[5]); 0.0f, 1.0f, w, -w, w, sky[5]);
} }
static void drawenvoverlay(Texture *overlay = NULL, float tx = 0, float ty = 0) static void drawenvoverlay(Texture *overlay = nullptr, float tx = 0, float ty = 0)
{ {
int w = farplane/2; int w = farplane/2;
float z = w*cloudheight, tsz = 0.5f*(1-cloudfade)/cloudscale, psz = w*(1-cloudfade); float z = w*cloudheight, tsz = 0.5f*(1-cloudfade)/cloudscale, psz = w*(1-cloudfade);
@ -212,8 +212,8 @@ namespace fogdome
{ {
if(v0.pos.z != v1.pos.z) color.a += uchar((v1.color.a - v0.color.a) * (pos.z - v0.pos.z) / (v1.pos.z - v0.pos.z)); if(v0.pos.z != v1.pos.z) color.a += uchar((v1.color.a - v0.color.a) * (pos.z - v0.pos.z) / (v1.pos.z - v0.pos.z));
} }
} *verts = NULL; } *verts = nullptr;
static GLushort *indices = NULL; static GLushort *indices = nullptr;
static int numverts = 0, numindices = 0, capindices = 0; static int numverts = 0, numindices = 0, capindices = 0;
static GLuint vbuf = 0, ebuf = 0; static GLuint vbuf = 0, ebuf = 0;
static bvec lastcolor(0, 0, 0); static bvec lastcolor(0, 0, 0);

View File

@ -8,10 +8,10 @@
#include "texture.hh" #include "texture.hh"
static hashnameset<font> fonts; static hashnameset<font> fonts;
static font *fontdef = NULL; static font *fontdef = nullptr;
static int fontdeftex = 0; static int fontdeftex = 0;
font *curfont = NULL; font *curfont = nullptr;
static void newfont(char *name, char *tex, int *defaultw, int *defaulth, int *scale) static void newfont(char *name, char *tex, int *defaultw, int *defaulth, int *scale)
{ {
@ -207,7 +207,7 @@ void draw_textf(const char *fstr, float left, float top, ...)
draw_text(str, left, top); draw_text(str, left, top);
} }
const matrix4x3 *textmatrix = NULL; const matrix4x3 *textmatrix = nullptr;
float textscale = 1; float textscale = 1;
static float draw_char(Texture *&tex, int c, float x, float y, float scale) static float draw_char(Texture *&tex, int c, float x, float y, float scale)
@ -392,7 +392,7 @@ void text_boundsf(const char *str, float &width, float &height, int maxwidth)
#undef TEXTWORD #undef TEXTWORD
} }
Shader *textshader = NULL; Shader *textshader = nullptr;
void draw_text(const char *str, float left, float top, int r, int g, int b, int a, int cursor, int maxwidth) void draw_text(const char *str, float left, float top, int r, int g, int b, int a, int cursor, int maxwidth)
{ {

View File

@ -22,7 +22,7 @@ struct font
int charoffset, defaultw, defaulth, scale; int charoffset, defaultw, defaulth, scale;
float bordermin, bordermax, outlinemin, outlinemax; float bordermin, bordermax, outlinemin, outlinemax;
font() : name(NULL) {} font() : name(nullptr) {}
~font() { DELETEA(name); } ~font() { DELETEA(name); }
}; };

View File

@ -41,7 +41,7 @@ static plane vfcP[5]; // perpindictular vectors to view frustrum bounding plane
static float vfcDfog; // far plane culling distance (fog limit). static float vfcDfog; // far plane culling distance (fog limit).
static float vfcDnear[5], vfcDfar[5]; static float vfcDnear[5], vfcDfar[5];
vtxarray *visibleva = NULL; vtxarray *visibleva = nullptr;
bool isfoggedsphere(float rad, const vec &cv) bool isfoggedsphere(float rad, const vec &cv)
{ {
@ -152,7 +152,7 @@ static inline void addvisibleva(vtxarray *va)
static void sortvisiblevas() static void sortvisiblevas()
{ {
visibleva = NULL; visibleva = nullptr;
vtxarray **last = &visibleva; vtxarray **last = &visibleva;
loopi(VASORTSIZE) if(vasort[i]) loopi(VASORTSIZE) if(vasort[i])
{ {
@ -182,7 +182,7 @@ static inline void findvisiblevas(vector<vtxarray *> &vas)
if(resetchildren) if(resetchildren)
{ {
v.occluded = !v.texs ? OCCLUDE_GEOM : OCCLUDE_NOTHING; v.occluded = !v.texs ? OCCLUDE_GEOM : OCCLUDE_NOTHING;
v.query = NULL; v.query = nullptr;
} }
addvisibleva(&v); addvisibleva(&v);
if(v.children.length()) if(v.children.length())
@ -258,14 +258,14 @@ void visiblecubes(bool cull)
vfcDfog = farplane; vfcDfog = farplane;
memset(vfcDnear, 0, sizeof(vfcDnear)); memset(vfcDnear, 0, sizeof(vfcDnear));
memset(vfcDfar, 0, sizeof(vfcDfar)); memset(vfcDfar, 0, sizeof(vfcDfar));
visibleva = NULL; visibleva = nullptr;
loopv(valist) loopv(valist)
{ {
vtxarray *va = valist[i]; vtxarray *va = valist[i];
va->distance = 0; va->distance = 0;
va->curvfc = VFC_FULL_VISIBLE; va->curvfc = VFC_FULL_VISIBLE;
va->occluded = !va->texs ? OCCLUDE_GEOM : OCCLUDE_NOTHING; va->occluded = !va->texs ? OCCLUDE_GEOM : OCCLUDE_NOTHING;
va->query = NULL; va->query = nullptr;
va->next = visibleva; va->next = visibleva;
visibleva = va; visibleva = va;
} }
@ -288,10 +288,10 @@ struct queryframe
void flip() void flip()
{ {
loopi(cur) queries[i].owner = NULL; loopi(cur) queries[i].owner = nullptr;
for(; defer > 0 && max < MAXQUERY; defer--) for(; defer > 0 && max < MAXQUERY; defer--)
{ {
queries[max].owner = NULL; queries[max].owner = nullptr;
queries[max].fragments = -1; queries[max].fragments = -1;
glGenQueries_(1, &queries[max++].id); glGenQueries_(1, &queries[max++].id);
} }
@ -302,11 +302,11 @@ struct queryframe
{ {
if(cur >= max) if(cur >= max)
{ {
if(max >= MAXQUERY) return NULL; if(max >= MAXQUERY) return nullptr;
if(deferquery) if(deferquery)
{ {
if(max + defer < MAXQUERY) defer++; if(max + defer < MAXQUERY) defer++;
return NULL; return nullptr;
} }
glGenQueries_(1, &queries[max++].id); glGenQueries_(1, &queries[max++].id);
} }
@ -316,14 +316,14 @@ struct queryframe
return query; return query;
} }
void reset() { loopi(max) queries[i].owner = NULL; } void reset() { loopi(max) queries[i].owner = nullptr; }
void cleanup() void cleanup()
{ {
loopi(max) loopi(max)
{ {
glDeleteQueries_(1, &queries[i].id); glDeleteQueries_(1, &queries[i].id);
queries[i].owner = NULL; queries[i].owner = nullptr;
} }
cur = max = defer = 0; cur = max = defer = 0;
} }
@ -478,7 +478,7 @@ static octaentities *visiblemms, **lastvisiblemms;
static void findvisiblemms(const vector<extentity *> &ents, bool doquery) static void findvisiblemms(const vector<extentity *> &ents, bool doquery)
{ {
visiblemms = NULL; visiblemms = nullptr;
lastvisiblemms = &visiblemms; lastvisiblemms = &visiblemms;
for(vtxarray *va = visibleva; va; va = va->next) if(va->occluded < OCCLUDE_BB && va->curvfc < VFC_FOGGED) loopv(va->mapmodels) for(vtxarray *va = visibleva; va; va = va->next) if(va->occluded < OCCLUDE_BB && va->curvfc < VFC_FOGGED) loopv(va->mapmodels)
{ {
@ -490,7 +490,7 @@ static void findvisiblemms(const vector<extentity *> &ents, bool doquery)
{ {
oe->distance = -1; oe->distance = -1;
oe->next = NULL; oe->next = nullptr;
*lastvisiblemms = oe; *lastvisiblemms = oe;
lastvisiblemms = &oe->next; lastvisiblemms = &oe->next;
} }
@ -515,7 +515,7 @@ static void findvisiblemms(const vector<extentity *> &ents, bool doquery)
cur = cur->next; cur = cur->next;
} }
if(*prev == NULL) lastvisiblemms = &oe->next; if(*prev == nullptr) lastvisiblemms = &oe->next;
oe->next = *prev; oe->next = *prev;
*prev = oe; *prev = oe;
} }
@ -548,7 +548,7 @@ void rendermapmodels()
if(!rendered) if(!rendered)
{ {
rendered = true; rendered = true;
oe->query = doquery && oe->distance>0 && !(++skipoq%oqmm) ? newquery(oe) : NULL; oe->query = doquery && oe->distance>0 && !(++skipoq%oqmm) ? newquery(oe) : nullptr;
if(oe->query) startmodelquery(oe->query); if(oe->query) startmodelquery(oe->query);
} }
rendermapmodel(e); rendermapmodel(e);
@ -562,7 +562,7 @@ void rendermapmodels()
bool queried = false; bool queried = false;
for(octaentities *oe = visiblemms; oe; oe = oe->next) if(oe->distance<0) for(octaentities *oe = visiblemms; oe; oe = oe->next) if(oe->distance<0)
{ {
oe->query = doquery && !camera1->o.insidebb(oe->bbmin, oe->bbmax, 1) ? newquery(oe) : NULL; oe->query = doquery && !camera1->o.insidebb(oe->bbmin, oe->bbmax, 1) ? newquery(oe) : nullptr;
if(!oe->query) continue; if(!oe->query) continue;
if(!queried) if(!queried)
{ {
@ -645,7 +645,7 @@ void renderoutline()
if(!dtoutline) glDisable(GL_DEPTH_TEST); if(!dtoutline) glDisable(GL_DEPTH_TEST);
vtxarray *prev = NULL; vtxarray *prev = nullptr;
for(vtxarray *va = visibleva; va; va = va->next) if(va->occluded < OCCLUDE_BB) for(vtxarray *va = visibleva; va; va = va->next) if(va->occluded < OCCLUDE_BB)
{ {
if((!va->texs || va->occluded >= OCCLUDE_GEOM) && !va->alphaback && !va->alphafront && !va->refracttris) continue; if((!va->texs || va->occluded >= OCCLUDE_GEOM) && !va->alphaback && !va->alphafront && !va->refracttris) continue;
@ -702,7 +702,7 @@ void renderblendbrush(GLuint tex, float x, float y, float w, float h)
LOCALPARAMF(texgenS, 1.0f/w, 0, 0, -x/w); LOCALPARAMF(texgenS, 1.0f/w, 0, 0, -x/w);
LOCALPARAMF(texgenT, 0, 1.0f/h, 0, -y/h); LOCALPARAMF(texgenT, 0, 1.0f/h, 0, -y/h);
vtxarray *prev = NULL; vtxarray *prev = nullptr;
for(vtxarray *va = visibleva; va; va = va->next) if(va->texs && va->occluded < OCCLUDE_GEOM) for(vtxarray *va = visibleva; va; va = va->next) if(va->texs && va->occluded < OCCLUDE_GEOM)
{ {
if(va->o.x + va->size <= x || va->o.y + va->size <= y || va->o.x >= x + w || va->o.y >= y + h) continue; if(va->o.x + va->size <= x || va->o.y + va->size <= y || va->o.x >= x + w || va->o.y >= y + h) continue;
@ -905,7 +905,7 @@ vec shadoworigin(0, 0, 0), shadowdir(0, 0, 0);
float shadowradius = 0, shadowbias = 0; float shadowradius = 0, shadowbias = 0;
int shadowside = 0, shadowspot = 0; int shadowside = 0, shadowspot = 0;
static vtxarray *shadowva = NULL; static vtxarray *shadowva = nullptr;
static inline void addshadowva(vtxarray *va, float dist) static inline void addshadowva(vtxarray *va, float dist)
{ {
@ -926,7 +926,7 @@ static inline void addshadowva(vtxarray *va, float dist)
static void sortshadowvas() static void sortshadowvas()
{ {
shadowva = NULL; shadowva = nullptr;
vtxarray **last = &shadowva; vtxarray **last = &shadowva;
loopi(VASORTSIZE) if(vasort[i]) loopi(VASORTSIZE) if(vasort[i])
{ {
@ -1026,7 +1026,7 @@ void rendershadowmapworld()
gle::enablevertex(); gle::enablevertex();
vtxarray *prev = NULL; vtxarray *prev = nullptr;
for(vtxarray *va = shadowva; va; va = va->rnext) if(va->tris && va->shadowmask&(1<<shadowside)) for(vtxarray *va = shadowva; va; va = va->rnext) if(va->tris && va->shadowmask&(1<<shadowside))
{ {
if(!prev || va->vbuf != prev->vbuf) if(!prev || va->vbuf != prev->vbuf)
@ -1045,7 +1045,7 @@ void rendershadowmapworld()
if(skyshadow) if(skyshadow)
{ {
prev = NULL; prev = nullptr;
for(vtxarray *va = shadowva; va; va = va->rnext) if(va->sky && va->shadowmask&(1<<shadowside)) for(vtxarray *va = shadowva; va; va = va->rnext) if(va->sky && va->shadowmask&(1<<shadowside))
{ {
if(!prev || va->vbuf != prev->vbuf) if(!prev || va->vbuf != prev->vbuf)
@ -1068,11 +1068,11 @@ void rendershadowmapworld()
gle::disablevertex(); gle::disablevertex();
} }
static octaentities *shadowmms = NULL; static octaentities *shadowmms = nullptr;
void findshadowmms() void findshadowmms()
{ {
shadowmms = NULL; shadowmms = nullptr;
octaentities **lastmms = &shadowmms; octaentities **lastmms = &shadowmms;
for(vtxarray *va = shadowva; va; va = va->rnext) loopvj(va->mapmodels) for(vtxarray *va = shadowva; va; va = va->rnext) loopvj(va->mapmodels)
{ {
@ -1096,7 +1096,7 @@ void findshadowmms()
continue; continue;
break; break;
} }
oe->rnext = NULL; oe->rnext = nullptr;
*lastmms = oe; *lastmms = oe;
lastmms = &oe->rnext; lastmms = &oe->rnext;
} }
@ -1144,7 +1144,7 @@ struct renderstate
vec2 texgenscroll; vec2 texgenscroll;
int texgenorient, texgenmillis; int texgenorient, texgenmillis;
renderstate() : colormask(true), depthmask(true), alphaing(0), vbuf(0), vattribs(false), vquery(false), colorscale(1, 1, 1), alphascale(0), refractscale(0), refractcolor(1, 1, 1), blend(false), blendx(-1), blendy(-1), globals(-1), tmu(-1), slot(NULL), texgenslot(NULL), vslot(NULL), texgenvslot(NULL), texgenscroll(0, 0), texgenorient(-1), texgenmillis(lastmillis) renderstate() : colormask(true), depthmask(true), alphaing(0), vbuf(0), vattribs(false), vquery(false), colorscale(1, 1, 1), alphascale(0), refractscale(0), refractcolor(1, 1, 1), blend(false), blendx(-1), blendy(-1), globals(-1), tmu(-1), slot(nullptr), texgenslot(nullptr), vslot(nullptr), texgenvslot(nullptr), texgenscroll(0, 0), texgenorient(-1), texgenmillis(lastmillis)
{ {
loopk(7) textures[k] = 0; loopk(7) textures[k] = 0;
} }
@ -1238,7 +1238,7 @@ struct geombatch
static vector<geombatch> geombatches; static vector<geombatch> geombatches;
static int firstbatch = -1, numbatches = 0; static int firstbatch = -1, numbatches = 0;
static void mergetexs(renderstate &cur, vtxarray *va, elementset *texs = NULL, int numtexs = 0, int offset = 0) static void mergetexs(renderstate &cur, vtxarray *va, elementset *texs = nullptr, int numtexs = 0, int offset = 0)
{ {
if(!texs) if(!texs)
{ {
@ -1373,7 +1373,7 @@ static void changebatchtmus(renderstate &cur, int pass, geombatch &b)
if(!cur.blend) if(!cur.blend)
{ {
cur.blend = true; cur.blend = true;
cur.vslot = NULL; cur.vslot = nullptr;
} }
if((cur.blendx != (b.va->o.x&~0xFFF) || cur.blendy != (b.va->o.y&~0xFFF))) if((cur.blendx != (b.va->o.x&~0xFFF) || cur.blendy != (b.va->o.y&~0xFFF)))
{ {
@ -1387,7 +1387,7 @@ static void changebatchtmus(renderstate &cur, int pass, geombatch &b)
else if(cur.blend) else if(cur.blend)
{ {
cur.blend = false; cur.blend = false;
cur.vslot = NULL; cur.vslot = nullptr;
} }
if(cur.tmu != 0) if(cur.tmu != 0)
@ -1589,8 +1589,8 @@ static void resetbatches()
static void renderbatches(renderstate &cur, int pass) static void renderbatches(renderstate &cur, int pass)
{ {
cur.slot = NULL; cur.slot = nullptr;
cur.vslot = NULL; cur.vslot = nullptr;
int curbatch = firstbatch; int curbatch = firstbatch;
if(curbatch >= 0) if(curbatch >= 0)
{ {
@ -1753,7 +1753,7 @@ void rendergeom()
{ {
if(va->parent && va->parent->occluded >= OCCLUDE_BB) if(va->parent && va->parent->occluded >= OCCLUDE_BB)
{ {
va->query = NULL; va->query = nullptr;
va->occluded = OCCLUDE_PARENT; va->occluded = OCCLUDE_PARENT;
continue; continue;
} }
@ -1774,7 +1774,7 @@ void rendergeom()
} }
else else
{ {
va->query = NULL; va->query = nullptr;
va->occluded = pvsoccluded(va->geommin, va->geommax) ? OCCLUDE_GEOM : OCCLUDE_NOTHING; va->occluded = pvsoccluded(va->geommin, va->geommax) ? OCCLUDE_GEOM : OCCLUDE_NOTHING;
if(va->occluded >= OCCLUDE_GEOM) continue; if(va->occluded >= OCCLUDE_GEOM) continue;
} }
@ -1828,7 +1828,7 @@ void rendergeom()
resetbatches(); resetbatches();
for(vtxarray *va = visibleva; va; va = va->next) if(va->texs) for(vtxarray *va = visibleva; va; va = va->next) if(va->texs)
{ {
va->query = NULL; va->query = nullptr;
va->occluded = pvsoccluded(va->geommin, va->geommax) ? OCCLUDE_GEOM : OCCLUDE_NOTHING; va->occluded = pvsoccluded(va->geommin, va->geommax) ? OCCLUDE_GEOM : OCCLUDE_NOTHING;
if(va->occluded >= OCCLUDE_GEOM) continue; if(va->occluded >= OCCLUDE_GEOM) continue;
blends += va->blends; blends += va->blends;
@ -1898,7 +1898,7 @@ void renderrsmgeom(bool dyntex)
{ {
enablevattribs(cur, false); enablevattribs(cur, false);
SETSHADER(rsmsky); SETSHADER(rsmsky);
vtxarray *prev = NULL; vtxarray *prev = nullptr;
for(vtxarray *va = shadowva; va; va = va->rnext) if(va->sky) for(vtxarray *va = shadowva; va; va = va->rnext) if(va->sky)
{ {
if(!prev || va->vbuf != prev->vbuf) if(!prev || va->vbuf != prev->vbuf)
@ -2008,7 +2008,7 @@ void renderrefractmask()
{ {
gle::enablevertex(); gle::enablevertex();
vtxarray *prev = NULL; vtxarray *prev = nullptr;
loopv(alphavas) loopv(alphavas)
{ {
vtxarray *va = alphavas[i]; vtxarray *va = alphavas[i];
@ -2063,7 +2063,7 @@ CVARP(explicitskycolour, 0x800080);
bool renderexplicitsky(bool outline) bool renderexplicitsky(bool outline)
{ {
vtxarray *prev = NULL; vtxarray *prev = nullptr;
for(vtxarray *va = visibleva; va; va = va->next) if(va->sky && va->occluded < OCCLUDE_BB && for(vtxarray *va = visibleva; va; va = va->next) if(va->sky && va->occluded < OCCLUDE_BB &&
((va->skymax.x >= 0 && isvisiblebb(va->skymin, ivec(va->skymax).sub(va->skymin)) != VFC_NOT_VISIBLE) || ((va->skymax.x >= 0 && isvisiblebb(va->skymin, ivec(va->skymax).sub(va->skymin)) != VFC_NOT_VISIBLE) ||
!insideworld(camera1->o))) !insideworld(camera1->o)))
@ -2130,7 +2130,7 @@ struct decalrenderer
GLuint textures[7]; GLuint textures[7];
DecalSlot *slot; DecalSlot *slot;
decalrenderer() : vbuf(0), colorscale(1, 1, 1), globals(-1), tmu(-1), slot(NULL) decalrenderer() : vbuf(0), colorscale(1, 1, 1), globals(-1), tmu(-1), slot(nullptr)
{ {
loopi(7) textures[i] = 0; loopi(7) textures[i] = 0;
} }
@ -2355,7 +2355,7 @@ static void renderdecalbatch(decalrenderer &cur, int pass, decalbatch &b)
static void renderdecalbatches(decalrenderer &cur, int pass) static void renderdecalbatches(decalrenderer &cur, int pass)
{ {
cur.slot = NULL; cur.slot = nullptr;
int curbatch = firstbatch; int curbatch = firstbatch;
while(curbatch >= 0) while(curbatch >= 0)
{ {
@ -2718,12 +2718,12 @@ void genshadowmeshes()
shadowmesh *findshadowmesh(int idx, extentity &e) shadowmesh *findshadowmesh(int idx, extentity &e)
{ {
shadowmesh *m = shadowmeshes.access(idx); shadowmesh *m = shadowmeshes.access(idx);
if(!m || m->type != shadowmapping || m->origin != shadoworigin || m->radius < shadowradius) return NULL; if(!m || m->type != shadowmapping || m->origin != shadoworigin || m->radius < shadowradius) return nullptr;
switch(m->type) switch(m->type)
{ {
case SM_SPOT: case SM_SPOT:
if(!e.attached || e.attached->type != ET_SPOTLIGHT || m->spotloc != e.attached->o || m->spotangle < clamp(int(e.attached->attr1), 1, 89)) if(!e.attached || e.attached->type != ET_SPOTLIGHT || m->spotloc != e.attached->o || m->spotangle < clamp(int(e.attached->attr1), 1, 89))
return NULL; return nullptr;
break; break;
} }
return m; return m;

View File

@ -13,14 +13,14 @@
#include "rendermodel.hh" // cleanupmodels #include "rendermodel.hh" // cleanupmodels
#include "texture.hh" #include "texture.hh"
Shader *Shader::lastshader = NULL; Shader *Shader::lastshader = nullptr;
Shader *nullshader = NULL, *hudshader = NULL, *hudtextshader = NULL, *hudnotextureshader = NULL, *nocolorshader = NULL, *foggedshader = NULL, *foggednotextureshader = NULL, *ldrshader = NULL, *ldrnotextureshader = NULL, *stdworldshader = NULL; Shader *nullshader = nullptr, *hudshader = nullptr, *hudtextshader = nullptr, *hudnotextureshader = nullptr, *nocolorshader = nullptr, *foggedshader = nullptr, *foggednotextureshader = nullptr, *ldrshader = nullptr, *ldrnotextureshader = nullptr, *stdworldshader = nullptr;
static hashnameset<GlobalShaderParamState> globalparams(256); static hashnameset<GlobalShaderParamState> globalparams(256);
static hashtable<const char *, int> localparams(256); static hashtable<const char *, int> localparams(256);
static hashnameset<Shader> shaders(256); static hashnameset<Shader> shaders(256);
static Shader *slotshader = NULL; static Shader *slotshader = nullptr;
static vector<SlotShaderParam> slotparams; static vector<SlotShaderParam> slotparams;
static bool standardshaders = false, forceshaders = true, loadedshaders = false; static bool standardshaders = false, forceshaders = true, loadedshaders = false;
@ -63,13 +63,13 @@ void loadshaders()
Shader *lookupshaderbyname(const char *name) Shader *lookupshaderbyname(const char *name)
{ {
Shader *s = shaders.access(name); Shader *s = shaders.access(name);
return s && s->loaded() ? s : NULL; return s && s->loaded() ? s : nullptr;
} }
Shader *generateshader(const char *name, const char *fmt, ...) Shader *generateshader(const char *name, const char *fmt, ...)
{ {
if(!loadedshaders) return NULL; if(!loadedshaders) return nullptr;
Shader *s = name ? lookupshaderbyname(name) : NULL; Shader *s = name ? lookupshaderbyname(name) : nullptr;
if(!s) if(!s)
{ {
defvformatstring(cmd, fmt, fmt); defvformatstring(cmd, fmt, fmt);
@ -77,13 +77,13 @@ Shader *generateshader(const char *name, const char *fmt, ...)
standardshaders = true; standardshaders = true;
execute(cmd); execute(cmd);
standardshaders = wasstandard; standardshaders = wasstandard;
s = name ? lookupshaderbyname(name) : NULL; s = name ? lookupshaderbyname(name) : nullptr;
if(!s) s = nullshader; if(!s) s = nullshader;
} }
return s; return s;
} }
static void showglslinfo(GLenum type, GLuint obj, const char *name, const char **parts = NULL, int numparts = 0) static void showglslinfo(GLenum type, GLuint obj, const char *name, const char **parts = nullptr, int numparts = 0)
{ {
GLint length = 0; GLint length = 0;
if(type) glGetShaderiv_(obj, GL_INFO_LOG_LENGTH, &length); if(type) glGetShaderiv_(obj, GL_INFO_LOG_LENGTH, &length);
@ -134,7 +134,7 @@ static const char *finddecls(const char *line)
do do
{ {
start = strchr(start + 1, '\n'); start = strchr(start + 1, '\n');
if(!start) return NULL; if(!start) return nullptr;
} while(start[-1] == '\\'); } while(start[-1] == '\\');
line = start + 1; line = start + 1;
continue; continue;
@ -143,12 +143,12 @@ static const char *finddecls(const char *line)
{ {
case '/': case '/':
start = strchr(start + 2, '\n'); start = strchr(start + 2, '\n');
if(!start) return NULL; if(!start) return nullptr;
line = start + 1; line = start + 1;
continue; continue;
case '*': case '*':
start = strstr(start + 2, "*/"); start = strstr(start + 2, "*/");
if(!start) return NULL; if(!start) return nullptr;
line = start + 2; line = start + 2;
continue; continue;
} }
@ -164,7 +164,7 @@ extern int amd_eal_bug;
static void compileglslshader(Shader &s, GLenum type, GLuint &obj, const char *def, const char *name, bool msg = true) static void compileglslshader(Shader &s, GLenum type, GLuint &obj, const char *def, const char *name, bool msg = true)
{ {
const char *source = def + strspn(def, " \t\r\n"); const char *source = def + strspn(def, " \t\r\n");
char *modsource = NULL; char *modsource = nullptr;
const char *parts[16]; const char *parts[16];
int numparts = 0; int numparts = 0;
static const struct { int version; const char * const header; } glslversions[] = static const struct { int version; const char * const header; } glslversions[] =
@ -297,7 +297,7 @@ static void compileglslshader(Shader &s, GLenum type, GLuint &obj, const char *d
parts[numparts++] = modsource ? modsource : source; parts[numparts++] = modsource ? modsource : source;
obj = glCreateShader_(type); obj = glCreateShader_(type);
glShaderSource_(obj, numparts, (const GLchar **)parts, NULL); glShaderSource_(obj, numparts, (const GLchar **)parts, nullptr);
glCompileShader_(obj); glCompileShader_(obj);
GLint success; GLint success;
glGetShaderiv_(obj, GL_COMPILE_STATUS, &success); glGetShaderiv_(obj, GL_COMPILE_STATUS, &success);
@ -618,7 +618,7 @@ void GlobalShaderParamState::resetversions()
}); });
} }
static float *findslotparam(Slot &s, const char *name, float *noval = NULL) static float *findslotparam(Slot &s, const char *name, float *noval = nullptr)
{ {
loopv(s.params) loopv(s.params)
{ {
@ -633,7 +633,7 @@ static float *findslotparam(Slot &s, const char *name, float *noval = NULL)
return noval; return noval;
} }
static float *findslotparam(VSlot &s, const char *name, float *noval = NULL) static float *findslotparam(VSlot &s, const char *name, float *noval = nullptr)
{ {
loopv(s.params) loopv(s.params)
{ {
@ -753,10 +753,10 @@ void Shader::cleanup(bool full)
attriblocs.setsize(0); attriblocs.setsize(0);
fragdatalocs.setsize(0); fragdatalocs.setsize(0);
uniformlocs.setsize(0); uniformlocs.setsize(0);
reusevs = reuseps = NULL; reusevs = reuseps = nullptr;
} }
else loopv(defaultparams) defaultparams[i].loc = -1; else loopv(defaultparams) defaultparams[i].loc = -1;
owner = NULL; owner = nullptr;
} }
static void genattriblocs(Shader &s, const char *vs, const char *ps, Shader *reusevs, Shader *reuseps) static void genattriblocs(Shader &s, const char *vs, const char *ps, Shader *reusevs, Shader *reuseps)
@ -788,12 +788,12 @@ static void genuniformlocs(Shader &s, const char *vs, const char *ps, Shader *re
} }
} }
Shader *newshader(int type, const char *name, const char *vs, const char *ps, Shader *variant = NULL, int row = 0) Shader *newshader(int type, const char *name, const char *vs, const char *ps, Shader *variant = nullptr, int row = 0)
{ {
if(Shader::lastshader) if(Shader::lastshader)
{ {
glUseProgram_(0); glUseProgram_(0);
Shader::lastshader = NULL; Shader::lastshader = nullptr;
} }
Shader *exists = shaders.access(name); Shader *exists = shaders.access(name);
@ -807,7 +807,7 @@ Shader *newshader(int type, const char *name, const char *vs, const char *ps, Sh
s.variantshader = variant; s.variantshader = variant;
s.standard = standardshaders; s.standard = standardshaders;
if(forceshaders) s.forced = true; if(forceshaders) s.forced = true;
s.reusevs = s.reuseps = NULL; s.reusevs = s.reuseps = nullptr;
if(variant) if(variant)
{ {
int row = 0, col = 0; int row = 0, col = 0;
@ -836,7 +836,7 @@ Shader *newshader(int type, const char *name, const char *vs, const char *ps, Sh
{ {
s.cleanup(true); s.cleanup(true);
if(variant) shaders.remove(rname); if(variant) shaders.remove(rname);
return NULL; return nullptr;
} }
if(variant) variant->addvariant(row, &s); if(variant) variant->addvariant(row, &s);
return &s; return &s;
@ -845,7 +845,7 @@ Shader *newshader(int type, const char *name, const char *vs, const char *ps, Sh
static const char *findglslmain(const char *s) static const char *findglslmain(const char *s)
{ {
const char *main = strstr(s, "main"); const char *main = strstr(s, "main");
if(!main) return NULL; if(!main) return nullptr;
for(; main >= s; main--) switch(*main) { case '\r': case '\n': case ';': return main + 1; } for(; main >= s; main--) switch(*main) { case '\r': case '\n': case ';': return main + 1; }
return s; return s;
} }
@ -960,7 +960,7 @@ static void genfogshader(vector<char> &vsbuf, vector<char> &psbuf, const char *v
} }
} }
static void genuniformdefs(vector<char> &vsbuf, vector<char> &psbuf, const char *vs, const char *ps, Shader *variant = NULL) static void genuniformdefs(vector<char> &vsbuf, vector<char> &psbuf, const char *vs, const char *ps, Shader *variant = nullptr)
{ {
if(variant ? variant->defaultparams.empty() : slotparams.empty()) return; if(variant ? variant->defaultparams.empty() : slotparams.empty()) return;
const char *vsmain = findglslmain(vs), *psmain = findglslmain(ps); const char *vsmain = findglslmain(vs), *psmain = findglslmain(ps);
@ -1098,7 +1098,7 @@ void Shader::force()
if(!deferred() || !defer) return; if(!deferred() || !defer) return;
char *cmd = defer; char *cmd = defer;
defer = NULL; defer = nullptr;
bool wasstandard = standardshaders, wasforcing = forceshaders; bool wasstandard = standardshaders, wasforcing = forceshaders;
int oldflags = identflags; int oldflags = identflags;
standardshaders = standard; standardshaders = standard;
@ -1130,7 +1130,7 @@ int Shader::uniformlocversion()
Shader *useshaderbyname(const char *name) Shader *useshaderbyname(const char *name)
{ {
Shader *s = shaders.access(name); Shader *s = shaders.access(name);
if(!s) return NULL; if(!s) return nullptr;
if(s->deferred()) s->force(); if(s->deferred()) s->force();
s->forced = true; s->forced = true;
return s; return s;
@ -1207,7 +1207,7 @@ COMMAND(setshader, "s");
void resetslotshader() void resetslotshader()
{ {
slotshader = NULL; slotshader = nullptr;
slotparams.shrink(0); slotparams.shrink(0);
} }
@ -1309,7 +1309,7 @@ static hashset<const char *> shaderparamnames(256);
const char *getshaderparamname(const char *name, bool insert) const char *getshaderparamname(const char *name, bool insert)
{ {
const char *exists = shaderparamnames.find(name, NULL); const char *exists = shaderparamnames.find(name, nullptr);
if(exists || !insert) return exists; if(exists || !insert) return exists;
return shaderparamnames.add(newstring(name)); return shaderparamnames.add(newstring(name));
} }
@ -1360,7 +1360,7 @@ struct postfxpass
uint inputs, freeinputs; uint inputs, freeinputs;
int outputbind, outputscale; int outputbind, outputscale;
postfxpass() : shader(NULL), inputs(1), freeinputs(1), outputbind(0), outputscale(0) {} postfxpass() : shader(nullptr), inputs(1), freeinputs(1), outputbind(0), outputscale(0) {}
}; };
vector<postfxpass> postfxpasses; vector<postfxpass> postfxpasses;
@ -1374,7 +1374,7 @@ static int allocatepostfxtex(int scale)
postfxtex &t = postfxtexs.add(); postfxtex &t = postfxtexs.add();
t.scale = scale; t.scale = scale;
glGenTextures(1, &t.id); glGenTextures(1, &t.id);
createtexture(t.id, max(postfxw>>scale, 1), max(postfxh>>scale, 1), NULL, 3, 1, GL_RGB, GL_TEXTURE_RECTANGLE); createtexture(t.id, max(postfxw>>scale, 1), max(postfxh>>scale, 1), nullptr, 3, 1, GL_RGB, GL_TEXTURE_RECTANGLE);
return postfxtexs.length()-1; return postfxtexs.length()-1;
} }
@ -1531,9 +1531,9 @@ void cleanupshaders()
cleanuppostfx(true); cleanuppostfx(true);
loadedshaders = false; loadedshaders = false;
nullshader = hudshader = hudnotextureshader = NULL; nullshader = hudshader = hudnotextureshader = nullptr;
enumerate(shaders, Shader, s, s.cleanup()); enumerate(shaders, Shader, s, s.cleanup());
Shader::lastshader = NULL; Shader::lastshader = nullptr;
glUseProgram_(0); glUseProgram_(0);
} }
@ -1606,8 +1606,8 @@ void setupblurkernel(int radius, float *weights, float *offsets)
void setblurshader(int pass, int size, int radius, float *weights, float *offsets, GLenum target) void setblurshader(int pass, int size, int radius, float *weights, float *offsets, GLenum target)
{ {
if(radius<1 || radius>MAXBLURRADIUS) return; if(radius<1 || radius>MAXBLURRADIUS) return;
static Shader *blurshader[7][2] = { { NULL, NULL }, { NULL, NULL }, { NULL, NULL }, { NULL, NULL }, { NULL, NULL }, { NULL, NULL }, { NULL, NULL } }, static Shader *blurshader[7][2] = { { nullptr, nullptr }, { nullptr, nullptr }, { nullptr, nullptr }, { nullptr, nullptr }, { nullptr, nullptr }, { nullptr, nullptr }, { nullptr, nullptr } },
*blurrectshader[7][2] = { { NULL, NULL }, { NULL, NULL }, { NULL, NULL }, { NULL, NULL }, { NULL, NULL }, { NULL, NULL }, { NULL, NULL } }; *blurrectshader[7][2] = { { nullptr, nullptr }, { nullptr, nullptr }, { nullptr, nullptr }, { nullptr, nullptr }, { nullptr, nullptr }, { nullptr, nullptr }, { nullptr, nullptr } };
Shader *&s = (target == GL_TEXTURE_RECTANGLE ? blurrectshader : blurshader)[radius-1][pass]; Shader *&s = (target == GL_TEXTURE_RECTANGLE ? blurrectshader : blurshader)[radius-1][pass];
if(!s) if(!s)
{ {

View File

@ -127,14 +127,14 @@ struct UniformLoc
const char *name, *blockname; const char *name, *blockname;
int loc, version, binding, stride, offset, size; int loc, version, binding, stride, offset, size;
void *data; void *data;
UniformLoc(const char *name = NULL, const char *blockname = NULL, int binding = -1, int stride = -1) : name(name), blockname(blockname), loc(-1), version(-1), binding(binding), stride(stride), offset(-1), size(-1), data(NULL) {} UniformLoc(const char *name = nullptr, const char *blockname = nullptr, int binding = -1, int stride = -1) : name(name), blockname(blockname), loc(-1), version(-1), binding(binding), stride(stride), offset(-1), size(-1), data(nullptr) {}
}; };
struct AttribLoc struct AttribLoc
{ {
const char *name; const char *name;
int loc; int loc;
AttribLoc(const char *name = NULL, int loc = -1) : name(name), loc(loc) {} AttribLoc(const char *name = nullptr, int loc = -1) : name(name), loc(loc) {}
}; };
struct FragDataLoc struct FragDataLoc
@ -143,7 +143,7 @@ struct FragDataLoc
int loc; int loc;
GLenum format; GLenum format;
int index; int index;
FragDataLoc(const char *name = NULL, int loc = -1, GLenum format = GL_FALSE, int index = 0) : name(name), loc(loc), format(format), index(index) {} FragDataLoc(const char *name = nullptr, int loc = -1, GLenum format = GL_FALSE, int index = 0) : name(name), loc(loc), format(format), index(index) {}
}; };
struct Shader struct Shader
@ -167,7 +167,7 @@ struct Shader
vector<FragDataLoc> fragdatalocs; vector<FragDataLoc> fragdatalocs;
const void *owner; const void *owner;
Shader() : name(NULL), vsstr(NULL), psstr(NULL), defer(NULL), type(SHADER_DEFAULT), program(0), vsobj(0), psobj(0), variantshader(NULL), variantrows(NULL), standard(false), forced(false), used(false), reusevs(NULL), reuseps(NULL), owner(NULL) Shader() : name(nullptr), vsstr(nullptr), psstr(nullptr), defer(nullptr), type(SHADER_DEFAULT), program(0), vsobj(0), psobj(0), variantshader(nullptr), variantrows(nullptr), standard(false), forced(false), used(false), reusevs(nullptr), reuseps(nullptr), owner(nullptr)
{ {
} }
@ -180,12 +180,12 @@ struct Shader
DELETEA(variantrows); DELETEA(variantrows);
} }
void allocparams(Slot *slot = NULL); void allocparams(Slot *slot = nullptr);
void setslotparams(Slot &slot); void setslotparams(Slot &slot);
void setslotparams(Slot &slot, VSlot &vslot); void setslotparams(Slot &slot, VSlot &vslot);
void bindprograms(); void bindprograms();
void flushparams(Slot *slot = NULL) void flushparams(Slot *slot = nullptr)
{ {
if(!used) { allocparams(slot); used = true; } if(!used) { allocparams(slot); used = true; }
loopv(globalparams) globalparams[i].flush(); loopv(globalparams) globalparams[i].flush();
@ -213,9 +213,9 @@ struct Shader
Shader *getvariant(int col, int row) const Shader *getvariant(int col, int row) const
{ {
if(row < 0 || row >= MAXVARIANTROWS || col < 0 || !variantrows) return NULL; if(row < 0 || row >= MAXVARIANTROWS || col < 0 || !variantrows) return nullptr;
int start = variantrows[row], end = variantrows[row+1]; int start = variantrows[row], end = variantrows[row+1];
return col < end - start ? variants[start + col] : NULL; return col < end - start ? variants[start + col] : nullptr;
} }
void addvariant(int row, Shader *s) void addvariant(int row, Shader *s)
@ -299,7 +299,7 @@ struct GlobalShaderParam
const char *name; const char *name;
GlobalShaderParamState *param; GlobalShaderParamState *param;
GlobalShaderParam(const char *name) : name(name), param(NULL) {} GlobalShaderParam(const char *name) : name(name), param(nullptr) {}
GlobalShaderParamState *resolve() GlobalShaderParamState *resolve()
{ {
@ -363,15 +363,15 @@ struct LocalShaderParam
LocalShaderParamState *resolve() LocalShaderParamState *resolve()
{ {
Shader *s = Shader::lastshader; Shader *s = Shader::lastshader;
if(!s) return NULL; if(!s) return nullptr;
if(!s->localparamremap.inrange(loc)) if(!s->localparamremap.inrange(loc))
{ {
extern int getlocalparam(const char *name); extern int getlocalparam(const char *name);
if(loc == -1) loc = getlocalparam(name); if(loc == -1) loc = getlocalparam(name);
if(!s->localparamremap.inrange(loc)) return NULL; if(!s->localparamremap.inrange(loc)) return nullptr;
} }
uchar remap = s->localparamremap[loc]; uchar remap = s->localparamremap[loc];
return s->localparams.inrange(remap) ? &s->localparams[remap] : NULL; return s->localparams.inrange(remap) ? &s->localparams[remap] : nullptr;
} }
void setf(float x = 0, float y = 0, float z = 0, float w = 0) void setf(float x = 0, float y = 0, float z = 0, float w = 0)
@ -461,13 +461,13 @@ struct LocalShaderParam
#define SETSHADER(name, ...) \ #define SETSHADER(name, ...) \
do { \ do { \
static Shader *name##shader = NULL; \ static Shader *name##shader = nullptr; \
if(!name##shader) name##shader = lookupshaderbyname(#name); \ if(!name##shader) name##shader = lookupshaderbyname(#name); \
name##shader->set(__VA_ARGS__); \ name##shader->set(__VA_ARGS__); \
} while(0) } while(0)
#define SETVARIANT(name, ...) \ #define SETVARIANT(name, ...) \
do { \ do { \
static Shader *name##shader = NULL; \ static Shader *name##shader = nullptr; \
if(!name##shader) name##shader = lookupshaderbyname(#name); \ if(!name##shader) name##shader = lookupshaderbyname(#name); \
name##shader->setvariant(__VA_ARGS__); \ name##shader->setvariant(__VA_ARGS__); \
} while(0) } while(0)

View File

@ -120,7 +120,7 @@ struct skelmodel : animmodel
uchar *partmask; uchar *partmask;
ragdolldata *ragdoll; ragdolldata *ragdoll;
animcacheentry() : ragdoll(NULL) animcacheentry() : ragdoll(nullptr)
{ {
loopk(MAXANIMPARTS) as[k].cur.fr1 = as[k].prev.fr1 = -1; loopk(MAXANIMPARTS) as[k].cur.fr1 = as[k].prev.fr1 = -1;
} }
@ -150,7 +150,7 @@ struct skelmodel : animmodel
dualquat *bdata; dualquat *bdata;
int version; int version;
skelcacheentry() : bdata(NULL), version(-1) {} skelcacheentry() : bdata(nullptr), version(-1) {}
void nextversion() void nextversion()
{ {
@ -176,7 +176,7 @@ struct skelmodel : animmodel
int voffset, eoffset, elen; int voffset, eoffset, elen;
ushort minvert, maxvert; ushort minvert, maxvert;
skelmesh() : verts(NULL), tris(NULL), numverts(0), numtris(0), maxweights(0) skelmesh() : verts(nullptr), tris(nullptr), numverts(0), numtris(0), maxweights(0)
{ {
} }
@ -371,7 +371,7 @@ struct skelmodel : animmodel
int bone; int bone;
matrix4x3 matrix; matrix4x3 matrix;
tag() : name(NULL) {} tag() : name(nullptr) {}
~tag() { DELETEA(name); } ~tag() { DELETEA(name); }
}; };
@ -380,7 +380,7 @@ struct skelmodel : animmodel
char *name; char *name;
int frame, range; int frame, range;
skelanimspec() : name(NULL), frame(0), range(0) {} skelanimspec() : name(nullptr), frame(0), range(0) {}
~skelanimspec() ~skelanimspec()
{ {
DELETEA(name); DELETEA(name);
@ -394,7 +394,7 @@ struct skelmodel : animmodel
float pitchscale, pitchoffset, pitchmin, pitchmax; float pitchscale, pitchoffset, pitchmin, pitchmax;
dualquat base, invbase; dualquat base, invbase;
boneinfo() : name(NULL), parent(-1), children(-1), next(-1), group(INT_MAX), scheduled(-1), interpindex(-1), interpparent(-1), ragdollindex(-1), correctindex(-1), pitchscale(0), pitchoffset(0), pitchmin(0), pitchmax(0) {} boneinfo() : name(nullptr), parent(-1), children(-1), next(-1), group(INT_MAX), scheduled(-1), interpindex(-1), interpparent(-1), ragdollindex(-1), correctindex(-1), pitchscale(0), pitchoffset(0), pitchmin(0), pitchmax(0) {}
~boneinfo() ~boneinfo()
{ {
DELETEA(name); DELETEA(name);
@ -449,7 +449,7 @@ struct skelmodel : animmodel
vector<skelcacheentry> skelcache; vector<skelcacheentry> skelcache;
hashtable<GLuint, int> blendoffsets; hashtable<GLuint, int> blendoffsets;
skeleton() : name(NULL), shared(0), bones(NULL), numbones(0), numinterpbones(0), numgpubones(0), numframes(0), framebones(NULL), ragdoll(NULL), usegpuskel(false), blendoffsets(32) skeleton() : name(nullptr), shared(0), bones(nullptr), numbones(0), numinterpbones(0), numgpubones(0), numframes(0), framebones(nullptr), ragdoll(nullptr), usegpuskel(false), blendoffsets(32)
{ {
} }
@ -480,13 +480,13 @@ struct skelmodel : animmodel
if(!strcmp(name, skelanims[i].name)) return &skelanims[i]; if(!strcmp(name, skelanims[i].name)) return &skelanims[i];
} }
} }
return NULL; return nullptr;
} }
skelanimspec &addskelanim(const char *name) skelanimspec &addskelanim(const char *name)
{ {
skelanimspec &sa = skelanims.add(); skelanimspec &sa = skelanims.add();
sa.name = name ? newstring(name) : NULL; sa.name = name ? newstring(name) : nullptr;
return sa; return sa;
} }
@ -950,7 +950,7 @@ struct skelmodel : animmodel
n.mul(m, t); n.mul(m, t);
} }
void calctags(part *p, skelcacheentry *sc = NULL) void calctags(part *p, skelcacheentry *sc = nullptr)
{ {
loopv(p->links) loopv(p->links)
{ {
@ -999,7 +999,7 @@ struct skelmodel : animmodel
int numanimparts = ((skelpart *)as->owner)->numanimparts; int numanimparts = ((skelpart *)as->owner)->numanimparts;
uchar *partmask = ((skelpart *)as->owner)->partmask; uchar *partmask = ((skelpart *)as->owner)->partmask;
skelcacheentry *sc = NULL; skelcacheentry *sc = nullptr;
bool match = false; bool match = false;
loopv(skelcache) loopv(skelcache)
{ {
@ -1086,7 +1086,7 @@ struct skelmodel : animmodel
skelhitdata *hitdata; skelhitdata *hitdata;
skelmeshgroup() : skel(NULL), edata(NULL), ebuf(0), vlen(0), vertsize(0), vblends(0), vweights(0), vdata(NULL), hitdata(NULL) skelmeshgroup() : skel(nullptr), edata(nullptr), ebuf(0), vlen(0), vertsize(0), vblends(0), vweights(0), vdata(nullptr), hitdata(nullptr)
{ {
memset(numblends, 0, sizeof(numblends)); memset(numblends, 0, sizeof(numblends));
} }
@ -1139,7 +1139,7 @@ struct skelmodel : animmodel
void *animkey() { return skel; } void *animkey() { return skel; }
int totalframes() const { return max(skel->numframes, 1); } int totalframes() const { return max(skel->numframes, 1); }
virtual skelanimspec *loadanim(const char *filename) { return NULL; } virtual skelanimspec *loadanim(const char *filename) { return nullptr; }
void genvbo(vbocacheentry &vc) void genvbo(vbocacheentry &vc)
{ {
@ -1247,7 +1247,7 @@ struct skelmodel : animmodel
bindbones(vverts); bindbones(vverts);
} }
void bindvbo(const animstate *as, part *p, vbocacheentry &vc, skelcacheentry *sc = NULL, blendcacheentry *bc = NULL) void bindvbo(const animstate *as, part *p, vbocacheentry &vc, skelcacheentry *sc = nullptr, blendcacheentry *bc = nullptr)
{ {
if(!skel->numframes) bindvbo<vvertg>(as, p, vc); if(!skel->numframes) bindvbo<vvertg>(as, p, vc);
else if(skel->usegpuskel) bindvbo<vvertgw>(as, p, vc); else if(skel->usegpuskel) bindvbo<vvertgw>(as, p, vc);
@ -1390,7 +1390,7 @@ struct skelmodel : animmodel
if(skel->shouldcleanup()) skel->cleanup(); if(skel->shouldcleanup()) skel->cleanup();
skelcacheentry &sc = skel->checkskelcache(p, as, pitch, axis, forward, !d || !d->ragdoll || d->ragdoll->skel != skel->ragdoll || d->ragdoll->millis == lastmillis ? NULL : d->ragdoll); skelcacheentry &sc = skel->checkskelcache(p, as, pitch, axis, forward, !d || !d->ragdoll || d->ragdoll->skel != skel->ragdoll || d->ragdoll->millis == lastmillis ? nullptr : d->ragdoll);
intersect(hitdata, p, sc, o, ray); intersect(hitdata, p, sc, o, ray);
@ -1425,14 +1425,14 @@ struct skelmodel : animmodel
return; return;
} }
skelcacheentry &sc = skel->checkskelcache(p, as, pitch, axis, forward, !d || !d->ragdoll || d->ragdoll->skel != skel->ragdoll || d->ragdoll->millis == lastmillis ? NULL : d->ragdoll); skelcacheentry &sc = skel->checkskelcache(p, as, pitch, axis, forward, !d || !d->ragdoll || d->ragdoll->skel != skel->ragdoll || d->ragdoll->millis == lastmillis ? nullptr : d->ragdoll);
if(!(as->cur.anim&ANIM_NORENDER)) if(!(as->cur.anim&ANIM_NORENDER))
{ {
int owner = &sc-&skel->skelcache[0]; int owner = &sc-&skel->skelcache[0];
vbocacheentry &vc = skel->usegpuskel ? *vbocache : checkvbocache(sc, owner); vbocacheentry &vc = skel->usegpuskel ? *vbocache : checkvbocache(sc, owner);
vc.millis = lastmillis; vc.millis = lastmillis;
if(!vc.vbuf) genvbo(vc); if(!vc.vbuf) genvbo(vc);
blendcacheentry *bc = NULL; blendcacheentry *bc = nullptr;
if(vblends) if(vblends)
{ {
bc = &checkblendcache(sc, owner); bc = &checkblendcache(sc, owner);
@ -1450,7 +1450,7 @@ struct skelmodel : animmodel
(animcacheentry &)vc = sc; (animcacheentry &)vc = sc;
looprendermeshes(skelmesh, m, looprendermeshes(skelmesh, m,
{ {
m.interpverts(sc.bdata, bc ? bc->bdata : NULL, (vvert *)vdata, p->skins[i]); m.interpverts(sc.bdata, bc ? bc->bdata : nullptr, (vvert *)vdata, p->skins[i]);
}); });
gle::bindvbo(vc.vbuf); gle::bindvbo(vc.vbuf);
glBufferData_(GL_ARRAY_BUFFER, vlen*vertsize, vdata, GL_STREAM_DRAW); glBufferData_(GL_ARRAY_BUFFER, vlen*vertsize, vdata, GL_STREAM_DRAW);
@ -1481,20 +1481,20 @@ struct skelmodel : animmodel
virtual skelmeshgroup *newmeshes() = 0; virtual skelmeshgroup *newmeshes() = 0;
meshgroup *loadmeshes(const char *name, const char *skelname = NULL, float smooth = 2) meshgroup *loadmeshes(const char *name, const char *skelname = nullptr, float smooth = 2)
{ {
skelmeshgroup *group = newmeshes(); skelmeshgroup *group = newmeshes();
group->shareskeleton(skelname); group->shareskeleton(skelname);
if(!group->load(name, smooth)) { delete group; return NULL; } if(!group->load(name, smooth)) { delete group; return nullptr; }
return group; return group;
} }
meshgroup *sharemeshes(const char *name, const char *skelname = NULL, float smooth = 2) meshgroup *sharemeshes(const char *name, const char *skelname = nullptr, float smooth = 2)
{ {
if(!meshgroups.access(name)) if(!meshgroups.access(name))
{ {
meshgroup *group = loadmeshes(name, skelname, smooth); meshgroup *group = loadmeshes(name, skelname, smooth);
if(!group) return NULL; if(!group) return nullptr;
meshgroups.add(group); meshgroups.add(group);
} }
return meshgroups[name]; return meshgroups[name];
@ -1513,7 +1513,7 @@ struct skelmodel : animmodel
uchar *partmask; uchar *partmask;
skelpart(animmodel *model, int index = 0) : part(model, index), buildingpartmask(NULL), partmask(NULL) skelpart(animmodel *model, int index = 0) : part(model, index), buildingpartmask(nullptr), partmask(nullptr)
{ {
} }
@ -1524,7 +1524,7 @@ struct skelmodel : animmodel
uchar *sharepartmask(animpartmask *o) uchar *sharepartmask(animpartmask *o)
{ {
static animpartmask *partmasks = NULL; static animpartmask *partmasks = nullptr;
animpartmask *p = partmasks; animpartmask *p = partmasks;
for(; p; p = p->next) if(p->numbones==o->numbones && !memcmp(p->bones, o->bones, p->numbones)) for(; p; p = p->next) if(p->numbones==o->numbones && !memcmp(p->bones, o->bones, p->numbones))
{ {
@ -1564,7 +1564,7 @@ struct skelmodel : animmodel
if(buildingpartmask) if(buildingpartmask)
{ {
partmask = sharepartmask(buildingpartmask); partmask = sharepartmask(buildingpartmask);
buildingpartmask = NULL; buildingpartmask = nullptr;
} }
((skelmeshgroup *)meshes)->skel->optimize(); ((skelmeshgroup *)meshes)->skel->optimize();
@ -1660,7 +1660,7 @@ template<class MDL> struct skelcommands : modelcommands<MDL, struct MDL::skelmes
if(!MDL::loading) { conoutf("not loading an %s", MDL::formatname()); return; } if(!MDL::loading) { conoutf("not loading an %s", MDL::formatname()); return; }
defformatstring(filename, "%s/%s", MDL::dir, meshfile); defformatstring(filename, "%s/%s", MDL::dir, meshfile);
part &mdl = MDL::loading->addpart(); part &mdl = MDL::loading->addpart();
mdl.meshes = MDL::loading->sharemeshes(path(filename), skelname[0] ? skelname : NULL, *smooth > 0 ? cosf(clamp(*smooth, 0.0f, 180.0f)*RAD) : 2); mdl.meshes = MDL::loading->sharemeshes(path(filename), skelname[0] ? skelname : nullptr, *smooth > 0 ? cosf(clamp(*smooth, 0.0f, 180.0f)*RAD) : 2);
if(!mdl.meshes) conoutf("could not load %s", filename); if(!mdl.meshes) conoutf("could not load %s", filename);
else else
{ {

View File

@ -145,7 +145,7 @@ struct smd : skelloader<smd>
void readtriangles(stream *f, char *buf, size_t bufsize) void readtriangles(stream *f, char *buf, size_t bufsize)
{ {
smdmeshdata *curmesh = NULL; smdmeshdata *curmesh = nullptr;
hashtable<const char *, smdmeshdata> materials(1<<6); hashtable<const char *, smdmeshdata> materials(1<<6);
hashset<int> verts(1<<12); hashset<int> verts(1<<12);
while(f->getline(buf, bufsize)) while(f->getline(buf, bufsize))
@ -354,7 +354,7 @@ struct smd : skelloader<smd>
if(sa || skel->numbones <= 0) return sa; if(sa || skel->numbones <= 0) return sa;
stream *f = openfile(filename, "r"); stream *f = openfile(filename, "r");
if(!f) return NULL; if(!f) return nullptr;
char buf[512]; char buf[512];
int version = -1; int version = -1;
@ -366,12 +366,12 @@ struct smd : skelloader<smd>
if(skipcomment(curbuf)) continue; if(skipcomment(curbuf)) continue;
if(sscanf(curbuf, " version %d", &version) == 1) if(sscanf(curbuf, " version %d", &version) == 1)
{ {
if(version != 1) { delete f; return NULL; } if(version != 1) { delete f; return nullptr; }
} }
else if(!strncmp(curbuf, "nodes", 5)) else if(!strncmp(curbuf, "nodes", 5))
{ {
readnodes(f, buf, sizeof(buf), bones); readnodes(f, buf, sizeof(buf), bones);
if(bones.length() != skel->numbones) { delete f; return NULL; } if(bones.length() != skel->numbones) { delete f; return nullptr; }
} }
else if(!strncmp(curbuf, "triangles", 9)) else if(!strncmp(curbuf, "triangles", 9))
skipsection(f, buf, sizeof(buf)); skipsection(f, buf, sizeof(buf));

View File

@ -49,7 +49,7 @@ struct stainbuffer
GLuint vbo; GLuint vbo;
bool dirty; bool dirty;
stainbuffer() : verts(NULL), maxverts(0), startvert(0), endvert(0), lastvert(0), availverts(0), vbo(0), dirty(false) stainbuffer() : verts(nullptr), maxverts(0), startvert(0), endvert(0), lastvert(0), availverts(0), vbo(0), dirty(false)
{} {}
~stainbuffer() ~stainbuffer()
@ -134,7 +134,7 @@ struct stainbuffer
int count = endvert < startvert ? maxverts - startvert : endvert - startvert; int count = endvert < startvert ? maxverts - startvert : endvert - startvert;
if(dirty) if(dirty)
{ {
glBufferData_(GL_ARRAY_BUFFER, maxverts*sizeof(stainvert), NULL, GL_STREAM_DRAW); glBufferData_(GL_ARRAY_BUFFER, maxverts*sizeof(stainvert), nullptr, GL_STREAM_DRAW);
glBufferSubData_(GL_ARRAY_BUFFER, 0, count*sizeof(stainvert), &verts[startvert]); glBufferSubData_(GL_ARRAY_BUFFER, 0, count*sizeof(stainvert), &verts[startvert]);
if(endvert < startvert) if(endvert < startvert)
{ {
@ -198,8 +198,8 @@ struct stainrenderer
stainrenderer(const char *texname, int flags = 0, int fadeintime = 0, int fadeouttime = 1000, int timetolive = -1) stainrenderer(const char *texname, int flags = 0, int fadeintime = 0, int fadeouttime = 1000, int timetolive = -1)
: texname(texname), flags(flags), : texname(texname), flags(flags),
fadeintime(fadeintime), fadeouttime(fadeouttime), timetolive(timetolive), fadeintime(fadeintime), fadeouttime(fadeouttime), timetolive(timetolive),
tex(NULL), tex(nullptr),
stains(NULL), maxstains(0), startstain(0), endstain(0), stains(nullptr), maxstains(0), startstain(0), endstain(0),
stainu(0), stainv(0) stainu(0), stainv(0)
{ {
} }
@ -269,7 +269,7 @@ struct stainrenderer
int threshold = lastmillis - (timetolive>=0 ? timetolive : stainfade) - fadeouttime; int threshold = lastmillis - (timetolive>=0 ? timetolive : stainfade) - fadeouttime;
staininfo *d = &stains[startstain], staininfo *d = &stains[startstain],
*end = &stains[endstain < startstain ? maxstains : endstain], *end = &stains[endstain < startstain ? maxstains : endstain],
*cleared[NUMSTAINBUFS] = { NULL }; *cleared[NUMSTAINBUFS] = { nullptr };
for(; d < end && d->millis <= threshold; d++) for(; d < end && d->millis <= threshold; d++)
cleared[d->owner] = d; cleared[d->owner] = d;
if(d >= end && endstain < startstain) if(d >= end && endstain < startstain)
@ -482,7 +482,7 @@ struct stainrenderer
} }
} }
void gentris(cube &cu, int orient, const ivec &o, int size, materialsurface *mat = NULL, int vismask = 0) void gentris(cube &cu, int orient, const ivec &o, int size, materialsurface *mat = nullptr, int vismask = 0)
{ {
vec pos[MAXFACEVERTS+4]; vec pos[MAXFACEVERTS+4];
int numverts = 0, numplanes = 1; int numverts = 0, numplanes = 1;
@ -738,7 +738,7 @@ struct stainrenderer
int vismask = cu.visible; int vismask = cu.visible;
if(vismask&0xC0) if(vismask&0xC0)
{ {
if(vismask&0x80) loopj(6) gentris(cu, j, co, size, NULL, vismask); if(vismask&0x80) loopj(6) gentris(cu, j, co, size, nullptr, vismask);
else loopj(6) if(vismask&(1<<j)) gentris(cu, j, co, size); else loopj(6) if(vismask&(1<<j)) gentris(cu, j, co, size);
} }
} }

View File

@ -805,7 +805,7 @@ static void uploadtexture(GLenum target, GLenum internal, int tw, int th, GLenum
{ {
int bpp = formatsize(format), row = 0, rowalign = 0; int bpp = formatsize(format), row = 0, rowalign = 0;
if(!pitch) pitch = pw*bpp; if(!pitch) pitch = pw*bpp;
uchar *buf = NULL; uchar *buf = nullptr;
if(pw!=tw || ph!=th) if(pw!=tw || ph!=th)
{ {
buf = new uchar[tw*th*bpp]; buf = new uchar[tw*th*bpp];
@ -922,7 +922,7 @@ static const GLint *swizzlemask(GLenum format)
case GL_RED: return luminance; case GL_RED: return luminance;
case GL_RG: return luminancealpha; case GL_RG: return luminancealpha;
} }
return NULL; return nullptr;
} }
static void setuptexparameters(int tnum, const void *pixels, int clamp, int filter, GLenum format, GLenum target, bool swizzle) static void setuptexparameters(int tnum, const void *pixels, int clamp, int filter, GLenum format, GLenum target, bool swizzle)
@ -1115,7 +1115,7 @@ void create3dtexture(int tnum, int w, int h, int d, const void *pixels, int clam
static hashnameset<Texture> textures; static hashnameset<Texture> textures;
Texture *notexture = NULL; // used as default, ensured to be loaded Texture *notexture = nullptr; // used as default, ensured to be loaded
static GLenum texformat(int bpp, bool swizzle = false) static GLenum texformat(int bpp, bool swizzle = false)
{ {
@ -1261,13 +1261,13 @@ static SDL_Surface *wrapsurface(void *data, int width, int height, int bpp)
case 3: return SDL_CreateRGBSurfaceFrom(data, width, height, 8*bpp, bpp*width, RGBMASKS); case 3: return SDL_CreateRGBSurfaceFrom(data, width, height, 8*bpp, bpp*width, RGBMASKS);
case 4: return SDL_CreateRGBSurfaceFrom(data, width, height, 8*bpp, bpp*width, RGBAMASKS); case 4: return SDL_CreateRGBSurfaceFrom(data, width, height, 8*bpp, bpp*width, RGBAMASKS);
} }
return NULL; return nullptr;
} }
static SDL_Surface *creatergbsurface(SDL_Surface *os) static SDL_Surface *creatergbsurface(SDL_Surface *os)
{ {
SDL_Surface *ns = SDL_CreateRGBSurface(SDL_SWSURFACE, os->w, os->h, 24, RGBMASKS); SDL_Surface *ns = SDL_CreateRGBSurface(SDL_SWSURFACE, os->w, os->h, 24, RGBMASKS);
if(ns) SDL_BlitSurface(os, NULL, ns, NULL); if(ns) SDL_BlitSurface(os, nullptr, ns, nullptr);
SDL_FreeSurface(os); SDL_FreeSurface(os);
return ns; return ns;
} }
@ -1278,7 +1278,7 @@ static SDL_Surface *creatergbasurface(SDL_Surface *os)
if(ns) if(ns)
{ {
SDL_SetSurfaceBlendMode(os, SDL_BLENDMODE_NONE); SDL_SetSurfaceBlendMode(os, SDL_BLENDMODE_NONE);
SDL_BlitSurface(os, NULL, ns, NULL); SDL_BlitSurface(os, nullptr, ns, nullptr);
} }
SDL_FreeSurface(os); SDL_FreeSurface(os);
return ns; return ns;
@ -1289,7 +1289,7 @@ static bool checkgrayscale(SDL_Surface *s)
// gray scale images have 256 levels, no colorkey, and the palette is a ramp // gray scale images have 256 levels, no colorkey, and the palette is a ramp
if(s->format->palette) if(s->format->palette)
{ {
if(s->format->palette->ncolors != 256 || SDL_GetColorKey(s, NULL) >= 0) return false; if(s->format->palette->ncolors != 256 || SDL_GetColorKey(s, nullptr) >= 0) return false;
const SDL_Color *colors = s->format->palette->colors; const SDL_Color *colors = s->format->palette->colors;
loopi(256) if(colors[i].r != i || colors[i].g != i || colors[i].b != i) return false; loopi(256) if(colors[i].r != i || colors[i].g != i || colors[i].b != i) return false;
} }
@ -1298,17 +1298,17 @@ static bool checkgrayscale(SDL_Surface *s)
static SDL_Surface *fixsurfaceformat(SDL_Surface *s) static SDL_Surface *fixsurfaceformat(SDL_Surface *s)
{ {
if(!s) return NULL; if(!s) return nullptr;
if(!s->pixels || min(s->w, s->h) <= 0 || s->format->BytesPerPixel <= 0) if(!s->pixels || min(s->w, s->h) <= 0 || s->format->BytesPerPixel <= 0)
{ {
SDL_FreeSurface(s); SDL_FreeSurface(s);
return NULL; return nullptr;
} }
static const uint rgbmasks[] = { RGBMASKS }, rgbamasks[] = { RGBAMASKS }; static const uint rgbmasks[] = { RGBMASKS }, rgbamasks[] = { RGBAMASKS };
switch(s->format->BytesPerPixel) switch(s->format->BytesPerPixel)
{ {
case 1: case 1:
if(!checkgrayscale(s)) return SDL_GetColorKey(s, NULL) >= 0 ? creatergbasurface(s) : creatergbsurface(s); if(!checkgrayscale(s)) return SDL_GetColorKey(s, nullptr) >= 0 ? creatergbasurface(s) : creatergbsurface(s);
break; break;
case 3: case 3:
if(s->format->Rmask != rgbmasks[0] || s->format->Gmask != rgbmasks[1] || s->format->Bmask != rgbmasks[2]) if(s->format->Rmask != rgbmasks[0] || s->format->Gmask != rgbmasks[1] || s->format->Bmask != rgbmasks[2])
@ -1473,7 +1473,7 @@ static bool canloadsurface(const char *name)
static SDL_Surface *loadsurface(const char *name) static SDL_Surface *loadsurface(const char *name)
{ {
SDL_Surface *s = NULL; SDL_Surface *s = nullptr;
stream *z = openzipfile(name, "rb"); stream *z = openzipfile(name, "rb");
if(z) if(z)
{ {
@ -1508,9 +1508,9 @@ VAR(usedds, 0, 1, 1);
VAR(dbgdds, 0, 0, 1); VAR(dbgdds, 0, 0, 1);
VAR(scaledds, 0, 2, 4); VAR(scaledds, 0, 2, 4);
static bool texturedata(ImageData &d, const char *tname, bool msg = true, int *compress = NULL, int *wrap = NULL, const char *tdir = NULL, int ttype = TEX_DIFFUSE) static bool texturedata(ImageData &d, const char *tname, bool msg = true, int *compress = nullptr, int *wrap = nullptr, const char *tdir = nullptr, int ttype = TEX_DIFFUSE)
{ {
const char *cmds = NULL, *file = tname; const char *cmds = nullptr, *file = tname;
if(tname[0]=='<') if(tname[0]=='<')
{ {
cmds = tname; cmds = tname;
@ -1529,7 +1529,7 @@ static bool texturedata(ImageData &d, const char *tname, bool msg = true, int *c
for(const char *pcmds = cmds; pcmds;) for(const char *pcmds = cmds; pcmds;)
{ {
#define PARSETEXCOMMANDS(cmds) \ #define PARSETEXCOMMANDS(cmds) \
const char *cmd = NULL, *end = NULL, *arg[4] = { NULL, NULL, NULL, NULL }; \ const char *cmd = nullptr, *end = nullptr, *arg[4] = { nullptr, nullptr, nullptr, nullptr }; \
cmd = &cmds[1]; \ cmd = &cmds[1]; \
end = strchr(cmd, '>'); \ end = strchr(cmd, '>'); \
if(!end) break; \ if(!end) break; \
@ -1606,7 +1606,7 @@ static bool texturedata(ImageData &d, const char *tname, bool msg = true, int *c
string srcname, maskname; string srcname, maskname;
COPYTEXARG(srcname, arg[0]); COPYTEXARG(srcname, arg[0]);
COPYTEXARG(maskname, arg[1]); COPYTEXARG(maskname, arg[1]);
if(srcname[0] && texturedata(src, srcname, false, NULL, NULL, tdir, ttype) && (!maskname[0] || texturedata(mask, maskname, false, NULL, NULL, tdir, ttype))) if(srcname[0] && texturedata(src, srcname, false, nullptr, nullptr, tdir, ttype) && (!maskname[0] || texturedata(mask, maskname, false, nullptr, nullptr, tdir, ttype)))
texblend(d, src, maskname[0] ? mask : src); texblend(d, src, maskname[0] ? mask : src);
} }
else if(matchstring(cmd, len, "thumbnail")) else if(matchstring(cmd, len, "thumbnail"))
@ -1641,7 +1641,7 @@ static bool texturedata(ImageData &d, const char *tname, bool msg = true, int *c
return true; return true;
} }
static inline bool texturedata(ImageData &d, Slot &slot, Slot::Tex &tex, bool msg = true, int *compress = NULL, int *wrap = NULL) static inline bool texturedata(ImageData &d, Slot &slot, Slot::Tex &tex, bool msg = true, int *compress = nullptr, int *wrap = nullptr)
{ {
return texturedata(d, tex.name, msg, compress, wrap, slot.texturedir(), tex.type); return texturedata(d, tex.name, msg, compress, wrap, slot.texturedir(), tex.type);
} }
@ -1649,9 +1649,9 @@ static inline bool texturedata(ImageData &d, Slot &slot, Slot::Tex &tex, bool ms
uchar *loadalphamask(Texture *t) uchar *loadalphamask(Texture *t)
{ {
if(t->alphamask) return t->alphamask; if(t->alphamask) return t->alphamask;
if(!(t->type&Texture::ALPHA)) return NULL; if(!(t->type&Texture::ALPHA)) return nullptr;
ImageData s; ImageData s;
if(!texturedata(s, t->name, false) || !s.data || s.compressed) return NULL; if(!texturedata(s, t->name, false) || !s.data || s.compressed) return nullptr;
t->alphamask = new uchar[s.h * ((s.w+7)/8)]; t->alphamask = new uchar[s.h * ((s.w+7)/8)];
uchar *srcrow = s.data, *dst = t->alphamask-1; uchar *srcrow = s.data, *dst = t->alphamask-1;
loop(y, s.h) loop(y, s.h)
@ -1677,7 +1677,7 @@ Texture *textureload(const char *name, int clamp, bool mipit, bool msg)
if(t) return t; if(t) return t;
int compress = 0; int compress = 0;
ImageData s; ImageData s;
if(texturedata(s, tname, msg, &compress, &clamp)) return newtexture(NULL, tname, s, clamp, mipit, false, false, compress); if(texturedata(s, tname, msg, &compress, &clamp)) return newtexture(nullptr, tname, s, clamp, mipit, false, false, compress);
return notexture; return notexture;
} }
@ -1696,7 +1696,7 @@ DecalSlot dummydecalslot;
static MatSlot materialslots[(MATF_VOLUME|MATF_INDEX)+1]; static MatSlot materialslots[(MATF_VOLUME|MATF_INDEX)+1];
static vector<DecalSlot *> decalslots; static vector<DecalSlot *> decalslots;
static Slot *defslot = NULL; static Slot *defslot = nullptr;
const char *Slot::name() const { return tempformatstring("slot %d", index); } const char *Slot::name() const { return tempformatstring("slot %d", index); }
@ -1708,7 +1708,7 @@ const char *DecalSlot::name() const { return tempformatstring("decal slot %d", S
static void texturereset(int *n) static void texturereset(int *n)
{ {
if(!(identflags&IDF_OVERRIDDEN) && !game::allowedittoggle()) return; if(!(identflags&IDF_OVERRIDDEN) && !game::allowedittoggle()) return;
defslot = NULL; defslot = nullptr;
resetslotshader(); resetslotshader();
int limit = clamp(*n, 0, slots.length()); int limit = clamp(*n, 0, slots.length());
for(int i = limit; i < slots.length(); i++) for(int i = limit; i < slots.length(); i++)
@ -1731,7 +1731,7 @@ COMMAND(texturereset, "i");
static void materialreset() static void materialreset()
{ {
if(!(identflags&IDF_OVERRIDDEN) && !game::allowedittoggle()) return; if(!(identflags&IDF_OVERRIDDEN) && !game::allowedittoggle()) return;
defslot = NULL; defslot = nullptr;
loopi((MATF_VOLUME|MATF_INDEX)+1) materialslots[i].reset(); loopi((MATF_VOLUME|MATF_INDEX)+1) materialslots[i].reset();
} }
@ -1740,7 +1740,7 @@ COMMAND(materialreset, "");
static void decalreset(int *n) static void decalreset(int *n)
{ {
if(!(identflags&IDF_OVERRIDDEN) && !game::allowedittoggle()) return; if(!(identflags&IDF_OVERRIDDEN) && !game::allowedittoggle()) return;
defslot = NULL; defslot = nullptr;
resetslotshader(); resetslotshader();
decalslots.deletecontents(*n); decalslots.deletecontents(*n);
} }
@ -1752,7 +1752,7 @@ static bool markingvslots = false;
void clearslots() void clearslots()
{ {
defslot = NULL; defslot = nullptr;
resetslotshader(); resetslotshader();
slots.deletecontents(); slots.deletecontents();
vslots.deletecontents(); vslots.deletecontents();
@ -1807,7 +1807,7 @@ void compactvslots(cube *c, int n)
int compactvslots(bool cull) int compactvslots(bool cull)
{ {
defslot = NULL; defslot = nullptr;
clonedvslots = 0; clonedvslots = 0;
markingvslots = cull; markingvslots = cull;
compactedvslots = 0; compactedvslots = 0;
@ -1899,7 +1899,7 @@ ICOMMAND(compactvslots, "i", (int *cull),
allchanged(); allchanged();
}); });
static void clampvslotoffset(VSlot &dst, Slot *slot = NULL) static void clampvslotoffset(VSlot &dst, Slot *slot = nullptr)
{ {
if(!slot) slot = dst.slot; if(!slot) slot = dst.slot;
if(slot && slot->sts.inrange(0)) if(slot && slot->sts.inrange(0))
@ -1954,7 +1954,7 @@ static void propagatevslot(VSlot *root, int changed)
} }
} }
static void mergevslot(VSlot &dst, const VSlot &src, int diff, Slot *slot = NULL) static void mergevslot(VSlot &dst, const VSlot &src, int diff, Slot *slot = nullptr)
{ {
if(diff & (1<<VSLOT_SHPARAM)) loopv(src.params) if(diff & (1<<VSLOT_SHPARAM)) loopv(src.params)
{ {
@ -2149,7 +2149,7 @@ bool unpackvslot(ucharbuf &buf, VSlot &dst, bool delta)
{ {
string name; string name;
getstring(name, buf); getstring(name, buf);
SlotShaderParam p = { name[0] ? getshaderparamname(name) : NULL, -1, 0, { 0, 0, 0, 0 } }; SlotShaderParam p = { name[0] ? getshaderparamname(name) : nullptr, -1, 0, { 0, 0, 0, 0 } };
loopi(4) p.val[i] = getfloat(buf); loopi(4) p.val[i] = getfloat(buf);
if(p.name) dst.params.add(p); if(p.name) dst.params.add(p);
break; break;
@ -2217,7 +2217,7 @@ VSlot *findvslot(Slot &slot, const VSlot &src, const VSlot &delta)
comparevslot(*dst, delta, delta.changed)) comparevslot(*dst, delta, delta.changed))
return dst; return dst;
} }
return NULL; return nullptr;
} }
static VSlot *clonevslot(const VSlot &src, const VSlot &delta) static VSlot *clonevslot(const VSlot &src, const VSlot &delta)
@ -2239,7 +2239,7 @@ VSlot *editvslot(const VSlot &src, const VSlot &delta)
{ {
compactvslots(); compactvslots();
allchanged(); allchanged();
if(vslots.length()>=0x10000) return NULL; if(vslots.length()>=0x10000) return nullptr;
} }
if(autocompactvslots && ++clonedvslots >= autocompactvslots) if(autocompactvslots && ++clonedvslots >= autocompactvslots)
{ {
@ -2344,7 +2344,7 @@ static void texgrass(char *name)
if(!defslot) return; if(!defslot) return;
Slot &s = *defslot; Slot &s = *defslot;
DELETEA(s.grass); DELETEA(s.grass);
s.grass = name[0] ? newstring(makerelpath("media/texture", name)) : NULL; s.grass = name[0] ? newstring(makerelpath("media/texture", name)) : nullptr;
} }
COMMAND(texgrass, "s"); COMMAND(texgrass, "s");
@ -2549,7 +2549,7 @@ bool DecalSlot::shouldpremul(int type) const
} }
} }
static void addname(vector<char> &key, Slot &slot, Slot::Tex &t, bool combined = false, const char *prefix = NULL) static void addname(vector<char> &key, Slot &slot, Slot::Tex &t, bool combined = false, const char *prefix = nullptr)
{ {
if(combined) key.add('&'); if(combined) key.add('&');
if(prefix) { while(*prefix) key.add(*prefix++); } if(prefix) { while(*prefix) key.add(*prefix++); }
@ -2560,8 +2560,8 @@ static void addname(vector<char> &key, Slot &slot, Slot::Tex &t, bool combined =
void Slot::load(int index, Slot::Tex &t) void Slot::load(int index, Slot::Tex &t)
{ {
vector<char> key; vector<char> key;
addname(key, *this, t, false, shouldpremul(t.type) ? "<premul>" : NULL); addname(key, *this, t, false, shouldpremul(t.type) ? "<premul>" : nullptr);
Slot::Tex *combine = NULL; Slot::Tex *combine = nullptr;
loopv(sts) loopv(sts)
{ {
Slot::Tex &c = sts[i]; Slot::Tex &c = sts[i];
@ -2604,7 +2604,7 @@ void Slot::load(int index, Slot::Tex &t)
break; break;
} }
if(!ts.compressed && shouldpremul(t.type)) texpremul(ts); if(!ts.compressed && shouldpremul(t.type)) texpremul(ts);
t.t = newtexture(NULL, key.getbuf(), ts, wrap, true, true, true, compress); t.t = newtexture(nullptr, key.getbuf(), ts, wrap, true, true, true, compress);
} }
void Slot::load() void Slot::load()
@ -2740,7 +2740,7 @@ Texture *Slot::loadthumbnail()
addname(name, *this, sts[glow], true, prefix); addname(name, *this, sts[glow], true, prefix);
} }
} }
VSlot *layer = vslot.layer ? &lookupvslot(vslot.layer, false) : NULL; VSlot *layer = vslot.layer ? &lookupvslot(vslot.layer, false) : nullptr;
if(layer) if(layer)
{ {
if(layer->colorscale == vec(1, 1, 1)) addname(name, *layer->slot, layer->slot->sts[0], true, "<layer>"); if(layer->colorscale == vec(1, 1, 1)) addname(name, *layer->slot, layer->slot->sts[0], true, "<layer>");
@ -2750,7 +2750,7 @@ Texture *Slot::loadthumbnail()
addname(name, *layer->slot, layer->slot->sts[0], true, prefix); addname(name, *layer->slot, layer->slot->sts[0], true, prefix);
} }
} }
VSlot *detail = vslot.detail ? &lookupvslot(vslot.detail, false) : NULL; VSlot *detail = vslot.detail ? &lookupvslot(vslot.detail, false) : nullptr;
if(detail) addname(name, *detail->slot, detail->slot->sts[0], true, "<detail>"); if(detail) addname(name, *detail->slot, detail->slot->sts[0], true, "<detail>");
name.add('\0'); name.add('\0');
Texture *t = textures.access(path(name.getbuf())); Texture *t = textures.access(path(name.getbuf()));
@ -2786,7 +2786,7 @@ Texture *Slot::loadthumbnail()
blitthumbnail(s, d, 0, 0); blitthumbnail(s, d, 0, 0);
} }
if(s.bpp < 3) forcergbimage(s); if(s.bpp < 3) forcergbimage(s);
t = newtexture(NULL, name.getbuf(), s, 0, false, false, true); t = newtexture(nullptr, name.getbuf(), s, 0, false, false, true);
t->xs = xs; t->xs = xs;
t->ys = ys; t->ys = ys;
thumbnail = t; thumbnail = t;
@ -2838,16 +2838,16 @@ static Texture *cubemaploadwildcard(Texture *t, const char *name, bool mipit, bo
} }
ImageData &s = surface[i]; ImageData &s = surface[i];
texturedata(s, sname, msg, &compress); texturedata(s, sname, msg, &compress);
if(!s.data) return NULL; if(!s.data) return nullptr;
if(s.w != s.h) if(s.w != s.h)
{ {
if(msg) conoutf(CON_ERROR, "cubemap texture %s does not have square size", sname); if(msg) conoutf(CON_ERROR, "cubemap texture %s does not have square size", sname);
return NULL; return nullptr;
} }
if(s.compressed ? s.compressed!=surface[0].compressed || s.w!=surface[0].w || s.h!=surface[0].h || s.levels!=surface[0].levels : surface[0].compressed || s.bpp!=surface[0].bpp) if(s.compressed ? s.compressed!=surface[0].compressed || s.w!=surface[0].w || s.h!=surface[0].h || s.levels!=surface[0].levels : surface[0].compressed || s.bpp!=surface[0].bpp)
{ {
if(msg) conoutf(CON_ERROR, "cubemap texture %s doesn't match other sides' format", sname); if(msg) conoutf(CON_ERROR, "cubemap texture %s doesn't match other sides' format", sname);
return NULL; return nullptr;
} }
tsize = max(tsize, max(s.w, s.h)); tsize = max(tsize, max(s.w, s.h));
} }
@ -2924,19 +2924,19 @@ Texture *cubemapload(const char *name, bool mipit, bool msg, bool transient)
string pname; string pname;
copystring(pname, makerelpath("media/sky", name)); copystring(pname, makerelpath("media/sky", name));
path(pname); path(pname);
Texture *t = NULL; Texture *t = nullptr;
if(!strchr(pname, '*')) if(!strchr(pname, '*'))
{ {
defformatstring(jpgname, "%s_*.jpg", pname); defformatstring(jpgname, "%s_*.jpg", pname);
t = cubemaploadwildcard(NULL, jpgname, mipit, false, transient); t = cubemaploadwildcard(nullptr, jpgname, mipit, false, transient);
if(!t) if(!t)
{ {
defformatstring(pngname, "%s_*.png", pname); defformatstring(pngname, "%s_*.png", pname);
t = cubemaploadwildcard(NULL, pngname, mipit, false, transient); t = cubemaploadwildcard(nullptr, pngname, mipit, false, transient);
if(!t && msg) conoutf(CON_ERROR, "could not load envmap %s", name); if(!t && msg) conoutf(CON_ERROR, "could not load envmap %s", name);
} }
} }
else t = cubemaploadwildcard(NULL, pname, mipit, msg, transient); else t = cubemaploadwildcard(nullptr, pname, mipit, msg, transient);
return t; return t;
} }
@ -2983,7 +2983,7 @@ static GLuint genenvmap(const vec &o, int envmapsize, int blur, bool onlysky)
emtexsize = texsize; emtexsize = texsize;
loopi(2) loopi(2)
{ {
createtexture(emtex[i], emtexsize, emtexsize, NULL, 3, 1, GL_RGB, GL_TEXTURE_RECTANGLE); createtexture(emtex[i], emtexsize, emtexsize, nullptr, 3, 1, GL_RGB, GL_TEXTURE_RECTANGLE);
glBindFramebuffer_(GL_FRAMEBUFFER, emfbo[i]); glBindFramebuffer_(GL_FRAMEBUFFER, emfbo[i]);
glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, emtex[i], 0); glFramebufferTexture2D_(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, emtex[i], 0);
if(glCheckFramebufferStatus_(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) if(glCheckFramebufferStatus_(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
@ -2994,7 +2994,7 @@ static GLuint genenvmap(const vec &o, int envmapsize, int blur, bool onlysky)
glGenTextures(1, &tex); glGenTextures(1, &tex);
// workaround for Catalyst bug: // workaround for Catalyst bug:
// all texture levels must be specified before glCopyTexSubImage2D is called, otherwise it crashes // all texture levels must be specified before glCopyTexSubImage2D is called, otherwise it crashes
loopi(6) createtexture(!i ? tex : 0, texsize, texsize, NULL, 3, 2, GL_RGB5, cubemapsides[i].target); loopi(6) createtexture(!i ? tex : 0, texsize, texsize, nullptr, 3, 2, GL_RGB5, cubemapsides[i].target);
float yaw = 0, pitch = 0; float yaw = 0, pitch = 0;
loopi(6) loopi(6)
{ {
@ -3203,12 +3203,12 @@ bool reloadtexture(Texture &tex)
{ {
int compress = 0; int compress = 0;
ImageData s; ImageData s;
if(!texturedata(s, tex.name, true, &compress) || !newtexture(&tex, NULL, s, tex.clamp, tex.mipmap, false, false, compress)) return false; if(!texturedata(s, tex.name, true, &compress) || !newtexture(&tex, nullptr, s, tex.clamp, tex.mipmap, false, false, compress)) return false;
break; break;
} }
case Texture::CUBEMAP: case Texture::CUBEMAP:
if(!cubemaploadwildcard(&tex, NULL, tex.mipmap, true)) return false; if(!cubemaploadwildcard(&tex, nullptr, tex.mipmap, true)) return false;
break; break;
} }
return true; return true;
@ -3499,7 +3499,7 @@ static bool loaddds(const char *filename, ImageData &image, int force)
case GL_COMPRESSED_RG_RGTC2: bpp = 16; break; case GL_COMPRESSED_RG_RGTC2: bpp = 16; break;
} }
image.setdata(NULL, d.dwWidth, d.dwHeight, bpp, !supported || force > 0 ? 1 : d.dwMipMapCount, 4, format); image.setdata(nullptr, d.dwWidth, d.dwHeight, bpp, !supported || force > 0 ? 1 : d.dwMipMapCount, 4, format);
size_t size = image.calcsize(); size_t size = image.calcsize();
if(f->read(image.data, size) != size) { delete f; image.cleanup(); return false; } if(f->read(image.data, size) != size) { delete f; image.cleanup(); return false; }
delete f; delete f;
@ -3627,7 +3627,7 @@ static void gendds(char *infile, char *outfile)
} }
COMMAND(gendds, "ss"); COMMAND(gendds, "ss");
static void writepngchunk(stream *f, const char *type, uchar *data = NULL, uint len = 0) static void writepngchunk(stream *f, const char *type, uchar *data = nullptr, uint len = 0)
{ {
f->putbig<uint>(len); f->putbig<uint>(len);
f->write(type, 4); f->write(type, 4);
@ -3672,9 +3672,9 @@ void savepng(const char *filename, ImageData &image, bool flip)
crc = crc32(crc, (const Bytef *)"IDAT", 4); crc = crc32(crc, (const Bytef *)"IDAT", 4);
z_stream z; z_stream z;
z.zalloc = NULL; z.zalloc = nullptr;
z.zfree = NULL; z.zfree = nullptr;
z.opaque = NULL; z.opaque = nullptr;
if(deflateInit(&z, compresspng) != Z_OK) if(deflateInit(&z, compresspng) != Z_OK)
goto error; goto error;
@ -3912,7 +3912,7 @@ static void screenshot(char *filename)
else else
{ {
string sstime; string sstime;
time_t t = time(NULL); time_t t = time(nullptr);
size_t len = strftime(sstime, sizeof(sstime), "%Y-%m-%d_%H.%M.%S", localtime(&t)); size_t len = strftime(sstime, sizeof(sstime), "%Y-%m-%d_%H.%M.%S", localtime(&t));
sstime[min(len, sizeof(sstime)-1)] = '\0'; sstime[min(len, sizeof(sstime)-1)] = '\0';
concatstring(buf, sstime); concatstring(buf, sstime);

View File

@ -15,17 +15,17 @@ struct ImageData
void (*freefunc)(void *); void (*freefunc)(void *);
ImageData() ImageData()
: data(NULL), owner(NULL), freefunc(NULL) : data(nullptr), owner(nullptr), freefunc(nullptr)
{} {}
ImageData(int nw, int nh, int nbpp, int nlevels = 1, int nalign = 0, GLenum ncompressed = GL_FALSE) ImageData(int nw, int nh, int nbpp, int nlevels = 1, int nalign = 0, GLenum ncompressed = GL_FALSE)
{ {
setdata(NULL, nw, nh, nbpp, nlevels, nalign, ncompressed); setdata(nullptr, nw, nh, nbpp, nlevels, nalign, ncompressed);
} }
ImageData(int nw, int nh, int nbpp, uchar *data) ImageData(int nw, int nh, int nbpp, uchar *data)
: owner(NULL), freefunc(NULL) : owner(nullptr), freefunc(nullptr)
{ {
setdata(data, nw, nh, nbpp); setdata(data, nw, nh, nbpp);
} }
@ -43,7 +43,7 @@ struct ImageData
pitch = align ? 0 : w*bpp; pitch = align ? 0 : w*bpp;
compressed = ncompressed; compressed = ncompressed;
data = ndata ? ndata : new uchar[calcsize()]; data = ndata ? ndata : new uchar[calcsize()];
if(!ndata) { owner = this; freefunc = NULL; } if(!ndata) { owner = this; freefunc = nullptr; }
} }
int calclevelsize(int level) const { return ((max(w>>level, 1)+align-1)/align)*((max(h>>level, 1)+align-1)/align)*bpp; } int calclevelsize(int level) const { return ((max(w>>level, 1)+align-1)/align)*((max(h>>level, 1)+align-1)/align)*bpp; }
@ -67,9 +67,9 @@ struct ImageData
void disown() void disown()
{ {
data = NULL; data = nullptr;
owner = NULL; owner = nullptr;
freefunc = NULL; freefunc = nullptr;
} }
void cleanup() void cleanup()
@ -122,7 +122,7 @@ struct Texture
GLuint id; GLuint id;
uchar *alphamask; uchar *alphamask;
Texture() : alphamask(NULL) {} Texture() : alphamask(nullptr) {}
}; };
enum enum
@ -174,7 +174,7 @@ struct VSlot
float refractscale; float refractscale;
vec refractcolor; vec refractcolor;
VSlot(Slot *slot = NULL, int index = -1) : slot(slot), next(NULL), index(index), changed(0) VSlot(Slot *slot = nullptr, int index = -1) : slot(slot), next(nullptr), index(index), changed(0)
{ {
reset(); reset();
if(slot) addvariant(slot); if(slot) addvariant(slot);
@ -218,7 +218,7 @@ struct Slot
string name; string name;
int combined; int combined;
Tex() : t(NULL), combined(-1) {} Tex() : t(nullptr), combined(-1) {}
}; };
int index, smooth; int index, smooth;
@ -231,7 +231,7 @@ struct Slot
char *grass; char *grass;
Texture *grasstex, *thumbnail; Texture *grasstex, *thumbnail;
Slot(int index = -1) : index(index), variants(NULL), grass(NULL) { reset(); } Slot(int index = -1) : index(index), variants(nullptr), grass(nullptr) { reset(); }
virtual ~Slot() {} virtual ~Slot() {}
virtual int type() const { return OCTA; } virtual int type() const { return OCTA; }
@ -254,24 +254,24 @@ struct Slot
{ {
smooth = -1; smooth = -1;
sts.setsize(0); sts.setsize(0);
shader = NULL; shader = nullptr;
params.setsize(0); params.setsize(0);
loaded = false; loaded = false;
texmask = 0; texmask = 0;
DELETEA(grass); DELETEA(grass);
grasstex = NULL; grasstex = nullptr;
thumbnail = NULL; thumbnail = nullptr;
} }
void cleanup() void cleanup()
{ {
loaded = false; loaded = false;
grasstex = NULL; grasstex = nullptr;
thumbnail = NULL; thumbnail = nullptr;
loopv(sts) loopv(sts)
{ {
Tex &t = sts[i]; Tex &t = sts[i];
t.t = NULL; t.t = nullptr;
t.combined = -1; t.combined = -1;
} }
} }

View File

@ -155,8 +155,8 @@ struct vertmodel : animmodel
vdata += voffset; vdata += voffset;
const vert * RESTRICT vert1 = &verts[as.cur.fr1 * numverts], const vert * RESTRICT vert1 = &verts[as.cur.fr1 * numverts],
* RESTRICT vert2 = &verts[as.cur.fr2 * numverts], * RESTRICT vert2 = &verts[as.cur.fr2 * numverts],
* RESTRICT pvert1 = as.interp<1 ? &verts[as.prev.fr1 * numverts] : NULL, * RESTRICT pvert1 = as.interp<1 ? &verts[as.prev.fr1 * numverts] : nullptr,
* RESTRICT pvert2 = as.interp<1 ? &verts[as.prev.fr2 * numverts] : NULL; * RESTRICT pvert2 = as.interp<1 ? &verts[as.prev.fr2 * numverts] : nullptr;
#define ipvert(attrib, type) v.attrib.lerp(vert1[i].attrib, vert2[i].attrib, as.cur.t) #define ipvert(attrib, type) v.attrib.lerp(vert1[i].attrib, vert2[i].attrib, as.cur.t)
#define ipvertp(attrib, type) v.attrib.lerp(type().lerp(pvert1[i].attrib, pvert2[i].attrib, as.prev.t), type().lerp(vert1[i].attrib, vert2[i].attrib, as.cur.t), as.interp) #define ipvertp(attrib, type) v.attrib.lerp(type().lerp(pvert1[i].attrib, pvert2[i].attrib, as.prev.t), type().lerp(vert1[i].attrib, vert2[i].attrib, as.cur.t), as.interp)
if(as.interp<1) loopi(numverts) { T &v = vdata[i]; ipvertp(pos, vec); ipvertp(tangent, vec4); } if(as.interp<1) loopi(numverts) { T &v = vdata[i]; ipvertp(pos, vec); ipvertp(tangent, vec4); }
@ -179,7 +179,7 @@ struct vertmodel : animmodel
char *name; char *name;
matrix4x3 matrix; matrix4x3 matrix;
tag() : name(NULL) {} tag() : name(nullptr) {}
~tag() { DELETEA(name); } ~tag() { DELETEA(name); }
}; };
@ -197,7 +197,7 @@ struct vertmodel : animmodel
int vlen, vertsize; int vlen, vertsize;
uchar *vdata; uchar *vdata;
vertmeshgroup() : numframes(0), tags(NULL), numtags(0), edata(NULL), ebuf(0), vlen(0), vertsize(0), vdata(NULL) vertmeshgroup() : numframes(0), tags(nullptr), numtags(0), edata(nullptr), ebuf(0), vlen(0), vertsize(0), vdata(nullptr)
{ {
} }
@ -376,7 +376,7 @@ struct vertmodel : animmodel
return; return;
} }
vbocacheentry *vc = NULL; vbocacheentry *vc = nullptr;
if(numframes<=1) vc = vbocache; if(numframes<=1) vc = vbocache;
else else
{ {
@ -424,7 +424,7 @@ struct vertmodel : animmodel
meshgroup *loadmeshes(const char *name, float smooth = 2) meshgroup *loadmeshes(const char *name, float smooth = 2)
{ {
vertmeshgroup *group = newmeshes(); vertmeshgroup *group = newmeshes();
if(!group->load(name, smooth)) { delete group; return NULL; } if(!group->load(name, smooth)) { delete group; return nullptr; }
return group; return group;
} }
@ -433,7 +433,7 @@ struct vertmodel : animmodel
if(!meshgroups.access(name)) if(!meshgroups.access(name))
{ {
meshgroup *group = loadmeshes(name, smooth); meshgroup *group = loadmeshes(name, smooth);
if(!group) return NULL; if(!group) return nullptr;
meshgroups.add(group); meshgroups.add(group);
} }
return meshgroups[name]; return meshgroups[name];

View File

@ -79,7 +79,7 @@ VARFP(waterfallenv, 0, 1, 1, preloadwatershaders());
VARFP(vertwater, 0, 1, 1, allchanged()); VARFP(vertwater, 0, 1, 1, allchanged());
static Texture *caustictex[NUMCAUSTICS] = { NULL }; static Texture *caustictex[NUMCAUSTICS] = { nullptr };
void loadcaustics(bool force) void loadcaustics(bool force)
{ {
@ -98,7 +98,7 @@ void loadcaustics(bool force)
#if 0 #if 0
static void cleanupcaustics() static void cleanupcaustics()
{ {
loopi(NUMCAUSTICS) caustictex[i] = NULL; loopi(NUMCAUSTICS) caustictex[i] = nullptr;
} }
#endif #endif
@ -442,7 +442,7 @@ void preloadwatershaders(bool force)
static float wfwave = 0.0f, wfscroll = 0.0f, wfxscale = 1.0f, wfyscale = 1.0f; static float wfwave = 0.0f, wfscroll = 0.0f, wfxscale = 1.0f, wfyscale = 1.0f;
static void renderwaterfall(const materialsurface &m, float offset, const vec *normal = NULL) static void renderwaterfall(const materialsurface &m, float offset, const vec *normal = nullptr)
{ {
if(gle::attribbuf.empty()) if(gle::attribbuf.empty())
{ {
@ -651,12 +651,12 @@ void renderwater()
#define SETWATERSHADER(which, name) \ #define SETWATERSHADER(which, name) \
do { \ do { \
static Shader *name##shader = NULL; \ static Shader *name##shader = nullptr; \
if(!name##shader) name##shader = lookupshaderbyname(#name); \ if(!name##shader) name##shader = lookupshaderbyname(#name); \
which##shader = name##shader; \ which##shader = name##shader; \
} while(0) } while(0)
Shader *aboveshader = NULL; Shader *aboveshader = nullptr;
if(drawtex == DRAWTEX_MINIMAP) SETWATERSHADER(above, waterminimap); if(drawtex == DRAWTEX_MINIMAP) SETWATERSHADER(above, waterminimap);
else if(caustics && causticscale && causticmillis) else if(caustics && causticscale && causticmillis)
{ {
@ -671,7 +671,7 @@ void renderwater()
else SETWATERSHADER(above, water); else SETWATERSHADER(above, water);
} }
Shader *belowshader = NULL; Shader *belowshader = nullptr;
if(drawtex != DRAWTEX_MINIMAP) SETWATERSHADER(below, underwater); if(drawtex != DRAWTEX_MINIMAP) SETWATERSHADER(below, underwater);
aboveshader->set(); aboveshader->set();

View File

@ -101,13 +101,13 @@ enum
MODOE_CHANGED = 1<<2 MODOE_CHANGED = 1<<2
}; };
static void modifyoctaentity(int flags, int id, extentity &e, cube *c, const ivec &cor, int size, const ivec &bo, const ivec &br, int leafsize, vtxarray *lastva = NULL) static void modifyoctaentity(int flags, int id, extentity &e, cube *c, const ivec &cor, int size, const ivec &bo, const ivec &br, int leafsize, vtxarray *lastva = nullptr)
{ {
loopoctabox(cor, size, bo, br) loopoctabox(cor, size, bo, br)
{ {
ivec o(i, cor, size); ivec o(i, cor, size);
vtxarray *va = c[i].ext && c[i].ext->va ? c[i].ext->va : lastva; vtxarray *va = c[i].ext && c[i].ext->va ? c[i].ext->va : lastva;
if(c[i].children != NULL && size > leafsize) if(c[i].children != nullptr && size > leafsize)
modifyoctaentity(flags, id, e, c[i].children, o, size>>1, bo, br, leafsize, va); modifyoctaentity(flags, id, e, c[i].children, o, size>>1, bo, br, leafsize, va);
else if(flags&MODOE_ADD) else if(flags&MODOE_ADD)
{ {
@ -205,7 +205,7 @@ static void modifyoctaentity(int flags, int id, extentity &e, cube *c, const ive
if(oe.mapmodels.empty() && oe.decals.empty() && oe.other.empty()) if(oe.mapmodels.empty() && oe.decals.empty() && oe.other.empty())
freeoctaentities(c[i]); freeoctaentities(c[i]);
} }
if(c[i].ext && c[i].ext->ents) c[i].ext->ents->query = NULL; if(c[i].ext && c[i].ext->ents) c[i].ext->ents->query = nullptr;
if(va && va!=lastva) if(va && va!=lastva)
{ {
if(lastva) if(lastva)
@ -282,7 +282,7 @@ void freeoctaentities(cube &c)
if(c.ext->ents) if(c.ext->ents)
{ {
delete c.ext->ents; delete c.ext->ents;
c.ext->ents = NULL; c.ext->ents = nullptr;
} }
} }
@ -387,7 +387,7 @@ static void entadd(int id)
static undoblock *newundoent() static undoblock *newundoent()
{ {
int numents = entgroup.length(); int numents = entgroup.length();
if(numents <= 0) return NULL; if(numents <= 0) return nullptr;
undoblock *u = (undoblock *)new uchar[sizeof(undoblock) + numents*sizeof(undoent)]; undoblock *u = (undoblock *)new uchar[sizeof(undoblock) + numents*sizeof(undoent)];
u->numents = numents; u->numents = numents;
undoent *e = (undoent *)(u + 1); undoent *e = (undoent *)(u + 1);
@ -412,8 +412,8 @@ static void makeundoent()
static void detachentity(extentity &e) static void detachentity(extentity &e)
{ {
if(!e.attached) return; if(!e.attached) return;
e.attached->attached = NULL; e.attached->attached = nullptr;
e.attached = NULL; e.attached = nullptr;
} }
VAR(attachradius, 1, 100, 1000); VAR(attachradius, 1, 100, 1000);
@ -554,7 +554,7 @@ static void entrotate(int *cw)
void entselectionbox(const entity &e, vec &eo, vec &es) void entselectionbox(const entity &e, vec &eo, vec &es)
{ {
model *m = NULL; model *m = nullptr;
const char *mname = entities::entmodel(e); const char *mname = entities::entmodel(e);
if(mname && (m = loadmodel(mname))) if(mname && (m = loadmodel(mname)))
{ {
@ -1072,7 +1072,7 @@ static extentity *newentity(bool local, const vec &o, int type, int v1, int v2,
{ {
idx = -1; idx = -1;
for(int i = keepents; i < ents.length(); i++) if(ents[i]->type == ET_EMPTY) { idx = i; break; } for(int i = keepents; i < ents.length(); i++) if(ents[i]->type == ET_EMPTY) { idx = i; break; }
if(idx < 0 && ents.length() >= MAXENTS) { conoutf("too many entities"); return NULL; } if(idx < 0 && ents.length() >= MAXENTS) { conoutf("too many entities"); return nullptr; }
} }
else while(ents.length() < idx) ents.add(entities::newentity())->type = ET_EMPTY; else while(ents.length() < idx) ents.add(entities::newentity())->type = ET_EMPTY;
extentity &e = *entities::newentity(); extentity &e = *entities::newentity();
@ -1424,7 +1424,7 @@ static void shrinkmap()
if(!worldroot[octant].children) subdividecube(worldroot[octant], false, false); if(!worldroot[octant].children) subdividecube(worldroot[octant], false, false);
cube *root = worldroot[octant].children; cube *root = worldroot[octant].children;
worldroot[octant].children = NULL; worldroot[octant].children = nullptr;
freeocta(worldroot); freeocta(worldroot);
worldroot = root; worldroot = root;
worldscale--; worldscale--;
@ -1441,7 +1441,7 @@ static void shrinkmap()
conoutf("shrunk map to size %d", worldscale); conoutf("shrunk map to size %d", worldscale);
} }
static void newmap(int *i) { bool force = !isconnected(); if(force) game::forceedit(""); if(emptymap(*i, force, NULL)) game::newmap(max(*i, 0)); } static void newmap(int *i) { bool force = !isconnected(); if(force) game::forceedit(""); if(emptymap(*i, force, nullptr)) game::newmap(max(*i, 0)); }
static void mapenlarge() { if(enlargemap(false)) game::newmap(-1); } static void mapenlarge() { if(enlargemap(false)) game::newmap(-1); }
COMMAND(newmap, "i"); COMMAND(newmap, "i");
COMMAND(mapenlarge, ""); COMMAND(mapenlarge, "");

View File

@ -50,7 +50,7 @@ struct mapheader
VARR(mapversion, 1, MAPVERSION, 0); VARR(mapversion, 1, MAPVERSION, 0);
static void validmapname(char *dst, const char *src, const char *prefix = NULL, const char *alt = "untitled", size_t maxlen = 100) static void validmapname(char *dst, const char *src, const char *prefix = nullptr, const char *alt = "untitled", size_t maxlen = 100)
{ {
if(prefix) while(*prefix) *dst++ = *prefix++; if(prefix) while(*prefix) *dst++ = *prefix++;
const char *start = dst; const char *start = dst;
@ -107,7 +107,7 @@ static bool loadmapheader(stream *f, const char *ogzname, mapheader &hdr, octahe
static string ogzname, cfgname, picname; static string ogzname, cfgname, picname;
static void setmapfilenames(const char *fname, const char *cname = NULL) static void setmapfilenames(const char *fname, const char *cname = nullptr)
{ {
string name; string name;
validmapname(name, fname); validmapname(name, fname);
@ -508,13 +508,13 @@ static void loadvslots(stream *f, int numvslots)
int changed = f->getlil<int>(); int changed = f->getlil<int>();
if(changed < 0) if(changed < 0)
{ {
loopi(-changed) vslots.add(new VSlot(NULL, vslots.length())); loopi(-changed) vslots.add(new VSlot(nullptr, vslots.length()));
numvslots += changed; numvslots += changed;
} }
else else
{ {
prev[vslots.length()] = f->getlil<int>(); prev[vslots.length()] = f->getlil<int>();
loadvslot(f, *vslots.add(new VSlot(NULL, vslots.length())), changed); loadvslot(f, *vslots.add(new VSlot(nullptr, vslots.length())), changed);
numvslots--; numvslots--;
} }
} }
@ -654,7 +654,7 @@ bool load_world(const char *mname, const char *cname) // still supports a
renderprogress(0, "clearing world..."); renderprogress(0, "clearing world...");
freeocta(worldroot); freeocta(worldroot);
worldroot = NULL; worldroot = nullptr;
int worldscale = 0; int worldscale = 0;
while(1<<worldscale < hdr.worldsize) worldscale++; while(1<<worldscale < hdr.worldsize) worldscale++;
@ -742,7 +742,7 @@ bool load_world(const char *mname, const char *cname) // still supports a
vector<extentity *> &ents = entities::getents(); vector<extentity *> &ents = entities::getents();
int einfosize = entities::extraentinfosize(); int einfosize = entities::extraentinfosize();
char *ebuf = einfosize > 0 ? new char[einfosize] : NULL; char *ebuf = einfosize > 0 ? new char[einfosize] : nullptr;
loopi(min(hdr.numents, MAXENTS)) loopi(min(hdr.numents, MAXENTS))
{ {
extentity &e = *entities::newentity(); extentity &e = *entities::newentity();
@ -951,7 +951,7 @@ static void writecollideobj(char *name)
return; return;
} }
vector<extentity *> &ents = entities::getents(); vector<extentity *> &ents = entities::getents();
extentity *mm = NULL; extentity *mm = nullptr;
loopv(entgroup) loopv(entgroup)
{ {
extentity &e = *ents[entgroup[i]]; extentity &e = *ents[entgroup[i]];

View File

@ -5,6 +5,6 @@
uint getmapcrc(); uint getmapcrc();
void clearmapcrc(); void clearmapcrc();
bool load_world(const char *mname, const char *cname = NULL); bool load_world(const char *mname, const char *cname = nullptr);
#endif #endif

View File

@ -11,7 +11,7 @@ extern void clearmainmenu();
namespace game namespace game
{ {
dynent *player1 = NULL; // our client dynent *player1 = nullptr; // our client
string clientmap = ""; string clientmap = "";
bool connected = false; bool connected = false;
@ -132,12 +132,12 @@ namespace game
const char *getmapinfo() const char *getmapinfo()
{ {
return NULL; return nullptr;
} }
const char *getscreenshotinfo() const char *getscreenshotinfo()
{ {
return NULL; return nullptr;
} }
void physicstrigger(physent *d, bool local, int floorlevel, int waterlevel, int material) void physicstrigger(physent *d, bool local, int floorlevel, int waterlevel, int material)
@ -153,7 +153,7 @@ namespace game
dynent *iterdynents(int i) dynent *iterdynents(int i)
{ {
if(!i) return player1; if(!i) return player1;
return NULL; return nullptr;
} }
bool needminimap() { return false; } bool needminimap() { return false; }
@ -229,7 +229,7 @@ namespace game
void newmap(int size) void newmap(int size)
{ {
if(size>=0) emptymap(size, true, NULL); if(size>=0) emptymap(size, true, nullptr);
else enlargemap(true); else enlargemap(true);
connected = true; connected = true;
} }
@ -288,7 +288,7 @@ namespace entities
const char *entmodel(const entity &e) const char *entmodel(const entity &e)
{ {
return NULL; return nullptr;
} }
void preloadentities() void preloadentities()

View File

@ -75,7 +75,7 @@ uint randomMT()
int cur = next; int cur = next;
if(++next >= N) if(++next >= N)
{ {
if(next > N) { seedMT(5489U + time(NULL)); cur = next++; } if(next > N) { seedMT(5489U + time(nullptr)); cur = next++; }
else next = 0; else next = 0;
} }
uint y = (state[cur] & 0x80000000U) | (state[next] & 0x7FFFFFFFU); uint y = (state[cur] & 0x80000000U) | (state[next] & 0x7FFFFFFFU);

View File

@ -11,11 +11,6 @@
#include <SDL.h> #include <SDL.h>
#include <zlib.h> #include <zlib.h>
#ifdef NULL
#undef NULL
#endif
#define NULL 0
typedef unsigned char uchar; typedef unsigned char uchar;
typedef unsigned short ushort; typedef unsigned short ushort;
typedef unsigned int uint; typedef unsigned int uint;
@ -274,7 +269,7 @@ struct databuf
int len, maxlen; int len, maxlen;
uchar flags; uchar flags;
databuf() : buf(NULL), len(0), maxlen(0), flags(0) {} databuf() : buf(nullptr), len(0), maxlen(0), flags(0) {}
template<class U> template<class U>
databuf(T *buf, U maxlen) : buf(buf), len(0), maxlen((int)maxlen), flags(0) {} databuf(T *buf, U maxlen) : buf(buf), len(0), maxlen((int)maxlen), flags(0) {}
@ -559,11 +554,11 @@ template <class T> struct vector
T *buf; T *buf;
int alen, ulen; int alen, ulen;
vector() : buf(NULL), alen(0), ulen(0) vector() : buf(nullptr), alen(0), ulen(0)
{ {
} }
vector(const vector &v) : buf(NULL), alen(0), ulen(0) vector(const vector &v) : buf(nullptr), alen(0), ulen(0)
{ {
*this = v; *this = v;
} }
@ -629,7 +624,7 @@ template <class T> struct vector
T &operator[](int i) { ASSERT(i>=0 && i<ulen); return buf[i]; } T &operator[](int i) { ASSERT(i>=0 && i<ulen); return buf[i]; }
const T &operator[](int i) const { ASSERT(i >= 0 && i<ulen); return buf[i]; } const T &operator[](int i) const { ASSERT(i >= 0 && i<ulen); return buf[i]; }
T *disown() { T *r = buf; buf = NULL; alen = ulen = 0; return r; } T *disown() { T *r = buf; buf = nullptr; alen = ulen = 0; return r; }
void shrink(int i) { ASSERT(i<=ulen); if(isclass<T>::no) ulen = i; else while(ulen>i) drop(); } void shrink(int i) { ASSERT(i<=ulen); if(isclass<T>::no) ulen = i; else while(ulen>i) drop(); }
void setsize(int i) { ASSERT(i<=ulen); ulen = i; } void setsize(int i) { ASSERT(i<=ulen); ulen = i; }
@ -882,8 +877,8 @@ template<class H, class E, class K, class T> struct hashbase
: size(size) : size(size)
{ {
numelems = 0; numelems = 0;
chunks = NULL; chunks = nullptr;
unused = NULL; unused = nullptr;
chains = new chain *[size]; chains = new chain *[size];
memset(chains, 0, size*sizeof(chain *)); memset(chains, 0, size*sizeof(chain *));
} }
@ -932,7 +927,7 @@ template<class H, class E, class K, class T> struct hashbase
template<class U> template<class U>
T *access(const U &key) T *access(const U &key)
{ {
HTFIND(&, NULL); HTFIND(&, nullptr);
} }
template<class U, class V> template<class U, class V>
@ -994,7 +989,7 @@ template<class H, class E, class K, class T> struct hashbase
} }
c->next = unused; c->next = unused;
unused = chains[i]; unused = chains[i];
chains[i] = NULL; chains[i] = nullptr;
} }
numelems = 0; numelems = 0;
} }
@ -1013,7 +1008,7 @@ template<class H, class E, class K, class T> struct hashbase
if(!numelems) return; if(!numelems) return;
memset(chains, 0, size*sizeof(chain *)); memset(chains, 0, size*sizeof(chain *));
numelems = 0; numelems = 0;
unused = NULL; unused = nullptr;
deletechunks(); deletechunks();
} }
@ -1297,12 +1292,12 @@ static inline uchar cubeupper(uchar c)
extern const uchar cubeupperchars[256]; extern const uchar cubeupperchars[256];
return cubeupperchars[c]; return cubeupperchars[c];
} }
extern size_t decodeutf8(uchar *dst, size_t dstlen, const uchar *src, size_t srclen, size_t *carry = NULL); extern size_t decodeutf8(uchar *dst, size_t dstlen, const uchar *src, size_t srclen, size_t *carry = nullptr);
extern size_t encodeutf8(uchar *dstbuf, size_t dstlen, const uchar *srcbuf, size_t srclen, size_t *carry = NULL); extern size_t encodeutf8(uchar *dstbuf, size_t dstlen, const uchar *srcbuf, size_t srclen, size_t *carry = nullptr);
extern string homedir; extern string homedir;
extern char *makerelpath(const char *dir, const char *file, const char *prefix = NULL, const char *cmd = NULL); extern char *makerelpath(const char *dir, const char *file, const char *prefix = nullptr, const char *cmd = nullptr);
extern char *path(char *s); extern char *path(char *s);
extern char *path(const char *s, bool copy); extern char *path(const char *s, bool copy);
extern const char *parentdir(const char *directory); extern const char *parentdir(const char *directory);
@ -1317,8 +1312,8 @@ extern stream *openrawfile(const char *filename, const char *mode);
extern stream *openzipfile(const char *filename, const char *mode); extern stream *openzipfile(const char *filename, const char *mode);
extern stream *openfile(const char *filename, const char *mode); extern stream *openfile(const char *filename, const char *mode);
extern stream *opentempfile(const char *filename, const char *mode); extern stream *opentempfile(const char *filename, const char *mode);
extern stream *opengzfile(const char *filename, const char *mode, stream *file = NULL, int level = Z_BEST_COMPRESSION); extern stream *opengzfile(const char *filename, const char *mode, stream *file = nullptr, int level = Z_BEST_COMPRESSION);
extern stream *openutf8file(const char *filename, const char *mode, stream *file = NULL); extern stream *openutf8file(const char *filename, const char *mode, stream *file = nullptr);
extern char *loadfile(const char *fn, size_t *size, bool utf8 = true); extern char *loadfile(const char *fn, size_t *size, bool utf8 = true);
extern bool listdir(const char *dir, bool rel, const char *ext, vector<char *> &files); extern bool listdir(const char *dir, bool rel, const char *ext, vector<char *> &files);
extern int listfiles(const char *dir, const char *ext, vector<char *> &files); extern int listfiles(const char *dir, const char *ext, vector<char *> &files);

View File

@ -147,35 +147,35 @@ struct ident
ident() {} ident() {}
// ID_VAR // ID_VAR
ident(int t, const char *n, int m, int x, int *s, void *f = NULL, int flags = 0) ident(int t, const char *n, int m, int x, int *s, void *f = nullptr, int flags = 0)
: type(t), flags(flags | (m > x ? IDF_READONLY : 0)), name(n), minval(m), maxval(x), fun((identfun)f) : type(t), flags(flags | (m > x ? IDF_READONLY : 0)), name(n), minval(m), maxval(x), fun((identfun)f)
{ storage.i = s; } { storage.i = s; }
// ID_FVAR // ID_FVAR
ident(int t, const char *n, float m, float x, float *s, void *f = NULL, int flags = 0) ident(int t, const char *n, float m, float x, float *s, void *f = nullptr, int flags = 0)
: type(t), flags(flags | (m > x ? IDF_READONLY : 0)), name(n), minvalf(m), maxvalf(x), fun((identfun)f) : type(t), flags(flags | (m > x ? IDF_READONLY : 0)), name(n), minvalf(m), maxvalf(x), fun((identfun)f)
{ storage.f = s; } { storage.f = s; }
// ID_SVAR // ID_SVAR
ident(int t, const char *n, char **s, void *f = NULL, int flags = 0) ident(int t, const char *n, char **s, void *f = nullptr, int flags = 0)
: type(t), flags(flags), name(n), fun((identfun)f) : type(t), flags(flags), name(n), fun((identfun)f)
{ storage.s = s; } { storage.s = s; }
// ID_ALIAS // ID_ALIAS
ident(int t, const char *n, char *a, int flags) ident(int t, const char *n, char *a, int flags)
: type(t), valtype(VAL_STR), flags(flags), name(n), code(NULL), stack(NULL) : type(t), valtype(VAL_STR), flags(flags), name(n), code(nullptr), stack(nullptr)
{ val.s = a; } { val.s = a; }
ident(int t, const char *n, int a, int flags) ident(int t, const char *n, int a, int flags)
: type(t), valtype(VAL_INT), flags(flags), name(n), code(NULL), stack(NULL) : type(t), valtype(VAL_INT), flags(flags), name(n), code(nullptr), stack(nullptr)
{ val.i = a; } { val.i = a; }
ident(int t, const char *n, float a, int flags) ident(int t, const char *n, float a, int flags)
: type(t), valtype(VAL_FLOAT), flags(flags), name(n), code(NULL), stack(NULL) : type(t), valtype(VAL_FLOAT), flags(flags), name(n), code(nullptr), stack(nullptr)
{ val.f = a; } { val.f = a; }
ident(int t, const char *n, int flags) ident(int t, const char *n, int flags)
: type(t), valtype(VAL_NULL), flags(flags), name(n), code(NULL), stack(NULL) : type(t), valtype(VAL_NULL), flags(flags), name(n), code(nullptr), stack(nullptr)
{} {}
ident(int t, const char *n, const tagval &v, int flags) ident(int t, const char *n, const tagval &v, int flags)
: type(t), valtype(v.type), flags(flags), name(n), code(NULL), stack(NULL) : type(t), valtype(v.type), flags(flags), name(n), code(nullptr), stack(nullptr)
{ val = v; } { val = v; }
// ID_COMMAND // ID_COMMAND
ident(int t, const char *n, const char *args, uint argmask, int numargs, void *f = NULL, int flags = 0) ident(int t, const char *n, const char *args, uint argmask, int numargs, void *f = nullptr, int flags = 0)
: type(t), numargs(numargs), flags(flags), name(n), args(args), argmask(argmask), fun((identfun)f) : type(t), numargs(numargs), flags(flags), name(n), args(args), argmask(argmask), fun((identfun)f)
{} {}
@ -223,7 +223,7 @@ extern void result(const char *s);
static inline int parseint(const char *s) static inline int parseint(const char *s)
{ {
return int(strtoul(s, NULL, 0)); return int(strtoul(s, nullptr, 0));
} }
#define PARSEFLOAT(name, type) \ #define PARSEFLOAT(name, type) \
@ -315,13 +315,13 @@ inline void ident::getcval(tagval &v) const
} }
// nasty macros for registering script functions, abuses globals to avoid excessive infrastructure // nasty macros for registering script functions, abuses globals to avoid excessive infrastructure
#define KEYWORD(name, type) UNUSED static bool __dummy_##type = addcommand(#name, (identfun)NULL, NULL, type) #define KEYWORD(name, type) UNUSED static bool __dummy_##type = addcommand(#name, (identfun)nullptr, nullptr, type)
#define COMMANDKN(name, type, fun, nargs) UNUSED static bool __dummy_##fun = addcommand(#name, (identfun)fun, nargs, type) #define COMMANDKN(name, type, fun, nargs) UNUSED static bool __dummy_##fun = addcommand(#name, (identfun)fun, nargs, type)
#define COMMANDK(name, type, nargs) COMMANDKN(name, type, name, nargs) #define COMMANDK(name, type, nargs) COMMANDKN(name, type, name, nargs)
#define COMMANDN(name, fun, nargs) COMMANDKN(name, ID_COMMAND, fun, nargs) #define COMMANDN(name, fun, nargs) COMMANDKN(name, ID_COMMAND, fun, nargs)
#define COMMAND(name, nargs) COMMANDN(name, name, nargs) #define COMMAND(name, nargs) COMMANDN(name, name, nargs)
#define _VAR(name, global, min, cur, max, persist) int global = variable(#name, min, cur, max, &global, NULL, persist) #define _VAR(name, global, min, cur, max, persist) int global = variable(#name, min, cur, max, &global, nullptr, persist)
#define VARN(name, global, min, cur, max) _VAR(name, global, min, cur, max, 0) #define VARN(name, global, min, cur, max) _VAR(name, global, min, cur, max, 0)
#define VARNP(name, global, min, cur, max) _VAR(name, global, min, cur, max, IDF_PERSIST) #define VARNP(name, global, min, cur, max) _VAR(name, global, min, cur, max, IDF_PERSIST)
#define VARNR(name, global, min, cur, max) _VAR(name, global, min, cur, max, IDF_OVERRIDE) #define VARNR(name, global, min, cur, max) _VAR(name, global, min, cur, max, IDF_OVERRIDE)
@ -339,7 +339,7 @@ inline void ident::getcval(tagval &v) const
#define VARMP(name, min, cur, max, scale) _VARM(name, min, cur, max, scale, IDF_PERSIST) #define VARMP(name, min, cur, max, scale) _VARM(name, min, cur, max, scale, IDF_PERSIST)
#define VARMR(name, min, cur, max, scale) _VARM(name, min, cur, max, scale, IDF_OVERRIDE) #define VARMR(name, min, cur, max, scale) _VARM(name, min, cur, max, scale, IDF_OVERRIDE)
#define _HVAR(name, global, min, cur, max, persist) int global = variable(#name, min, cur, max, &global, NULL, persist | IDF_HEX) #define _HVAR(name, global, min, cur, max, persist) int global = variable(#name, min, cur, max, &global, nullptr, persist | IDF_HEX)
#define HVARN(name, global, min, cur, max) _HVAR(name, global, min, cur, max, 0) #define HVARN(name, global, min, cur, max) _HVAR(name, global, min, cur, max, 0)
#define HVARNP(name, global, min, cur, max) _HVAR(name, global, min, cur, max, IDF_PERSIST) #define HVARNP(name, global, min, cur, max) _HVAR(name, global, min, cur, max, IDF_PERSIST)
#define HVARNR(name, global, min, cur, max) _HVAR(name, global, min, cur, max, IDF_OVERRIDE) #define HVARNR(name, global, min, cur, max) _HVAR(name, global, min, cur, max, IDF_OVERRIDE)
@ -370,7 +370,7 @@ inline void ident::getcval(tagval &v) const
#define CVAR1FP(name, cur, body) _CVAR1(name, cur, body, IDF_PERSIST) #define CVAR1FP(name, cur, body) _CVAR1(name, cur, body, IDF_PERSIST)
#define CVAR1FR(name, cur, body) _CVAR1(name, cur, body, IDF_OVERRIDE) #define CVAR1FR(name, cur, body) _CVAR1(name, cur, body, IDF_OVERRIDE)
#define _FVAR(name, global, min, cur, max, persist) float global = fvariable(#name, min, cur, max, &global, NULL, persist) #define _FVAR(name, global, min, cur, max, persist) float global = fvariable(#name, min, cur, max, &global, nullptr, persist)
#define FVARN(name, global, min, cur, max) _FVAR(name, global, min, cur, max, 0) #define FVARN(name, global, min, cur, max) _FVAR(name, global, min, cur, max, 0)
#define FVARNP(name, global, min, cur, max) _FVAR(name, global, min, cur, max, IDF_PERSIST) #define FVARNP(name, global, min, cur, max) _FVAR(name, global, min, cur, max, IDF_PERSIST)
#define FVARNR(name, global, min, cur, max) _FVAR(name, global, min, cur, max, IDF_OVERRIDE) #define FVARNR(name, global, min, cur, max) _FVAR(name, global, min, cur, max, IDF_OVERRIDE)
@ -385,7 +385,7 @@ inline void ident::getcval(tagval &v) const
#define FVARFNP(name, global, min, cur, max, body) _FVARF(name, global, min, cur, max, body, IDF_PERSIST) #define FVARFNP(name, global, min, cur, max, body) _FVARF(name, global, min, cur, max, body, IDF_PERSIST)
#define FVARFNR(name, global, min, cur, max, body) _FVARF(name, global, min, cur, max, body, IDF_OVERRIDE) #define FVARFNR(name, global, min, cur, max, body) _FVARF(name, global, min, cur, max, body, IDF_OVERRIDE)
#define _SVAR(name, global, cur, persist) char *global = svariable(#name, cur, &global, NULL, persist) #define _SVAR(name, global, cur, persist) char *global = svariable(#name, cur, &global, nullptr, persist)
#define SVARN(name, global, cur) _SVAR(name, global, cur, 0) #define SVARN(name, global, cur) _SVAR(name, global, cur, 0)
#define SVARNP(name, global, cur) _SVAR(name, global, cur, IDF_PERSIST) #define SVARNP(name, global, cur) _SVAR(name, global, cur, IDF_PERSIST)
#define SVARNR(name, global, cur) _SVAR(name, global, cur, IDF_OVERRIDE) #define SVARNR(name, global, cur) _SVAR(name, global, cur, IDF_OVERRIDE)

View File

@ -30,7 +30,7 @@ namespace gle
int enabled = 0; int enabled = 0;
static int numattribs = 0, attribmask = 0, numlastattribs = 0, lastattribmask = 0, vertexsize = 0, lastvertexsize = 0; static int numattribs = 0, attribmask = 0, numlastattribs = 0, lastattribmask = 0, vertexsize = 0, lastvertexsize = 0;
static GLenum primtype = GL_TRIANGLES; static GLenum primtype = GL_TRIANGLES;
static uchar *lastbuf = NULL; static uchar *lastbuf = nullptr;
static bool changedattribs = false; static bool changedattribs = false;
static vector<GLint> multidrawstart; static vector<GLint> multidrawstart;
static vector<GLsizei> multidrawcount; static vector<GLsizei> multidrawcount;
@ -225,7 +225,7 @@ namespace gle
len = min(len, MAXVBOSIZE); len = min(len, MAXVBOSIZE);
if(!vbo) glGenBuffers_(1, &vbo); if(!vbo) glGenBuffers_(1, &vbo);
glBindBuffer_(GL_ARRAY_BUFFER, vbo); glBindBuffer_(GL_ARRAY_BUFFER, vbo);
glBufferData_(GL_ARRAY_BUFFER, MAXVBOSIZE, NULL, GL_STREAM_DRAW); glBufferData_(GL_ARRAY_BUFFER, MAXVBOSIZE, nullptr, GL_STREAM_DRAW);
vbooffset = 0; vbooffset = 0;
} }
else if(!lastvertexsize) glBindBuffer_(GL_ARRAY_BUFFER, vbo); else if(!lastvertexsize) glBindBuffer_(GL_ARRAY_BUFFER, vbo);
@ -266,11 +266,11 @@ namespace gle
{ {
if(!vbo) glGenBuffers_(1, &vbo); if(!vbo) glGenBuffers_(1, &vbo);
glBindBuffer_(GL_ARRAY_BUFFER, vbo); glBindBuffer_(GL_ARRAY_BUFFER, vbo);
glBufferData_(GL_ARRAY_BUFFER, MAXVBOSIZE, NULL, GL_STREAM_DRAW); glBufferData_(GL_ARRAY_BUFFER, MAXVBOSIZE, nullptr, GL_STREAM_DRAW);
vbooffset = 0; vbooffset = 0;
} }
else if(!lastvertexsize) glBindBuffer_(GL_ARRAY_BUFFER, vbo); else if(!lastvertexsize) glBindBuffer_(GL_ARRAY_BUFFER, vbo);
void *dst = intel_mapbufferrange_bug ? NULL : void *dst = intel_mapbufferrange_bug ? nullptr :
glMapBufferRange_(GL_ARRAY_BUFFER, vbooffset, attribbuf.length(), GL_MAP_WRITE_BIT|GL_MAP_INVALIDATE_RANGE_BIT|GL_MAP_UNSYNCHRONIZED_BIT); glMapBufferRange_(GL_ARRAY_BUFFER, vbooffset, attribbuf.length(), GL_MAP_WRITE_BIT|GL_MAP_INVALIDATE_RANGE_BIT|GL_MAP_UNSYNCHRONIZED_BIT);
if(dst) if(dst)
{ {
@ -317,7 +317,7 @@ namespace gle
{ {
for(int i = 0; enabled; i++) if(enabled&(1<<i)) { glDisableVertexAttribArray_(i); enabled &= ~(1<<i); } for(int i = 0; enabled; i++) if(enabled&(1<<i)) { glDisableVertexAttribArray_(i); enabled &= ~(1<<i); }
numlastattribs = lastattribmask = lastvertexsize = 0; numlastattribs = lastattribmask = lastvertexsize = 0;
lastbuf = NULL; lastbuf = nullptr;
if(quadsenabled) disablequads(); if(quadsenabled) disablequads();
if(glversion >= 300) glBindBuffer_(GL_ARRAY_BUFFER, 0); if(glversion >= 300) glBindBuffer_(GL_ARRAY_BUFFER, 0);
} }

View File

@ -61,7 +61,7 @@ namespace game
extern void updateworld(); extern void updateworld();
extern void initclient(); extern void initclient();
extern void physicstrigger(physent *d, bool local, int floorlevel, int waterlevel, int material = 0); extern void physicstrigger(physent *d, bool local, int floorlevel, int waterlevel, int material = 0);
extern void edittrigger(const selinfo &sel, int op, int arg1 = 0, int arg2 = 0, int arg3 = 0, const VSlot *vs = NULL); extern void edittrigger(const selinfo &sel, int op, int arg1 = 0, int arg2 = 0, int arg3 = 0, const VSlot *vs = nullptr);
extern void vartrigger(ident *id); extern void vartrigger(ident *id);
extern void dynentcollide(physent *d, physent *o, const vec &dir); extern void dynentcollide(physent *d, physent *o, const vec &dir);
extern const char *getclientmap(); extern const char *getclientmap();

View File

@ -281,7 +281,7 @@ char *path(char *s)
curpart = file+1; curpart = file+1;
} }
for(char *t = curpart; (t = strpbrk(t, "/\\")); *t++ = PATHDIV); for(char *t = curpart; (t = strpbrk(t, "/\\")); *t++ = PATHDIV);
for(char *prevdir = NULL, *curdir = curpart;;) for(char *prevdir = nullptr, *curdir = curpart;;)
{ {
prevdir = curdir[0]==PATHDIV ? curdir+1 : curdir; prevdir = curdir[0]==PATHDIV ? curdir+1 : curdir;
curdir = strchr(prevdir, PATHDIV); curdir = strchr(prevdir, PATHDIV);
@ -352,7 +352,7 @@ bool createdir(const char *path)
path = copystring(strip, path, len); path = copystring(strip, path, len);
} }
#ifdef WIN32 #ifdef WIN32
return CreateDirectory(path, NULL)!=0; return CreateDirectory(path, nullptr)!=0;
#else #else
return mkdir(path, 0777)==0; return mkdir(path, 0777)==0;
#endif #endif
@ -379,7 +379,7 @@ bool subhomedir(char *dst, int len, const char *src)
#ifdef WIN32 #ifdef WIN32
char home[MAX_PATH+1]; char home[MAX_PATH+1];
home[0] = '\0'; home[0] = '\0';
if(SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, 0, home) != S_OK || !home[0]) return false; if(SHGetFolderPath(nullptr, CSIDL_PERSONAL, nullptr, 0, home) != S_OK || !home[0]) return false;
#else #else
const char *home = getenv("HOME"); const char *home = getenv("HOME");
if(!home || !home[0]) return false; if(!home || !home[0]) return false;
@ -395,7 +395,7 @@ const char *sethomedir(const char *dir)
{ {
string pdir; string pdir;
copystring(pdir, dir); copystring(pdir, dir);
if(!subhomedir(pdir, sizeof(pdir), dir) || !fixpackagedir(pdir)) return NULL; if(!subhomedir(pdir, sizeof(pdir), dir) || !fixpackagedir(pdir)) return nullptr;
copystring(homedir, pdir); copystring(homedir, pdir);
return homedir; return homedir;
} }
@ -404,7 +404,7 @@ const char *addpackagedir(const char *dir)
{ {
string pdir; string pdir;
copystring(pdir, dir); copystring(pdir, dir);
if(!subhomedir(pdir, sizeof(pdir), dir) || !fixpackagedir(pdir)) return NULL; if(!subhomedir(pdir, sizeof(pdir), dir) || !fixpackagedir(pdir)) return nullptr;
char *filter = pdir; char *filter = pdir;
for(;;) for(;;)
{ {
@ -417,7 +417,7 @@ const char *addpackagedir(const char *dir)
packagedir &pf = packagedirs.add(); packagedir &pf = packagedirs.add();
pf.dir = filter ? newstring(pdir, filter-pdir) : newstring(pdir); pf.dir = filter ? newstring(pdir, filter-pdir) : newstring(pdir);
pf.dirlen = filter ? filter-pdir : strlen(pdir); pf.dirlen = filter ? filter-pdir : strlen(pdir);
pf.filter = filter ? newstring(filter) : NULL; pf.filter = filter ? newstring(filter) : nullptr;
pf.filterlen = filter ? strlen(filter) : 0; pf.filterlen = filter ? strlen(filter) : 0;
return pf.dir; return pf.dir;
} }
@ -452,7 +452,7 @@ const char *findfile(const char *filename, const char *mode)
formatstring(s, "%s%s", pf.dir, filename); formatstring(s, "%s%s", pf.dir, filename);
if(fileexists(s, mode)) return s; if(fileexists(s, mode)) return s;
} }
if(mode[0]=='e') return NULL; if(mode[0]=='e') return nullptr;
return filename; return filename;
} }
@ -487,7 +487,7 @@ bool listdir(const char *dirname, bool rel, const char *ext, vector<char *> &fil
if(d) if(d)
{ {
struct dirent *de; struct dirent *de;
while((de = readdir(d)) != NULL) while((de = readdir(d)) != nullptr)
{ {
if(!ext) files.add(newstring(de->d_name)); if(!ext) files.add(newstring(de->d_name));
else else
@ -565,7 +565,7 @@ static int rwopsclose(SDL_RWops *rw)
SDL_RWops *stream::rwops() SDL_RWops *stream::rwops()
{ {
SDL_RWops *rw = SDL_AllocRW(); SDL_RWops *rw = SDL_AllocRW();
if(!rw) return NULL; if(!rw) return nullptr;
rw->hidden.unknown.data1 = this; rw->hidden.unknown.data1 = this;
rw->seek = rwopsseek; rw->seek = rwopsseek;
rw->read = rwopsread; rw->read = rwopsread;
@ -628,14 +628,14 @@ struct filestream : stream
{ {
FILE *file; FILE *file;
filestream() : file(NULL) {} filestream() : file(nullptr) {}
~filestream() { close(); } ~filestream() { close(); }
bool open(const char *name, const char *mode) bool open(const char *name, const char *mode)
{ {
if(file) return false; if(file) return false;
file = fopen(name, mode); file = fopen(name, mode);
return file!=NULL; return file!=nullptr;
} }
bool opentemp(const char *name, const char *mode) bool opentemp(const char *name, const char *mode)
@ -646,12 +646,12 @@ struct filestream : stream
#else #else
file = tmpfile(); file = tmpfile();
#endif #endif
return file!=NULL; return file!=nullptr;
} }
void close() void close()
{ {
if(file) { fclose(file); file = NULL; } if(file) { fclose(file); file = nullptr; }
} }
bool end() { return feof(file)!=0; } bool end() { return feof(file)!=0; }
@ -687,7 +687,7 @@ struct filestream : stream
bool flush() { return !fflush(file); } bool flush() { return !fflush(file); }
int getchar() { return fgetc(file); } int getchar() { return fgetc(file); }
bool putchar(int c) { return fputc(c, file)!=EOF; } bool putchar(int c) { return fputc(c, file)!=EOF; }
bool getline(char *str, size_t len) { return fgets(str, len, file)!=NULL; } bool getline(char *str, size_t len) { return fgets(str, len, file)!=nullptr; }
bool putstring(const char *str) { return fputs(str, file)!=EOF; } bool putstring(const char *str) { return fputs(str, file)!=EOF; }
size_t printf(const char *fmt, ...) size_t printf(const char *fmt, ...)
@ -731,12 +731,12 @@ struct gzstream : stream
uint crc; uint crc;
size_t headersize; size_t headersize;
gzstream() : file(NULL), buf(NULL), reading(false), writing(false), autoclose(false), crc(0), headersize(0) gzstream() : file(nullptr), buf(nullptr), reading(false), writing(false), autoclose(false), crc(0), headersize(0)
{ {
zfile.zalloc = NULL; zfile.zalloc = nullptr;
zfile.zfree = NULL; zfile.zfree = nullptr;
zfile.opaque = NULL; zfile.opaque = nullptr;
zfile.next_in = zfile.next_out = NULL; zfile.next_in = zfile.next_out = nullptr;
zfile.avail_in = zfile.avail_out = 0; zfile.avail_in = zfile.avail_out = 0;
} }
@ -816,7 +816,7 @@ struct gzstream : stream
if(!reading && !writing) return false; if(!reading && !writing) return false;
file = f; file = f;
crc = crc32(0, NULL, 0); crc = crc32(0, nullptr, 0);
buf = new uchar[BUFSIZE]; buf = new uchar[BUFSIZE];
if(reading) if(reading)
@ -929,10 +929,10 @@ struct gzstream : stream
else else
{ {
zfile.avail_in = 0; zfile.avail_in = 0;
zfile.next_in = NULL; zfile.next_in = nullptr;
} }
inflateReset(&zfile); inflateReset(&zfile);
crc = crc32(0, NULL, 0); crc = crc32(0, nullptr, 0);
} }
uchar skip[512]; uchar skip[512];
@ -1009,7 +1009,7 @@ struct utf8stream : stream
bool reading, writing, autoclose; bool reading, writing, autoclose;
uchar buf[BUFSIZE]; uchar buf[BUFSIZE];
utf8stream() : file(NULL), pos(0), bufread(0), bufcarry(0), buflen(0), reading(false), writing(false), autoclose(false) utf8stream() : file(nullptr), pos(0), bufread(0), bufcarry(0), buflen(0), reading(false), writing(false), autoclose(false)
{ {
} }
@ -1172,9 +1172,9 @@ struct utf8stream : stream
stream *openrawfile(const char *filename, const char *mode) stream *openrawfile(const char *filename, const char *mode)
{ {
const char *found = findfile(filename, mode); const char *found = findfile(filename, mode);
if(!found) return NULL; if(!found) return nullptr;
filestream *file = new filestream; filestream *file = new filestream;
if(!file->open(found, mode)) { delete file; return NULL; } if(!file->open(found, mode)) { delete file; return nullptr; }
return file; return file;
} }
@ -1191,50 +1191,50 @@ stream *opentempfile(const char *name, const char *mode)
{ {
const char *found = findfile(name, mode); const char *found = findfile(name, mode);
filestream *file = new filestream; filestream *file = new filestream;
if(!file->opentemp(found ? found : name, mode)) { delete file; return NULL; } if(!file->opentemp(found ? found : name, mode)) { delete file; return nullptr; }
return file; return file;
} }
stream *opengzfile(const char *filename, const char *mode, stream *file, int level) stream *opengzfile(const char *filename, const char *mode, stream *file, int level)
{ {
stream *source = file ? file : openfile(filename, mode); stream *source = file ? file : openfile(filename, mode);
if(!source) return NULL; if(!source) return nullptr;
gzstream *gz = new gzstream; gzstream *gz = new gzstream;
if(!gz->open(source, mode, !file, level)) { if(!file) delete source; delete gz; return NULL; } if(!gz->open(source, mode, !file, level)) { if(!file) delete source; delete gz; return nullptr; }
return gz; return gz;
} }
stream *openutf8file(const char *filename, const char *mode, stream *file) stream *openutf8file(const char *filename, const char *mode, stream *file)
{ {
stream *source = file ? file : openfile(filename, mode); stream *source = file ? file : openfile(filename, mode);
if(!source) return NULL; if(!source) return nullptr;
utf8stream *utf8 = new utf8stream; utf8stream *utf8 = new utf8stream;
if(!utf8->open(source, mode, !file)) { if(!file) delete source; delete utf8; return NULL; } if(!utf8->open(source, mode, !file)) { if(!file) delete source; delete utf8; return nullptr; }
return utf8; return utf8;
} }
char *loadfile(const char *fn, size_t *size, bool utf8) char *loadfile(const char *fn, size_t *size, bool utf8)
{ {
stream *f = openfile(fn, "rb"); stream *f = openfile(fn, "rb");
if(!f) return NULL; if(!f) return nullptr;
stream::offset fsize = f->size(); stream::offset fsize = f->size();
if(fsize <= 0) { delete f; return NULL; } if(fsize <= 0) { delete f; return nullptr; }
size_t len = fsize; size_t len = fsize;
char *buf = new (false) char[len+1]; char *buf = new (false) char[len+1];
if(!buf) { delete f; return NULL; } if(!buf) { delete f; return nullptr; }
size_t offset = 0; size_t offset = 0;
if(utf8 && len >= 3) if(utf8 && len >= 3)
{ {
if(f->read(buf, 3) != 3) { delete f; delete[] buf; return NULL; } if(f->read(buf, 3) != 3) { delete f; delete[] buf; return nullptr; }
if(((uchar *)buf)[0] == 0xEF && ((uchar *)buf)[1] == 0xBB && ((uchar *)buf)[2] == 0xBF) len -= 3; if(((uchar *)buf)[0] == 0xEF && ((uchar *)buf)[1] == 0xBB && ((uchar *)buf)[2] == 0xBF) len -= 3;
else offset += 3; else offset += 3;
} }
size_t rlen = f->read(&buf[offset], len-offset); size_t rlen = f->read(&buf[offset], len-offset);
delete f; delete f;
if(rlen != len-offset) { delete[] buf; return NULL; } if(rlen != len-offset) { delete[] buf; return nullptr; }
if(utf8) len = decodeutf8((uchar *)buf, len, (uchar *)buf, len); if(utf8) len = decodeutf8((uchar *)buf, len, (uchar *)buf, len);
buf[len] = '\0'; buf[len] = '\0';
if(size!=NULL) *size = len; if(size!=nullptr) *size = len;
return buf; return buf;
} }

View File

@ -42,7 +42,7 @@ struct zipfile
char *name; char *name;
uint header, offset, size, compressedsize; uint header, offset, size, compressedsize;
zipfile() : name(NULL), header(0), offset(~0U), size(0), compressedsize(0) zipfile() : name(nullptr), header(0), offset(~0U), size(0), compressedsize(0)
{ {
} }
~zipfile() ~zipfile()
@ -61,13 +61,13 @@ struct ziparchive
int openfiles; int openfiles;
zipstream *owner; zipstream *owner;
ziparchive() : name(NULL), data(NULL), files(512), openfiles(0), owner(NULL) ziparchive() : name(nullptr), data(nullptr), files(512), openfiles(0), owner(nullptr)
{ {
} }
~ziparchive() ~ziparchive()
{ {
DELETEA(name); DELETEA(name);
if(data) { fclose(data); data = NULL; } if(data) { fclose(data); data = nullptr; }
} }
}; };
@ -78,7 +78,7 @@ static bool findzipdirectory(FILE *f, zipdirectoryheader &hdr)
long offset = ftell(f); long offset = ftell(f);
if(offset < 0) return false; if(offset < 0) return false;
uchar buf[1024], *src = NULL; uchar buf[1024], *src = nullptr;
long end = max(offset - 0xFFFFL - ZIP_DIRECTORY_SIZE, 0L); long end = max(offset - 0xFFFFL - ZIP_DIRECTORY_SIZE, 0L);
size_t len = 0; size_t len = 0;
const uint signature = lilswap<uint>(ZIP_DIRECTORY_SIGNATURE); const uint signature = lilswap<uint>(ZIP_DIRECTORY_SIGNATURE);
@ -199,7 +199,7 @@ static vector<ziparchive *> archives;
ziparchive *findzip(const char *name) ziparchive *findzip(const char *name)
{ {
loopv(archives) if(!strcmp(name, archives[i]->name)) return archives[i]; loopv(archives) if(!strcmp(name, archives[i]->name)) return archives[i];
return NULL; return nullptr;
} }
static bool checkprefix(vector<zipfile> &files, const char *prefix, int prefixlen) static bool checkprefix(vector<zipfile> &files, const char *prefix, int prefixlen)
@ -264,7 +264,7 @@ static void mountzip(ziparchive &arch, vector<zipfile> &files, const char *mount
} }
} }
bool addzip(const char *name, const char *mount = NULL, const char *strip = NULL) bool addzip(const char *name, const char *mount = nullptr, const char *strip = nullptr)
{ {
string pname; string pname;
copystring(pname, name); copystring(pname, name);
@ -342,12 +342,12 @@ struct zipstream : stream
uint reading; uint reading;
bool ended; bool ended;
zipstream() : arch(NULL), info(NULL), buf(NULL), reading(~0U), ended(false) zipstream() : arch(nullptr), info(nullptr), buf(nullptr), reading(~0U), ended(false)
{ {
zfile.zalloc = NULL; zfile.zalloc = nullptr;
zfile.zfree = NULL; zfile.zfree = nullptr;
zfile.opaque = NULL; zfile.opaque = nullptr;
zfile.next_in = zfile.next_out = NULL; zfile.next_in = zfile.next_out = nullptr;
zfile.avail_in = zfile.avail_out = 0; zfile.avail_in = zfile.avail_out = 0;
} }
@ -362,7 +362,7 @@ struct zipstream : stream
size = min(size, uint(&buf[BUFSIZE] - &zfile.next_in[zfile.avail_in])); size = min(size, uint(&buf[BUFSIZE] - &zfile.next_in[zfile.avail_in]));
if(arch->owner != this) if(arch->owner != this)
{ {
arch->owner = NULL; arch->owner = nullptr;
if(fseek(arch->data, reading, SEEK_SET) >= 0) arch->owner = this; if(fseek(arch->data, reading, SEEK_SET) >= 0) arch->owner = this;
else return; else return;
} }
@ -377,7 +377,7 @@ struct zipstream : stream
if(f->offset == ~0U) if(f->offset == ~0U)
{ {
ziplocalfileheader h; ziplocalfileheader h;
a->owner = NULL; a->owner = nullptr;
if(!readlocalfileheader(a->data, h, f->header)) return false; if(!readlocalfileheader(a->data, h, f->header)) return false;
f->offset = f->header + ZIP_LOCAL_FILE_SIZE + h.namelength + h.extralength; f->offset = f->header + ZIP_LOCAL_FILE_SIZE + h.namelength + h.extralength;
} }
@ -407,7 +407,7 @@ struct zipstream : stream
{ {
stopreading(); stopreading();
DELETEA(buf); DELETEA(buf);
if(arch) { arch->owner = NULL; arch->openfiles--; arch = NULL; } if(arch) { arch->owner = nullptr; arch->openfiles--; arch = nullptr; }
} }
offset size() { return info->size; } offset size() { return info->size; }
@ -427,7 +427,7 @@ struct zipstream : stream
default: return false; default: return false;
} }
pos = clamp(pos, offset(info->offset), offset(info->offset + info->size)); pos = clamp(pos, offset(info->offset), offset(info->offset + info->size));
arch->owner = NULL; arch->owner = nullptr;
if(fseek(arch->data, int(pos), SEEK_SET) < 0) return false; if(fseek(arch->data, int(pos), SEEK_SET) < 0) return false;
arch->owner = this; arch->owner = this;
reading = pos; reading = pos;
@ -450,7 +450,7 @@ struct zipstream : stream
zfile.avail_in = 0; zfile.avail_in = 0;
zfile.total_in = info->compressedsize; zfile.total_in = info->compressedsize;
zfile.total_out = info->size; zfile.total_out = info->size;
arch->owner = NULL; arch->owner = nullptr;
ended = false; ended = false;
return true; return true;
} }
@ -466,9 +466,9 @@ struct zipstream : stream
} }
else else
{ {
arch->owner = NULL; arch->owner = nullptr;
zfile.avail_in = 0; zfile.avail_in = 0;
zfile.next_in = NULL; zfile.next_in = nullptr;
reading = info->offset; reading = info->offset;
} }
inflateReset(&zfile); inflateReset(&zfile);
@ -493,7 +493,7 @@ struct zipstream : stream
{ {
if(arch->owner != this) if(arch->owner != this)
{ {
arch->owner = NULL; arch->owner = nullptr;
if(fseek(arch->data, reading, SEEK_SET) < 0) { stopreading(); return 0; } if(fseek(arch->data, reading, SEEK_SET) < 0) { stopreading(); return 0; }
arch->owner = this; arch->owner = this;
} }
@ -529,7 +529,7 @@ struct zipstream : stream
stream *openzipfile(const char *name, const char *mode) stream *openzipfile(const char *name, const char *mode)
{ {
for(; *mode; mode++) if(*mode=='w' || *mode=='a') return NULL; for(; *mode; mode++) if(*mode=='w' || *mode=='a') return nullptr;
loopvrev(archives) loopvrev(archives)
{ {
ziparchive *arch = archives[i]; ziparchive *arch = archives[i];
@ -539,7 +539,7 @@ stream *openzipfile(const char *name, const char *mode)
if(s->open(arch, f)) return s; if(s->open(arch, f)) return s;
delete s; delete s;
} }
return NULL; return nullptr;
} }
bool findzipfile(const char *name) bool findzipfile(const char *name)
@ -584,7 +584,7 @@ int listzipfiles(const char *dir, const char *ext, vector<char *> &files)
} }
#ifndef STANDALONE #ifndef STANDALONE
ICOMMAND(addzip, "sss", (const char *name, const char *mount, const char *strip), addzip(name, mount[0] ? mount : NULL, strip[0] ? strip : NULL)); ICOMMAND(addzip, "sss", (const char *name, const char *mount, const char *strip), addzip(name, mount[0] ? mount : nullptr, strip[0] ? strip : nullptr));
ICOMMAND(removezip, "s", (const char *name), removezip(name)); ICOMMAND(removezip, "s", (const char *name), removezip(name));
#endif #endif