diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 2713641bb..5fa540dbe 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,5 +1,13 @@ D1X-Rebirth Changelog +20090130 +-------- +arch/ogl/ogl.c, main/render.c: New level render order for better seperation and blending between transculent level geometry and sprites + +20090129 +-------- +main/netdrv_udp.c: Decreasing delay from timer_delay2 to timer_delay for sending/receiving packets when connecting to UDP host due to FPS-dependent inconsistencies in timer_delay2 causing packets possibly not received or sent frequently + 20090126 -------- include/netdrv.h, main/network.c, main/menu.c, main/netdrv_udp.c, main/netdrv_udp.h, main/netpkt.c, main/netpkt.h, main/netdrv.c, arch/linux/netdrv_ipx.c, arch/linux/netdrv_kali.c, arch/win32/netdrv_ipx.c: Changed function naming convention in netdrv and below to general Descent code convention diff --git a/arch/ogl/ogl.c b/arch/ogl/ogl.c index 55cfda080..1bcd63732 100644 --- a/arch/ogl/ogl.c +++ b/arch/ogl/ogl.c @@ -822,7 +822,6 @@ bool g3_draw_bitmap(vms_vector *pos,fix width,fix height,grs_bitmap *bm, object OGL_ENABLE(TEXTURE_2D); ogl_bindbmtex(bm); ogl_texwrap(bm->gltexture,GL_CLAMP_TO_EDGE); - glDepthMask(GL_FALSE); if (Endlevel_sequence) glDepthFunc(GL_ALWAYS); @@ -876,7 +875,6 @@ bool g3_draw_bitmap(vms_vector *pos,fix width,fix height,grs_bitmap *bm, object glVertex3f(f2glf(pv.x),f2glf(pv.y),-f2glf(pv.z)); } glEnd(); - glDepthMask(GL_TRUE); return 0; } diff --git a/main/render.c b/main/render.c index f9ae0be8d..d3808502c 100644 --- a/main/render.c +++ b/main/render.c @@ -1738,6 +1738,7 @@ void render_mine(int start_seg_num,fix eye_offset) } } +#ifndef OGL for (nn=N_render_segs;nn--;) { int segnum; int objnp; @@ -1809,6 +1810,162 @@ void render_mine(int start_seg_num,fix eye_offset) } } +#else + // Sorting elements for Alpha - 3 passes + // First Pass: render opaque level geometry + transculent level geometry with high Alpha-Test func + for (nn=N_render_segs;nn--;) + { + int segnum; + + segnum = Render_list[nn]; + Current_seg_depth = Seg_depth[nn]; + + if (segnum!=-1 && (_search_mode || eye_offset>0 || (unsigned char)visited[segnum]!=255)) + { + //set global render window vars + + if (window_check) { + Window_clip_left = render_windows[nn].left; + Window_clip_top = render_windows[nn].top; + Window_clip_right = render_windows[nn].right; + Window_clip_bot = render_windows[nn].bot; + } + + // render segment + { + segment *seg = &Segments[segnum]; + g3s_codes cc; + int sn; + + Assert(segnum!=-1 && segnum<=Highest_segment_index); + + cc=rotate_list(8,seg->verts); + + if (! cc.and) { //all off screen? + + if (Viewer->type!=OBJ_ROBOT) + Automap_visited[segnum]=1; + + for (sn=0; sn0 || (unsigned char)visited[segnum]!=255)) + { + //set global render window vars + + if (window_check) { + Window_clip_left = render_windows[nn].left; + Window_clip_top = render_windows[nn].top; + Window_clip_right = render_windows[nn].right; + Window_clip_bot = render_windows[nn].bot; + } + + visited[segnum]=255; + + if (window_check) { //reset for objects + Window_clip_left = Window_clip_top = 0; + Window_clip_right = grd_curcanv->cv_bitmap.bm_w-1; + Window_clip_bot = grd_curcanv->cv_bitmap.bm_h-1; + } + + // render objects + { + int listnum; + int save_linear_depth = Max_linear_depth; + + Max_linear_depth = Max_linear_depth_objects; + + listnum = nn; + + for (objnp=0;render_obj_list[listnum][objnp]!=-1;) + { + int ObjNumber = render_obj_list[listnum][objnp]; + + if (ObjNumber >= 0) + { + do_render_object(ObjNumber); // note link to above else + objnp++; + } + else + { + listnum = -ObjNumber; + objnp = 0; + + } + } + Max_linear_depth = save_linear_depth; + } + } + } + + memset(visited, 0, sizeof(visited[0])*(Highest_segment_index+1)); + + // Third Pass - Render Transculent level geometry with normal Alpha-Func + for (nn=N_render_segs;nn--;) + { + int segnum; + + segnum = Render_list[nn]; + Current_seg_depth = Seg_depth[nn]; + + if (segnum!=-1 && (_search_mode || eye_offset>0 || (unsigned char)visited[segnum]!=255)) + { + //set global render window vars + + if (window_check) { + Window_clip_left = render_windows[nn].left; + Window_clip_top = render_windows[nn].top; + Window_clip_right = render_windows[nn].right; + Window_clip_bot = render_windows[nn].bot; + } + + // render segment + { + segment *seg = &Segments[segnum]; + g3s_codes cc; + int sn; + + Assert(segnum!=-1 && segnum<=Highest_segment_index); + + cc=rotate_list(8,seg->verts); + + if (! cc.and) { //all off screen? + + if (Viewer->type!=OBJ_ROBOT) + Automap_visited[segnum]=1; + + for (sn=0; sn