Browse Source

--- Merging r18941 into '.':
U packages/opengl/src/glext.pp
--- Merging r19020 into '.':
U packages/regexpr/src/regex.pp

# revisions: 18941,19020
------------------------------------------------------------------------
r18941 | marco | 2011-09-02 11:43:53 +0200 (Fri, 02 Sep 2011) | 3 lines
Changed paths:
M /trunk/packages/opengl/src/glext.pp

* commited patch from Mantis #19956 by Michalis that deals with previous extensions
of opengl becoming part of core in never versions.

------------------------------------------------------------------------
------------------------------------------------------------------------
r19020 | marco | 2011-09-07 21:59:57 +0200 (Wed, 07 Sep 2011) | 2 lines
Changed paths:
M /trunk/packages/regexpr/src/regex.pp

* regex patch from Joao Morais, fixed random exceptions. Mantis #14425

------------------------------------------------------------------------

git-svn-id: branches/fixes_2_6@19052 -

marco 14 years ago
parent
commit
cb7327e81a
2 changed files with 85 additions and 74 deletions
  1. 78 72
      packages/opengl/src/glext.pp
  2. 7 2
      packages/regexpr/src/regex.pp

+ 78 - 72
packages/opengl/src/glext.pp

@@ -4011,7 +4011,13 @@ var
   glRenderbufferStorageMultisample: procedure(target: GLenum; samples: GLsizei; internalformat: GLenum; width: GLsizei; height: GLsizei); extdecl;
   glRenderbufferStorageMultisample: procedure(target: GLenum; samples: GLsizei; internalformat: GLenum; width: GLsizei; height: GLsizei); extdecl;
   glFramebufferTextureLayer: procedure(target: GLenum; attachment: GLenum; texture: GLuint; level: GLint; layer: GLint); extdecl;
   glFramebufferTextureLayer: procedure(target: GLenum; attachment: GLenum; texture: GLuint; level: GLint; layer: GLint); extdecl;
 
 
-function Load_GL_ARB_framebuffer_object(): Boolean;
+{ Using LoadAsCore = true means that we will *not* check
+  if the extension is advertised in glGetString(GL_EXTENSIONS) string.
+  This allows to successfully Load_GL_version_3_0 in an OpenGL 3.0
+  forward-compatible context, where the "core extensions" do not have
+  to be mentioned inside glGetString(GL_EXTENSIONS). }
+
+function Load_GL_ARB_framebuffer_object(LoadAsCore: boolean = false): Boolean;
 
 
 //**** GL_ARB_framebuffer_object DEPRECATED *****//
 //**** GL_ARB_framebuffer_object DEPRECATED *****//
 const
 const
@@ -4032,7 +4038,7 @@ var
   glMapBufferRange: function(target: GLenum; offset: GLintptr; length: GLsizeiptr; access: GLbitfield): PGLvoid; extdecl;
   glMapBufferRange: function(target: GLenum; offset: GLintptr; length: GLsizeiptr; access: GLbitfield): PGLvoid; extdecl;
   glFlushMappedBufferRange: procedure(target: GLenum; offset: GLintptr; length: GLsizeiptr); extdecl;
   glFlushMappedBufferRange: procedure(target: GLenum; offset: GLintptr; length: GLsizeiptr); extdecl;
 
 
-function Load_GL_ARB_map_buffer_range(): Boolean;
+function Load_GL_ARB_map_buffer_range(LoadAsCore: boolean = false): Boolean;
 
 
 //**** GL_ARB_vertex_array_object *****//
 //**** GL_ARB_vertex_array_object *****//
 const
 const
@@ -4043,7 +4049,7 @@ var
   glGenVertexArrays: procedure(n: GLsizei; arrays: PGLuint); extdecl;
   glGenVertexArrays: procedure(n: GLsizei; arrays: PGLuint); extdecl;
   glIsVertexArray: function(_array: GLuint): GLboolean; extdecl;
   glIsVertexArray: function(_array: GLuint): GLboolean; extdecl;
 
 
-function Load_GL_ARB_vertex_array_object(): Boolean;
+function Load_GL_ARB_vertex_array_object(LoadAsCore: boolean = false): Boolean;
 
 
 //**** GL_ARB_copy_buffer *****//
 //**** GL_ARB_copy_buffer *****//
 const
 const
@@ -4052,7 +4058,7 @@ const
 var
 var
   glCopyBufferSubData: procedure(readTarget: GLenum; writeTarget: GLenum; readOffset: GLintptr; writeOffset: GLintptr; size: GLsizeiptr); extdecl;
   glCopyBufferSubData: procedure(readTarget: GLenum; writeTarget: GLenum; readOffset: GLintptr; writeOffset: GLintptr; size: GLsizeiptr); extdecl;
 
 
-function Load_GL_ARB_copy_buffer(): Boolean;
+function Load_GL_ARB_copy_buffer(LoadAsCore: boolean = false): Boolean;
 
 
 //**** GL_ARB_uniform_buffer_object *****//
 //**** GL_ARB_uniform_buffer_object *****//
 const
 const
@@ -4098,7 +4104,7 @@ var
   glGetActiveUniformBlockName: procedure(_program: GLuint; uniformBlockIndex: GLuint; bufSize: GLsizei; length: PGLsizei; uniformBlockName: PGLchar); extdecl;
   glGetActiveUniformBlockName: procedure(_program: GLuint; uniformBlockIndex: GLuint; bufSize: GLsizei; length: PGLsizei; uniformBlockName: PGLchar); extdecl;
   glUniformBlockBinding: procedure(_program: GLuint; uniformBlockIndex: GLuint; uniformBlockBinding: GLuint); extdecl;
   glUniformBlockBinding: procedure(_program: GLuint; uniformBlockIndex: GLuint; uniformBlockBinding: GLuint); extdecl;
 
 
-function Load_GL_ARB_uniform_buffer_object(): Boolean;
+function Load_GL_ARB_uniform_buffer_object(LoadAsCore: boolean = false): Boolean;
 
 
 //**** GL_ARB_draw_elements_base_vertex *****//
 //**** GL_ARB_draw_elements_base_vertex *****//
 var
 var
@@ -4107,7 +4113,7 @@ var
   glDrawElementsInstancedBaseVertex: procedure(mode: GLenum; count: GLsizei; _type: GLenum; const indices: PGLvoid; primcount: GLsizei; basevertex: GLint); extdecl;
   glDrawElementsInstancedBaseVertex: procedure(mode: GLenum; count: GLsizei; _type: GLenum; const indices: PGLvoid; primcount: GLsizei; basevertex: GLint); extdecl;
   glMultiDrawElementsBaseVertex: procedure(mode: GLenum; const count: PGLsizei; _type: GLenum; const indices: PPGLvoid; primcount: GLsizei; const basevertex: PGLint); extdecl;
   glMultiDrawElementsBaseVertex: procedure(mode: GLenum; const count: PGLsizei; _type: GLenum; const indices: PPGLvoid; primcount: GLsizei; const basevertex: PGLint); extdecl;
 
 
-function Load_GL_ARB_draw_elements_base_vertex(): Boolean;
+function Load_GL_ARB_draw_elements_base_vertex(LoadAsCore: boolean = false): Boolean;
 
 
 //**** GL_ARB_provoking_vertex *****//
 //**** GL_ARB_provoking_vertex *****//
 const
 const
@@ -4118,7 +4124,7 @@ const
 var
 var
   glProvokingVertex: procedure(mode: GLenum); extdecl;
   glProvokingVertex: procedure(mode: GLenum); extdecl;
 
 
-function Load_GL_ARB_provoking_vertex(): Boolean;
+function Load_GL_ARB_provoking_vertex(LoadAsCore: boolean = false): Boolean;
 
 
 //**** GL_ARB_sync *****//
 //**** GL_ARB_sync *****//
 type
 type
@@ -4151,7 +4157,7 @@ var
   glGetInteger64v: procedure(pname: GLenum; params: PGLint64); extdecl;
   glGetInteger64v: procedure(pname: GLenum; params: PGLint64); extdecl;
   glGetSynciv: procedure(sync: GLsync; pname: GLenum; bufSize: GLsizei; length: PGLsizei; values: PGLint); extdecl;
   glGetSynciv: procedure(sync: GLsync; pname: GLenum; bufSize: GLsizei; length: PGLsizei; values: PGLint); extdecl;
 
 
-function Load_GL_ARB_sync(): Boolean;
+function Load_GL_ARB_sync(LoadAsCore: boolean = false): Boolean;
 
 
 //**** GL_ARB_texture_multisample *****//
 //**** GL_ARB_texture_multisample *****//
 const
 const
@@ -4182,7 +4188,7 @@ var
   glGetMultisamplefv: procedure(pname: GLenum; index: GLuint; val: PGLfloat); extdecl;
   glGetMultisamplefv: procedure(pname: GLenum; index: GLuint; val: PGLfloat); extdecl;
   glSampleMaski: procedure(index: GLuint; mask: GLbitfield); extdecl;
   glSampleMaski: procedure(index: GLuint; mask: GLbitfield); extdecl;
 
 
-function Load_GL_ARB_texture_multisample(): Boolean;
+function Load_GL_ARB_texture_multisample(LoadAsCore: boolean = false): Boolean;
 
 
 //**** GL_ARB_blend_func_extended *****//
 //**** GL_ARB_blend_func_extended *****//
 const
 const
@@ -4196,7 +4202,7 @@ var
   glBindFragDataLocationIndexed: procedure(_program: GLuint; colorNumber: GLuint; index: GLuint; const name: PGLchar); extdecl;
   glBindFragDataLocationIndexed: procedure(_program: GLuint; colorNumber: GLuint; index: GLuint; const name: PGLchar); extdecl;
   glGetFragDataIndex: function(_program: GLuint; const name: PGLchar): GLint; extdecl;
   glGetFragDataIndex: function(_program: GLuint; const name: PGLchar): GLint; extdecl;
 
 
-function Load_GL_ARB_blend_func_extended(): Boolean;
+function Load_GL_ARB_blend_func_extended(LoadAsCore: boolean = false): Boolean;
 
 
 //**** GL_ARB_sampler_objects *****//
 //**** GL_ARB_sampler_objects *****//
 const
 const
@@ -4217,7 +4223,7 @@ var
   glGetSamplerParameterfv: procedure(sampler: GLuint; pname: GLenum; params: PGLfloat); extdecl;
   glGetSamplerParameterfv: procedure(sampler: GLuint; pname: GLenum; params: PGLfloat); extdecl;
   glGetSamplerParameterIuiv: procedure(sampler: GLuint; pname: GLenum; params: PGLuint); extdecl;
   glGetSamplerParameterIuiv: procedure(sampler: GLuint; pname: GLenum; params: PGLuint); extdecl;
 
 
-function Load_GL_ARB_sampler_objects(): Boolean;
+function Load_GL_ARB_sampler_objects(LoadAsCore: boolean = false): Boolean;
 
 
 //**** GL_ARB_timer_query *****//
 //**** GL_ARB_timer_query *****//
 const
 const
@@ -4228,7 +4234,7 @@ var
   glGetQueryObjecti64v: procedure(id: GLuint; pname: GLenum; params: PGLint64); extdecl;
   glGetQueryObjecti64v: procedure(id: GLuint; pname: GLenum; params: PGLint64); extdecl;
   glGetQueryObjectui64v: procedure(id: GLuint; pname: GLenum; params: PGLuint64); extdecl;
   glGetQueryObjectui64v: procedure(id: GLuint; pname: GLenum; params: PGLuint64); extdecl;
 
 
-function Load_GL_ARB_timer_query(): Boolean;
+function Load_GL_ARB_timer_query(LoadAsCore: boolean = false): Boolean;
 
 
 //**** GL_ARB_vertex_type_2_10_10_10_rev *****//
 //**** GL_ARB_vertex_type_2_10_10_10_rev *****//
 
 
@@ -4274,7 +4280,7 @@ var
   glVertexAttribP4ui: procedure(index: GLuint; _type: GLenum; normalized: GLboolean; value: GLuint); extdecl;
   glVertexAttribP4ui: procedure(index: GLuint; _type: GLenum; normalized: GLboolean; value: GLuint); extdecl;
   glVertexAttribP4uiv: procedure(index: GLuint; _type: GLenum; normalized: GLboolean; const value: PGLuint); extdecl;
   glVertexAttribP4uiv: procedure(index: GLuint; _type: GLenum; normalized: GLboolean; const value: PGLuint); extdecl;
 
 
-function Load_GL_ARB_vertex_type_2_10_10_10_rev(): Boolean;
+function Load_GL_ARB_vertex_type_2_10_10_10_rev(LoadAsCore: boolean = false): Boolean;
 
 
 //**** GL_ARB_gpu_shader_fp64 *****//
 //**** GL_ARB_gpu_shader_fp64 *****//
 // reuse GL_DOUBLE
 // reuse GL_DOUBLE
@@ -4338,7 +4344,7 @@ var
   glProgramUniformMatrix4x2dvEXT: procedure(_program: GLuint; location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
   glProgramUniformMatrix4x2dvEXT: procedure(_program: GLuint; location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
   glProgramUniformMatrix4x3dvEXT: procedure(_program: GLuint; location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
   glProgramUniformMatrix4x3dvEXT: procedure(_program: GLuint; location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
 
 
-function Load_GL_ARB_gpu_shader_fp64(): Boolean;
+function Load_GL_ARB_gpu_shader_fp64(LoadAsCore: boolean = false): Boolean;
 
 
 //**** GL_ARB_shader_subroutine *****//
 //**** GL_ARB_shader_subroutine *****//
 const
 const
@@ -4362,7 +4368,7 @@ var
   glGetUniformSubroutineuiv: procedure(shadertype: GLenum; location: GLint; params: PGLuint); extdecl;
   glGetUniformSubroutineuiv: procedure(shadertype: GLenum; location: GLint; params: PGLuint); extdecl;
   glGetProgramStageiv: procedure(_program: GLuint; shadertype: GLenum; pname: GLenum; values: PGLint); extdecl;
   glGetProgramStageiv: procedure(_program: GLuint; shadertype: GLenum; pname: GLenum; values: PGLint); extdecl;
 
 
-function Load_GL_ARB_shader_subroutine(): Boolean;
+function Load_GL_ARB_shader_subroutine(LoadAsCore: boolean = false): Boolean;
 
 
 //**** GL_ARB_tessellation_shader *****//
 //**** GL_ARB_tessellation_shader *****//
 const
 const
@@ -4410,7 +4416,7 @@ var
   glPatchParameteri: procedure(pname: GLenum; value: GLint); extdecl;
   glPatchParameteri: procedure(pname: GLenum; value: GLint); extdecl;
   glPatchParameterfv: procedure(pname: GLenum; const values: PGLfloat); extdecl;
   glPatchParameterfv: procedure(pname: GLenum; const values: PGLfloat); extdecl;
 
 
-function Load_GL_ARB_tessellation_shader(): Boolean;
+function Load_GL_ARB_tessellation_shader(LoadAsCore: boolean = false): Boolean;
 
 
 //**** GL_ARB_transform_feedback2 *****//
 //**** GL_ARB_transform_feedback2 *****//
 const
 const
@@ -4427,7 +4433,7 @@ var
   glResumeTransformFeedback: procedure(); extdecl;
   glResumeTransformFeedback: procedure(); extdecl;
   glDrawTransformFeedback: procedure(mode: GLenum; id: GLuint); extdecl;
   glDrawTransformFeedback: procedure(mode: GLenum; id: GLuint); extdecl;
 
 
-function Load_GL_ARB_transform_feedback2(): Boolean;
+function Load_GL_ARB_transform_feedback2(LoadAsCore: boolean = false): Boolean;
 
 
 //**** GL_ARB_transform_feedback3 *****//
 //**** GL_ARB_transform_feedback3 *****//
 const
 const
@@ -4438,7 +4444,7 @@ var
   glEndQueryIndexed: procedure(target: GLenum; index: GLuint); extdecl;
   glEndQueryIndexed: procedure(target: GLenum; index: GLuint); extdecl;
   glGetQueryIndexediv: procedure(target: GLenum; index: GLuint; pname: GLenum; params: PGLint); extdecl;
   glGetQueryIndexediv: procedure(target: GLenum; index: GLuint; pname: GLenum; params: PGLint); extdecl;
 
 
-function Load_GL_ARB_transform_feedback3(): Boolean;
+function Load_GL_ARB_transform_feedback3(LoadAsCore: boolean = false): Boolean;
 
 
 
 
 //***** GL_version_1_4 *****//
 //***** GL_version_1_4 *****//
@@ -9844,14 +9850,14 @@ begin
 
 
 end;
 end;
 
 
-function Load_GL_ARB_framebuffer_object(): Boolean;
+function Load_GL_ARB_framebuffer_object(LoadAsCore: boolean): Boolean;
 var
 var
   extstring: String;
   extstring: String;
 begin
 begin
   Result := False;
   Result := False;
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
 
 
-  if glext_ExtensionSupported('GL_ARB_framebuffer_object', extstring) then
+  if LoadAsCore or glext_ExtensionSupported('GL_ARB_framebuffer_object', extstring) then
   begin
   begin
     glIsRenderbuffer := wglGetProcAddress('glIsRenderbuffer');
     glIsRenderbuffer := wglGetProcAddress('glIsRenderbuffer');
     if not Assigned(glIsRenderbuffer) then Exit;
     if not Assigned(glIsRenderbuffer) then Exit;
@@ -9897,14 +9903,14 @@ begin
   end;
   end;
 end;
 end;
 
 
-function Load_GL_ARB_map_buffer_range(): Boolean;
+function Load_GL_ARB_map_buffer_range(LoadAsCore: boolean): Boolean;
 var
 var
   extstring: String;
   extstring: String;
 begin
 begin
   Result := False;
   Result := False;
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
 
 
-  if glext_ExtensionSupported('GL_ARB_map_buffer_range', extstring) then
+  if LoadAsCore or glext_ExtensionSupported('GL_ARB_map_buffer_range', extstring) then
   begin
   begin
     glMapBufferRange := wglGetProcAddress('glMapBufferRange');
     glMapBufferRange := wglGetProcAddress('glMapBufferRange');
     if not Assigned(glMapBufferRange) then Exit;
     if not Assigned(glMapBufferRange) then Exit;
@@ -9914,14 +9920,14 @@ begin
   end;
   end;
 end;
 end;
 
 
-function Load_GL_ARB_vertex_array_object(): Boolean;
+function Load_GL_ARB_vertex_array_object(LoadAsCore: boolean): Boolean;
 var
 var
   extstring: String;
   extstring: String;
 begin
 begin
   Result := False;
   Result := False;
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
 
 
-  if glext_ExtensionSupported('GL_ARB_vertex_array_object', extstring) then
+  if LoadAsCore or glext_ExtensionSupported('GL_ARB_vertex_array_object', extstring) then
   begin
   begin
     glBindVertexArray := wglGetProcAddress('glBindVertexArray');
     glBindVertexArray := wglGetProcAddress('glBindVertexArray');
     if not Assigned(glBindVertexArray) then Exit;
     if not Assigned(glBindVertexArray) then Exit;
@@ -9935,14 +9941,14 @@ begin
   end;
   end;
 end;
 end;
 
 
-function Load_GL_ARB_copy_buffer(): Boolean;
+function Load_GL_ARB_copy_buffer(LoadAsCore: boolean): Boolean;
 var
 var
   extstring: String;
   extstring: String;
 begin
 begin
   Result := False;
   Result := False;
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
 
 
-  if glext_ExtensionSupported('GL_ARB_copy_buffer', extstring) then
+  if LoadAsCore or glext_ExtensionSupported('GL_ARB_copy_buffer', extstring) then
   begin
   begin
     glCopyBufferSubData := wglGetProcAddress('glCopyBufferSubData');
     glCopyBufferSubData := wglGetProcAddress('glCopyBufferSubData');
     if not Assigned(glCopyBufferSubData) then Exit;
     if not Assigned(glCopyBufferSubData) then Exit;
@@ -9950,14 +9956,14 @@ begin
   end;
   end;
 end;
 end;
 
 
-function Load_GL_ARB_uniform_buffer_object(): Boolean;
+function Load_GL_ARB_uniform_buffer_object(LoadAsCore: boolean): Boolean;
 var
 var
   extstring: String;
   extstring: String;
 begin
 begin
   Result := False;
   Result := False;
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
 
 
-  if glext_ExtensionSupported('GL_ARB_uniform_buffer_object', extstring) then
+  if LoadAsCore or glext_ExtensionSupported('GL_ARB_uniform_buffer_object', extstring) then
   begin
   begin
     glGetUniformIndices := wglGetProcAddress('glGetUniformIndices');
     glGetUniformIndices := wglGetProcAddress('glGetUniformIndices');
     if not Assigned(glGetUniformIndices) then Exit;
     if not Assigned(glGetUniformIndices) then Exit;
@@ -9984,14 +9990,14 @@ begin
   end;
   end;
 end;
 end;
 
 
-function Load_GL_ARB_draw_elements_base_vertex(): Boolean;
+function Load_GL_ARB_draw_elements_base_vertex(LoadAsCore: boolean): Boolean;
 var
 var
   extstring: String;
   extstring: String;
 begin
 begin
   Result := False;
   Result := False;
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
 
 
-  if glext_ExtensionSupported('GL_ARB_draw_elements_base_vertex', extstring) then
+  if LoadAsCore or glext_ExtensionSupported('GL_ARB_draw_elements_base_vertex', extstring) then
   begin
   begin
     glDrawElementsBaseVertex := wglGetProcAddress('glDrawElementsBaseVertex');
     glDrawElementsBaseVertex := wglGetProcAddress('glDrawElementsBaseVertex');
     if not Assigned(glDrawElementsBaseVertex) then Exit;
     if not Assigned(glDrawElementsBaseVertex) then Exit;
@@ -10005,14 +10011,14 @@ begin
   end;
   end;
 end;
 end;
 
 
-function Load_GL_ARB_provoking_vertex(): Boolean;
+function Load_GL_ARB_provoking_vertex(LoadAsCore: boolean): Boolean;
 var
 var
   extstring: String;
   extstring: String;
 begin
 begin
   Result := False;
   Result := False;
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
 
 
-  if glext_ExtensionSupported('GL_ARB_provoking_vertex', extstring) then
+  if LoadAsCore or glext_ExtensionSupported('GL_ARB_provoking_vertex', extstring) then
   begin
   begin
     glProvokingVertex := wglGetProcAddress('glProvokingVertex');
     glProvokingVertex := wglGetProcAddress('glProvokingVertex');
     if not Assigned(glProvokingVertex) then Exit;
     if not Assigned(glProvokingVertex) then Exit;
@@ -10020,14 +10026,14 @@ begin
   end;
   end;
 end;
 end;
 
 
-function Load_GL_ARB_sync(): Boolean;
+function Load_GL_ARB_sync(LoadAsCore: boolean): Boolean;
 var
 var
   extstring: String;
   extstring: String;
 begin
 begin
   Result := False;
   Result := False;
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
 
 
-  if glext_ExtensionSupported('GL_ARB_sync', extstring) then
+  if LoadAsCore or glext_ExtensionSupported('GL_ARB_sync', extstring) then
   begin
   begin
     glFenceSync := wglGetProcAddress('glFenceSync');
     glFenceSync := wglGetProcAddress('glFenceSync');
     if not Assigned(glFenceSync) then Exit;
     if not Assigned(glFenceSync) then Exit;
@@ -10047,14 +10053,14 @@ begin
   end;
   end;
 end;
 end;
 
 
-function Load_GL_ARB_texture_multisample(): Boolean;
+function Load_GL_ARB_texture_multisample(LoadAsCore: boolean): Boolean;
 var
 var
   extstring: String;
   extstring: String;
 begin
 begin
   Result := False;
   Result := False;
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
 
 
-  if glext_ExtensionSupported('GL_ARB_texture_multisample', extstring) then
+  if LoadAsCore or glext_ExtensionSupported('GL_ARB_texture_multisample', extstring) then
   begin
   begin
     glTexImage2DMultisample := wglGetProcAddress('glTexImage2DMultisample');
     glTexImage2DMultisample := wglGetProcAddress('glTexImage2DMultisample');
     if not Assigned(glTexImage2DMultisample) then Exit;
     if not Assigned(glTexImage2DMultisample) then Exit;
@@ -10068,14 +10074,14 @@ begin
   end;
   end;
 end;
 end;
 
 
-function Load_GL_ARB_sampler_objects(): Boolean;
+function Load_GL_ARB_sampler_objects(LoadAsCore: boolean): Boolean;
 var
 var
   extstring: String;
   extstring: String;
 begin
 begin
   Result := False;
   Result := False;
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
 
 
-  if glext_ExtensionSupported('GL_ARB_sampler_objects', extstring) then
+  if LoadAsCore or glext_ExtensionSupported('GL_ARB_sampler_objects', extstring) then
   begin
   begin
     glGenSamplers := wglGetProcAddress('glGenSamplers');
     glGenSamplers := wglGetProcAddress('glGenSamplers');
     if not Assigned(glGenSamplers) then Exit;
     if not Assigned(glGenSamplers) then Exit;
@@ -10109,14 +10115,14 @@ begin
   end;
   end;
 end;
 end;
 
 
-function Load_GL_ARB_blend_func_extended(): Boolean;
+function Load_GL_ARB_blend_func_extended(LoadAsCore: boolean): Boolean;
 var
 var
   extstring: String;
   extstring: String;
 begin
 begin
   Result := False;
   Result := False;
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
 
 
-  if glext_ExtensionSupported('GL_ARB_blend_func_extended', extstring) then
+  if LoadAsCore or glext_ExtensionSupported('GL_ARB_blend_func_extended', extstring) then
   begin
   begin
     glBindFragDataLocationIndexed := wglGetProcAddress('glBindFragDataLocationIndexed');
     glBindFragDataLocationIndexed := wglGetProcAddress('glBindFragDataLocationIndexed');
     if not Assigned(glBindFragDataLocationIndexed) then Exit;
     if not Assigned(glBindFragDataLocationIndexed) then Exit;
@@ -10126,14 +10132,14 @@ begin
   end;
   end;
 end;
 end;
 
 
-function Load_GL_ARB_timer_query(): Boolean;
+function Load_GL_ARB_timer_query(LoadAsCore: boolean): Boolean;
 var
 var
   extstring: String;
   extstring: String;
 begin
 begin
   Result := False;
   Result := False;
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
 
 
-  if glext_ExtensionSupported('GL_ARB_timer_query', extstring) then
+  if LoadAsCore or glext_ExtensionSupported('GL_ARB_timer_query', extstring) then
   begin
   begin
     glQueryCounter := wglGetProcAddress('glQueryCounter');
     glQueryCounter := wglGetProcAddress('glQueryCounter');
     if not Assigned(glQueryCounter) then Exit;
     if not Assigned(glQueryCounter) then Exit;
@@ -10145,14 +10151,14 @@ begin
   end;
   end;
 end;
 end;
 
 
-function Load_GL_ARB_vertex_type_2_10_10_10_rev(): Boolean;
+function Load_GL_ARB_vertex_type_2_10_10_10_rev(LoadAsCore: boolean): Boolean;
 var
 var
   extstring: String;
   extstring: String;
 begin
 begin
   Result := False;
   Result := False;
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
 
 
-  if glext_ExtensionSupported('GL_ARB_vertex_type_2_10_10_10_rev', extstring) then
+  if LoadAsCore or glext_ExtensionSupported('GL_ARB_vertex_type_2_10_10_10_rev', extstring) then
   begin
   begin
     glVertexP2ui := wglGetProcAddress('glVertexP2ui');
     glVertexP2ui := wglGetProcAddress('glVertexP2ui');
     if not Assigned(glVertexP2ui) then Exit;
     if not Assigned(glVertexP2ui) then Exit;
@@ -10234,14 +10240,14 @@ begin
   end;
   end;
 end;
 end;
 
 
-function Load_GL_ARB_gpu_shader_fp64(): Boolean;
+function Load_GL_ARB_gpu_shader_fp64(LoadAsCore: boolean): Boolean;
 var
 var
   extstring: String;
   extstring: String;
 begin
 begin
   Result := False;
   Result := False;
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
 
 
-  if glext_ExtensionSupported('GL_ARB_gpu_shader_fp64', extstring) then
+  if LoadAsCore or glext_ExtensionSupported('GL_ARB_gpu_shader_fp64', extstring) then
   begin
   begin
     glUniform1d := wglGetProcAddress('glUniform1d');
     glUniform1d := wglGetProcAddress('glUniform1d');
     if not Assigned(glUniform1d) then Exit;
     if not Assigned(glUniform1d) then Exit;
@@ -10324,14 +10330,14 @@ begin
   end;
   end;
 end;
 end;
 
 
-function Load_GL_ARB_shader_subroutine(): Boolean;
+function Load_GL_ARB_shader_subroutine(LoadAsCore: boolean): Boolean;
 var
 var
   extstring: String;
   extstring: String;
 begin
 begin
   Result := False;
   Result := False;
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
 
 
-  if glext_ExtensionSupported('GL_ARB_shader_subroutine', extstring) then
+  if LoadAsCore or glext_ExtensionSupported('GL_ARB_shader_subroutine', extstring) then
   begin
   begin
     glGetSubroutineUniformLocation := wglGetProcAddress('glGetSubroutineUniformLocation');
     glGetSubroutineUniformLocation := wglGetProcAddress('glGetSubroutineUniformLocation');
     if not Assigned(glGetSubroutineUniformLocation) then Exit;
     if not Assigned(glGetSubroutineUniformLocation) then Exit;
@@ -10353,14 +10359,14 @@ begin
   end;
   end;
 end;
 end;
 
 
-function Load_GL_ARB_tessellation_shader(): Boolean;
+function Load_GL_ARB_tessellation_shader(LoadAsCore: boolean): Boolean;
 var
 var
   extstring: String;
   extstring: String;
 begin
 begin
   Result := False;
   Result := False;
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
 
 
-  if glext_ExtensionSupported('GL_ARB_tessellation_shader', extstring) then
+  if LoadAsCore or glext_ExtensionSupported('GL_ARB_tessellation_shader', extstring) then
   begin
   begin
     glPatchParameteri := wglGetProcAddress('glPatchParameteri');
     glPatchParameteri := wglGetProcAddress('glPatchParameteri');
     if not Assigned(glPatchParameteri) then Exit;
     if not Assigned(glPatchParameteri) then Exit;
@@ -10370,14 +10376,14 @@ begin
   end;
   end;
 end;
 end;
 
 
-function Load_GL_ARB_transform_feedback2(): Boolean;
+function Load_GL_ARB_transform_feedback2(LoadAsCore: boolean): Boolean;
 var
 var
   extstring: String;
   extstring: String;
 begin
 begin
   Result := False;
   Result := False;
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
 
 
-  if glext_ExtensionSupported('GL_ARB_transform_feedback2', extstring) then
+  if LoadAsCore or glext_ExtensionSupported('GL_ARB_transform_feedback2', extstring) then
   begin
   begin
     glBindTransformFeedback := wglGetProcAddress('glBindTransformFeedback');
     glBindTransformFeedback := wglGetProcAddress('glBindTransformFeedback');
     if not Assigned(glBindTransformFeedback) then Exit;
     if not Assigned(glBindTransformFeedback) then Exit;
@@ -10397,14 +10403,14 @@ begin
   end;
   end;
 end;
 end;
 
 
-function Load_GL_ARB_transform_feedback3(): Boolean;
+function Load_GL_ARB_transform_feedback3(LoadAsCore: boolean): Boolean;
 var
 var
   extstring: String;
   extstring: String;
 begin
 begin
   Result := False;
   Result := False;
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
   extstring := String(PChar(glGetString(GL_EXTENSIONS)));
 
 
-  if glext_ExtensionSupported('GL_ARB_transform_feedback3', extstring) then
+  if LoadAsCore or glext_ExtensionSupported('GL_ARB_transform_feedback3', extstring) then
   begin
   begin
     glDrawTransformFeedbackStream := wglGetProcAddress('glDrawTransformFeedbackStream');
     glDrawTransformFeedbackStream := wglGetProcAddress('glDrawTransformFeedbackStream');
     if not Assigned(glDrawTransformFeedbackStream) then Exit;
     if not Assigned(glDrawTransformFeedbackStream) then Exit;
@@ -11113,9 +11119,9 @@ begin
   if not Assigned(glClearBufferfi) then Exit;
   if not Assigned(glClearBufferfi) then Exit;
   glGetStringi := wglGetProcAddress('glGetStringi');
   glGetStringi := wglGetProcAddress('glGetStringi');
   if not Assigned(glGetStringi) then Exit;
   if not Assigned(glGetStringi) then Exit;
-  if not Load_GL_ARB_framebuffer_object() then Exit;
-  if not Load_GL_ARB_map_buffer_range() then Exit;
-  if not Load_GL_ARB_vertex_array_object() then Exit;
+  if not Load_GL_ARB_framebuffer_object(true) then Exit;
+  if not Load_GL_ARB_map_buffer_range(true) then Exit;
+  if not Load_GL_ARB_vertex_array_object(true) then Exit;
   Result := Load_GL_VERSION_2_1();
   Result := Load_GL_VERSION_2_1();
 end;
 end;
 
 
@@ -11130,8 +11136,8 @@ begin
   if not Assigned(glTexBuffer) then Exit;
   if not Assigned(glTexBuffer) then Exit;
   glPrimitiveRestartIndex := wglGetProcAddress('glPrimitiveRestartIndex');
   glPrimitiveRestartIndex := wglGetProcAddress('glPrimitiveRestartIndex');
   if not Assigned(glPrimitiveRestartIndex) then Exit;
   if not Assigned(glPrimitiveRestartIndex) then Exit;
-  if not Load_GL_ARB_copy_buffer() then Exit;
-  if not Load_GL_ARB_uniform_buffer_object() then Exit;
+  if not Load_GL_ARB_copy_buffer(true) then Exit;
+  if not Load_GL_ARB_uniform_buffer_object(true) then Exit;
   Result := Load_GL_VERSION_3_0();
   Result := Load_GL_VERSION_3_0();
 end;
 end;
 
 
@@ -11146,31 +11152,31 @@ begin
   if not Assigned(glProgramParameteri) then Exit;
   if not Assigned(glProgramParameteri) then Exit;
   glFramebufferTexture := wglGetProcAddress('glFramebufferTexture');
   glFramebufferTexture := wglGetProcAddress('glFramebufferTexture');
   if not Assigned(glFramebufferTexture) then Exit;
   if not Assigned(glFramebufferTexture) then Exit;
-  if not Load_GL_ARB_draw_elements_base_vertex() then Exit;
-  if not Load_GL_ARB_provoking_vertex() then Exit;
-  if not Load_GL_ARB_sync() then Exit;
-  if not Load_GL_ARB_texture_multisample() then Exit;
+  if not Load_GL_ARB_draw_elements_base_vertex(true) then Exit;
+  if not Load_GL_ARB_provoking_vertex(true) then Exit;
+  if not Load_GL_ARB_sync(true) then Exit;
+  if not Load_GL_ARB_texture_multisample(true) then Exit;
   Result := Load_GL_VERSION_3_1();
   Result := Load_GL_VERSION_3_1();
 end;
 end;
 
 
 function Load_GL_VERSION_3_3(): Boolean;
 function Load_GL_VERSION_3_3(): Boolean;
 begin
 begin
   Result := False;
   Result := False;
-  if not Load_GL_ARB_blend_func_extended() then Exit;
-  if not Load_GL_ARB_sampler_objects() then Exit;
-  if not Load_GL_ARB_timer_query() then Exit;
-  if not Load_GL_ARB_vertex_type_2_10_10_10_rev() then Exit;
+  if not Load_GL_ARB_blend_func_extended(true) then Exit;
+  if not Load_GL_ARB_sampler_objects(true) then Exit;
+  if not Load_GL_ARB_timer_query(true) then Exit;
+  if not Load_GL_ARB_vertex_type_2_10_10_10_rev(true) then Exit;
   Result := Load_GL_VERSION_3_2();
   Result := Load_GL_VERSION_3_2();
 end;
 end;
 
 
 function Load_GL_VERSION_4_0(): Boolean;
 function Load_GL_VERSION_4_0(): Boolean;
 begin
 begin
   Result := False;
   Result := False;
-  if not Load_GL_ARB_gpu_shader_fp64() then Exit;
-  if not Load_GL_ARB_shader_subroutine() then Exit;
-  if not Load_GL_ARB_tessellation_shader() then Exit;
-  if not Load_GL_ARB_transform_feedback2() then Exit;
-  if not Load_GL_ARB_transform_feedback3() then Exit;
+  if not Load_GL_ARB_gpu_shader_fp64(true) then Exit;
+  if not Load_GL_ARB_shader_subroutine(true) then Exit;
+  if not Load_GL_ARB_tessellation_shader(true) then Exit;
+  if not Load_GL_ARB_transform_feedback2(true) then Exit;
+  if not Load_GL_ARB_transform_feedback3(true) then Exit;
   Result := Load_GL_VERSION_3_3();
   Result := Load_GL_VERSION_3_3();
 end;
 end;
 
 

+ 7 - 2
packages/regexpr/src/regex.pp

@@ -73,6 +73,7 @@ type
      mtAnyChar,        {..any character}
      mtAnyChar,        {..any character}
      mtChar,           {..a particular character}
      mtChar,           {..a particular character}
      mtClass,          {..a character class}
      mtClass,          {..a character class}
+     mtDupClass,       {..a character class beying referenced}
      mtNegClass,       {..a negated character class}
      mtNegClass,       {..a negated character class}
      mtTerminal,       {..the final state--no matching}
      mtTerminal,       {..the final state--no matching}
      mtUnused);        {..an unused state--no matching}
      mtUnused);        {..an unused state--no matching}
@@ -446,7 +447,7 @@ begin
     sdMatchType := aMatchType;
     sdMatchType := aMatchType;
     if (aMatchType = mtChar) then
     if (aMatchType = mtChar) then
       sdChar := aChar
       sdChar := aChar
-    else if (aMatchType = mtClass) or (aMatchType = mtNegClass) then
+    else if aMatchType in [mtClass, mtDupClass, mtNegClass] then
       sdClass := aCharClass;
       sdClass := aCharClass;
     end;
     end;
   Result := FStateCount;
   Result := FStateCount;
@@ -590,7 +591,7 @@ begin
             if not (Ch in newline) then
             if not (Ch in newline) then
               DequeEnqueue(sdNextState1);
               DequeEnqueue(sdNextState1);
           end;
           end;
-        mtClass :
+        mtClass, mtDupClass :
           begin
           begin
             {for a match within a class, enqueue the next state}
             {for a match within a class, enqueue the next state}
             if (Ch in sdClass^) then
             if (Ch in sdClass^) then
@@ -1067,6 +1068,8 @@ begin
                     FStateTable[FStateCount].sdNextState1 := i+FStateTable[FStateCount].sdNextState1+ (EndStateAtom-StartStateAtom) *i;
                     FStateTable[FStateCount].sdNextState1 := i+FStateTable[FStateCount].sdNextState1+ (EndStateAtom-StartStateAtom) *i;
                   if FStateTable[FStateCount].sdNextState2 in [StartStateAtom..EndStateAtom+1] then
                   if FStateTable[FStateCount].sdNextState2 in [StartStateAtom..EndStateAtom+1] then
                     FStateTable[FStateCount].sdNextState2 := i+FStateTable[FStateCount].sdNextState2 + (EndStateAtom-StartStateAtom) *i;
                     FStateTable[FStateCount].sdNextState2 := i+FStateTable[FStateCount].sdNextState2 + (EndStateAtom-StartStateAtom) *i;
+                  if FStateTable[FStateCount].sdMatchType = mtClass then
+                    FStateTable[FStateCount].sdMatchType := mtDupClass;
                   inc(FStateCount);
                   inc(FStateCount);
 
 
                   if FStateCount=length(FStateTable) then
                   if FStateCount=length(FStateTable) then
@@ -1086,6 +1089,8 @@ begin
                   FStateTable[FStateCount].sdNextState1 := i+FStateTable[FStateCount].sdNextState1+ (EndStateAtom-StartStateAtom) * i+(i-n+1);
                   FStateTable[FStateCount].sdNextState1 := i+FStateTable[FStateCount].sdNextState1+ (EndStateAtom-StartStateAtom) * i+(i-n+1);
                 if FStateTable[FStateCount].sdNextState2 in [StartStateAtom..EndStateAtom+1] then
                 if FStateTable[FStateCount].sdNextState2 in [StartStateAtom..EndStateAtom+1] then
                   FStateTable[FStateCount].sdNextState2 := i+FStateTable[FStateCount].sdNextState2 + (EndStateAtom-StartStateAtom) * i+(i-n+1);
                   FStateTable[FStateCount].sdNextState2 := i+FStateTable[FStateCount].sdNextState2 + (EndStateAtom-StartStateAtom) * i+(i-n+1);
+                if FStateTable[FStateCount].sdMatchType = mtClass then
+                  FStateTable[FStateCount].sdMatchType := mtDupClass;
                 inc(FStateCount);
                 inc(FStateCount);
 
 
                 if FStateCount=length(FStateTable) then
                 if FStateCount=length(FStateTable) then