Skip to content
Permalink
Browse files

Fixing crash issues on 64 bit machines

DWORD is 32 bit and casting a pointer to it causes sadness.
  • Loading branch information...
Valloric committed Nov 23, 2013
1 parent 65a3a2d commit ca54435e419b2e20887ae771ba6f3233aa4f92d1
Showing with 61 additions and 55 deletions.
  1. +6 −6 hge/include/hge.h
  2. +3 −3 hge/include/hgeresource.h
  3. +6 −6 hge/src/helpers/hgeresource.cpp
  4. +33 −27 hge/src/helpers/resources.cpp
  5. +13 −13 hge/src/helpers/resources.h
@@ -87,12 +87,12 @@ typedef unsigned char BYTE;
/*
** HGE Handle types
*/
typedef size_t HTEXTURE;
typedef size_t HTARGET;
typedef size_t HEFFECT;
typedef size_t HMUSIC;
typedef size_t HSTREAM;
typedef size_t HCHANNEL;
typedef uintptr_t HTEXTURE;
typedef uintptr_t HTARGET;
typedef uintptr_t HEFFECT;
typedef uintptr_t HMUSIC;
typedef uintptr_t HSTREAM;
typedef uintptr_t HCHANNEL;


/*
@@ -30,13 +30,13 @@ struct ResDesc
{
char name[MAXRESCHARS];
int resgroup;
size_t handle;
void* handle;
ResDesc* next;

ResDesc() { hge=hgeCreate(HGE_VERSION); }
~ResDesc() { hge->Release(); }
virtual ~ResDesc() { hge->Release(); }

virtual DWORD Get(hgeResourceManager *rm) = 0;
virtual void* Get(hgeResourceManager *rm) = 0;
virtual void Free() = 0;

protected:
@@ -122,7 +122,7 @@ void* hgeResourceManager::GetResource(const char *name, int resgroup)
if(reshandle)
{
resource=new RResource();
resource->handle=(size_t)reshandle;
resource->handle=reshandle;
resource->resgroup=resgroup;
strcpy(resource->name, name);
strcpy(resource->filename, name);
@@ -147,7 +147,7 @@ HTEXTURE hgeResourceManager::GetTexture(const char *name, int resgroup)
if(reshandle)
{
resource=new RTexture();
resource->handle=reshandle;
resource->handle=reinterpret_cast<void*>(reshandle);
resource->resgroup=resgroup;
resource->mipmap=false;
strcpy(resource->name, name);
@@ -173,7 +173,7 @@ HEFFECT hgeResourceManager::GetEffect(const char *name, int resgroup)
if(reshandle)
{
resource=new REffect();
resource->handle=reshandle;
resource->handle=reinterpret_cast<void*>(reshandle);
resource->resgroup=resgroup;
strcpy(resource->name, name);
strcpy(resource->filename, name);
@@ -198,7 +198,7 @@ HMUSIC hgeResourceManager::GetMusic(const char *name, int resgroup)
if(reshandle)
{
resource=new RMusic();
resource->handle=reshandle;
resource->handle=reinterpret_cast<void*>(reshandle);
resource->resgroup=resgroup;
strcpy(resource->name, name);
strcpy(resource->filename, name);
@@ -223,7 +223,7 @@ HSTREAM hgeResourceManager::GetStream(const char *name, int resgroup)
if(reshandle)
{
resource=new RStream();
resource->handle=reshandle;
resource->handle=reinterpret_cast<void*>(reshandle);
resource->resgroup=resgroup;
strcpy(resource->name, name);
strcpy(resource->filename, name);
@@ -290,7 +290,7 @@ hgeStringTable* hgeResourceManager::GetStringTable(const char *name, int resgrou
if(strtable)
{
resource=new RStringTable();
resource->handle=(size_t)strtable;
resource->handle=reinterpret_cast<void*>(strtable);
resource->resgroup=resgroup;
strcpy(resource->name, name);
strcpy(resource->filename, name);
@@ -386,15 +386,16 @@ void RResource::Parse(hgeResourceManager *rm, RScriptParser *sp, const char *nam
ScriptParseFileResource(rm, sp, name, basename, new RResource(), RES_RESOURCE);
}

DWORD RResource::Get(hgeResourceManager *rm)
void* RResource::Get(hgeResourceManager *rm)
{
if(!handle) handle=(size_t)hge->Resource_Load(filename);
if(!handle)
handle = hge->Resource_Load(filename);
return handle;
}

void RResource::Free()
{
if(handle) hge->Resource_Free((void *)handle);
if(handle) hge->Resource_Free(handle);
handle=0;
}

@@ -442,9 +443,10 @@ void RTexture::Parse(hgeResourceManager *rm, RScriptParser *sp, const char *name
AddRes(rm, RES_TEXTURE, rc);
}

DWORD RTexture::Get(hgeResourceManager *rm)
void* RTexture::Get(hgeResourceManager *rm)
{
if(!handle) handle=(DWORD)hge->Texture_Load(filename, 0, mipmap);
if(!handle)
handle = reinterpret_cast<void*>(hge->Texture_Load(filename, 0, mipmap));
return handle;
}

@@ -461,9 +463,10 @@ void REffect::Parse(hgeResourceManager *rm, RScriptParser *sp, const char *name,
ScriptParseFileResource(rm, sp, name, basename, new REffect(), RES_EFFECT);
}

DWORD REffect::Get(hgeResourceManager *rm)
void* REffect::Get(hgeResourceManager *rm)
{
if(!handle) handle=(DWORD)hge->Effect_Load(filename);
if(!handle)
handle = reinterpret_cast<void*>(hge->Effect_Load(filename));
return handle;
}

@@ -522,12 +525,12 @@ void RMusic::Parse(hgeResourceManager *rm, RScriptParser *sp, const char *name,
AddRes(rm, RES_MUSIC, rc);
}

DWORD RMusic::Get(hgeResourceManager *rm)
void* RMusic::Get(hgeResourceManager *rm)
{
if(!handle)
{
handle=(DWORD)hge->Music_Load(filename);
hge->Music_SetAmplification(handle, amplify);
handle = reinterpret_cast<void*>(hge->Music_Load(filename));
hge->Music_SetAmplification((HMUSIC)handle, amplify);
}

return handle;
@@ -546,9 +549,10 @@ void RStream::Parse(hgeResourceManager *rm, RScriptParser *sp, const char *name,
ScriptParseFileResource(rm, sp, name, basename, new RStream(), RES_STREAM);
}

DWORD RStream::Get(hgeResourceManager *rm)
void* RStream::Get(hgeResourceManager *rm)
{
if(!handle) handle=(DWORD)hge->Stream_Load(filename);
if(!handle)
handle = reinterpret_cast<void*>(hge->Stream_Load(filename));
return handle;
}

@@ -607,9 +611,10 @@ void RTarget::Parse(hgeResourceManager *rm, RScriptParser *sp, const char *name,
AddRes(rm, RES_TARGET, rc);
}

DWORD RTarget::Get(hgeResourceManager *rm)
void* RTarget::Get(hgeResourceManager *rm)
{
if(!handle) handle=(DWORD)hge->Target_Create(width, height, zbuffer);
if(!handle)
handle = reinterpret_cast<void*>(hge->Target_Create(width, height, zbuffer));
return handle;
}

@@ -653,7 +658,7 @@ void RSprite::Parse(hgeResourceManager *rm, RScriptParser *sp, const char *name,
AddRes(rm, RES_SPRITE, rc);
}

DWORD RSprite::Get(hgeResourceManager *rm)
void* RSprite::Get(hgeResourceManager *rm)
{
hgeSprite *spr;
if(!handle)
@@ -669,7 +674,7 @@ DWORD RSprite::Get(hgeResourceManager *rm)
// spr->SetRotation(rotation);
// spr->SetCollisionType(collision);

handle=(size_t)spr;
handle = reinterpret_cast<void*>(spr);
}
return handle;
}
@@ -717,7 +722,7 @@ void RAnimation::Parse(hgeResourceManager *rm, RScriptParser *sp, const char *na
AddRes(rm, RES_ANIMATION, rc);
}

DWORD RAnimation::Get(hgeResourceManager *rm)
void* RAnimation::Get(hgeResourceManager *rm)
{
hgeAnimation *spr;
if(!handle)
@@ -734,7 +739,7 @@ DWORD RAnimation::Get(hgeResourceManager *rm)
// spr->SetCollisionType(collision);
spr->SetMode(mode);

handle=(size_t)spr;
handle = reinterpret_cast<void*>(spr);
}
return handle;
}
@@ -837,7 +842,7 @@ void RFont::Parse(hgeResourceManager *rm, RScriptParser *sp, const char *name, c
AddRes(rm, RES_FONT, rc);
}

DWORD RFont::Get(hgeResourceManager *rm)
void* RFont::Get(hgeResourceManager *rm)
{
hgeFont *fnt;
if(!handle)
@@ -852,7 +857,7 @@ DWORD RFont::Get(hgeResourceManager *rm)
fnt->SetSpacing(spacing);
fnt->SetRotation(rotation);

handle=(size_t)fnt;
handle = reinterpret_cast<void*>(fnt);
}
return handle;
}
@@ -908,14 +913,14 @@ void RParticle::Parse(hgeResourceManager *rm, RScriptParser *sp, const char *nam
AddRes(rm, RES_PARTICLE, rc);
}

DWORD RParticle::Get(hgeResourceManager *rm)
void* RParticle::Get(hgeResourceManager *rm)
{
hgeParticleSystem *par;
if(!handle)
{
par = new hgeParticleSystem(filename, rm->GetSprite(spritename));

handle=(size_t)par;
handle = reinterpret_cast<void*>(par);
}
return handle;
}
@@ -1003,7 +1008,7 @@ void RDistort::Parse(hgeResourceManager *rm, RScriptParser *sp, const char *name
AddRes(rm, RES_DISTORT, rc);
}

DWORD RDistort::Get(hgeResourceManager *rm)
void* RDistort::Get(hgeResourceManager *rm)
{
hgeDistortionMesh *dis;
if(!handle)
@@ -1014,7 +1019,7 @@ DWORD RDistort::Get(hgeResourceManager *rm)
dis->SetBlendMode(blend);
dis->Clear(color,z);

handle=(size_t)dis;
handle = reinterpret_cast<void*>(dis);
}
return handle;
}
@@ -1032,14 +1037,15 @@ void RStringTable::Parse(hgeResourceManager *rm, RScriptParser *sp, const char *
ScriptParseFileResource(rm, sp, name, basename, new RStringTable(), RES_STRTABLE);
}

DWORD RStringTable::Get(hgeResourceManager *rm)
void* RStringTable::Get(hgeResourceManager *rm)
{
if(!handle) handle = (size_t)new hgeStringTable(filename);
if(!handle)
handle = reinterpret_cast<void*>(new hgeStringTable(filename));
return handle;
}

void RStringTable::Free()
{
if(handle) delete (hgeStringTable *)handle;
handle=0;
}
}
Oops, something went wrong.

0 comments on commit ca54435

Please sign in to comment.
You can’t perform that action at this time.