aboutsummaryrefslogtreecommitdiffstats
path: root/src/jake2
diff options
context:
space:
mode:
authorHolger Zickner <[email protected]>2004-07-15 14:37:35 +0000
committerHolger Zickner <[email protected]>2004-07-15 14:37:35 +0000
commit3dd339c9572b792b85bd49182c826aaec36ee161 (patch)
tree89bf9c92372cf384bce4c29dc5ec09c7ab7069f2 /src/jake2
parente45462dfe3f3db94bf9668d294794c27909a522f (diff)
show fullscreen modes in video menu
move common renderer code to JoglBase
Diffstat (limited to 'src/jake2')
-rw-r--r--src/jake2/client/VID.java106
-rw-r--r--src/jake2/client/refexport_t.java5
-rw-r--r--src/jake2/render/FastJoglRenderer.java10
-rw-r--r--src/jake2/render/JoglBase.java (renamed from src/jake2/render/jogl/Impl.java)287
-rw-r--r--src/jake2/render/JoglRenderer.java8
-rw-r--r--src/jake2/render/fastjogl/Base.java11
-rw-r--r--src/jake2/render/fastjogl/Draw.java4
-rw-r--r--src/jake2/render/fastjogl/Impl.java343
-rw-r--r--src/jake2/render/fastjogl/Main.java46
-rw-r--r--src/jake2/render/jogl/Base.java11
-rw-r--r--src/jake2/render/jogl/Draw.java4
-rw-r--r--src/jake2/render/jogl/Main.java52
12 files changed, 258 insertions, 629 deletions
diff --git a/src/jake2/client/VID.java b/src/jake2/client/VID.java
index b18683b..0eec17a 100644
--- a/src/jake2/client/VID.java
+++ b/src/jake2/client/VID.java
@@ -2,7 +2,7 @@
* VID.java
* Copyright (C) 2003
*
- * $Id: VID.java,v 1.5 2004-07-09 06:50:50 hzi Exp $
+ * $Id: VID.java,v 1.6 2004-07-15 14:37:35 hzi Exp $
*/
/*
Copyright (C) 1997-2001 Id Software, Inc.
@@ -37,6 +37,7 @@ import jake2.sys.KBD;
import jake2.util.Vargs;
import java.awt.Dimension;
+import java.awt.DisplayMode;
/**
* VID is a video driver.
@@ -85,12 +86,6 @@ public class VID extends Globals {
Com.DPrintf(fmt, vargs);
}
- public static void Error(int err_level, String fmt, Vargs vargs)
- {
- //static qboolean inupdate;
- Com.Error(err_level, fmt, vargs);
- }
-
// ==========================================================================
/*
@@ -123,15 +118,17 @@ public class VID extends Globals {
new vidmode_t("Mode 8: 1280x1024", 1280, 1024, 8),
new vidmode_t("Mode 9: 1600x1200", 1600, 1200, 9),
new vidmode_t("Mode 10: 2048x1536", 2048, 1536, 10)};
-
- static final int NUM_MODES = vid_modes.length;
+ static vidmode_t fs_modes[];
public static boolean GetModeInfo(Dimension dim, int mode) {
- if (mode < 0 || mode >= NUM_MODES)
+ vidmode_t[] modes = vid_modes;
+ if (vid_fullscreen.value != 0.0f) modes = fs_modes;
+
+ if (mode < 0 || mode >= modes.length)
return false;
- dim.width = vid_modes[mode].width;
- dim.height = vid_modes[mode].height;
+ dim.width = modes[mode].width;
+ dim.height = modes[mode].height;
return true;
}
@@ -191,11 +188,11 @@ public class VID extends Globals {
Com.Printf( "LoadLibrary(\"" + name +"\")\n" );
refimport_t ri = new refimport_t() {
public void Sys_Error(int err_level, String str) {
- VID.Error(err_level, str, null);
+ Com.Error(err_level, str, null);
}
public void Sys_Error(int err_level, String str, Vargs vargs) {
- VID.Error(err_level, str, vargs);
+ Com.Error(err_level, str, vargs);
}
public void Cmd_AddCommand(String name, xcommand_t cmd) {
@@ -280,12 +277,6 @@ public class VID extends Globals {
Com.Error(Defines.ERR_FATAL, name + " has incompatible api_version");
}
- /* Init IN (Mouse) */
-// in_state.IN_CenterView_fp = IN_CenterView;
-// in_state.Key_Event_fp = Do_Key_Event;
-// in_state.viewangles = cl.viewangles;
-// in_state.in_strafe_state = &in_strafe.state;
-
IN.Real_IN_Init();
if ( !Globals.re.Init((int)vid_xpos.value, (int)vid_ypos.value) )
@@ -413,19 +404,8 @@ public class VID extends Globals {
//
// ==========================================================================
-// #define REF_SOFT 0
-// #define REF_SOFTX11 1
-// #define REF_MESA3D 2
-// #define REF_3DFXGL 3
-// #define REF_OPENGLX 4
static final int REF_OPENGL_JOGL = 0;
static final int REF_OPENGL_FASTJOGL =1;
-// #define REF_MESA3DGLX 5
-
-// extern cvar_t *vid_ref;
-// extern cvar_t *vid_fullscreen;
-// extern cvar_t *vid_gamma;
-// extern cvar_t *scr_viewsize;
static cvar_t gl_mode;
static cvar_t gl_driver;
@@ -632,6 +612,10 @@ public class VID extends Globals {
"[2048 1536]",
null
};
+ static String[] fs_resolutions;
+ static int last_fs;
+ static int last_win;
+
static final String[] refs =
{
// "[software ]",
@@ -651,13 +635,37 @@ public class VID extends Globals {
null
};
+ static void initModeList() {
+ DisplayMode[] modes = re.getModeList();
+ fs_resolutions = new String[modes.length + 1];
+ fs_modes = new vidmode_t[modes.length];
+ for (int i = 0; i < modes.length; i++) {
+ DisplayMode m = modes[i];
+ StringBuffer sb = new StringBuffer(18);
+ sb.append('[');
+ sb.append(m.getWidth());
+ sb.append(' ');
+ sb.append(m.getHeight());
+ while (sb.length() < 10) sb.append(' ');
+ sb.append(']');
+ fs_resolutions[i] = sb.toString();
+ sb.setLength(0);
+ sb.append("Mode ");
+ sb.append(i);
+ sb.append(':');
+ sb.append(m.getWidth());
+ sb.append('x');
+ sb.append(m.getHeight());
+ fs_modes[i] = new vidmode_t(sb.toString(), m.getWidth(), m.getHeight(), i);
+ }
+ }
+
/*
** VID_MenuInit
*/
- public static void MenuInit()
- {
- int i;
-
+ public static void MenuInit() {
+ if (fs_resolutions == null) initModeList();
+
if ( gl_driver == null )
gl_driver = Cvar.Get( "gl_driver", "jogl", 0 );
if ( gl_picmip == null )
@@ -677,6 +685,19 @@ public class VID extends Globals {
s_mode_list[SOFTWARE_MENU].curvalue = (int)sw_mode.value;
s_mode_list[OPENGL_MENU].curvalue = (int)gl_mode.value;
+ if (vid_fullscreen.value != 0.0f) {
+ s_mode_list[OPENGL_MENU].itemnames = fs_resolutions;
+ if (s_mode_list[OPENGL_MENU].curvalue >= fs_resolutions.length - 1) {
+ s_mode_list[OPENGL_MENU].curvalue = 0;
+ }
+ last_fs = s_mode_list[OPENGL_MENU].curvalue;
+ } else {
+ s_mode_list[OPENGL_MENU].itemnames = resolutions;
+ if (s_mode_list[OPENGL_MENU].curvalue >= resolutions.length - 1) {
+ s_mode_list[OPENGL_MENU].curvalue = 0;
+ }
+ last_win = s_mode_list[OPENGL_MENU].curvalue;
+ }
if ( SCR.scr_viewsize == null )
SCR.scr_viewsize = Cvar.Get ("viewsize", "100", CVAR_ARCHIVE);
@@ -726,7 +747,7 @@ public class VID extends Globals {
s_opengl_menu.x = (int)(viddef.width * 0.50f);
s_opengl_menu.nitems = 0;
- for ( i = 0; i < 2; i++ )
+ for (int i = 0; i < 2; i++ )
{
s_ref_list[i].type = MTYPE_SPINCONTROL;
s_ref_list[i].name = "driver";
@@ -743,7 +764,6 @@ public class VID extends Globals {
s_mode_list[i].name = "video mode";
s_mode_list[i].x = 0;
s_mode_list[i].y = 10;
- s_mode_list[i].itemnames = resolutions;
s_screensize_slider[i].type = MTYPE_SLIDER;
s_screensize_slider[i].x = 0;
@@ -775,6 +795,18 @@ public class VID extends Globals {
s_fs_box[i].name = "fullscreen";
s_fs_box[i].itemnames = yesno_names;
s_fs_box[i].curvalue = (int)vid_fullscreen.value;
+ s_fs_box[i].callback = new Menu.mcallback() {
+ public void execute(Object o) {
+ int fs = ((Menu.menulist_s)o).curvalue;
+ if (fs == 0) {
+ s_mode_list[1].itemnames = resolutions;
+ s_mode_list[1].curvalue = last_win;
+ } else {
+ s_mode_list[1].itemnames = fs_resolutions;
+ s_mode_list[1].curvalue = last_fs;
+ }
+ }
+ };
s_defaults_action[i].type = MTYPE_ACTION;
s_defaults_action[i].name = "reset to default";
diff --git a/src/jake2/client/refexport_t.java b/src/jake2/client/refexport_t.java
index d1872c9..340a8c0 100644
--- a/src/jake2/client/refexport_t.java
+++ b/src/jake2/client/refexport_t.java
@@ -2,7 +2,7 @@
* refexport_t.java
* Copyright (C) 2003
*
- * $Id: refexport_t.java,v 1.1 2004-07-07 19:58:52 hzi Exp $
+ * $Id: refexport_t.java,v 1.2 2004-07-15 14:37:35 hzi Exp $
*/
/*
Copyright (C) 1997-2001 Id Software, Inc.
@@ -31,6 +31,7 @@ import jake2.render.image_t;
import jake2.render.model_t;
import java.awt.Dimension;
+import java.awt.DisplayMode;
/**
* refexport_t
@@ -104,4 +105,6 @@ public interface refexport_t {
void updateScreen(xcommand_t callback);
int apiVersion();
+
+ DisplayMode[] getModeList();
}
diff --git a/src/jake2/render/FastJoglRenderer.java b/src/jake2/render/FastJoglRenderer.java
index da20bfd..56ab03b 100644
--- a/src/jake2/render/FastJoglRenderer.java
+++ b/src/jake2/render/FastJoglRenderer.java
@@ -2,7 +2,7 @@
* FastJoglRenderer.java
* Copyright (C) 2003
*
- * $Id: FastJoglRenderer.java,v 1.1 2004-07-09 06:50:47 hzi Exp $
+ * $Id: FastJoglRenderer.java,v 1.2 2004-07-15 14:37:35 hzi Exp $
*/
/*
Copyright (C) 1997-2001 Id Software, Inc.
@@ -28,7 +28,7 @@ package jake2.render;
import jake2.Defines;
import jake2.client.*;
import jake2.qcommon.xcommand_t;
-import jake2.render.fastjogl.Impl;
+import jake2.render.fastjogl.Misc;
import java.awt.Dimension;
@@ -37,8 +37,10 @@ import java.awt.Dimension;
*
* @author cwei
*/
-final class FastJoglRenderer extends Impl implements refexport_t, Ref {
-
+final class FastJoglRenderer extends Misc implements refexport_t, Ref {
+
+ public static final String DRIVER_NAME = "fastjogl";
+
static {
Renderer.register(new FastJoglRenderer());
};
diff --git a/src/jake2/render/jogl/Impl.java b/src/jake2/render/JoglBase.java
index cfaec7e..5477229 100644
--- a/src/jake2/render/jogl/Impl.java
+++ b/src/jake2/render/JoglBase.java
@@ -1,8 +1,8 @@
/*
- * Impl.java
- * Copyright (C) 2003
- *
- * $Id: Impl.java,v 1.5 2004-07-09 06:50:48 hzi Exp $
+ * JoglCommon.java
+ * Copyright (C) 2004
+ *
+ * $Id: JoglBase.java,v 1.1 2004-07-15 14:37:34 hzi Exp $
*/
/*
Copyright (C) 1997-2001 Id Software, Inc.
@@ -23,35 +23,53 @@ 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.jogl;
+
+package jake2.render;
import jake2.Defines;
-import jake2.Globals;
-import jake2.qcommon.Com;
+import jake2.client.refimport_t;
+import jake2.client.viddef_t;
+import jake2.game.cvar_t;
import jake2.qcommon.xcommand_t;
import jake2.sys.KBD;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
+import java.util.LinkedList;
import javax.swing.JFrame;
import net.java.games.jogl.*;
+import net.java.games.jogl.util.GLUT;
/**
- * Impl
- *
- * @author cwei
+ * JoglCommon
*/
-public class Impl extends Misc implements GLEventListener {
+public abstract class JoglBase implements GLEventListener {
+
+ // IMPORTED FUNCTIONS
+ protected refimport_t ri = null;
+
+ protected GraphicsDevice device;
+ protected DisplayMode oldDisplayMode;
+ protected GLCanvas canvas;
+ JFrame window;
+
+ protected GL gl;
+ protected GLU glu;
+ protected GLUT glut = new GLUT();
- public static final String DRIVER_NAME = "jogl";
+ // window position on the screen
+ int window_xpos, window_ypos;
+ protected viddef_t vid = new viddef_t();
// handles the post initialization with JoglRenderer
protected boolean post_init = false;
-
- private final xcommand_t INIT_CALLBACK = new xcommand_t() {
+ protected boolean contextInUse = false;
+ protected abstract boolean R_Init2();
+
+ protected final xcommand_t INIT_CALLBACK = new xcommand_t() {
public void execute() {
// only used for the first run (initialization)
// clear the screen
@@ -68,27 +86,76 @@ public class Impl extends Misc implements GLEventListener {
GLimp_EndFrame();
}
};
-
- private xcommand_t callback = INIT_CALLBACK;
- protected boolean contextInUse = false;
+ protected xcommand_t callback = INIT_CALLBACK;
- private GraphicsDevice device;
- private DisplayMode oldDisplayMode;
+ protected cvar_t vid_fullscreen;
- GLCanvas canvas;
- JFrame window;
+ // enum rserr_t
+ protected static final int rserr_ok = 0;
+ protected static final int rserr_invalid_fullscreen = 1;
+ protected static final int rserr_invalid_mode = 2;
+ protected static final int rserr_unknown = 3;
- // window position on the screen
- int window_xpos, window_ypos;
-
- /**
- * @return true
- */
- boolean GLimp_Init(int xpos, int ypos) {
- // do nothing
- window_xpos = xpos;
- window_ypos = ypos;
- return true;
+ public DisplayMode[] getModeList() {
+ DisplayMode[] modes = device.getDisplayModes();
+ LinkedList l = new LinkedList();
+ l.add(oldDisplayMode);
+
+ for (int i = 0; i < modes.length; i++) {
+ DisplayMode m = modes[i];
+
+ if (m.getBitDepth() != oldDisplayMode.getBitDepth()) continue;
+ if (m.getRefreshRate() > oldDisplayMode.getRefreshRate()) continue;
+
+ int j = 0;
+ DisplayMode ml = null;
+ for (j = 0; j < l.size(); j++) {
+ ml = (DisplayMode)l.get(j);
+ if (ml.getWidth() >= m.getWidth()) break;
+ }
+ if (j == l.size()) {
+ l.addLast(m);
+ } else if (ml.getWidth() > m.getWidth()) {
+ l.add(j, m);
+ } else if (m.getRefreshRate() > ml.getRefreshRate()){
+ l.remove(j);
+ l.add(j, m);
+ }
+ }
+ DisplayMode[] ma = new DisplayMode[l.size()];
+ l.toArray(ma);
+ return ma;
+ }
+
+ DisplayMode findDisplayMode(Dimension dim) {
+ DisplayMode mode = null;
+ DisplayMode m = null;
+ DisplayMode[] modes = getModeList();
+ int w = dim.width;
+ int h = dim.height;
+
+ for (int i = 0; i < modes.length; i++) {
+ m = modes[i];
+ if (m.getWidth() == w) {
+ mode = m;
+ break;
+ }
+ }
+ if (mode == null) mode = oldDisplayMode;
+ return mode;
+ }
+
+ String getModeString(DisplayMode m) {
+ StringBuffer sb = new StringBuffer();
+ sb.append(m.getWidth());
+ sb.append('x');
+ sb.append(m.getHeight());
+ sb.append('x');
+ sb.append(m.getBitDepth());
+ sb.append('@');
+ sb.append(m.getRefreshRate());
+ sb.append("Hz");
+ return sb.toString();
}
/**
@@ -97,12 +164,10 @@ public class Impl extends Misc implements GLEventListener {
* @param fullscreen
* @return enum rserr_t
*/
- int GLimp_SetMode(Dimension dim, int mode, boolean fullscreen) {
+ protected int GLimp_SetMode(Dimension dim, int mode, boolean fullscreen) {
Dimension newDim = new Dimension();
- ri.Cvar_Get("r_fakeFullscreen", "0", Globals.CVAR_ARCHIVE);
-
ri.Con_Printf(Defines.PRINT_ALL, "Initializing OpenGL display\n");
ri.Con_Printf(Defines.PRINT_ALL, "...setting mode " + mode + ":");
@@ -127,9 +192,9 @@ public class Impl extends Misc implements GLEventListener {
canvas.setNoAutoRedrawMode(true);
canvas.addGLEventListener(this);
- window.getContentPane().add(canvas);
+ //window.getContentPane().add(canvas);
- canvas.setSize(newDim.width, newDim.height);
+ //canvas.setSize(newDim.width, newDim.height);
// register event listener
window.addWindowListener(new WindowAdapter() {
@@ -149,39 +214,35 @@ public class Impl extends Misc implements GLEventListener {
*/
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
device = env.getDefaultScreenDevice();
-
- if (fullscreen && !device.isFullScreenSupported()) {
- ri.Con_Printf(Defines.PRINT_ALL, "...fullscreen not supported\n");
- vid_fullscreen.value = 0;
- vid_fullscreen.modified = false;
- }
-
- fullscreen = fullscreen && device.isFullScreenSupported();
-
+
if (oldDisplayMode == null) {
oldDisplayMode = device.getDisplayMode();
}
if (fullscreen) {
- DisplayMode displayMode = findDisplayMode(newDim, oldDisplayMode.getBitDepth(), oldDisplayMode.getRefreshRate());
+ DisplayMode displayMode = findDisplayMode(newDim);
+
+ newDim.width = displayMode.getWidth();
+ newDim.height = displayMode.getHeight();
+ window.setUndecorated(true);
+ window.setSize(displayMode.getWidth(), displayMode.getHeight());
+ window.setResizable(false);
+ window.getContentPane().add(canvas);
+
+ device.setFullScreenWindow(window);
- if (displayMode != null) {
- newDim.width = displayMode.getWidth();
- newDim.height = displayMode.getHeight();
- window.setUndecorated(true);
- window.setResizable(false);
- device.setFullScreenWindow(window);
+ if (!displayMode.equals(oldDisplayMode))
device.setDisplayMode(displayMode);
- window.setLocation(0, 0);
- window.setSize(displayMode.getWidth(), displayMode.getHeight());
- canvas.setSize(displayMode.getWidth(), displayMode.getHeight());
- ri.Con_Printf(Defines.PRINT_ALL, "...setting fullscreen " + getModeString(displayMode) + '\n');
- }
+
+ window.setLocation(0, 0);
+ ri.Con_Printf(Defines.PRINT_ALL, "...setting fullscreen " + getModeString(displayMode) + '\n');
+
} else {
window.setLocation(window_xpos, window_ypos);
- window.pack();
+ window.setSize(newDim.width, newDim.height);
window.setResizable(false);
+ window.getContentPane().add(canvas);
window.setVisible(true);
}
@@ -202,41 +263,32 @@ public class Impl extends Misc implements GLEventListener {
return rserr_ok;
}
-
- DisplayMode findDisplayMode(Dimension dim, int depth, int rate) {
- DisplayMode mode = null;
- DisplayMode m = null;
- DisplayMode[] modes = device.getDisplayModes();
- int w = dim.width;
- int h = dim.height;
-
- for (int i = 0; i < modes.length; i++) {
- m = modes[i];
- if (m.getWidth() == w && m.getHeight() == h && m.getBitDepth() == depth && m.getRefreshRate() == rate) {
- mode = m;
- break;
+
+ protected void GLimp_Shutdown() {
+ if (oldDisplayMode != null && device.getFullScreenWindow() != null) {
+ try {
+ if (!device.getDisplayMode().equals(oldDisplayMode))
+ device.setDisplayMode(oldDisplayMode);
+ device.setFullScreenWindow(null);
+ } catch (Exception e) {
+ e.printStackTrace();
}
}
- if (mode == null) mode = oldDisplayMode;
- Com.Printf(getModeString(mode) + '\n');
- return mode;
- }
-
- String getModeString(DisplayMode m) {
- StringBuffer sb = new StringBuffer();
- sb.append(m.getWidth());
- sb.append('x');
- sb.append(m.getHeight());
- sb.append('x');
- sb.append(m.getBitDepth());
- sb.append('@');
- sb.append(m.getRefreshRate());
- sb.append("Hz");
- return sb.toString();
+ if (this.window != null) {
+ window.dispose();
+ }
+ post_init = false;
+ callback = INIT_CALLBACK;
}
- void GLimp_BeginFrame(float camera_separation) {
+ /**
+ * @return true
+ */
+ protected boolean GLimp_Init(int xpos, int ypos) {
// do nothing
+ window_xpos = xpos;
+ window_ypos = ypos;
+ return true;
}
protected void GLimp_EndFrame() {
@@ -244,49 +296,36 @@ public class Impl extends Misc implements GLEventListener {
// swap buffer
// but jogl has no method to swap
}
-
- protected void GLimp_AppActivate(boolean activate) {
+ protected void GLimp_BeginFrame(float camera_separation) {
// do nothing
}
- boolean QGL_Init(String dll_name) {
- // doesn't need libGL.so or .dll loading
- return true;
- }
-
- void QGL_Shutdown() {
- // doesn't need libGL.so or .dll loading
+ protected void GLimp_AppActivate(boolean activate) {
// do nothing
}
- void GLimp_Shutdown() {
- if (oldDisplayMode != null && device.getFullScreenWindow() != null) {
- try {
- device.setDisplayMode(oldDisplayMode);
- device.setFullScreenWindow(null);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- if (this.window != null) {
- window.dispose();
- }
- post_init = false;
- callback = INIT_CALLBACK;
- }
-
- void GLimp_EnableLogging(boolean enable) {
+ protected void GLimp_EnableLogging(boolean enable) {
// doesn't need jogl logging
// do nothing
}
- void GLimp_LogNewFrame() {
+ protected void GLimp_LogNewFrame() {
// doesn't need jogl logging
// do nothing
}
-
-
+ /*
+ * @see jake2.client.refexport_t#updateScreen()
+ */
+ public void updateScreen() {
+ this.callback = INIT_CALLBACK;
+ canvas.display();
+ }
+
+ public void updateScreen(xcommand_t callback) {
+ this.callback = callback;
+ canvas.display();
+ }
// ============================================================================
// GLEventListener interface
// ============================================================================
@@ -327,17 +366,5 @@ public class Impl extends Misc implements GLEventListener {
public void reshape(GLDrawable drawable, int x, int y, int width, int height) {
// do nothing
}
-
- /*
- * @see jake2.client.refexport_t#updateScreen()
- */
- public void updateScreen() {
- this.callback = INIT_CALLBACK;
- canvas.display();
- }
- public void updateScreen(xcommand_t callback) {
- this.callback = callback;
- canvas.display();
- }
}
diff --git a/src/jake2/render/JoglRenderer.java b/src/jake2/render/JoglRenderer.java
index 97e3967..6e0926b 100644
--- a/src/jake2/render/JoglRenderer.java
+++ b/src/jake2/render/JoglRenderer.java
@@ -2,7 +2,7 @@
* JoglRenderer.java
* Copyright (C) 2003
*
- * $Id: JoglRenderer.java,v 1.3 2004-07-09 06:50:47 hzi Exp $
+ * $Id: JoglRenderer.java,v 1.4 2004-07-15 14:37:35 hzi Exp $
*/
/*
Copyright (C) 1997-2001 Id Software, Inc.
@@ -28,7 +28,7 @@ package jake2.render;
import jake2.Defines;
import jake2.client.*;
import jake2.qcommon.xcommand_t;
-import jake2.render.jogl.Impl;
+import jake2.render.jogl.Misc;
import java.awt.Dimension;
@@ -37,7 +37,9 @@ import java.awt.Dimension;
*
* @author cwei
*/
-final class JoglRenderer extends Impl implements refexport_t, Ref {
+final class JoglRenderer extends Misc implements refexport_t, Ref {
+
+ public static final String DRIVER_NAME = "jogl";
static {
Renderer.register(new JoglRenderer());
diff --git a/src/jake2/render/fastjogl/Base.java b/src/jake2/render/fastjogl/Base.java
index c5cc690..563b16a 100644
--- a/src/jake2/render/fastjogl/Base.java
+++ b/src/jake2/render/fastjogl/Base.java
@@ -2,7 +2,7 @@
* Base.java
* Copyright (C) 2003
*
- * $Id: Base.java,v 1.1 2004-07-09 06:50:49 hzi Exp $
+ * $Id: Base.java,v 1.2 2004-07-15 14:37:33 hzi Exp $
*/
/*
Copyright (C) 1997-2001 Id Software, Inc.
@@ -25,6 +25,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package jake2.render.fastjogl;
+import jake2.render.JoglBase;
import net.java.games.jogl.GL;
/**
@@ -32,7 +33,7 @@ import net.java.games.jogl.GL;
*
* @author cwei
*/
-public class Base {
+public abstract class Base extends JoglBase {
static final int GL_COLOR_INDEX8_EXT = GL.GL_COLOR_INDEX;
static final String REF_VERSION = "GL 0.01";
@@ -75,12 +76,6 @@ public class Base {
// ===================================================================
- // enum rserr_t
- static final int rserr_ok = 0;
- static final int rserr_invalid_fullscreen = 1;
- static final int rserr_invalid_mode = 2;
- static final int rserr_unknown = 3;
-
//
// #include "gl_model.h"
//
diff --git a/src/jake2/render/fastjogl/Draw.java b/src/jake2/render/fastjogl/Draw.java
index fcb48b6..0309dba 100644
--- a/src/jake2/render/fastjogl/Draw.java
+++ b/src/jake2/render/fastjogl/Draw.java
@@ -2,7 +2,7 @@
* Draw.java
* Copyright (C) 2003
*
- * $Id: Draw.java,v 1.1 2004-07-09 06:50:49 hzi Exp $
+ * $Id: Draw.java,v 1.2 2004-07-15 14:37:33 hzi Exp $
*/
/*
Copyright (C) 1997-2001 Id Software, Inc.
@@ -26,13 +26,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
package jake2.render.fastjogl;
import jake2.Defines;
-import jake2.Globals;
import jake2.render.image_t;
import java.awt.Dimension;
import net.java.games.jogl.GL;
-import net.java.games.jogl.util.GLUT;
/**
* Draw
diff --git a/src/jake2/render/fastjogl/Impl.java b/src/jake2/render/fastjogl/Impl.java
deleted file mode 100644
index 03af496..0000000
--- a/src/jake2/render/fastjogl/Impl.java
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
- * Impl.java
- * Copyright (C) 2003
- *
- * $Id: Impl.java,v 1.1 2004-07-09 06:50:49 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.fastjogl;
-
-import jake2.Defines;
-import jake2.Globals;
-import jake2.qcommon.Com;
-import jake2.qcommon.xcommand_t;
-import jake2.sys.KBD;
-
-import java.awt.*;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-
-import javax.swing.JFrame;
-
-import net.java.games.jogl.*;
-
-/**
- * Impl
- *
- * @author cwei
- */
-public class Impl extends Misc implements GLEventListener {
-
- public static final String DRIVER_NAME = "fastjogl";
-
- // handles the post initialization with JoglRenderer
- protected boolean post_init = false;
-
- private final xcommand_t INIT_CALLBACK = new xcommand_t() {
- public void execute() {
- // only used for the first run (initialization)
- // clear the screen
- gl.glClearColor(0, 0, 0, 0);
- gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
-
- //
- // check the post init process
- //
- if (!post_init) {
- ri.Con_Printf(Defines.PRINT_ALL, "Missing multi-texturing for FastJOGL renderer\n");
- }
-
- GLimp_EndFrame();
- }
- };
-
- private xcommand_t callback = INIT_CALLBACK;
- protected boolean contextInUse = false;
-
- private GraphicsDevice device;
- private DisplayMode oldDisplayMode;
-
- GLCanvas canvas;
- JFrame window;
-
- // window position on the screen
- int window_xpos, window_ypos;
-
- /**
- * @return true
- */
- boolean GLimp_Init(int xpos, int ypos) {
- // do nothing
- window_xpos = xpos;
- window_ypos = ypos;
- return true;
- }
-
- /**
- * @param dim
- * @param mode
- * @param fullscreen
- * @return enum rserr_t
- */
- int GLimp_SetMode(Dimension dim, int mode, boolean fullscreen) {
-
- Dimension newDim = new Dimension();
-
- ri.Cvar_Get("r_fakeFullscreen", "0", Globals.CVAR_ARCHIVE);
-
- ri.Con_Printf(Defines.PRINT_ALL, "Initializing OpenGL display\n");
-
- ri.Con_Printf(Defines.PRINT_ALL, "...setting mode " + mode + ":");
-
- if (!ri.Vid_GetModeInfo(newDim, mode)) {
- ri.Con_Printf(Defines.PRINT_ALL, " invalid mode\n");
- return rserr_invalid_mode;
- }
-
- ri.Con_Printf(Defines.PRINT_ALL, " " + newDim.width + " " + newDim.height + '\n');
-
- // destroy the existing window
- GLimp_Shutdown();
-
- window = new JFrame("Jake2");
-
- GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities());
-
- // TODO Use debug pipeline
- //canvas.setGL(new DebugGL(canvas.getGL()));
-
- canvas.setNoAutoRedrawMode(true);
- canvas.addGLEventListener(this);
-
- window.getContentPane().add(canvas);
-
- canvas.setSize(newDim.width, newDim.height);
-
- // register event listener
- window.addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent e) {
- ri.Cmd_ExecuteText(Defines.EXEC_APPEND, "quit");
- }
- });
-
- // D I F F E R E N T J A K E 2 E V E N T P R O C E S S I N G
- window.addComponentListener(KBD.listener);
- canvas.addKeyListener(KBD.listener);
- canvas.addMouseListener(KBD.listener);
- canvas.addMouseMotionListener(KBD.listener);
-
- /*
- * fullscreen handling
- */
- GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
- device = env.getDefaultScreenDevice();
-
- if (fullscreen && !device.isFullScreenSupported()) {
- ri.Con_Printf(Defines.PRINT_ALL, "...fullscreen not supported\n");
- vid_fullscreen.value = 0;
- vid_fullscreen.modified = false;
- }
-
- fullscreen = fullscreen && device.isFullScreenSupported();
-
- if (oldDisplayMode == null) {
- oldDisplayMode = device.getDisplayMode();
- }
-
- if (fullscreen) {
-
- DisplayMode displayMode = findDisplayMode(newDim, oldDisplayMode.getBitDepth(), oldDisplayMode.getRefreshRate());
-
- if (displayMode != null) {
- newDim.width = displayMode.getWidth();
- newDim.height = displayMode.getHeight();
- window.setUndecorated(true);
- window.setResizable(false);
- device.setFullScreenWindow(window);
- device.setDisplayMode(displayMode);
- window.setLocation(0, 0);
- window.setSize(displayMode.getWidth(), displayMode.getHeight());
- canvas.setSize(displayMode.getWidth(), displayMode.getHeight());
- ri.Con_Printf(Defines.PRINT_ALL, "...setting fullscreen " + getModeString(displayMode) + '\n');
- }
- } else {
- window.setLocation(window_xpos, window_ypos);
- window.pack();
- window.setResizable(false);
- window.setVisible(true);
- }
-
- while (!canvas.isDisplayable()) {
- try {
- Thread.sleep(50);
- } catch (InterruptedException e) {}
- }
- canvas.requestFocus();
-
- this.canvas = canvas;
-
- vid.width = newDim.width;
- vid.height = newDim.height;
-
- // let the sound and input subsystems know about the new window
- ri.Vid_NewWindow(vid.width, vid.height);
-
- return rserr_ok;
- }
-
- DisplayMode findDisplayMode(Dimension dim, int depth, int rate) {
- DisplayMode mode = null;
- DisplayMode m = null;
- DisplayMode[] modes = device.getDisplayModes();
- int w = dim.width;
- int h = dim.height;
-
- for (int i = 0; i < modes.length; i++) {
- m = modes[i];
- if (m.getWidth() == w && m.getHeight() == h && m.getBitDepth() == depth && m.getRefreshRate() == rate) {
- mode = m;
- break;
- }
- }
- if (mode == null) mode = oldDisplayMode;
- Com.Printf(getModeString(mode) + '\n');
- return mode;
- }
-
- String getModeString(DisplayMode m) {
- StringBuffer sb = new StringBuffer();
- sb.append(m.getWidth());
- sb.append('x');
- sb.append(m.getHeight());
- sb.append('x');
- sb.append(m.getBitDepth());
- sb.append('@');
- sb.append(m.getRefreshRate());
- sb.append("Hz");
- return sb.toString();
- }
-
- void GLimp_BeginFrame(float camera_separation) {
- // do nothing
- }
-
- protected void GLimp_EndFrame() {
- gl.glFlush();
- // swap buffer
- // but jogl has no method to swap
- }
-
- protected void GLimp_AppActivate(boolean activate) {
- // do nothing
- }
-
- boolean QGL_Init(String dll_name) {
- // doesn't need libGL.so or .dll loading
- return true;
- }
-
- void QGL_Shutdown() {
- // doesn't need libGL.so or .dll loading
- // do nothing
- }
-
- void GLimp_Shutdown() {
- if (oldDisplayMode != null && device.getFullScreenWindow() != null) {
- try {
- device.setDisplayMode(oldDisplayMode);
- device.setFullScreenWindow(null);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- if (this.window != null) {
- window.dispose();
- }
- post_init = false;
- callback = INIT_CALLBACK;
- }
-
- void GLimp_EnableLogging(boolean enable) {
- // doesn't need jogl logging
- // do nothing
- }
-
- void GLimp_LogNewFrame() {
- // doesn't need jogl logging
- // do nothing
- }
-
-
-
- // ============================================================================
- // GLEventListener interface
- // ============================================================================
-
- /*
- * @see net.java.games.jogl.GLEventListener#init(net.java.games.jogl.GLDrawable)
- */
- public void init(GLDrawable drawable) {
- this.gl = drawable.getGL();
- this.glu = drawable.getGLU();
-
- // this is a hack to run R_init() in gl context
- post_init = R_Init2();
- }
-
- /*
- * @see net.java.games.jogl.GLEventListener#display(net.java.games.jogl.GLDrawable)
- */
- public void display(GLDrawable drawable) {
- this.gl = drawable.getGL();
- this.glu = drawable.getGLU();
-
- contextInUse = true;
- callback.execute();
- contextInUse = false;
- }
-
- /*
- * @see net.java.games.jogl.GLEventListener#displayChanged(net.java.games.jogl.GLDrawable, boolean, boolean)
- */
- public void displayChanged(GLDrawable drawable, boolean arg1, boolean arg2) {
- // do nothing
- }
-
- /*
- * @see net.java.games.jogl.GLEventListener#reshape(net.java.games.jogl.GLDrawable, int, int, int, int)
- */
- public void reshape(GLDrawable drawable, int x, int y, int width, int height) {
- // do nothing
- }
-
- /*
- * @see jake2.client.refexport_t#updateScreen()
- */
- public void updateScreen() {
- this.callback = INIT_CALLBACK;
- canvas.display();
- }
-
- public void updateScreen(xcommand_t callback) {
- this.callback = callback;
- canvas.display();
- }
-} \ No newline at end of file
diff --git a/src/jake2/render/fastjogl/Main.java b/src/jake2/render/fastjogl/Main.java
index 2363db4..4e32817 100644
--- a/src/jake2/render/fastjogl/Main.java
+++ b/src/jake2/render/fastjogl/Main.java
@@ -2,7 +2,7 @@
* Main.java
* Copyright (C) 2003
*
- * $Id: Main.java,v 1.1 2004-07-09 06:50:49 hzi Exp $
+ * $Id: Main.java,v 1.2 2004-07-15 14:37:33 hzi Exp $
*/
/*
Copyright (C) 1997-2001 Id Software, Inc.
@@ -25,7 +25,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package jake2.render.fastjogl;
-import jake2.*;
+import jake2.Defines;
+import jake2.Globals;
import jake2.client.*;
import jake2.game.cplane_t;
import jake2.game.cvar_t;
@@ -40,9 +41,6 @@ import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import net.java.games.jogl.GL;
-import net.java.games.jogl.GLU;
-import net.java.games.jogl.util.BufferUtils;
-import net.java.games.jogl.util.GLUT;
/**
* Main
@@ -51,9 +49,6 @@ import net.java.games.jogl.util.GLUT;
*/
public abstract class Main extends Base {
- GL gl;
- GLU glu;
- GLUT glut = new GLUT();
public static int[] d_8to24table = new int[256];
@@ -83,15 +78,6 @@ public abstract class Main extends Base {
abstract void Mod_Modellist_f();
abstract mleaf_t Mod_PointInLeaf(float[] point, model_t model);
- abstract boolean QGL_Init(String dll_name);
- abstract void QGL_Shutdown();
- abstract boolean GLimp_Init(int xpos, int ypos);
- abstract void GLimp_BeginFrame(float camera_separation);
- abstract int GLimp_SetMode(Dimension dim, int mode, boolean fullscreen);
- abstract void GLimp_Shutdown();
- abstract void GLimp_EnableLogging(boolean enable);
- abstract void GLimp_LogNewFrame();
-
abstract void GL_SetDefaultState();
abstract void GL_InitImages();
@@ -125,13 +111,9 @@ public abstract class Main extends Base {
====================================================================
*/
- // IMPORTED FUNCTIONS
- protected refimport_t ri = null;
-
int GL_TEXTURE0 = GL.GL_TEXTURE0;
int GL_TEXTURE1 = GL.GL_TEXTURE1;
- viddef_t vid = new viddef_t();
model_t r_worldmodel;
@@ -235,7 +217,6 @@ public abstract class Main extends Base {
cvar_t gl_3dlabs_broken;
- cvar_t vid_fullscreen;
cvar_t vid_gamma;
cvar_t vid_ref;
@@ -1110,32 +1091,18 @@ public abstract class Main extends Base {
R_Register();
- // initialize our QGL dynamic bindings
- if (!QGL_Init(gl_driver.string)) {
- QGL_Shutdown();
- ri.Con_Printf(Defines.PRINT_ALL, "ref_gl::R_Init() - could not load \"" + gl_driver.string + "\"\n");
- return false;
- }
-
- // initialize OS-specific parts of OpenGL
- if (!GLimp_Init(vid_xpos, vid_ypos)) {
- QGL_Shutdown();
- return false;
- }
-
// set our "safe" modes
gl_state.prev_mode = 3;
// create the window and set up the context
if (!R_SetMode()) {
- QGL_Shutdown();
ri.Con_Printf(Defines.PRINT_ALL, "ref_gl::R_Init() - could not R_SetMode()\n");
return false;
}
return true;
}
- boolean R_Init2() {
+ protected boolean R_Init2() {
ri.Vid_MenuInit();
/*
@@ -1350,11 +1317,6 @@ public abstract class Main extends Base {
* shut down OS specific OpenGL stuff like contexts, etc.
*/
GLimp_Shutdown();
-
- /*
- * shutdown our QGL subsystem
- */
- QGL_Shutdown();
}
/*
diff --git a/src/jake2/render/jogl/Base.java b/src/jake2/render/jogl/Base.java
index 91cbdea..5a4e9ea 100644
--- a/src/jake2/render/jogl/Base.java
+++ b/src/jake2/render/jogl/Base.java
@@ -2,7 +2,7 @@
* Base.java
* Copyright (C) 2003
*
- * $Id: Base.java,v 1.1 2004-07-07 19:59:36 hzi Exp $
+ * $Id: Base.java,v 1.2 2004-07-15 14:37:34 hzi Exp $
*/
/*
Copyright (C) 1997-2001 Id Software, Inc.
@@ -25,6 +25,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package jake2.render.jogl;
+import jake2.render.JoglBase;
import net.java.games.jogl.GL;
/**
@@ -32,7 +33,7 @@ import net.java.games.jogl.GL;
*
* @author cwei
*/
-public class Base {
+public abstract class Base extends JoglBase {
static final int GL_COLOR_INDEX8_EXT = GL.GL_COLOR_INDEX;
static final String REF_VERSION = "GL 0.01";
@@ -75,12 +76,6 @@ public class Base {
// ===================================================================
- // enum rserr_t
- static final int rserr_ok = 0;
- static final int rserr_invalid_fullscreen = 1;
- static final int rserr_invalid_mode = 2;
- static final int rserr_unknown = 3;
-
//
// #include "gl_model.h"
//
diff --git a/src/jake2/render/jogl/Draw.java b/src/jake2/render/jogl/Draw.java
index 3251b0e..b83e422 100644
--- a/src/jake2/render/jogl/Draw.java
+++ b/src/jake2/render/jogl/Draw.java
@@ -2,7 +2,7 @@
* Draw.java
* Copyright (C) 2003
*
- * $Id: Draw.java,v 1.3 2004-07-09 06:50:48 hzi Exp $
+ * $Id: Draw.java,v 1.4 2004-07-15 14:37:34 hzi Exp $
*/
/*
Copyright (C) 1997-2001 Id Software, Inc.
@@ -26,13 +26,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
package jake2.render.jogl;
import jake2.Defines;
-import jake2.Globals;
import jake2.render.image_t;
import java.awt.Dimension;
import net.java.games.jogl.GL;
-import net.java.games.jogl.util.GLUT;
/**
* Draw
diff --git a/src/jake2/render/jogl/Main.java b/src/jake2/render/jogl/Main.java
index 2b46501..9f85422 100644
--- a/src/jake2/render/jogl/Main.java
+++ b/src/jake2/render/jogl/Main.java
@@ -2,7 +2,7 @@
* Main.java
* Copyright (C) 2003
*
- * $Id: Main.java,v 1.3 2004-07-09 06:50:47 hzi Exp $
+ * $Id: Main.java,v 1.4 2004-07-15 14:37:34 hzi Exp $
*/
/*
Copyright (C) 1997-2001 Id Software, Inc.
@@ -25,13 +25,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package jake2.render.jogl;
-import jake2.*;
+import jake2.Defines;
+import jake2.Globals;
import jake2.client.*;
import jake2.game.cplane_t;
import jake2.game.cvar_t;
-import jake2.qcommon.Cvar;
-import jake2.qcommon.qfiles;
-import jake2.qcommon.xcommand_t;
+import jake2.qcommon.*;
import jake2.render.*;
import jake2.util.Math3D;
import jake2.util.Vargs;
@@ -41,9 +40,6 @@ import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import net.java.games.jogl.GL;
-import net.java.games.jogl.GLU;
-import net.java.games.jogl.util.BufferUtils;
-import net.java.games.jogl.util.GLUT;
/**
* Main
@@ -52,10 +48,6 @@ import net.java.games.jogl.util.GLUT;
*/
public abstract class Main extends Base {
- GL gl;
- GLU glu;
- GLUT glut = new GLUT();
-
public static int[] d_8to24table = new int[256];
int c_visible_lightmaps;
@@ -86,15 +78,6 @@ public abstract class Main extends Base {
abstract void Mod_Modellist_f();
abstract mleaf_t Mod_PointInLeaf(float[] point, model_t model);
- abstract boolean QGL_Init(String dll_name);
- abstract void QGL_Shutdown();
- abstract boolean GLimp_Init(int xpos, int ypos);
- abstract void GLimp_BeginFrame(float camera_separation);
- abstract int GLimp_SetMode(Dimension dim, int mode, boolean fullscreen);
- abstract void GLimp_Shutdown();
- abstract void GLimp_EnableLogging(boolean enable);
- abstract void GLimp_LogNewFrame();
-
abstract void GL_SetDefaultState();
abstract void GL_InitImages();
@@ -128,14 +111,9 @@ public abstract class Main extends Base {
====================================================================
*/
- // IMPORTED FUNCTIONS
- protected refimport_t ri = null;
-
int GL_TEXTURE0 = GL.GL_TEXTURE0;
int GL_TEXTURE1 = GL.GL_TEXTURE1;
- viddef_t vid = new viddef_t();
-
model_t r_worldmodel;
float gldepthmin, gldepthmax;
@@ -238,7 +216,6 @@ public abstract class Main extends Base {
cvar_t gl_3dlabs_broken;
- cvar_t vid_fullscreen;
cvar_t vid_gamma;
cvar_t vid_ref;
@@ -1113,32 +1090,18 @@ public abstract class Main extends Base {
R_Register();
- // initialize our QGL dynamic bindings
- if (!QGL_Init(gl_driver.string)) {
- QGL_Shutdown();
- ri.Con_Printf(Defines.PRINT_ALL, "ref_gl::R_Init() - could not load \"" + gl_driver.string + "\"\n");
- return false;
- }
-
- // initialize OS-specific parts of OpenGL
- if (!GLimp_Init(vid_xpos, vid_ypos)) {
- QGL_Shutdown();
- return false;
- }
-
// set our "safe" modes
gl_state.prev_mode = 3;
// create the window and set up the context
if (!R_SetMode()) {
- QGL_Shutdown();
ri.Con_Printf(Defines.PRINT_ALL, "ref_gl::R_Init() - could not R_SetMode()\n");
return false;
}
return true;
}
- boolean R_Init2() {
+ protected boolean R_Init2() {
ri.Vid_MenuInit();
/*
@@ -1385,11 +1348,6 @@ public abstract class Main extends Base {
* shut down OS specific OpenGL stuff like contexts, etc.
*/
GLimp_Shutdown();
-
- /*
- * shutdown our QGL subsystem
- */
- QGL_Shutdown();
}
/*