created nt directory
authoruser <moby@cilux.org>
Mon, 16 Mar 2009 20:13:18 +0000 (20:13 +0000)
committeruser <moby@cilux.org>
Mon, 16 Mar 2009 20:13:18 +0000 (20:13 +0000)
COPYING
makefile
src/drivers/mid/mid.c [deleted file]
src/drivers/nt/mid/mid.c [new file with mode: 0644]

diff --git a/COPYING b/COPYING
index eaa0611..4231c72 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -1,12 +1,9 @@
 
 -----------------------------------------------------------------------
 
-License for the platform-specific code and the Colinux 
-modifications in this subdirectory.
-
 Just this version applies: Version 2.
 
-Software is Copyright (c) The Cilux, Linux and Colinux Projects
+Software is Copyright (c) The Cilux Project 2001-2009
 
 -----------------------------------------------------------------------
 
index 629fc0a..b49adbd 100644 (file)
--- a/makefile
+++ b/makefile
@@ -15,7 +15,7 @@ linux: CCOPTIONS=-g -O -Wall -Wimplicit
 linux: COMPILEOPTIONS=-march=i386 -mtune=i586 -fPIC
 linux: LINKOPTIONS=-Wl,-export-dynamic -Wl,-rpath,.
 linux: LINKOPTIONS=-Wl,-export-dynamic
-linux: INCLUDES=-I/usr/local/include -I../include -I../../include -I.. -I../platform/linux -I../../platform/linux -I../platform
+linux: INCLUDES=-I/usr/local/include -I. -I../include -I../../include -I../../../include -I.. -I../platform/linux -I../../platform/linux -I../../../platform/linux
 linux: LIBRARIES=-L/usr/local/lib -lnsl -ldl -lm -lX11 -lEGL -lGLESv2
 linux: linux-all
 
@@ -55,9 +55,9 @@ mod-np.so: src/drivers/np/np.c src/drivers/np/uri2chan.c src/include/kernelapi.h
        $(STRIP) mod-np.so
        @echo '--------------------'
 
-mod-mid.so: src/drivers/mid/mid.c src/include/kernelapi.h src/platform/linux/platform.h
-       (cd src/drivers/mid; $(CC) $(CCOPTIONS) -c mid.c -o mid.o $(COMPILEOPTIONS) $(INCLUDES))
-       $(CCLIB),mod-mid.so -o mod-mid.so src/drivers/mid/mid.o
+mod-mid.so: src/drivers/nt/mid/mid.c src/include/kernelapi.h src/platform/linux/platform.h
+       (cd src/drivers/nt/mid; $(CC) $(CCOPTIONS) -c mid.c -o mid.o $(COMPILEOPTIONS) $(INCLUDES))
+       $(CCLIB),mod-mid.so -o mod-mid.so src/drivers/nt/mid/mid.o
        $(STRIP) mod-mid.so
        @echo '--------------------'
 
diff --git a/src/drivers/mid/mid.c b/src/drivers/mid/mid.c
deleted file mode 100644 (file)
index a684d80..0000000
+++ /dev/null
@@ -1,408 +0,0 @@
-
-/* -------------------------------------------------------------------------- */
-
-#include <kernelapi.h>
-#include <ni.h>
-
-/* -------------------------------------------------------------------------- */
-
-#define WINDOW_WIDTH  640
-#define WINDOW_HEIGHT 480
-
-#define POS_ARRAY      0
-#define NORMAL_ARRAY   1
-#define TEXCOORD_ARRAY 2
-
-#define TEX_SIZE 128
-
-/* -------------------------------------------------------------------------- */
-
-static GLfloat xco=   0;
-static GLfloat yco=   1;
-static GLfloat zco= -35;
-static GLfloat view_rotx=0.0, view_roty=0.0, view_rotz=0.0;
-static int     shift=0;
-
-GLuint       program;
-GLuint       texture;
-GLuint       vbo;
-unsigned int numberOfVertices;
-unsigned int posStep;
-unsigned int normStep;
-unsigned int tcStep;
-unsigned int stride;
-float        angle=0.0;
-float        viewAngle = 0.0;
-
-/* -------------------------------------------------------------------------- */
-
-static int  handles_resource(char* name);
-static void sync_resource(ni_resource* res);
-static void init_gl(void);
-static void reshape(int width, int height);
-static void draw(void);
-static void key(unsigned char k, int down);
-
-static int  useTheProgram();
-static int  setUpTnL();
-static int  drawStuff(int width, int height);
-
-/* -------------------------------------------------------------------------- */
-
-EXPORT int mid_module_loaded(void)
-{
-    ni_register_driver("mid", handles_resource, sync_resource);
-
-    init_gl();
-
-    k_gl_register_reshape(reshape);
-    k_gl_register_draw(draw);
-    k_gl_register_key(key);
-
-    k_log_out("MID Driver initialised");
-
-    return 1;
-}
-
-EXPORT int mid_module_event(void* data)
-{
-    k_log_out("MID got event: %p", data);
-    ni_event* evt=data;
-    ni_event_delete(evt);
-    return 1;
-}
-
-EXPORT int mid_module_tick(void)
-{
-    if(!drawStuff(WINDOW_WIDTH, WINDOW_HEIGHT)) k_gl_end();
-    return 1;
-}
-
-/* -------------------------------------------------------------------------- */
-
-int handles_resource(char* name)
-{
-    return 0;
-}
-
-void sync_resource(ni_resource* res)
-{
-}
-
-/* -------------------------------------------------------------------------- */
-
-void init_gl(void)
-{
-    if(!useTheProgram()) k_gl_end();
-    if(!setUpTnL())      k_gl_end();
-}
-
-void reshape(int width, int height)
-{
-}
-
-void draw(void)
-{
-    if(!drawStuff(WINDOW_WIDTH, WINDOW_HEIGHT)) k_gl_end();
-}
-
-#define SHIFT 0
-void key(unsigned char k, int down)
-{
-    if(k == 113) viewAngle += 0.1;
-    if(k == 114) viewAngle -= 0.1;
-
-    if(k==SHIFT &&  down){ shift=1; return; }
-    if(k==SHIFT && !down){ shift=0; return; }
-    if(!down) return;
-
-    if(shift) k-=('a'-'A');
-
-    float speed=0.25;
-    switch (k) {
-    case 'H':
-        xco-=speed*(float)sin((view_roty-90)*3.14/180);
-        zco+=speed*(float)cos((view_roty-90)*3.14/180);
-        if(xco< -35) xco= -35;
-        if(xco>  35) xco=  35;
-        if(zco< -35) zco= -35;
-        if(zco>  35) zco=  35;
-    break;
-    case 'L':
-        xco+=speed*(float)sin((view_roty-90)*3.14/180);
-        zco-=speed*(float)cos((view_roty-90)*3.14/180);
-        if(xco< -35) xco= -35;
-        if(xco>  35) xco=  35;
-        if(zco< -35) zco= -35;
-        if(zco>  35) zco=  35;
-    break;
-    case 'i':
-        xco-=speed*(float)sin(view_roty*3.14/180);
-        zco+=speed*(float)cos(view_roty*3.14/180);
-        if(xco< -35) xco= -35;
-        if(xco>  35) xco=  35;
-        if(zco< -35) zco= -35;
-        if(zco>  35) zco=  35;
-    break;
-    case 'o':
-        xco+=speed*(float)sin(view_roty*3.14/180);
-        zco-=speed*(float)cos(view_roty*3.14/180);
-        if(xco< -35) xco= -35;
-        if(xco>  35) xco=  35;
-        if(zco< -35) zco= -35;
-        if(zco>  35) zco=  35;
-    break;
-    case 'j':
-        yco-=speed;
-        if(yco< 0.2) yco= 0.2;
-    break;
-    case 'k':
-        yco+=speed;
-    break;
-    case 'l':
-        view_roty += speed*20;
-    break;
-    case 'h':
-        view_roty -= speed*20;
-    break;
-    case 'J':
-        view_rotx += 2.0;
-    break;
-    case 'K':
-        view_rotx -= 2.0;
-    break;
-    case 'z':
-        view_rotz += 2.0;
-    break;
-    case 'Z':
-        view_rotz -= 2.0;
-    break;
-    default:
-    return;
-    }
-    draw();
-}
-
-/* ------------------------------------------------------------- */
-
-GLuint isShaderError(GLuint thing)
-{
-    GLint isShader = glIsShader(thing);
-
-    GLint ok;
-    if(isShader){
-        glGetShaderiv(thing, GL_COMPILE_STATUS, &ok);
-    }else{
-        glGetProgramiv(thing, GL_LINK_STATUS, &ok);
-    }
-    if(ok) return 0;
-
-    GLint infoLen=0;
-    if(isShader){
-        glGetShaderiv(thing, GL_INFO_LOG_LENGTH, &infoLen);
-    }else{
-        glGetProgramiv(thing, GL_INFO_LOG_LENGTH, &infoLen);
-    }
-    if(infoLen){
-         char* infoLog = malloc(sizeof(char)*infoLen);
-         if(isShader){
-              glGetShaderInfoLog(thing, infoLen, NULL, infoLog);
-         }else{
-              glGetProgramInfoLog(thing, infoLen, NULL, infoLog);
-         }
-         printf("%s: %s\n", isShader? "Shader compile": "Program link", infoLog);
-         free(infoLog);
-    }
-    return 1;
-}
-
-char* file2string(const char *path)
-{
-    FILE *fd;
-    long len, r;
-    char *str;
-    if(!(fd=fopen(path, "r"))) {
-        fprintf(stderr, "Can't open file '%s' for reading\n", path);
-        return NULL;
-    }
-    fseek(fd, 0, SEEK_END);
-    len = ftell(fd);
-    fseek(fd, 0, SEEK_SET);
-    if(!(str=malloc(len*sizeof(char)))) {
-        fprintf(stderr, "Can't malloc space for '%s'\n", path);
-        return NULL;
-    }
-    r = fread(str, sizeof(char), len, fd);
-    str[r-1] = '\0';
-    fclose(fd);
-    return str;
-}
-
-/* ------------------------------------------------------------- */
-
-int useTheProgram()
-{
-    const char *vsSource = file2string("tnl.vert");
-    const char *fsSource = file2string("tnl.frag");
-
-    GLuint vs = glCreateShader(GL_VERTEX_SHADER);
-    glShaderSource(vs, 1, &vsSource, NULL);
-    glCompileShader(vs);
-    if(isShaderError(vs)) return 0;
-    GLuint fs = glCreateShader(GL_FRAGMENT_SHADER);
-    glShaderSource(fs, 1, &fsSource, NULL);
-    glCompileShader(fs);
-    if(isShaderError(fs)) return 0;
-    free((void*)vsSource);
-    free((void*)fsSource);
-    program = glCreateProgram();
-    glAttachShader(program, vs);
-    glAttachShader(program, fs);
-
-    glBindAttribLocation(program, POS_ARRAY,      "vertPos");
-    glBindAttribLocation(program, NORMAL_ARRAY,   "vertNormal");
-    /* vertNormal and vertTexCoord don't need to be bound here.. ? */
-    glBindAttribLocation(program, TEXCOORD_ARRAY, "vertTexCoord");
-
-    glLinkProgram(program);
-    if(isShaderError(program)) return 0;
-
-    glUseProgram(program);
-
-    glUniform3f(glGetUniformLocation(program, "frameLightDirection"), 1.0, 0.0, 1.0);
-    glUniform1i(glGetUniformLocation(program, "texture"), 0); /* 0 ?? */
-
-    return 1;
-}
-
-int setUpTnL()
-{
-    glClearColor(1.0f, 1.0f, 0.0f, 0.0f);
-
-    glGenTextures(1, &texture);
-    glBindTexture(GL_TEXTURE_2D, texture);
-
-    GLuint* td = malloc(sizeof(GLuint)*TEX_SIZE*TEX_SIZE);
-    int i,j;
-    for(i=0; i<TEX_SIZE; i++)
-    for(j=0; j<TEX_SIZE; j++) {
-        GLuint col = (255L<<24) + ((255L-j*2)<<16) + ((255L-i)<<8) + (255L-i*2);
-        if ( ((i*j)/8) % 2 ) col = (GLuint) (255L<<24) + (255L<<16) + (0L<<8) + (255L);
-        td[j*TEX_SIZE+i] = col;
-    }
-    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, TEX_SIZE, TEX_SIZE, 0, GL_RGBA, GL_UNSIGNED_BYTE, td);
-    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
-    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
-    free(td);
-
-    GLfloat trivertices[] = {
-                             -0.4f,-0.4f,0.4f,  // Pos
-                              0.0f,0.0f,1.0f,   // Normal
-                              0.0f,0.0f,        // TexCoord
-
-                              0.4f,-0.0f,0.0f,  // Pos
-                              0.0f,0.0f,1.0f,   // Normal
-                              1.0f,0.0f,        // TexCoord
-
-                              0.0f,0.4f,0.4f,   // Pos
-                              0.5f,0.5f,0.5f,   // Normal
-                              0.5f,1.0f,        // TexCoord
-
-                              0.4f,0.0f,0.4f,   // Pos
-                              0.5f,0.5f,0.5f,   // Normal
-                              0.5f,0.0f,        // TexCoord
-
-                              0.4f,0.4f,0.4f,   // Pos
-                              0.0f,0.0f,1.0f,   // Normal
-                              0.0f,0.0f,        // TexCoord
-
-    };
-
-    numberOfVertices = 4;
-    posStep  = 3 * sizeof(GLfloat);
-    normStep = 3 * sizeof(GLfloat);
-    tcStep   = 2 * sizeof(GLfloat);
-    stride = posStep + normStep + tcStep;
-
-    glGenBuffers(1, &vbo);
-    glBindBuffer(GL_ARRAY_BUFFER, vbo);
-    glBufferData(GL_ARRAY_BUFFER, numberOfVertices * stride, trivertices, GL_STATIC_DRAW);
-    glBindBuffer(GL_ARRAY_BUFFER, 0);
-
-    return 1;
-}
-
-int drawStuff(int width, int height)
-{
-    glViewport(0, 0, width, height);
-    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
-    float TransRotScaleVerticeMatrix[] = {
-        cos(angle),  0, sin(angle), 0,
-        0,           1, 0,          0,
-        -sin(angle), 0, cos(angle), 0,
-        0,           0, 0,          1
-    };
-
-    float ModelViewProjectionMatrix[] = {
-        cos(viewAngle),  0, sin(viewAngle), 0,
-        0,               1, 0,              0,
-        -sin(viewAngle), 0, cos(viewAngle), 0,
-        0,               0, 0,              1
-    };
-
-    float TransRotScaleNormalMatrix[] = {
-        cos(angle),   0,   sin(angle),
-        0,            1,   0,
-        -sin(angle),  0,   cos(angle)
-    };
-
-    glUniformMatrix4fv(glGetUniformLocation(program, "frameTRSV"), 1, GL_FALSE, TransRotScaleVerticeMatrix);
-    glUniformMatrix4fv(glGetUniformLocation(program, "frameMVP"),  1, GL_FALSE, ModelViewProjectionMatrix);
-    glUniformMatrix3fv(glGetUniformLocation(program, "frameTRSN"), 1, GL_FALSE, TransRotScaleNormalMatrix);
-
-
-    glBindBuffer(GL_ARRAY_BUFFER, vbo);
-
-    glEnableVertexAttribArray(POS_ARRAY);
-    glVertexAttribPointer(POS_ARRAY, 3, GL_FLOAT, GL_FALSE, stride, 0);
-
-    glEnableVertexAttribArray(NORMAL_ARRAY);
-    glVertexAttribPointer(NORMAL_ARRAY, 3, GL_FLOAT, GL_FALSE, stride, (void*)posStep  );
-
-    glEnableVertexAttribArray(TEXCOORD_ARRAY);
-    glVertexAttribPointer(TEXCOORD_ARRAY, 2, GL_FLOAT, GL_FALSE, stride, (void*)(posStep + normStep) );
-
-    glDrawArrays(GL_TRIANGLE_STRIP, 0, numberOfVertices);
-
-    glBindBuffer(GL_ARRAY_BUFFER, 0);
-
-    k_gl_swap_buffers();
-
-    angle += .007f;
-
-    return 1;
-}
-
-void deleteStuff(){
-    glDeleteTextures(1, &texture);
-    glDeleteBuffers(1, &vbo);
-    glDeleteProgram(program);
-/*  glDeleteShader();
-    glDeleteShader();*/
-}
-/* ------------------------------------------------------------- */
-
-
-
diff --git a/src/drivers/nt/mid/mid.c b/src/drivers/nt/mid/mid.c
new file mode 100644 (file)
index 0000000..a684d80
--- /dev/null
@@ -0,0 +1,408 @@
+
+/* -------------------------------------------------------------------------- */
+
+#include <kernelapi.h>
+#include <ni.h>
+
+/* -------------------------------------------------------------------------- */
+
+#define WINDOW_WIDTH  640
+#define WINDOW_HEIGHT 480
+
+#define POS_ARRAY      0
+#define NORMAL_ARRAY   1
+#define TEXCOORD_ARRAY 2
+
+#define TEX_SIZE 128
+
+/* -------------------------------------------------------------------------- */
+
+static GLfloat xco=   0;
+static GLfloat yco=   1;
+static GLfloat zco= -35;
+static GLfloat view_rotx=0.0, view_roty=0.0, view_rotz=0.0;
+static int     shift=0;
+
+GLuint       program;
+GLuint       texture;
+GLuint       vbo;
+unsigned int numberOfVertices;
+unsigned int posStep;
+unsigned int normStep;
+unsigned int tcStep;
+unsigned int stride;
+float        angle=0.0;
+float        viewAngle = 0.0;
+
+/* -------------------------------------------------------------------------- */
+
+static int  handles_resource(char* name);
+static void sync_resource(ni_resource* res);
+static void init_gl(void);
+static void reshape(int width, int height);
+static void draw(void);
+static void key(unsigned char k, int down);
+
+static int  useTheProgram();
+static int  setUpTnL();
+static int  drawStuff(int width, int height);
+
+/* -------------------------------------------------------------------------- */
+
+EXPORT int mid_module_loaded(void)
+{
+    ni_register_driver("mid", handles_resource, sync_resource);
+
+    init_gl();
+
+    k_gl_register_reshape(reshape);
+    k_gl_register_draw(draw);
+    k_gl_register_key(key);
+
+    k_log_out("MID Driver initialised");
+
+    return 1;
+}
+
+EXPORT int mid_module_event(void* data)
+{
+    k_log_out("MID got event: %p", data);
+    ni_event* evt=data;
+    ni_event_delete(evt);
+    return 1;
+}
+
+EXPORT int mid_module_tick(void)
+{
+    if(!drawStuff(WINDOW_WIDTH, WINDOW_HEIGHT)) k_gl_end();
+    return 1;
+}
+
+/* -------------------------------------------------------------------------- */
+
+int handles_resource(char* name)
+{
+    return 0;
+}
+
+void sync_resource(ni_resource* res)
+{
+}
+
+/* -------------------------------------------------------------------------- */
+
+void init_gl(void)
+{
+    if(!useTheProgram()) k_gl_end();
+    if(!setUpTnL())      k_gl_end();
+}
+
+void reshape(int width, int height)
+{
+}
+
+void draw(void)
+{
+    if(!drawStuff(WINDOW_WIDTH, WINDOW_HEIGHT)) k_gl_end();
+}
+
+#define SHIFT 0
+void key(unsigned char k, int down)
+{
+    if(k == 113) viewAngle += 0.1;
+    if(k == 114) viewAngle -= 0.1;
+
+    if(k==SHIFT &&  down){ shift=1; return; }
+    if(k==SHIFT && !down){ shift=0; return; }
+    if(!down) return;
+
+    if(shift) k-=('a'-'A');
+
+    float speed=0.25;
+    switch (k) {
+    case 'H':
+        xco-=speed*(float)sin((view_roty-90)*3.14/180);
+        zco+=speed*(float)cos((view_roty-90)*3.14/180);
+        if(xco< -35) xco= -35;
+        if(xco>  35) xco=  35;
+        if(zco< -35) zco= -35;
+        if(zco>  35) zco=  35;
+    break;
+    case 'L':
+        xco+=speed*(float)sin((view_roty-90)*3.14/180);
+        zco-=speed*(float)cos((view_roty-90)*3.14/180);
+        if(xco< -35) xco= -35;
+        if(xco>  35) xco=  35;
+        if(zco< -35) zco= -35;
+        if(zco>  35) zco=  35;
+    break;
+    case 'i':
+        xco-=speed*(float)sin(view_roty*3.14/180);
+        zco+=speed*(float)cos(view_roty*3.14/180);
+        if(xco< -35) xco= -35;
+        if(xco>  35) xco=  35;
+        if(zco< -35) zco= -35;
+        if(zco>  35) zco=  35;
+    break;
+    case 'o':
+        xco+=speed*(float)sin(view_roty*3.14/180);
+        zco-=speed*(float)cos(view_roty*3.14/180);
+        if(xco< -35) xco= -35;
+        if(xco>  35) xco=  35;
+        if(zco< -35) zco= -35;
+        if(zco>  35) zco=  35;
+    break;
+    case 'j':
+        yco-=speed;
+        if(yco< 0.2) yco= 0.2;
+    break;
+    case 'k':
+        yco+=speed;
+    break;
+    case 'l':
+        view_roty += speed*20;
+    break;
+    case 'h':
+        view_roty -= speed*20;
+    break;
+    case 'J':
+        view_rotx += 2.0;
+    break;
+    case 'K':
+        view_rotx -= 2.0;
+    break;
+    case 'z':
+        view_rotz += 2.0;
+    break;
+    case 'Z':
+        view_rotz -= 2.0;
+    break;
+    default:
+    return;
+    }
+    draw();
+}
+
+/* ------------------------------------------------------------- */
+
+GLuint isShaderError(GLuint thing)
+{
+    GLint isShader = glIsShader(thing);
+
+    GLint ok;
+    if(isShader){
+        glGetShaderiv(thing, GL_COMPILE_STATUS, &ok);
+    }else{
+        glGetProgramiv(thing, GL_LINK_STATUS, &ok);
+    }
+    if(ok) return 0;
+
+    GLint infoLen=0;
+    if(isShader){
+        glGetShaderiv(thing, GL_INFO_LOG_LENGTH, &infoLen);
+    }else{
+        glGetProgramiv(thing, GL_INFO_LOG_LENGTH, &infoLen);
+    }
+    if(infoLen){
+         char* infoLog = malloc(sizeof(char)*infoLen);
+         if(isShader){
+              glGetShaderInfoLog(thing, infoLen, NULL, infoLog);
+         }else{
+              glGetProgramInfoLog(thing, infoLen, NULL, infoLog);
+         }
+         printf("%s: %s\n", isShader? "Shader compile": "Program link", infoLog);
+         free(infoLog);
+    }
+    return 1;
+}
+
+char* file2string(const char *path)
+{
+    FILE *fd;
+    long len, r;
+    char *str;
+    if(!(fd=fopen(path, "r"))) {
+        fprintf(stderr, "Can't open file '%s' for reading\n", path);
+        return NULL;
+    }
+    fseek(fd, 0, SEEK_END);
+    len = ftell(fd);
+    fseek(fd, 0, SEEK_SET);
+    if(!(str=malloc(len*sizeof(char)))) {
+        fprintf(stderr, "Can't malloc space for '%s'\n", path);
+        return NULL;
+    }
+    r = fread(str, sizeof(char), len, fd);
+    str[r-1] = '\0';
+    fclose(fd);
+    return str;
+}
+
+/* ------------------------------------------------------------- */
+
+int useTheProgram()
+{
+    const char *vsSource = file2string("tnl.vert");
+    const char *fsSource = file2string("tnl.frag");
+
+    GLuint vs = glCreateShader(GL_VERTEX_SHADER);
+    glShaderSource(vs, 1, &vsSource, NULL);
+    glCompileShader(vs);
+    if(isShaderError(vs)) return 0;
+    GLuint fs = glCreateShader(GL_FRAGMENT_SHADER);
+    glShaderSource(fs, 1, &fsSource, NULL);
+    glCompileShader(fs);
+    if(isShaderError(fs)) return 0;
+    free((void*)vsSource);
+    free((void*)fsSource);
+    program = glCreateProgram();
+    glAttachShader(program, vs);
+    glAttachShader(program, fs);
+
+    glBindAttribLocation(program, POS_ARRAY,      "vertPos");
+    glBindAttribLocation(program, NORMAL_ARRAY,   "vertNormal");
+    /* vertNormal and vertTexCoord don't need to be bound here.. ? */
+    glBindAttribLocation(program, TEXCOORD_ARRAY, "vertTexCoord");
+
+    glLinkProgram(program);
+    if(isShaderError(program)) return 0;
+
+    glUseProgram(program);
+
+    glUniform3f(glGetUniformLocation(program, "frameLightDirection"), 1.0, 0.0, 1.0);
+    glUniform1i(glGetUniformLocation(program, "texture"), 0); /* 0 ?? */
+
+    return 1;
+}
+
+int setUpTnL()
+{
+    glClearColor(1.0f, 1.0f, 0.0f, 0.0f);
+
+    glGenTextures(1, &texture);
+    glBindTexture(GL_TEXTURE_2D, texture);
+
+    GLuint* td = malloc(sizeof(GLuint)*TEX_SIZE*TEX_SIZE);
+    int i,j;
+    for(i=0; i<TEX_SIZE; i++)
+    for(j=0; j<TEX_SIZE; j++) {
+        GLuint col = (255L<<24) + ((255L-j*2)<<16) + ((255L-i)<<8) + (255L-i*2);
+        if ( ((i*j)/8) % 2 ) col = (GLuint) (255L<<24) + (255L<<16) + (0L<<8) + (255L);
+        td[j*TEX_SIZE+i] = col;
+    }
+    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, TEX_SIZE, TEX_SIZE, 0, GL_RGBA, GL_UNSIGNED_BYTE, td);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
+    free(td);
+
+    GLfloat trivertices[] = {
+                             -0.4f,-0.4f,0.4f,  // Pos
+                              0.0f,0.0f,1.0f,   // Normal
+                              0.0f,0.0f,        // TexCoord
+
+                              0.4f,-0.0f,0.0f,  // Pos
+                              0.0f,0.0f,1.0f,   // Normal
+                              1.0f,0.0f,        // TexCoord
+
+                              0.0f,0.4f,0.4f,   // Pos
+                              0.5f,0.5f,0.5f,   // Normal
+                              0.5f,1.0f,        // TexCoord
+
+                              0.4f,0.0f,0.4f,   // Pos
+                              0.5f,0.5f,0.5f,   // Normal
+                              0.5f,0.0f,        // TexCoord
+
+                              0.4f,0.4f,0.4f,   // Pos
+                              0.0f,0.0f,1.0f,   // Normal
+                              0.0f,0.0f,        // TexCoord
+
+    };
+
+    numberOfVertices = 4;
+    posStep  = 3 * sizeof(GLfloat);
+    normStep = 3 * sizeof(GLfloat);
+    tcStep   = 2 * sizeof(GLfloat);
+    stride = posStep + normStep + tcStep;
+
+    glGenBuffers(1, &vbo);
+    glBindBuffer(GL_ARRAY_BUFFER, vbo);
+    glBufferData(GL_ARRAY_BUFFER, numberOfVertices * stride, trivertices, GL_STATIC_DRAW);
+    glBindBuffer(GL_ARRAY_BUFFER, 0);
+
+    return 1;
+}
+
+int drawStuff(int width, int height)
+{
+    glViewport(0, 0, width, height);
+    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+    float TransRotScaleVerticeMatrix[] = {
+        cos(angle),  0, sin(angle), 0,
+        0,           1, 0,          0,
+        -sin(angle), 0, cos(angle), 0,
+        0,           0, 0,          1
+    };
+
+    float ModelViewProjectionMatrix[] = {
+        cos(viewAngle),  0, sin(viewAngle), 0,
+        0,               1, 0,              0,
+        -sin(viewAngle), 0, cos(viewAngle), 0,
+        0,               0, 0,              1
+    };
+
+    float TransRotScaleNormalMatrix[] = {
+        cos(angle),   0,   sin(angle),
+        0,            1,   0,
+        -sin(angle),  0,   cos(angle)
+    };
+
+    glUniformMatrix4fv(glGetUniformLocation(program, "frameTRSV"), 1, GL_FALSE, TransRotScaleVerticeMatrix);
+    glUniformMatrix4fv(glGetUniformLocation(program, "frameMVP"),  1, GL_FALSE, ModelViewProjectionMatrix);
+    glUniformMatrix3fv(glGetUniformLocation(program, "frameTRSN"), 1, GL_FALSE, TransRotScaleNormalMatrix);
+
+
+    glBindBuffer(GL_ARRAY_BUFFER, vbo);
+
+    glEnableVertexAttribArray(POS_ARRAY);
+    glVertexAttribPointer(POS_ARRAY, 3, GL_FLOAT, GL_FALSE, stride, 0);
+
+    glEnableVertexAttribArray(NORMAL_ARRAY);
+    glVertexAttribPointer(NORMAL_ARRAY, 3, GL_FLOAT, GL_FALSE, stride, (void*)posStep  );
+
+    glEnableVertexAttribArray(TEXCOORD_ARRAY);
+    glVertexAttribPointer(TEXCOORD_ARRAY, 2, GL_FLOAT, GL_FALSE, stride, (void*)(posStep + normStep) );
+
+    glDrawArrays(GL_TRIANGLE_STRIP, 0, numberOfVertices);
+
+    glBindBuffer(GL_ARRAY_BUFFER, 0);
+
+    k_gl_swap_buffers();
+
+    angle += .007f;
+
+    return 1;
+}
+
+void deleteStuff(){
+    glDeleteTextures(1, &texture);
+    glDeleteBuffers(1, &vbo);
+    glDeleteProgram(program);
+/*  glDeleteShader();
+    glDeleteShader();*/
+}
+/* ------------------------------------------------------------- */
+
+
+