diff mde/gl/draw.d @ 75:25cb7420dc91

A massive overhaul/rewrite for the gui's data management and setup code. Currently much that was working is broken. imde's classes are created in a static this instead of mde's main. gl setup code moved from gl/basic.d to gl/draw.d mergetag.DefaultData: now HIGH_LOW priority instead of LOW_HIGH. Reduced type list to only used types; small fix for indent function. setup.paths: new NoFileException thrown instead of MTFileIOException
author Diggory Hardy <diggory.hardy@gmail.com>
date Mon, 28 Jul 2008 18:17:48 +0100
parents 108d123238c0
children
line wrap: on
line diff
--- a/mde/gl/draw.d	Mon Jul 07 15:54:47 2008 +0100
+++ b/mde/gl/draw.d	Mon Jul 28 18:17:48 2008 +0100
@@ -13,12 +13,13 @@
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
-/** The OpenGL draw loop.
+/** The OpenGL draw loop and some basic OpenGL code to set up a projection.
 *
 * Everything here is really intended as makeshift code to enable GUI development. */
 module mde.gl.draw;
 
-import mde.gui.Gui;
+import mde.gui.WidgetManager;
+import mde.imde;
 
 import derelict.sdl.sdl;
 import derelict.opengl.gl;
@@ -32,6 +33,46 @@
     logger = Log.getLogger ("mde.gl.draw");
 }
 
+//BEGIN GL & window setup
+void glSetup () {
+    glDisable(GL_LIGHTING);
+    glDisable(GL_DEPTH_TEST);
+    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
+    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
+    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+    glEnable(GL_TEXTURE_2D);
+    glShadeModel(GL_SMOOTH);
+    
+    glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
+    
+    glMatrixMode(GL_MODELVIEW);
+    glLoadIdentity();
+    
+    // Used for font rendering:
+    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+    //NOTE: wrap mode may have an effect, but shouldn't be noticed...
+}
+
+void setProjection (int w, int h) {
+    glMatrixMode (GL_PROJECTION);
+    glLoadIdentity ();
+    
+    glViewport (0,0,w,h);
+    
+    // Make the top-left the origin (see gui/GUI notes.txt):
+    // Note that this only affects vertex operations − direct rasterisation operations are
+    // unaffected!
+    glOrtho (0.0,w, h,0.0, -1.0, 1.0);
+    
+    glMatrixMode(GL_MODELVIEW);
+    
+    // The gui is tied to this viewport.
+    gui.setSize (w,h);
+}
+//END GL & window setup
+
 //BEGIN Drawing loop
 // Temporary draw function
 void draw (TimeSpan) {