public Shader (String s) {
        shader= ARBShaderObjects.glCreateProgramObjectARB();
        if(shader!=0){
            vertShader=createShader(loadCode("Shaders/"+s+".vert"), ARBVertexShader.GL_VERTEX_SHADER_ARB);
            if (hardDebug) System.out.println("[Shader] Vertex shader code loaded: "+s);
            fragShader=createShader(loadCode("Shaders/"+s+".frag"), ARBFragmentShader.GL_FRAGMENT_SHADER_ARB);
            if (hardDebug) System.out.println("[Shader] Fragment shader code loaded: "+s);
        }else  {
            System.err.println("[Shader] Failed to create shaders");
        }
        if(vertShader!=0 && fragShader!=0){
            ARBShaderObjects.glAttachObjectARB(shader, vertShader);
            if (hardDebug) System.out.println("[Shader] Vertex shader code attached: "+s);
            ARBShaderObjects.glAttachObjectARB(shader, fragShader);
            if (hardDebug) System.out.println("[Shader] Fragment shader code attached: "+s);
            ARBShaderObjects.glLinkProgramARB(shader);
            ARBShaderObjects.glValidateProgramARB(shader);


            if (ARBShaderObjects.glGetObjectParameteriARB(shader,
                    ARBShaderObjects.GL_OBJECT_VALIDATE_STATUS_ARB) == GL11.GL_FALSE) {
                System.err.println("[Shader] Failed to validate "+s);
            } else
            if (hardDebug) System.out.println("[Shader] Shader ready to work: "+s);
        }else {
            System.err.println("[Shader] Failed to compile shader");
        }
    }