aboutsummaryrefslogtreecommitdiffstats
path: root/test/jake2/render/DebugCulling.java
diff options
context:
space:
mode:
Diffstat (limited to 'test/jake2/render/DebugCulling.java')
-rw-r--r--test/jake2/render/DebugCulling.java363
1 files changed, 363 insertions, 0 deletions
diff --git a/test/jake2/render/DebugCulling.java b/test/jake2/render/DebugCulling.java
new file mode 100644
index 0000000..b85fb45
--- /dev/null
+++ b/test/jake2/render/DebugCulling.java
@@ -0,0 +1,363 @@
+/*
+ * DebugCulling.java
+ * Copyright (C) 2003
+ *
+ * $Id: DebugCulling.java,v 1.1 2004-07-07 19:59:58 hzi Exp $
+ */
+/*
+Copyright (C) 1997-2001 Id Software, Inc.
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+package jake2.render;
+
+import jake2.Defines;
+import jake2.Globals;
+import jake2.client.VID;
+import jake2.client.cparticle_t;
+import jake2.client.entity_t;
+import jake2.client.lightstyle_t;
+import jake2.client.particle_t;
+import jake2.client.refdef_t;
+import jake2.client.refexport_t;
+import jake2.client.refimport_t;
+import jake2.client.viddef_t;
+import jake2.game.Cmd;
+import jake2.game.cvar_t;
+import jake2.qcommon.Cbuf;
+import jake2.qcommon.Cvar;
+import jake2.qcommon.FS;
+import jake2.qcommon.Qcommon;
+import jake2.qcommon.qfiles;
+import jake2.qcommon.xcommand_t;
+import jake2.sys.KBD;
+import jake2.util.Lib;
+import jake2.util.Math3D;
+import jake2.util.Vargs;
+
+import java.awt.Dimension;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Vector;
+
+/**
+ * DebugCulling
+ *
+ * @author cwei
+ */
+public class DebugCulling
+{
+
+ static final float INSTANT_PARTICLE = -10000.0f;
+ static final float PARTICLE_GRAVITY = 40.0f;
+
+ String[] args;
+
+ refexport_t re;
+ refimport_t ri;
+ viddef_t viddef;
+ int framecount = 0;
+
+ public DebugCulling(String[] args)
+ {
+ this.args = args;
+ }
+
+ public static void main(String[] args)
+ {
+
+ DebugCulling test = new DebugCulling(args);
+ test.init();
+ test.run();
+ }
+
+ void init()
+ {
+
+ // only for testing
+ // a simple refimport_t implementation
+ ri = new refimport_t()
+ {
+ public void Sys_Error(int err_level, String str)
+ {
+ VID.Error(err_level, str, null);
+ }
+
+ public void Sys_Error(int err_level, String str, Vargs vargs)
+ {
+ VID.Error(err_level, str, vargs);
+ }
+
+ public void Cmd_AddCommand(String name, xcommand_t cmd)
+ {
+ Cmd.AddCommand(name, cmd);
+ }
+
+ public void Cmd_RemoveCommand(String name)
+ {
+ Cmd.RemoveCommand(name);
+ }
+
+ public int Cmd_Argc()
+ {
+ return Cmd.Argc();
+ }
+
+ public String Cmd_Argv(int i)
+ {
+ return Cmd.Argv(i);
+ }
+
+ public void Cmd_ExecuteText(int exec_when, String text)
+ {
+ Cbuf.ExecuteText(exec_when, text);
+ }
+
+ public void Con_Printf(int print_level, String str)
+ {
+ VID.Printf(print_level, str, null);
+ }
+
+ public void Con_Printf(int print_level, String str, Vargs vargs)
+ {
+ VID.Printf(print_level, str, vargs);
+ }
+
+ public byte[] FS_LoadFile(String name)
+ {
+ return FS.LoadFile(name);
+ }
+
+ public int FS_FileLength(String name)
+ {
+ return FS.FileLength(name);
+ }
+
+ public void FS_FreeFile(byte[] buf)
+ {
+ FS.FreeFile(buf);
+ }
+
+ public String FS_Gamedir()
+ {
+ return FS.Gamedir();
+ }
+
+ public cvar_t Cvar_Get(String name, String value, int flags)
+ {
+ return Cvar.Get(name, value, flags);
+ }
+
+ public cvar_t Cvar_Set(String name, String value)
+ {
+ return Cvar.Set(name, value);
+ }
+
+ public void Cvar_SetValue(String name, float value)
+ {
+ Cvar.SetValue(name, value);
+ }
+
+ public boolean Vid_GetModeInfo(Dimension dim, int mode)
+ {
+ return VID.GetModeInfo(dim, mode);
+ }
+
+ public void Vid_MenuInit()
+ {
+ VID.MenuInit();
+ }
+
+ public void Vid_NewWindow(int width, int height)
+ {
+ VID.NewWindow(width, height);
+ }
+
+ public void updateScreenCallback()
+ {
+ DebugCulling.this.updateScreen();
+ }
+ };
+
+ Qcommon.Init(new String[] { "$Id: DebugCulling.java,v 1.1 2004-07-07 19:59:58 hzi Exp $" });
+ // sehr wichtig !!!
+ VID.Shutdown();
+
+ this.re = Renderer.getDriver("jogl", ri);
+
+ re.Init(0, 0);
+
+ viddef = Globals.viddef;
+ }
+
+ float fps = 0.0f;
+ long start = 0;
+ long startTime;
+
+ void run()
+ {
+ startTime = System.currentTimeMillis();
+ while (true)
+ {
+ re.updateScreen(null);
+ KBD.Update();
+// try {
+// Thread.sleep(5);
+// }
+// catch (InterruptedException e) {
+// }
+ }
+ }
+
+ int currentState = 0;
+
+ void updateScreen()
+ {
+ re.BeginFrame(0.0f);
+
+ switch (currentState)
+ {
+ case 0 :
+ re.DrawStretchPic(0, 0, viddef.width, viddef.height, "conback");
+ re.DrawPic(viddef.width / 2 - 50, viddef.height / 2, "loading");
+ currentState = 1;
+ break;
+ case 1 :
+ // register the map
+ re.SetSky("space1", 0, new float[]{ 0, 0, 0 });
+ re.BeginRegistration("ColorTest");
+ re.EndRegistration();
+ currentState = 2;
+ //break;
+ default :
+ if (framecount % 500 == 0)
+ {
+ long time = System.currentTimeMillis();
+ fps = 500000.0f / (time - start);
+ start = time;
+ }
+ String text = fps + " fps";
+
+ testMap();
+
+ drawString(10, viddef.height - 16, text);
+ }
+
+ re.EndFrame();
+ framecount++;
+ }
+
+ // ===================================================================
+
+ private float yaw = 0;
+
+ private float fov_x = 90;
+
+ private refdef_t refdef;
+
+ private void testMap()
+ {
+
+ if ( refdef == null ) {
+ refdef = new refdef_t();
+
+ refdef.x = 0;
+ refdef.y = 0;
+ refdef.width = viddef.width;
+ refdef.height = viddef.height;
+ refdef.fov_x = fov_x;
+ refdef.fov_y = CalcFov(fov_x, refdef.width -10, refdef.height-10);
+ refdef.vieworg = new float[] {0, 0, 0};
+
+ refdef.viewangles[0] = 0;
+ refdef.viewangles[1] = 90;
+ refdef.viewangles[2] = 0;
+
+ refdef.blend = new float[] { 0.0f, 0.0f, 0.0f, 0.0f };
+
+ refdef.areabits = null; // draw all
+// refdef.areabits = new byte[Defines.MAX_MAP_AREAS / 8];
+// Arrays.fill(refdef.areabits, (byte) 0xFF);
+
+
+ refdef.num_entities = 0;
+ refdef.entities = null;
+
+ lightstyle_t light = new lightstyle_t();
+ light.rgb = new float[] {1.0f, 1.0f, 1.0f};
+ light.white = 3.0f;
+
+ refdef.lightstyles = new lightstyle_t[Defines.MAX_LIGHTSTYLES];
+ for (int i = 0; i < Defines.MAX_LIGHTSTYLES; i++)
+ {
+ refdef.lightstyles[i] = new lightstyle_t();
+ refdef.lightstyles[i].rgb = new float[] { 1.0f, 1.0f, 1.0f };
+ refdef.lightstyles[i].white = 3.0f; // r + g + b
+ }
+
+ }
+
+ refdef.time = time() * 0.001f;
+
+ refdef.viewangles[0] += KBD.my * 0.1f;
+ refdef.viewangles[1] -= KBD.mx * 0.1f;
+
+ refdef.vieworg[0] = 0; // + 30 * (float)Math.sin(time() * 0.0005f);
+ refdef.vieworg[1] = -79;
+ refdef.vieworg[2] = -131;
+
+ // wichtig da aufloesung 1/8
+ // --> ebenen schneiden nie genau die sicht
+ refdef.vieworg[0] += 1.0f / 16;
+ refdef.vieworg[1] += 1.0f / 16;
+ refdef.vieworg[2] += 1.0f / 16;
+
+ re.RenderFrame(refdef);
+ }
+
+ private float CalcFov(float fov_x, float width, float height)
+ {
+ double a;
+ double x;
+
+ if (fov_x < 1 || fov_x > 179)
+ ri.Sys_Error(Defines.ERR_DROP, "Bad fov: " + fov_x);
+
+ x = width / Math.tan(fov_x / 360 * Math.PI);
+
+ a = Math.atan(height / x);
+
+ a = a * 360 / Math.PI;
+
+ return (float) a;
+ }
+
+ private void drawString(int x, int y, String text)
+ {
+ for (int i = 0; i < text.length(); i++)
+ {
+ re.DrawChar(x + 8 * i, y, (int) text.charAt(i));
+ }
+ }
+
+ private final int time()
+ {
+ return (int) (System.currentTimeMillis() - startTime);
+ }
+
+} \ No newline at end of file