less silly implementation of alpha blending
git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@2398 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
+2
-2
@@ -37,12 +37,12 @@ struct dynent;
|
||||
|
||||
struct model
|
||||
{
|
||||
bool cullface, alphatexture;
|
||||
bool cullface, alphablend;
|
||||
float alphatest, translucency, scale;
|
||||
vec translate;
|
||||
int batch;
|
||||
|
||||
model() : cullface(true), alphatexture(false), alphatest(0.9f), translucency(0.25f), scale(1), translate(0, 0, 0), batch(-1) {}
|
||||
model() : cullface(true), alphablend(false), alphatest(0.9f), translucency(0.25f), scale(1), translate(0, 0, 0), batch(-1) {}
|
||||
virtual ~model() {}
|
||||
|
||||
virtual bool load() = 0;
|
||||
|
||||
@@ -36,13 +36,13 @@ void mdlalphatest(int alphatest)
|
||||
|
||||
COMMAND(mdlalphatest, ARG_1INT);
|
||||
|
||||
void mdlalphatexture(int enable)
|
||||
void mdlalphablend(int alphablend)
|
||||
{
|
||||
checkmdl;
|
||||
loadingmodel->alphatexture = enable>0;
|
||||
loadingmodel->alphablend = alphablend!=0;
|
||||
}
|
||||
|
||||
COMMAND(mdlalphatexture, ARG_1INT);
|
||||
COMMAND(mdlalphablend, ARG_1INT);
|
||||
|
||||
void mdlscale(int percent)
|
||||
{
|
||||
@@ -185,7 +185,7 @@ void renderbatchedmodel(model *m, batchedmodel &b)
|
||||
|
||||
modelattach *a = NULL;
|
||||
if(b.attached>=0) a = &modelattached[b.attached];
|
||||
if(b.anim&ANIM_TRANSLUCENT || m->alphatexture)
|
||||
if(b.anim&ANIM_TRANSLUCENT)
|
||||
{
|
||||
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
|
||||
m->render(b.anim|ANIM_NOSKIN, b.varseed, b.speed, b.basetime, b.o, b.yaw, b.pitch, b.d, a, b.scale);
|
||||
@@ -202,7 +202,7 @@ void renderbatchedmodel(model *m, batchedmodel &b)
|
||||
|
||||
m->render(b.anim, b.varseed, b.speed, b.basetime, b.o, b.yaw, b.pitch, b.d, a, b.scale);
|
||||
|
||||
if(b.anim&ANIM_TRANSLUCENT || m->alphatexture)
|
||||
if(b.anim&ANIM_TRANSLUCENT)
|
||||
{
|
||||
glDepthFunc(GL_LESS);
|
||||
glDisable(GL_BLEND);
|
||||
@@ -256,7 +256,7 @@ void endmodelbatches()
|
||||
loopvj(b.batched)
|
||||
{
|
||||
batchedmodel &bm = b.batched[j];
|
||||
if(bm.anim&ANIM_TRANSLUCENT)
|
||||
if(bm.anim&ANIM_TRANSLUCENT || b.m->alphablend)
|
||||
{
|
||||
translucentmodel &tm = translucent.add();
|
||||
tm.m = b.m;
|
||||
|
||||
+10
-1
@@ -146,7 +146,16 @@ struct vertmodel : model
|
||||
glBindTexture(GL_TEXTURE_2D, id);
|
||||
lasttex = id;
|
||||
}
|
||||
if(enablealphablend) { glDisable(GL_BLEND); enablealphablend = false; }
|
||||
if(skin->bpp == 32 && owner->model->alphablend)
|
||||
{
|
||||
if(!enablealphablend)
|
||||
{
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
enablealphablend = true;
|
||||
}
|
||||
}
|
||||
else if(enablealphablend) { glDisable(GL_BLEND); enablealphablend = false; }
|
||||
if(skin->bpp == 32 && owner->model->alphatest > 0)
|
||||
{
|
||||
if(!enablealphatest) { glEnable(GL_ALPHA_TEST); enablealphatest = true; }
|
||||
|
||||
Reference in New Issue
Block a user