Jogamp
2548b626afaf1ac75fe1fa30117e029e885fad27
[users/sgothel/jake2.git] / src / jake2 / render / opengl / JoglES2Driver.java
1 /*
2  * JoglDriver.java
3  * Copyright (C) 2004
4  * 
5  */
6 /*
7 Copyright (C) 1997-2001 Id Software, Inc.
8
9 This program is free software; you can redistribute it and/or
10 modify it under the terms of the GNU General Public License
11 as published by the Free Software Foundation; either version 2
12 of the License, or (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17
18 See the GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
23
24  */
25
26 package jake2.render.opengl;
27
28 import java.util.List;
29
30 import jake2.game.cvar_t;
31 import jake2.qcommon.Cvar;
32 import jake2.qcommon.xcommand_t;
33 import jake2.render.Base;
34
35 import javax.media.nativewindow.util.Dimension;
36 import javax.media.opengl.*;
37
38 import com.jogamp.newt.MonitorMode;
39 import com.jogamp.opengl.util.glsl.fixedfunc.FixedFuncUtil;
40 import com.jogamp.opengl.util.glsl.fixedfunc.ShaderSelectionMode;
41
42 /**
43  * JoglCommon
44  */
45 public abstract class JoglES2Driver extends JoglGL2ES1 implements GLDriver {
46
47     protected static final GLProfile glp;    
48     static {
49         // exception if GLProfile is n/a is desired
50         cvar_t v = Cvar.Get("jogl_gl2es2", "0", 0);
51         if( v.value != 0f ) {
52             glp = GLProfile.getGL2ES2();
53         } else {
54             glp = GLProfile.get(GLProfile.GLES2);
55         }
56     }
57     
58     // protected static final ShaderSelectionMode shaderSelectionMode = ShaderSelectionMode.AUTO;
59     protected static final ShaderSelectionMode shaderSelectionMode = ShaderSelectionMode.COLOR_TEXTURE2;
60     
61     protected JoglES2Driver() {
62         super();
63     }
64
65     private NEWTWin newtWin = null;
66
67     public abstract String getName();
68     
69     public List<MonitorMode> getModeList() {
70         if(null == newtWin) {
71             throw new RuntimeException("NEWTWin not yet initialized.");
72         }
73         return newtWin.getModeList();        
74     }
75     
76     public int setMode(Dimension dim, int mode, boolean fullscreen) {
77         if(null == newtWin) {
78             newtWin = new NEWTWin();
79         }
80         int res = newtWin.setMode(glp, dim, mode, fullscreen, getName());
81         if( Base.rserr_ok == res ) {
82             setGL( FixedFuncUtil.wrapFixedFuncEmul(newtWin.window.getGL(), shaderSelectionMode, null, true, false) );
83             init(0, 0);
84             
85             return Base.rserr_ok;
86         }
87         return res;
88     }
89
90     public void shutdown() {
91         if(null != newtWin) {
92             newtWin.shutdown();
93         }
94     }
95
96     /**
97      * @return true
98      */
99     public boolean init(int xpos, int ypos) {
100         // clear the screen
101         // first buffer
102         beginFrame(0.0f);
103         glViewport(0, 0, newtWin.window.getWidth(), newtWin.window.getHeight());
104         glClearColor(0, 0, 0, 0);
105         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
106         endFrame();
107         // second buffer
108         beginFrame(0.0f);
109         glViewport(0, 0, newtWin.window.getWidth(), newtWin.window.getHeight());
110         glClearColor(0, 0, 0, 0);
111         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
112         endFrame();
113         return true;
114     }
115
116     public void beginFrame(float camera_separation) {
117         activateGLContext();
118     }
119
120     public void endFrame() {
121         newtWin.window.swapBuffers();
122         // deactivate();
123         newtWin.fpsCounter.tickFPS();
124     }
125
126     public void appActivate(boolean activate) {
127         // do nothing
128     }
129
130     public void enableLogging(boolean enable) {
131         // do nothing
132     }
133
134     public void logNewFrame() {
135         // do nothing
136     }
137
138     /*
139      * @see jake2.client.refexport_t#updateScreen()
140      */
141     public void updateScreen(xcommand_t callback) {
142         callback.execute();
143     }
144     
145     protected final void activateGLContext() {
146         newtWin.activateGLContext();        
147     }
148
149     protected final void deactivateGLContext() {
150         newtWin.activateGLContext();        
151     }
152     
153     // --------------------------------------------------------------------------    
154 }
http://JogAmp.org git info: FAQ, tutorial and man pages.