|
@@ -31,7 +31,7 @@ class Window {
|
|
|
win = winCreate(@:privateAccess title.toUtf8(), width, height);
|
|
|
if( win == null ) throw "Failed to create window";
|
|
|
glctx = winGetGLContext(win);
|
|
|
- if( glctx == null || !GL.init() ) {
|
|
|
+ if( glctx == null || !GL.init() || !testGL() ) {
|
|
|
destroy();
|
|
|
if( Sdl.onGlContextRetry() ) continue;
|
|
|
Sdl.onGlContextError();
|
|
@@ -42,6 +42,42 @@ class Window {
|
|
|
vsync = true;
|
|
|
}
|
|
|
|
|
|
+ function testGL() {
|
|
|
+ try {
|
|
|
+
|
|
|
+ var reg = ~/[0-9]+\.[0-9]+/;
|
|
|
+ var v : String = GL.getParameter(GL.SHADING_LANGUAGE_VERSION);
|
|
|
+ var shaderVersion = 130;
|
|
|
+ if( reg.match(v) )
|
|
|
+ shaderVersion = hxd.Math.imin( 150, Math.round( Std.parseFloat(reg.matched(0)) * 100 ) );
|
|
|
+
|
|
|
+ var vertex = GL.createShader(GL.VERTEX_SHADER);
|
|
|
+ GL.shaderSource(vertex, ["#version " + shaderVersion, "void main() { gl_Position = vec4(1.0); }"].join("\n"));
|
|
|
+ GL.compileShader(vertex);
|
|
|
+ if( GL.getShaderParameter(vertex, GL.COMPILE_STATUS) != 1 ) throw "Failed to compile VS ("+GL.getShaderInfoLog(vertex)+")";
|
|
|
+
|
|
|
+ var fragment = GL.createShader(GL.FRAGMENT_SHADER);
|
|
|
+ GL.shaderSource(fragment, ["#version " + shaderVersion, "out vec4 color; void main() { color = vec4(1.0); }"].join("\n"));
|
|
|
+ GL.compileShader(fragment);
|
|
|
+ if( GL.getShaderParameter(fragment, GL.COMPILE_STATUS) != 1 ) throw "Failed to compile FS ("+GL.getShaderInfoLog(fragment)+")";
|
|
|
+
|
|
|
+ var p = GL.createProgram();
|
|
|
+ GL.attachShader(p, vertex);
|
|
|
+ GL.attachShader(p, fragment);
|
|
|
+ GL.linkProgram(p);
|
|
|
+
|
|
|
+ if( GL.getProgramParameter(p, GL.LINK_STATUS) != 1 ) throw "Failed to link ("+GL.getProgramInfoLog(p)+")";
|
|
|
+
|
|
|
+ GL.deleteShader(vertex);
|
|
|
+ GL.deleteShader(fragment);
|
|
|
+
|
|
|
+ } catch( e : Dynamic ) {
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
function set_displayMode(mode) {
|
|
|
if( mode == displayMode )
|
|
|
return mode;
|