diff options
Diffstat (limited to 'src/jake2/render')
-rw-r--r-- | src/jake2/render/lwjgl/Surf.java | 389 |
1 files changed, 160 insertions, 229 deletions
diff --git a/src/jake2/render/lwjgl/Surf.java b/src/jake2/render/lwjgl/Surf.java index 22ee73b..4da9ae9 100644 --- a/src/jake2/render/lwjgl/Surf.java +++ b/src/jake2/render/lwjgl/Surf.java @@ -2,7 +2,7 @@ * Surf.java * Copyright (C) 2003 * - * $Id: Surf.java,v 1.6 2005-01-10 00:12:00 cawe Exp $ + * $Id: Surf.java,v 1.7 2005-01-17 16:50:24 cawe Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -114,21 +114,16 @@ public abstract class Surf extends Draw { ============================================================= */ - /* - =============== - R_TextureAnimation - - Returns the proper texture for a given time and base texture - =============== - */ + /** + * R_TextureAnimation + * Returns the proper texture for a given time and base texture + */ image_t R_TextureAnimation(mtexinfo_t tex) { - int c; - if (tex.next == null) return tex.image; - c = currententity.frame % tex.numframes; + int c = currententity.frame % tex.numframes; while (c != 0) { tex = tex.next; @@ -138,40 +133,30 @@ public abstract class Surf extends Draw { return tex.image; } - /* - ================ - DrawGLPoly - ================ - */ + /** + * DrawGLPoly + */ void DrawGLPoly(glpoly_t p) { gl.glDrawArrays(GL11.GL_POLYGON, p.pos, p.numverts); } - // ============ - // PGM - /* - ================ - DrawGLFlowingPoly -- version of DrawGLPoly that handles scrolling texture - ================ - */ + /** + * DrawGLFlowingPoly + * version that handles scrolling texture + */ void DrawGLFlowingPoly(glpoly_t p) { - int i; - float scroll; - - scroll = -64 * ( (r_newrefdef.time / 40.0f) - (int)(r_newrefdef.time / 40.0f) ); + float scroll = -64 * ( (r_newrefdef.time / 40.0f) - (int)(r_newrefdef.time / 40.0f) ); if(scroll == 0.0f) scroll = -64.0f; p.beginScrolling(scroll); gl.glDrawArrays(GL11.GL_POLYGON, p.pos, p.numverts); p.endScrolling(); } - // PGM - // ============ - /* - ** R_DrawTriangleOutlines + /** + * R_DrawTriangleOutlines */ void R_DrawTriangleOutlines() { @@ -182,10 +167,13 @@ public abstract class Surf extends Draw { gl.glDisable(GL11.GL_DEPTH_TEST); gl.glColor4f(1, 1, 1, 1); + msurface_t surf; + glpoly_t p; + int j; for (int i = 0; i < MAX_LIGHTMAPS; i++) { - for (msurface_t surf = gl_lms.lightmap_surfaces[i]; surf != null; surf = surf.lightmapchain) { - for (glpoly_t p = surf.polys; p != null; p = p.chain) { - for (int j = 2; j < p.numverts; j++) { + for (surf = gl_lms.lightmap_surfaces[i]; surf != null; surf = surf.lightmapchain) { + for (p = surf.polys; p != null; p = p.chain) { + for (j = 2; j < p.numverts; j++) { gl.glBegin(GL11.GL_LINE_STRIP); gl.glVertex3f(p.x(0), p.y(0), p.z(0)); gl.glVertex3f(p.x(j-1), p.y(j-1), p.z(j-1)); @@ -201,22 +189,16 @@ public abstract class Surf extends Draw { gl.glEnable(GL11.GL_TEXTURE_2D); } - private IntBuffer temp2 = Lib.newIntBuffer(34 * 34, ByteOrder.LITTLE_ENDIAN); + private final IntBuffer temp2 = Lib.newIntBuffer(34 * 34, ByteOrder.LITTLE_ENDIAN); - /* - ================ - R_RenderBrushPoly - ================ - */ + /** + * R_RenderBrushPoly + */ void R_RenderBrushPoly(msurface_t fa) { - int maps; - image_t image; - boolean is_dynamic = false; - c_brush_polys++; - image = R_TextureAnimation(fa.texinfo); + image_t image = R_TextureAnimation(fa.texinfo); if ((fa.flags & Defines.SURF_DRAWTURB) != 0) { @@ -253,6 +235,7 @@ public abstract class Surf extends Draw { /* ** check for lightmap modification */ + int maps; for ( maps = 0; maps < Defines.MAXLIGHTMAPS && fa.styles[maps] != (byte)255; maps++ ) { if ( r_newrefdef.lightstyles[fa.styles[maps] & 0xFF].white != fa.cached_light[maps] ) { @@ -265,6 +248,7 @@ public abstract class Surf extends Draw { if (maps == 4) maps--; // dynamic this frame or dynamic previously + boolean is_dynamic = false; if ( gotoDynamic || ( fa.dlightframe == r_framecount ) ) { // label dynamic: @@ -315,20 +299,14 @@ public abstract class Surf extends Draw { } - /* - ================ - R_DrawAlphaSurfaces - - Draw water surfaces and windows. - The BSP tree is waled front to back, so unwinding the chain - of alpha_surfaces will draw back to front, giving proper ordering. - ================ - */ + /** + * R_DrawAlphaSurfaces + * Draw water surfaces and windows. + * The BSP tree is waled front to back, so unwinding the chain + * of alpha_surfaces will draw back to front, giving proper ordering. + */ void R_DrawAlphaSurfaces() { - msurface_t s; - float intens; - r_world_matrix.clear(); // // go back to the world matrix @@ -341,11 +319,11 @@ public abstract class Surf extends Draw { // the textures are prescaled up for a better lighting range, // so scale it back down - intens = gl_state.inverse_intensity; + float intens = gl_state.inverse_intensity; gl.glInterleavedArrays(GL11.GL_T2F_V3F, Polygon.BYTE_STRIDE, globalPolygonInterleavedBuf); - for (s=r_alpha_surfaces ; s != null ; s=s.texturechain) + for (msurface_t s = r_alpha_surfaces ; s != null ; s=s.texturechain) { GL_Bind(s.texinfo.image.texnum); c_brush_polys++; @@ -370,19 +348,16 @@ public abstract class Surf extends Draw { r_alpha_surfaces = null; } - /* - ================ - DrawTextureChains - ================ - */ + /** + * DrawTextureChains + */ void DrawTextureChains() { - int i; - msurface_t s; - image_t image; - c_visible_textures = 0; + msurface_t s; + image_t image; + int i; for (i = 0; i < numgltextures ; i++) { image = gltextures[i]; @@ -424,23 +399,18 @@ public abstract class Surf extends Draw { } // direct buffer - private IntBuffer temp = Lib.newIntBuffer(128 * 128, ByteOrder.LITTLE_ENDIAN); - + private final IntBuffer temp = Lib.newIntBuffer(128 * 128, ByteOrder.LITTLE_ENDIAN); + + /** + * GL_RenderLightmappedPoly + * @param surf + */ void GL_RenderLightmappedPoly( msurface_t surf ) { - int i, nv = surf.polys.numverts; - int map = 0; - int index; - float[][] v; - FloatBuffer texCoord = globalPolygonInterleavedBuf; - image_t image = R_TextureAnimation( surf.texinfo ); - boolean is_dynamic = false; - int lmtex = surf.lightmaptexturenum; - glpoly_t p; // ersetzt goto boolean gotoDynamic = false; - + int map; for ( map = 0; map < Defines.MAXLIGHTMAPS && (surf.styles[map] != (byte)255); map++ ) { if ( r_newrefdef.lightstyles[surf.styles[map] & 0xFF].white != surf.cached_light[map] ) { @@ -453,6 +423,7 @@ public abstract class Surf extends Draw { if (map == 4) map--; // dynamic this frame or dynamic previously + boolean is_dynamic = false; if ( gotoDynamic || ( surf.dlightframe == r_framecount ) ) { // label dynamic: @@ -465,6 +436,11 @@ public abstract class Surf extends Draw { } } + glpoly_t p; + FloatBuffer texCoord = globalPolygonInterleavedBuf; + image_t image = R_TextureAnimation( surf.texinfo ); + int lmtex = surf.lightmaptexturenum; + if ( is_dynamic ) { // ist raus gezogen worden int[] temp = new int[128*128]; @@ -581,23 +557,16 @@ public abstract class Surf extends Draw { } } - /* - ================= - R_DrawInlineBModel - ================= - */ + /** + * R_DrawInlineBModel + */ void R_DrawInlineBModel() { - int i, k; - cplane_t pplane; - float dot; - msurface_t psurf; - dlight_t lt; - // calculate dynamic lighting for bmodel if ( gl_flashblend.value == 0 ) { - for (k=0 ; k<r_newrefdef.num_dlights ; k++) + dlight_t lt; + for (int k=0 ; k<r_newrefdef.num_dlights ; k++) { lt = r_newrefdef.dlights[k]; R_MarkLights(lt, 1<<k, currentmodel.nodes[currentmodel.firstnode]); @@ -606,8 +575,7 @@ public abstract class Surf extends Draw { // psurf = ¤tmodel->surfaces[currentmodel->firstmodelsurface]; int psurfp = currentmodel.firstmodelsurface; - msurface_t[] surfaces; - surfaces = currentmodel.surfaces; + msurface_t[] surfaces = currentmodel.surfaces; //psurf = surfaces[psurfp]; if ( (currententity.flags & Defines.RF_TRANSLUCENT) != 0 ) @@ -620,7 +588,10 @@ public abstract class Surf extends Draw { // // draw texture // - for (i=0 ; i<currentmodel.nummodelsurfaces ; i++) + msurface_t psurf; + cplane_t pplane; + float dot; + for (int i=0 ; i<currentmodel.nummodelsurfaces ; i++) { psurf = surfaces[psurfp++]; // find which side of the node we are on @@ -657,28 +628,29 @@ public abstract class Surf extends Draw { } } - /* - ================= - R_DrawBrushModel - ================= - */ + // stack variable + private final float[] mins = {0, 0, 0}; + private final float[] maxs = {0, 0, 0}; + private final float[] org = {0, 0, 0}; + private final float[] forward = {0, 0, 0}; + private final float[] right = {0, 0, 0}; + private final float[] up = {0, 0, 0}; + /** + * R_DrawBrushModel + */ void R_DrawBrushModel(entity_t e) { - float[] mins = {0, 0, 0}; - float[] maxs = {0, 0, 0}; - int i; - boolean rotated; - if (currentmodel.nummodelsurfaces == 0) return; currententity = e; gl_state.currenttextures[0] = gl_state.currenttextures[1] = -1; + boolean rotated; if (e.angles[0] != 0 || e.angles[1] != 0 || e.angles[2] != 0) { rotated = true; - for (i=0 ; i<3 ; i++) + for (int i=0 ; i<3 ; i++) { mins[i] = e.origin[i] - currentmodel.radius; maxs[i] = e.origin[i] + currentmodel.radius; @@ -703,16 +675,11 @@ public abstract class Surf extends Draw { Math3D.VectorSubtract (r_newrefdef.vieworg, e.origin, modelorg); if (rotated) { - float[] temp = {0, 0, 0}; - float[] forward = {0, 0, 0}; - float[] right = {0, 0, 0}; - float[] up = {0, 0, 0}; - - Math3D.VectorCopy (modelorg, temp); + Math3D.VectorCopy (modelorg, org); Math3D.AngleVectors (e.angles, forward, right, up); - modelorg[0] = Math3D.DotProduct (temp, forward); - modelorg[1] = -Math3D.DotProduct (temp, right); - modelorg[2] = Math3D.DotProduct (temp, up); + modelorg[0] = Math3D.DotProduct (org, forward); + modelorg[1] = -Math3D.DotProduct (org, right); + modelorg[2] = Math3D.DotProduct (org, up); } gl.glPushMatrix(); @@ -750,21 +717,11 @@ public abstract class Surf extends Draw { ============================================================= */ - /* - ================ - R_RecursiveWorldNode - ================ - */ + /** + * R_RecursiveWorldNode + */ void R_RecursiveWorldNode (mnode_t node) { - int c, side, sidebit; - cplane_t plane; - msurface_t surf; - msurface_t mark; - mleaf_t pleaf; - float dot = 0; - image_t image; - if (node.contents == Defines.CONTENTS_SOLID) return; // solid @@ -774,10 +731,12 @@ public abstract class Surf extends Draw { if (R_CullBox(node.mins, node.maxs)) return; + int c; + msurface_t mark; // if a leaf node, draw stuff if (node.contents != -1) { - pleaf = (mleaf_t)node; + mleaf_t pleaf = (mleaf_t)node; // check for door connected areas if (r_newrefdef.areabits != null) @@ -806,8 +765,8 @@ public abstract class Surf extends Draw { // node is just a decision point, so go down the apropriate sides // find which side of the node we are on - plane = node.plane; - + cplane_t plane = node.plane; + float dot; switch (plane.type) { case Defines.PLANE_X: @@ -824,6 +783,7 @@ public abstract class Surf extends Draw { break; } + int side, sidebit; if (dot >= 0.0f) { side = 0; @@ -839,6 +799,8 @@ public abstract class Surf extends Draw { R_RecursiveWorldNode(node.children[side]); // draw stuff + msurface_t surf; + image_t image; //for ( c = node.numsurfaces, surf = r_worldmodel.surfaces[node.firstsurface]; c != 0 ; c--, surf++) for ( c = 0; c < node.numsurfaces; c++) { @@ -875,24 +837,17 @@ public abstract class Surf extends Draw { } } } - // recurse down the back side R_RecursiveWorldNode(node.children[1 - side]); } - - /* - ============= - R_DrawWorld - ============= - */ + private final entity_t worldEntity = new entity_t(); + + /** + * R_DrawWorld + */ void R_DrawWorld() { - entity_t ent = new entity_t(); - // auto cycle the world frame for texture animation - ent.frame = (int)(r_newrefdef.time*2); - currententity = ent; - if (r_drawworld.value == 0) return; @@ -903,6 +858,12 @@ public abstract class Surf extends Draw { Math3D.VectorCopy(r_newrefdef.vieworg, modelorg); + entity_t ent = worldEntity; + // auto cycle the world frame for texture animation + ent.clear(); + ent.frame = (int)(r_newrefdef.time*2); + currententity = ent; + gl_state.currenttextures[0] = gl_state.currenttextures[1] = -1; gl.glColor3f (1,1,1); @@ -938,28 +899,15 @@ public abstract class Surf extends Draw { R_DrawTriangleOutlines(); } - byte[] fatvis = new byte[Defines.MAX_MAP_LEAFS / 8]; + final byte[] fatvis = new byte[Defines.MAX_MAP_LEAFS / 8]; - /* - =============== - R_MarkLeaves - - Mark the leaves and nodes that are in the PVS for the current - cluster - =============== - */ + /** + * R_MarkLeaves + * Mark the leaves and nodes that are in the PVS for the current + * cluster + */ void R_MarkLeaves() { - //byte[] vis; - //byte[] fatvis = new byte[Defines.MAX_MAP_LEAFS / 8]; - - //Arrays.fill(fatvis, (byte)0); - - mnode_t node; - int i, c; - mleaf_t leaf; - int cluster; - if (r_oldviewcluster == r_viewcluster && r_oldviewcluster2 == r_viewcluster2 && r_novis.value == 0 && r_viewcluster != -1) return; @@ -972,6 +920,7 @@ public abstract class Surf extends Draw { r_oldviewcluster = r_viewcluster; r_oldviewcluster2 = r_viewcluster2; + int i; if (r_novis.value != 0 || r_viewcluster == -1 || r_worldmodel.vis == null) { // mark everything @@ -983,6 +932,7 @@ public abstract class Surf extends Draw { } byte[] vis = Mod_ClusterPVS(r_viewcluster, r_worldmodel); + int c; // may have to combine two clusters because of solid water boundaries if (r_viewcluster2 != r_viewcluster) { @@ -1000,7 +950,10 @@ public abstract class Surf extends Draw { vis = fatvis; } - + + mnode_t node; + mleaf_t leaf; + int cluster; for ( i=0; i < r_worldmodel.numleafs; i++) { leaf = r_worldmodel.leafs[i]; @@ -1021,8 +974,6 @@ public abstract class Surf extends Draw { } } - - /* ============================================================================= @@ -1031,24 +982,21 @@ public abstract class Surf extends Draw { ============================================================================= */ + /** + * LM_InitBlock + */ void LM_InitBlock() { Arrays.fill(gl_lms.allocated, 0); } + /** + * LM_UploadBlock + * @param dynamic + */ void LM_UploadBlock( boolean dynamic ) { - int texture; - int height = 0; - - if ( dynamic ) - { - texture = 0; - } - else - { - texture = gl_lms.current_lightmap_texture; - } + int texture = ( dynamic ) ? 0 : gl_lms.current_lightmap_texture; GL_Bind( gl_state.lightmap_textures + texture ); gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); @@ -1057,9 +1005,8 @@ public abstract class Surf extends Draw { gl_lms.lightmap_buffer.rewind(); if ( dynamic ) { - int i; - - for ( i = 0; i < BLOCK_WIDTH; i++ ) + int height = 0; + for (int i = 0; i < BLOCK_WIDTH; i++ ) { if ( gl_lms.allocated[i] > height ) height = gl_lms.allocated[i]; @@ -1086,22 +1033,25 @@ public abstract class Surf extends Draw { if ( ++gl_lms.current_lightmap_texture == MAX_LIGHTMAPS ) Com.Error( Defines.ERR_DROP, "LM_UploadBlock() - MAX_LIGHTMAPS exceeded\n" ); - //debugLightmap(gl_lms.lightmap_buffer, 128, 128, 4); - } } - // returns a texture number and the position inside it + /** + * LM_AllocBlock + * @param w + * @param h + * @param pos + * @return a texture number and the position inside it + */ boolean LM_AllocBlock (int w, int h, pos_t pos) { + int best = BLOCK_HEIGHT; int x = pos.x; int y = pos.y; - int i, j; - int best, best2; - - best = BLOCK_HEIGHT; + int best2; + int i, j; for (i=0 ; i<BLOCK_WIDTH-w ; i++) { best2 = 0; @@ -1129,27 +1079,15 @@ public abstract class Surf extends Draw { return true; } - /* - ================ - GL_BuildPolygonFromSurface - ================ - */ + /** + * GL_BuildPolygonFromSurface + */ void GL_BuildPolygonFromSurface(msurface_t fa) { - int i, lindex, lnumverts; - medge_t[] pedges; - medge_t r_pedge; - int vertpage; - float[] vec; - float s, t; - float[] total = {0, 0, 0}; - // reconstruct the polygon - pedges = currentmodel.edges; - lnumverts = fa.numedges; - vertpage = 0; - - Math3D.VectorClear(total); + medge_t[] pedges = currentmodel.edges; + int lnumverts = fa.numedges; + int vertpage = 0; // // draw texture // @@ -1160,7 +1098,11 @@ public abstract class Surf extends Draw { poly.flags = fa.flags; fa.polys = poly; - for (i=0 ; i<lnumverts ; i++) + int lindex; + float[] vec; + medge_t r_pedge; + float s, t; + for (int i=0 ; i<lnumverts ; i++) { lindex = currentmodel.surfedges[fa.firstedge + i]; @@ -1180,7 +1122,6 @@ public abstract class Surf extends Draw { t = Math3D.DotProduct (vec, fa.texinfo.vecs[1]) + fa.texinfo.vecs[1][3]; t /= fa.texinfo.image.height; - Math3D.VectorAdd (total, vec, total); poly.x(i, vec[0]); poly.y(i, vec[1]); poly.z(i, vec[2]); @@ -1208,21 +1149,16 @@ public abstract class Surf extends Draw { } } - /* - ======================== - GL_CreateSurfaceLightmap - ======================== - */ + /** + * GL_CreateSurfaceLightmap + */ void GL_CreateSurfaceLightmap(msurface_t surf) { - int smax, tmax; - IntBuffer base; - if ( (surf.flags & (Defines.SURF_DRAWSKY | Defines.SURF_DRAWTURB)) != 0) return; - smax = (surf.extents[0]>>4)+1; - tmax = (surf.extents[1]>>4)+1; + int smax = (surf.extents[0]>>4)+1; + int tmax = (surf.extents[1]>>4)+1; pos_t lightPos = new pos_t(surf.light_s, surf.light_t); @@ -1243,7 +1179,7 @@ public abstract class Surf extends Draw { surf.lightmaptexturenum = gl_lms.current_lightmap_texture; - base = gl_lms.lightmap_buffer; + IntBuffer base = gl_lms.lightmap_buffer; base.position(surf.light_t * BLOCK_WIDTH + surf.light_s); R_SetCacheState( surf ); @@ -1251,14 +1187,11 @@ public abstract class Surf extends Draw { } lightstyle_t[] lightstyles; - IntBuffer dummy = BufferUtils.createIntBuffer(128*128); + private final IntBuffer dummy = BufferUtils.createIntBuffer(128*128); - /* - ================== - GL_BeginBuildingLightmaps - - ================== - */ + /** + * GL_BeginBuildingLightmaps + */ void GL_BeginBuildingLightmaps(model_t m) { // static lightstyle_t lightstyles[MAX_LIGHTSTYLES]; @@ -1357,11 +1290,9 @@ public abstract class Surf extends Draw { dummy ); } - /* - ======================= - GL_EndBuildingLightmaps - ======================= - */ + /** + * GL_EndBuildingLightmaps + */ void GL_EndBuildingLightmaps() { LM_UploadBlock( false ); |