ecere/Makefile: Added new gl3/ files; Fixes to run shaders on Linux
[sdk] / ecere / src / gfx / drivers / OpenGLDisplayDriver.ec
index b09d7e2..e3d8bcc 100644 (file)
@@ -460,6 +460,14 @@ public void GLSetupTexturing(bool enable)
 #endif
 }
 
+public void GLSetupLighting(bool enable)
+{
+#if defined(SHADERS)
+   shader_lighting(enable);
+#elif !defined(EM_MODE)
+   (enable ? glEnable : glDisable)(GL_LIGHTING);
+#endif
+}
 
 // Non OpenGL ES friendly stuff
 
@@ -952,7 +960,7 @@ class OpenGLDisplayDriver : DisplayDriver
          {
             glXMakeCurrent(xGlobalDisplay, oglSystem.glxDrawable, oglSystem.glContext);
             // Setup Extensions
-            CheckExtensions(oglSystem);
+            // CheckExtensions(oglSystem);
             glXMakeCurrent(xGlobalDisplay, None, null);
             result = true;
          }
@@ -1035,7 +1043,10 @@ class OpenGLDisplayDriver : DisplayDriver
 #if !defined(EM_MODE) && !defined(SHADERS)
       glShadeModel(GL_FLAT);
 
-      // glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, true);
+      // #define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51
+
+      // glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
+
       glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);
       glFogi(GL_FOG_MODE, GL_EXP);
       glFogf(GL_FOG_DENSITY, 0);
@@ -2631,7 +2642,9 @@ class OpenGLDisplayDriver : DisplayDriver
             break;
          case ambient:
          {
-#if !defined(EM_MODE) && !defined(SHADERS)
+#if defined(SHADERS)
+            shader_setGlobalAmbient(((Color)value).r / 255.0f, ((Color)value).g / 255.0f, ((Color)value).b / 255.0f, 1.0f);
+#elif !defined(EM_MODE)
             float ambient[4] = { ((Color)value).r/255.0f, ((Color)value).g/255.0f, ((Color)value).b/255.0f, 1.0f };
             glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
 #endif
@@ -2654,7 +2667,9 @@ class OpenGLDisplayDriver : DisplayDriver
 
    void SetLight(Display display, int id, Light light)
    {
-#if !defined(EM_MODE) && !defined(SHADERS)
+#if defined(SHADERS)
+      shader_setLight(display, id, light);
+#elif !defined(EM_MODE)
       //Logf("SetLight\n");
 
       if(light != null)
@@ -2789,7 +2804,6 @@ class OpenGLDisplayDriver : DisplayDriver
          }
          else
          {
-
             Vector3Df vector { 0,0,-1 };
             Vector3Df direction;
             Matrix mat;
@@ -2879,8 +2893,8 @@ class OpenGLDisplayDriver : DisplayDriver
 
          glEnable(GL_DEPTH_TEST);
 
+         GLSetupLighting(true);
 #if !defined(EM_MODE) && !defined(SHADERS)
-         glEnable(GL_LIGHTING);
          glShadeModel(GL_SMOOTH);
 #endif
          glDepthMask((byte)bool::true);
@@ -2895,9 +2909,10 @@ class OpenGLDisplayDriver : DisplayDriver
 
          glDisable(GL_CULL_FACE);
          glDisable(GL_DEPTH_TEST);
+
          GLSetupTexturing(false);
-#if !defined(EM_MODE) && !defined(SHADERS)
-         glDisable(GL_LIGHTING);
+         GLSetupLighting(false);
+#if !defined(SHADERS) && !defined(EM_MODE)
          glDisable(GL_FOG);
          glShadeModel(GL_FLAT);
 #endif
@@ -2969,7 +2984,9 @@ class OpenGLDisplayDriver : DisplayDriver
       else
          GLSetupTexturing(false);
 
-#if defined(EM_MODE) || defined(SHADERS)
+#if defined(SHADERS)
+      shader_setMaterial(material, mesh.flags.colors);
+#elif defined(EM_MODE)
       glimtkColor4f(material.diffuse.r, material.diffuse.g, material.diffuse.b, material.opacity);
 #else
       if(mesh.flags.colors)