diff options
author | Holger Zickner <[email protected]> | 2004-07-09 10:25:29 +0000 |
---|---|---|
committer | Holger Zickner <[email protected]> | 2004-07-09 10:25:29 +0000 |
commit | bd16aab44f7774f6127702cfa036407462b5a0ba (patch) | |
tree | a83612a3d864d6d60bca8493b83dd20725a9a027 /src/jake2/render | |
parent | 20a66a892a3f0704ef37f1eebb681edfee6fc165 (diff) |
performance tweaks
Diffstat (limited to 'src/jake2/render')
-rw-r--r-- | src/jake2/render/fastjogl/Image.java | 18 | ||||
-rw-r--r-- | src/jake2/render/fastjogl/Light.java | 68 | ||||
-rw-r--r-- | src/jake2/render/fastjogl/Mesh.java | 118 |
3 files changed, 99 insertions, 105 deletions
diff --git a/src/jake2/render/fastjogl/Image.java b/src/jake2/render/fastjogl/Image.java index de364c3..b05321b 100644 --- a/src/jake2/render/fastjogl/Image.java +++ b/src/jake2/render/fastjogl/Image.java @@ -2,7 +2,7 @@ * Image.java * Copyright (C) 2003 * - * $Id: Image.java,v 1.1 2004-07-09 06:50:49 hzi Exp $ + * $Id: Image.java,v 1.2 2004-07-09 10:22:28 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -743,19 +743,25 @@ public abstract class Image extends Main { // } // else if (pos[off] != 255) fdc = pos[off]; // } - + static floodfill_t[] fifo = new floodfill_t[FLOODFILL_FIFO_SIZE]; + static { + for (int j = 0; j < fifo.length; j++) { + fifo[j] = new floodfill_t(); + } + } // TODO check this: R_FloodFillSkin( byte[] skin, int skinwidth, int skinheight) + // TODO sync with jogl renderer. hoz void R_FloodFillSkin(byte[] skin, int skinwidth, int skinheight) { // byte fillcolor = *skin; // assume this is the pixel to fill int fillcolor = skin[0] & 0xff; - floodfill_t[] fifo = new floodfill_t[FLOODFILL_FIFO_SIZE]; +// floodfill_t[] fifo = new floodfill_t[FLOODFILL_FIFO_SIZE]; int inpt = 0, outpt = 0; int filledcolor = -1; int i; - for (int j = 0; j < fifo.length; j++) { - fifo[j] = new floodfill_t(); - } +// for (int j = 0; j < fifo.length; j++) { +// fifo[j] = new floodfill_t(); +// } if (filledcolor == -1) { filledcolor = 0; diff --git a/src/jake2/render/fastjogl/Light.java b/src/jake2/render/fastjogl/Light.java index b963b21..9f85766 100644 --- a/src/jake2/render/fastjogl/Light.java +++ b/src/jake2/render/fastjogl/Light.java @@ -2,7 +2,7 @@ * Light.java * Copyright (C) 2003 * - * $Id: Light.java,v 1.1 2004-07-09 06:50:49 hzi Exp $ + * $Id: Light.java,v 1.2 2004-07-09 10:24:32 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -28,7 +28,6 @@ package jake2.render.fastjogl; import jake2.Defines; import jake2.Globals; import jake2.client.dlight_t; -import jake2.client.lightstyle_t; import jake2.game.GameBase; import jake2.game.cplane_t; import jake2.qcommon.longjmpException; @@ -223,14 +222,15 @@ public abstract class Light extends Warp { float[] pointcolor = {0, 0, 0}; // vec3_t cplane_t lightplane; // used as shadow plane float[] lightspot = {0, 0, 0}; // vec3_t - + float[] mid = {0, 0, 0}; + +// TODO sync with jogl renderer. hoz int RecursiveLightPoint (mnode_t node, float[] start, float[] end) { float front, back, frac; boolean side; int sideIndex; - cplane_t plane; - float[] mid = {0, 0, 0}; + cplane_t plane; msurface_t surf; int s, t, ds, dt; int i; @@ -272,6 +272,7 @@ public abstract class Light extends Warp { lightplane = plane; int surfIndex = node.firstsurface; + float[] scale = {0, 0, 0}; for (i=0 ; i<node.numsurfaces ; i++, surfIndex++) { surf = r_worldmodel.surfaces[surfIndex]; @@ -305,7 +306,7 @@ public abstract class Light extends Warp { Math3D.VectorCopy (Globals.vec3_origin, pointcolor); if (lightmap != null) { - float[] scale = {0, 0, 0}; + //float[] scale = {0, 0, 0}; float[] rgb; lightmapIndex += 3 * (dt * ((surf.extents[0] >> 4) + 1) + ds); @@ -398,26 +399,23 @@ public abstract class Light extends Warp { R_AddDynamicLights =============== */ + // TODO sync with jogl renderer. hoz void R_AddDynamicLights(msurface_t surf) { - int lnum; int sd, td; float fdist, frad, fminlight; float[] impact = {0, 0, 0}; float[] local = {0, 0, 0}; int s, t; - int i; - int smax, tmax; - mtexinfo_t tex; dlight_t dl; float[] pfBL; float fsacc, ftacc; - smax = (surf.extents[0]>>4)+1; - tmax = (surf.extents[1]>>4)+1; - tex = surf.texinfo; + int smax = (surf.extents[0]>>4)+1; + int tmax = (surf.extents[1]>>4)+1; + mtexinfo_t tex = surf.texinfo; - for (lnum=0 ; lnum<r_newrefdef.num_dlights ; lnum++) + for (int lnum=0 ; lnum<r_newrefdef.num_dlights ; lnum++) { if ( (surf.dlightbits & (1<<lnum)) == 0 ) continue; // not lit by this light @@ -434,7 +432,7 @@ public abstract class Light extends Warp { continue; fminlight = frad - fminlight; - for (i=0 ; i<3 ; i++) + for (int i=0 ; i<3 ; i++) { impact[i] = dl.origin[i] - surf.plane.normal[i]*fdist; @@ -451,7 +449,7 @@ public abstract class Light extends Warp { if ( td < 0 ) td = -td; - for ( s=0, fsacc = 0 ; s<smax ; s++, fsacc += 16, pfBLindex += 3) + for (s=0, fsacc = 0 ; s<smax ; s++, fsacc += 16, pfBLindex += 3) { sd = (int)( local[0] - fsacc ); @@ -480,10 +478,7 @@ public abstract class Light extends Warp { */ void R_SetCacheState( msurface_t surf ) { - int maps; - - for (maps = 0 ; maps < Defines.MAXLIGHTMAPS && surf.styles[maps] != (byte)255 ; - maps++) + for (int maps = 0 ; maps < Defines.MAXLIGHTMAPS && surf.styles[maps] != (byte)255 ; maps++) { surf.cached_light[maps] = r_newrefdef.lightstyles[surf.styles[maps] & 0xFF].white; } @@ -496,24 +491,23 @@ public abstract class Light extends Warp { Combine and scale multiple lightmaps into the floating format in blocklights =============== */ +// TODO sync with jogl renderer. hoz void R_BuildLightMap(msurface_t surf, IntBuffer dest, int stride) { - int smax, tmax; int r, g, b, a, max; - int i, j, size; + int i, j; ByteBuffer lightmap; - float[] scale = {0, 0, 0, 0}; + float[] scale = {0, 0, 0}; int nummaps; float[] bl; - lightstyle_t style; - int monolightmap; + //lightstyle_t style; if ( (surf.texinfo.flags & (Defines.SURF_SKY | Defines.SURF_TRANS33 | Defines.SURF_TRANS66 | Defines.SURF_WARP)) != 0 ) ri.Sys_Error(Defines.ERR_DROP, "R_BuildLightMap called for non-lit surface"); - smax = (surf.extents[0] >> 4) + 1; - tmax = (surf.extents[1] >> 4) + 1; - size = smax * tmax; + int smax = (surf.extents[0] >> 4) + 1; + int tmax = (surf.extents[1] >> 4) + 1; + int size = smax * tmax; if (size > ((s_blocklights.length * Defines.SIZE_OF_FLOAT) >> 4) ) ri.Sys_Error(Defines.ERR_DROP, "Bad s_blocklights size"); @@ -525,11 +519,13 @@ public abstract class Light extends Warp { for (i=0 ; i<size*3 ; i++) s_blocklights[i] = 255; - - for (maps = 0 ; maps < Defines.MAXLIGHTMAPS && surf.styles[maps] != (byte)255; maps++) - { - style = r_newrefdef.lightstyles[surf.styles[maps] & 0xFF]; - } + +// TODO useless? hoz +// for (maps = 0 ; maps < Defines.MAXLIGHTMAPS && surf.styles[maps] != (byte)255; maps++) +// { +// style = r_newrefdef.lightstyles[surf.styles[maps] & 0xFF]; +// } + // goto store; throw new longjmpException(); } @@ -632,7 +628,7 @@ public abstract class Light extends Warp { bl = s_blocklights; int blp = 0; - monolightmap = gl_monolightmap.string.charAt(0); + int monolightmap = gl_monolightmap.string.charAt(0); int destp = 0; @@ -687,7 +683,7 @@ public abstract class Light extends Warp { b = (int)(b*t); a = (int)(a*t); } - r &= 0xFF; g &= 0xFF; b &= 0xFF; a &= 0xFF; + //r &= 0xFF; g &= 0xFF; b &= 0xFF; a &= 0xFF; dest.put(destp++, (a << 24) | (b << 16) | (g << 8) | (r << 0)); } } @@ -768,7 +764,7 @@ public abstract class Light extends Warp { a = 255 - a; break; } - r &= 0xFF; g &= 0xFF; b &= 0xFF; a &= 0xFF; + //r &= 0xFF; g &= 0xFF; b &= 0xFF; a &= 0xFF; dest.put(destp++, (a << 24) | (b << 16) | (g << 8) | (r << 0)); } } diff --git a/src/jake2/render/fastjogl/Mesh.java b/src/jake2/render/fastjogl/Mesh.java index e7da997..572e691 100644 --- a/src/jake2/render/fastjogl/Mesh.java +++ b/src/jake2/render/fastjogl/Mesh.java @@ -2,7 +2,7 @@ * Mesh.java * Copyright (C) 2003 * - * $Id: Mesh.java,v 1.1 2004-07-09 06:50:49 hzi Exp $ + * $Id: Mesh.java,v 1.2 2004-07-09 10:25:29 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -25,19 +25,18 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package jake2.render.fastjogl; -import java.nio.FloatBuffer; -import java.nio.IntBuffer; - -import net.java.games.gluegen.runtime.BufferFactory; -import net.java.games.jogl.GL; -import net.java.games.jogl.util.BufferUtils; import jake2.Defines; -import jake2.Globals; import jake2.client.entity_t; import jake2.qcommon.qfiles; import jake2.render.image_t; import jake2.util.Math3D; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; + +import net.java.games.jogl.GL; +import net.java.games.jogl.util.BufferUtils; + /** * Mesh * @@ -340,22 +339,13 @@ public abstract class Mesh extends Light { /* ** R_CullAliasModel */ - boolean R_CullAliasModel( float[][] bbox, entity_t e ) +// TODO sync with jogl renderer. hoz + boolean R_CullAliasModel(entity_t e) { - int i; float[] mins = {0, 0, 0}; float[] maxs = {0, 0, 0}; - qfiles.dmdl_t paliashdr; - - float[] thismins = {0, 0, 0}; - float[] oldmins = {0, 0, 0}; - float[] thismaxs = {0, 0, 0}; - float[] oldmaxs = {0, 0, 0}; - qfiles.daliasframe_t pframe, poldframe; - float[] angles = {0, 0, 0}; - - paliashdr = (qfiles.dmdl_t)currentmodel.extradata; + qfiles.dmdl_t paliashdr = (qfiles.dmdl_t)currentmodel.extradata; if ( ( e.frame >= paliashdr.num_frames ) || ( e.frame < 0 ) ) { @@ -368,15 +358,15 @@ public abstract class Mesh extends Light { e.oldframe = 0; } - pframe = paliashdr.aliasFrames[e.frame]; - poldframe = paliashdr.aliasFrames[e.oldframe]; + qfiles.daliasframe_t pframe = paliashdr.aliasFrames[e.frame]; + qfiles.daliasframe_t poldframe = paliashdr.aliasFrames[e.oldframe]; /* ** compute axially aligned mins and maxs */ if ( pframe == poldframe ) { - for ( i = 0; i < 3; i++ ) + for ( int i = 0; i < 3; i++ ) { mins[i] = pframe.translate[i]; maxs[i] = mins[i] + pframe.scale[i]*255; @@ -384,18 +374,22 @@ public abstract class Mesh extends Light { } else { - for ( i = 0; i < 3; i++ ) + //float[] thismins = {0, 0, 0}; + //float[] oldmins = {0, 0, 0}; + float[] thismaxs = {0, 0, 0}; + float[] oldmaxs = {0, 0, 0}; + for ( int i = 0; i < 3; i++ ) { - thismins[i] = pframe.translate[i]; - thismaxs[i] = thismins[i] + pframe.scale[i]*255; + //thismins[i] = pframe.translate[i]; + thismaxs[i] = pframe.translate[i] + pframe.scale[i]*255; - oldmins[i] = poldframe.translate[i]; - oldmaxs[i] = oldmins[i] + poldframe.scale[i]*255; + //oldmins[i] = poldframe.translate[i]; + oldmaxs[i] = poldframe.translate[i] + poldframe.scale[i]*255; - if ( thismins[i] < oldmins[i] ) - mins[i] = thismins[i]; + if ( pframe.translate[i] < poldframe.translate[i] ) + mins[i] = pframe.translate[i]; else - mins[i] = oldmins[i]; + mins[i] = poldframe.translate[i]; if ( thismaxs[i] > oldmaxs[i] ) maxs[i] = thismaxs[i]; @@ -407,9 +401,9 @@ public abstract class Mesh extends Light { /* ** compute a full bounding box */ - for ( i = 0; i < 8; i++ ) + float[] tmp = {0, 0, 0}; + for ( int i = 0; i < 8; i++ ) { - float[] tmp = {0, 0, 0}; if ( (i & 1) != 0 ) tmp[0] = mins[0]; @@ -432,13 +426,12 @@ public abstract class Mesh extends Light { /* ** rotate the bounding box */ - Math3D.VectorCopy( e.angles, angles ); - angles[YAW] = -angles[YAW]; - Math3D.AngleVectors( angles, vectors[0], vectors[1], vectors[2] ); - - float[] tmp = {0, 0, 0}; + //float[] angles = {0, 0, 0}; + Math3D.VectorCopy( e.angles, tmp ); + tmp[YAW] = -tmp[YAW]; + Math3D.AngleVectors( tmp, vectors[0], vectors[1], vectors[2] ); - for ( i = 0; i < 8; i++ ) + for ( int i = 0; i < 8; i++ ) { Math3D.VectorCopy( bbox[i], tmp ); @@ -449,34 +442,32 @@ public abstract class Mesh extends Light { Math3D.VectorAdd( e.origin, bbox[i], bbox[i] ); } + int f, mask; + int aggregatemask = ~0; // 0xFFFFFFFF + + for ( int p = 0; p < 8; p++ ) { - int p, f; - int aggregatemask = ~0; // 0xFFFFFFFF - - for ( p = 0; p < 8; p++ ) + mask = 0; + + for ( f = 0; f < 4; f++ ) { - int mask = 0; + float dp = Math3D.DotProduct( frustum[f].normal, bbox[p] ); - for ( f = 0; f < 4; f++ ) + if ( ( dp - frustum[f].dist ) < 0 ) { - float dp = Math3D.DotProduct( frustum[f].normal, bbox[p] ); - - if ( ( dp - frustum[f].dist ) < 0 ) - { - mask |= ( 1 << f ); - } + mask |= ( 1 << f ); } - - aggregatemask &= mask; } - if ( aggregatemask != 0 ) - { - return true; - } + aggregatemask &= mask; + } - return false; + if ( aggregatemask != 0 ) + { + return true; } + + return false; } @@ -492,17 +483,18 @@ public abstract class Mesh extends Light { ================= */ +// TODO sync with jogl renderer. hoz void R_DrawAliasModel(entity_t e) { int i; - qfiles.dmdl_t paliashdr; - float an; + //qfiles.dmdl_t paliashdr; + //float an; image_t skin; if ( ( e.flags & Defines.RF_WEAPONMODEL ) == 0) { - if ( R_CullAliasModel( bbox, e ) ) + if ( R_CullAliasModel(e) ) return; } @@ -512,7 +504,7 @@ public abstract class Mesh extends Light { return; } - paliashdr = (qfiles.dmdl_t)currentmodel.extradata; + qfiles.dmdl_t paliashdr = (qfiles.dmdl_t)currentmodel.extradata; // // get lighting information @@ -629,7 +621,7 @@ public abstract class Mesh extends Light { shadedots = r_avertexnormal_dots[((int)(currententity.angles[1] * (SHADEDOT_QUANT / 360.0))) & (SHADEDOT_QUANT - 1)]; - an = (float)(currententity.angles[1]/180*Math.PI); + float an = (float)(currententity.angles[1]/180*Math.PI); shadevector[0] = (float)Math.cos(-an); shadevector[1] = (float)Math.sin(-an); shadevector[2] = 1; |