anchor.diff:  var
     TrampolineglShaderSource: procedure(shader: GLuint; count: GLsizei; const _string: PGLchar; const length: PGLint); stdcall = nil;
     TrampolinewglGetProcAddress: function(proc: PChar): Pointer; stdcall = nil;
  +  TrampolineglCreateShaderProgramv: function(AType: GLenum; count: GLsizei; _string: PGLchar): GLuint; stdcall = nil;
     ShaderWritten: Integer;
   
  -procedure glShaderSourceBounce(shader: GLuint; count: GLsizei; _string: PGLchar; length: PGLint); stdcall;
  -var
  +function glCreateShaderProgramvBounce(AType: GLenum; count: GLsizei; _string: PGLchar): GLuint; stdcall;
  +var
  +  i: Integer;
  +  p: PChar;
  +  hash: Cardinal;
  +  pa: PPointerArray;
  +  s: string;
  +  len: glint;
     f: File;
  -  s: string;
  -  i: Integer;
  -  pa: PPointerArray;
  -  pl: PIntegerArray;
     return: Word;
  -  hash: Cardinal;
  -  p: Pointer;
  -  len: glint;
  -begin
  -  if Assigned(TrampolineglShaderSource) then
  +begin
  +  if Assigned(TrampolineglCreateShaderProgramv) then
     begin
       if Assigned(_string) then
       begin
         pa := Pointer(_string);
  -      pl := Pointer(length);
  -
         hash := 0;
         for i:=0 to count - 1 do
  -        if Assigned(length) then
  -        hash := hash + SuperfastHash(pa[i], pl[i])
  -       else
  -        hash := hash + SuperfastHash(pa[i], System.Length(pchar(pa[i])));
  +      begin
  +        if Assigned(pa[i]) then
  +        begin
  +          hash := hash + SuperfastHash(pa[i], System.Length(pchar(pa[i])));
  +        end;
  +      end;
   
         s:=BasePath + BaseName+'_shader_'+IntToHex(hash, 8)+'.txt';
         InterLockedIncrement(ShaderWritten);
  
positive.code:           Blockread(f, p^, len);
            closefile(f);
  
            TrampolineglShaderSource(shader, 1, @p, @len);
            Freemem(p);
            //length:=nil;
          end;
        end;
  
  
negative.code:       if not Assigned(TrampolineglShaderSource) then
          TrampolineglShaderSource:=result;
        result:=@glShaderSourceBounce;
      end else if (proc = 'glCreateShaderProgramv') then
      begin
        if not Assigned(TrampolineglCreateShaderProgramv) then
          TrampolineglCreateShaderProgramv:=result;
        result:=@glCreateShaderProgramvBounce;
      end else if (proc = 'glCompileShader') then
      begin
        if not Assigned(TrampolineglCompileShader) then
  