controls for fog to select params
[demo] / src / opengl / opengl.cc
index f05ea61..844b3ac 100644 (file)
@@ -1,10 +1,18 @@
 #include <GL/glew.h>
 #include <stdio.h>
 
+#include "gfxapi.h"
 #include "opengl/opengl.h"
-#include "common-ui.h"
 
 extern GLFWwindow *win;
+extern int win_h;
+extern int win_w;
+
+static void clear(float r, float g, float b);
+static void viewport(int x, int y, int width, int height);
+static void zbuffer(bool enable);
+static void cull_face(Gfx_cull_face cf);
+
 bool init_opengl()
 {
        if(!glfwInit()) {
@@ -14,6 +22,7 @@ bool init_opengl()
 
        glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
        glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);
+       glfwWindowHint(GLFW_SRGB_CAPABLE, GLFW_TRUE);
 
        if(!(win = glfwCreateWindow(win_w, win_h, "glcow", 0, 0))) {
                fprintf(stderr, "Failed to create window.\n");
@@ -22,6 +31,17 @@ bool init_opengl()
        glfwMakeContextCurrent(win);
 
        glewInit();
+
+       glEnable(GL_DEPTH_TEST);
+       glEnable(GL_CULL_FACE);
+       glEnable(GL_FRAMEBUFFER_SRGB); // linear colorspace
+
+       gfx_clear = clear;
+       gfx_viewport = viewport;
+       gfx_zbuffer = zbuffer;
+       gfx_cull_face = cull_face;
+
+       // glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
        return true;
 }
 
@@ -33,8 +53,38 @@ void cleanup_opengl()
        glfwTerminate();
 }
 
-void display_opengl()
+static void clear(float r, float g, float b)
 {
+       glClearColor(r, g, b, 1.0);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-       glClearColor(0.5, 0.5, 0.5, 1.0);
+}
+
+static void viewport(int x, int y, int width, int height)
+{
+       glViewport(x, y, width, height);
+}
+
+static void zbuffer(bool enable)
+{
+       if(enable)
+               glEnable(GL_DEPTH_TEST);
+       else
+               glDisable(GL_DEPTH_TEST);
+}
+
+static void cull_face(Gfx_cull_face cf)
+{
+       switch(cf) {
+       case GFX_CULL_NONE:
+               glDisable(GL_CULL_FACE);
+               break;
+       case GFX_CULL_FRONT:
+               glEnable(GL_CULL_FACE);
+               glCullFace(GL_FRONT);
+               break;
+       case GFX_CULL_BACK:
+               glEnable(GL_CULL_FACE);
+               glCullFace(GL_BACK);
+               break;
+       }
 }
\ No newline at end of file