diff options
author | Holger Zickner <[email protected]> | 2004-07-15 14:37:35 +0000 |
---|---|---|
committer | Holger Zickner <[email protected]> | 2004-07-15 14:37:35 +0000 |
commit | 3dd339c9572b792b85bd49182c826aaec36ee161 (patch) | |
tree | 89bf9c92372cf384bce4c29dc5ec09c7ab7069f2 /src/jake2 | |
parent | e45462dfe3f3db94bf9668d294794c27909a522f (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.java | 106 | ||||
-rw-r--r-- | src/jake2/client/refexport_t.java | 5 | ||||
-rw-r--r-- | src/jake2/render/FastJoglRenderer.java | 10 | ||||
-rw-r--r-- | src/jake2/render/JoglBase.java (renamed from src/jake2/render/jogl/Impl.java) | 287 | ||||
-rw-r--r-- | src/jake2/render/JoglRenderer.java | 8 | ||||
-rw-r--r-- | src/jake2/render/fastjogl/Base.java | 11 | ||||
-rw-r--r-- | src/jake2/render/fastjogl/Draw.java | 4 | ||||
-rw-r--r-- | src/jake2/render/fastjogl/Impl.java | 343 | ||||
-rw-r--r-- | src/jake2/render/fastjogl/Main.java | 46 | ||||
-rw-r--r-- | src/jake2/render/jogl/Base.java | 11 | ||||
-rw-r--r-- | src/jake2/render/jogl/Draw.java | 4 | ||||
-rw-r--r-- | src/jake2/render/jogl/Main.java | 52 |
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(); } /* |