added GL functions, changed g3_draw_poly in d2x style to fix the portal-bug; added exception boolean value tempNoDepthTest to render endlevel correctly; code reformatting
This commit is contained in:
parent
2f0d130d8c
commit
5f7dab24d2
|
@ -74,6 +74,7 @@ int circleh10=0;
|
|||
int cross_lh[2]={0,0};
|
||||
int primary_lh[3]={0,0,0};
|
||||
int secondary_lh[5]={0,0,0,0,0};
|
||||
int tempNoDepthTest=0;
|
||||
/*int lastbound=-1;
|
||||
|
||||
#define OGL_BINDTEXTURE(a) if(gr_badtexture>0) glBindTexture(GL_TEXTURE_2D, 0);\
|
||||
|
@ -588,15 +589,19 @@ bool g3_draw_poly(int nv,g3s_point **pointlist)
|
|||
int c;
|
||||
r_polyc++;
|
||||
c=grd_curcanv->cv_color;
|
||||
// glColor3f((gr_palette[c*3]+gr_palette_gamma)/63.0,(gr_palette[c*3+1]+gr_palette_gamma)/63.0,(gr_palette[c*3+2]+gr_palette_gamma)/63.0);
|
||||
OGL_DISABLE(TEXTURE_2D);
|
||||
if (Gr_scanline_darkening_level >= GR_FADE_LEVELS) {
|
||||
glColor3f(PAL2Tr(c), PAL2Tg(c), PAL2Tb(c));
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
}else{
|
||||
glColor4f(PAL2Tr(c), PAL2Tg(c), PAL2Tb(c), 1.0 - (float)Gr_scanline_darkening_level / ((float)GR_FADE_LEVELS - 1.0));
|
||||
}
|
||||
glBegin(GL_TRIANGLE_FAN);
|
||||
glColor3f(PAL2Tr(c),PAL2Tg(c),PAL2Tb(c));
|
||||
for (c=0;c<nv;c++){
|
||||
// glVertex3f(f2glf(pointlist[c]->p3_vec.x),f2glf(pointlist[c]->p3_vec.y),f2glf(pointlist[c]->p3_vec.z));
|
||||
glVertex3f(f2glf(pointlist[c]->p3_vec.x),f2glf(pointlist[c]->p3_vec.y),-f2glf(pointlist[c]->p3_vec.z));
|
||||
}
|
||||
glEnd();
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -612,25 +617,15 @@ bool g3_draw_tmap(int nv,g3s_point **pointlist,g3s_uvl *uvl_list,grs_bitmap *bm)
|
|||
int c;
|
||||
float l;
|
||||
if (tmap_drawer_ptr==draw_tmap_flat){
|
||||
/* fix average_light=0;
|
||||
int i;
|
||||
for (i=0; i<nv; i++)
|
||||
average_light += uvl_list[i].l;*/
|
||||
OGL_DISABLE(TEXTURE_2D);
|
||||
// glmprintf((0,"Gr_scanline_darkening_level=%i %f\n",Gr_scanline_darkening_level,Gr_scanline_darkening_level/(float)NUM_LIGHTING_LEVELS));
|
||||
glColor4f(0,0,0,1.0-(Gr_scanline_darkening_level/(float)NUM_LIGHTING_LEVELS));
|
||||
//glColor4f(0,0,0,f2fl(average_light/nv));
|
||||
glBegin(GL_TRIANGLE_FAN);
|
||||
for (c=0;c<nv;c++){
|
||||
// glColor4f(0,0,0,f2fl(uvl_list[c].l));
|
||||
// glTexCoord2f(f2glf(uvl_list[c].u),f2glf(uvl_list[c].v));
|
||||
glVertex3f(f2glf(pointlist[c]->p3_vec.x),f2glf(pointlist[c]->p3_vec.y),-f2glf(pointlist[c]->p3_vec.z));
|
||||
}
|
||||
glEnd();
|
||||
}else if (tmap_drawer_ptr==draw_tmap){
|
||||
r_tpolyc++;
|
||||
/* if (bm->bm_w !=64||bm->bm_h!=64)
|
||||
printf("g3_draw_tmap w %i h %i\n",bm->bm_w,bm->bm_h);*/
|
||||
OGL_ENABLE(TEXTURE_2D);
|
||||
ogl_bindbmtex(bm);
|
||||
ogl_texwrap(bm->gltexture,GL_REPEAT);
|
||||
|
@ -639,18 +634,19 @@ bool g3_draw_tmap(int nv,g3s_point **pointlist,g3s_uvl *uvl_list,grs_bitmap *bm)
|
|||
if (bm->bm_flags&BM_FLAG_NO_LIGHTING){
|
||||
l=1.0;
|
||||
}else{
|
||||
//l=f2fl(uvl_list[c].l)+gr_palette_gamma/63.0;
|
||||
l=f2fl(uvl_list[c].l);
|
||||
}
|
||||
glColor3f(l,l,l);
|
||||
glTexCoord2f(f2glf(uvl_list[c].u),f2glf(uvl_list[c].v));
|
||||
//glVertex3f(f2glf(pointlist[c]->p3_vec.x),f2glf(pointlist[c]->p3_vec.y),f2glf(pointlist[c]->p3_vec.z));
|
||||
glVertex3f(f2glf(pointlist[c]->p3_vec.x),f2glf(pointlist[c]->p3_vec.y),-f2glf(pointlist[c]->p3_vec.z));
|
||||
}
|
||||
glEnd();
|
||||
}else{
|
||||
mprintf((0,"g3_draw_tmap: unhandled tmap_drawer %p\n",tmap_drawer_ptr));
|
||||
}
|
||||
if (!tempNoDepthTest)
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
|
||||
return 0;
|
||||
}
|
||||
bool g3_draw_tmap_2(int nv,g3s_point **pointlist,g3s_uvl *uvl_list,grs_bitmap *bmbot,grs_bitmap *bm,int orient)
|
||||
|
@ -822,27 +818,25 @@ bool g3_draw_tmap_2(int nv,g3s_point **pointlist,g3s_uvl *uvl_list,grs_bitmap *b
|
|||
|
||||
bool g3_draw_bitmap(vms_vector *pos,fix width,fix height,grs_bitmap *bm)
|
||||
{
|
||||
//float l=1.0;
|
||||
vms_vector pv,v1;//,v2;
|
||||
vms_vector pv,v1;
|
||||
int i;
|
||||
r_bitmapc++;
|
||||
v1.z=0;
|
||||
// printf("g3_draw_bitmap: %f,%f,%f - ",f2glf(pos->x),f2glf(pos->y),-f2glf(pos->z));
|
||||
// printf("(%f,%f,%f) ",f2glf(View_position.x),f2glf(View_position.y),-f2glf(View_position.z));
|
||||
|
||||
OGL_ENABLE(TEXTURE_2D);
|
||||
ogl_bindbmtex(bm);
|
||||
ogl_texwrap(bm->gltexture,GL_CLAMP);
|
||||
|
||||
if (tempNoDepthTest)
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
|
||||
glBegin(GL_QUADS);
|
||||
glColor3f(1.0,1.0,1.0);
|
||||
width = fixmul(width,Matrix_scale.x);
|
||||
height = fixmul(height,Matrix_scale.y);
|
||||
width = fixmul(width,Matrix_scale.x);
|
||||
height = fixmul(height,Matrix_scale.y);
|
||||
for (i=0;i<4;i++){
|
||||
// g3_rotate_point(&p[i],pos);
|
||||
vm_vec_sub(&v1,pos,&View_position);
|
||||
vm_vec_rotate(&pv,&v1,&View_matrix);
|
||||
// printf(" %f,%f,%f->",f2glf(pv.x),f2glf(pv.y),-f2glf(pv.z));
|
||||
switch (i){
|
||||
case 0:
|
||||
glTexCoord2f(0.0, 0.0);
|
||||
|
@ -865,16 +859,9 @@ bool g3_draw_bitmap(vms_vector *pos,fix width,fix height,grs_bitmap *bm)
|
|||
pv.y+=-height;
|
||||
break;
|
||||
}
|
||||
// vm_vec_rotate(&v2,&v1,&View_matrix);
|
||||
// vm_vec_sub(&v1,&v2,&pv);
|
||||
//vm_vec_sub(&v1,&pv,&v2);
|
||||
// vm_vec_sub(&v2,&pv,&v1);
|
||||
glVertex3f(f2glf(pv.x),f2glf(pv.y),-f2glf(pv.z));
|
||||
// printf("%f,%f,%f ",f2glf(v1.x),f2glf(v1.y),-f2glf(v1.z));
|
||||
}
|
||||
glEnd();
|
||||
// printf("\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
bool ogl_ubitmapm_c(int x, int y,grs_bitmap *bm,int c)
|
||||
|
@ -1147,60 +1134,38 @@ void ogl_end_offscreen_render(void) {
|
|||
|
||||
void ogl_start_frame(void){
|
||||
r_polyc=0;r_tpolyc=0;r_bitmapc=0;r_ubitmapc=0;r_ubitbltc=0;r_upixelc=0;
|
||||
// gl_badtexture=500;
|
||||
|
||||
OGL_VIEWPORT(grd_curcanv->cv_bitmap.bm_x,grd_curcanv->cv_bitmap.bm_y,Canvas_width,Canvas_height);
|
||||
glClearColor(0.0, 0.0, 0.0, 0.0);
|
||||
// glEnable(GL_ALPHA_TEST);
|
||||
// glAlphaFunc(GL_GREATER,0.01);
|
||||
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
glEnable(GL_ALPHA_TEST);
|
||||
glAlphaFunc(GL_GREATER,0.02);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glDepthFunc(GL_LEQUAL);
|
||||
glClear(GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();//clear matrix
|
||||
//gluPerspective(90.0,(GLfloat)(grd_curscreen->sc_w*3)/(GLfloat)(grd_curscreen->sc_h*4),1.0,1000000.0);
|
||||
//gluPerspective(90.0,(GLfloat)(grd_curscreen->sc_w*3)/(GLfloat)(grd_curscreen->sc_h*4),0.01,1000000.0);
|
||||
gluPerspective(90.0,1.0,0.01,1000000.0);
|
||||
//gluPerspective(90.0,(GLfloat)(Canvas_width*3)/(GLfloat)(Canvas_height*4),0.01,1000000.0);
|
||||
// gluPerspective(75.0,(GLfloat)Canvas_width/(GLfloat)Canvas_height,1.0,1000000.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();//clear matrix
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
// glDisABLE(DITHER);
|
||||
// glScalef(1.0,1.0,-1.0);
|
||||
// glScalef(1.0,1.0,-1.0);
|
||||
// glPushMatrix();
|
||||
|
||||
// glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||
// OGL_TEXENV(GL_TEXTURE_ENV_MODE,GL_MODULATE);
|
||||
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_texmagfilt);
|
||||
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_texminfilt);
|
||||
// OGL_TEXPARAM(GL_TEXTURE_MAG_FILTER,GL_texmagfilt);
|
||||
// OGL_TEXPARAM(GL_TEXTURE_MIN_FILTER,GL_texminfilt);
|
||||
// glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
// glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
}
|
||||
|
||||
#ifndef NMONO
|
||||
void merge_textures_stats(void);
|
||||
#endif
|
||||
void ogl_end_frame(void){
|
||||
// OGL_VIEWPORT(grd_curcanv->cv_bitmap.bm_x,grd_curcanv->cv_bitmap.bm_y,);
|
||||
OGL_VIEWPORT(0,0,grd_curscreen->sc_w,grd_curscreen->sc_h);
|
||||
#ifndef NMONO
|
||||
// merge_textures_stats();
|
||||
// ogl_texture_stats();
|
||||
#endif
|
||||
// glViewport(0,0,grd_curscreen->sc_w,grd_curscreen->sc_h);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();//clear matrix
|
||||
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();//clear matrix
|
||||
// glDisABLE(BLEND);
|
||||
//glDisABLE(ALPHA_TEST);
|
||||
//gluPerspective(90.0,(GLfloat)(grd_curscreen->sc_w*3)/(GLfloat)(grd_curscreen->sc_h*4),1.0,1000000.0);
|
||||
// ogl_swap_buffers();//platform specific code
|
||||
// glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
}
|
||||
void ogl_swap_buffers(void){
|
||||
ogl_clean_texture_cache();
|
||||
|
|
|
@ -63,7 +63,7 @@ void ogl_init(void){
|
|||
// SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 8 );
|
||||
|
||||
|
||||
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,0);
|
||||
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,16);
|
||||
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE,0);
|
||||
SDL_GL_SetAttribute(SDL_GL_ACCUM_RED_SIZE,0);
|
||||
SDL_GL_SetAttribute(SDL_GL_ACCUM_GREEN_SIZE,0);
|
||||
|
|
|
@ -415,6 +415,9 @@ vms_angvec exit_angles={-0xa00,0,0};
|
|||
vms_matrix surface_orient;
|
||||
|
||||
int endlevel_data_loaded=0;
|
||||
#ifdef OGL
|
||||
extern int tempNoDepthTest;
|
||||
#endif
|
||||
|
||||
void start_endlevel_sequence()
|
||||
{
|
||||
|
@ -506,7 +509,9 @@ void start_endlevel_sequence()
|
|||
#endif
|
||||
|
||||
Endlevel_sequence = EL_FLYTHROUGH;
|
||||
|
||||
#ifdef OGL
|
||||
tempNoDepthTest=1;
|
||||
#endif
|
||||
ConsoleObject->movement_type = MT_NONE; //movement handled by flythrough
|
||||
ConsoleObject->control_type = CT_NONE;
|
||||
|
||||
|
@ -621,7 +626,9 @@ void stop_endlevel_sequence()
|
|||
Endlevel_sequence = EL_OFF;
|
||||
|
||||
PlayerFinishedLevel(0);
|
||||
|
||||
#ifdef OGL
|
||||
tempNoDepthTest=0;
|
||||
#endif
|
||||
}
|
||||
|
||||
#define VCLIP_BIG_PLAYER_EXPLOSION 58
|
||||
|
|
Loading…
Reference in a new issue