static bool CompileShader(GLuint *shader, GLenum type, const File &file)
{
    GLint status;
    std::string sourceStr = file.GetContents();
    //    std::cout << sourceStr << std::endl;
    assert(sourceStr.size()); //Failed to load vertex shader
    const GLchar *source = (GLchar *)sourceStr.c_str();
    
    *shader = glCreateShader(type);
    glShaderSource(*shader, 1, &source, NULL);
    glCompileShader(*shader);
    
#if defined(DEBUG)
    GLint logLength;
    glGetShaderiv(*shader, GL_INFO_LOG_LENGTH, &logLength);
    if (logLength > 0) {
        GLchar *log = (GLchar *)malloc(logLength);
        glGetShaderInfoLog(*shader, logLength, &logLength, log);
        std::cout << "Shader compile log:\n" << log << std::endl;
        free(log);
    }
#endif
    
    glGetShaderiv(*shader, GL_COMPILE_STATUS, &status);
    if (status == 0) {
        glDeleteShader(*shader);
        return false;
    }
    
    return true;
}