diff --git a/dlls/gdi32/dibdrv/opengl.c b/dlls/gdi32/dibdrv/opengl.c
index 77d6320..20cfc02 100644
--- a/dlls/gdi32/dibdrv/opengl.c
+++ b/dlls/gdi32/dibdrv/opengl.c
@@ -214,10 +214,10 @@
 /***********************************************************************
  *		dibdrv_wglDeleteContext
  */
-static void dibdrv_wglDeleteContext( struct wgl_context *context )
+static BOOL dibdrv_wglDeleteContext( struct wgl_context *context )
 {
     pOSMesaDestroyContext( context->context );
-    HeapFree( GetProcessHeap(), 0, context );
+    return HeapFree( GetProcessHeap(), 0, context );
 }
 
 /***********************************************************************
diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl
index a3148d8..502b9ae 100755
--- a/dlls/opengl32/make_opengl
+++ b/dlls/opengl32/make_opengl
@@ -180,7 +180,19 @@
      "GLintptrARB" =>      [ "long", "INT_PTR" ],
      "GLsizeiptrARB" =>    [ "long", "INT_PTR" ],
      "GLhalfNV" =>         [ "long", "unsigned short" ],
-     "GLvdpauSurfaceNV" => [ "long", "INT_PTR" ]);
+     "GLvdpauSurfaceNV" => [ "long", "INT_PTR" ],
+     "HDC" =>              [ "long" ],
+     "HGLRC" =>            [ "long" ],
+     "HENHMETAFILE" =>     [ "long" ],
+     "LPGLYPHMETRICSFLOAT" => [ "ptr" ],
+     "LPCSTR" =>           [ "str" ],
+     "int" =>              [ "long" ],
+     "INT" =>              [ "long" ],
+     "BOOL" =>             [ "long" ],
+     "DWORD" =>            [ "long" ],
+     "FLOAT" =>            [ "float" ],
+     "UINT" =>             [ "long" ],
+    );
 
 #
 # Used to convert some types
@@ -358,9 +370,29 @@
     return $ret;
 }
 
+sub generate_spec_entry($$)
+{
+    my ($name, $func) = @_;
+    my $args=" ";
+    foreach my $arg (@{$func->[1]})
+    {
+        my $type = $arg->[0];
+        if ($type =~ /\*/) {
+            $args .= "ptr ";
+        } elsif (defined($arg_conv{$type})) {
+            $args .= "$@$arg_conv{$type}[0] ";
+        } else {
+            die "No conversion for func $name type $type\n";
+        }
+    }
+    $args = substr($args,1,-1);
+    return "@ stdcall $_($args)";
+}
+
 sub get_func_proto($$$)
 {
     my ($format, $name, $func) = @_;
+    die "unknown func $name" unless defined $func->[0];
     my $ret = sprintf "%-10s", ConvertType($func->[0]);
     $ret .= " " . sprintf($format,$name) . "(";
     for (my $i = 0; $i < @{$func->[1]}; $i++)
@@ -445,29 +477,33 @@
 #
 my %norm_functions;
 my %ext_functions;
+my %wgl_functions;
 
-my %wgl_functions =
-   (
-    "wglCopyContext" => [ "BOOL", [ [ "struct wgl_context *", "src" ],
-                                    [ "struct wgl_context *", "dst" ],
-                                    [ "UINT", "mask" ] ] ],
-    "wglCreateContext" => [ "struct wgl_context *", [ [ "HDC", "hdc" ] ] ],
-    "wglDeleteContext" => [ "void", [ [ "struct wgl_context *", "context" ] ] ],
-    "wglDescribePixelFormat" => [ "INT", [ [ "HDC", "hdc" ],
-                                           [ "INT", "format" ],
-                                           [ "UINT", "size" ],
-                                           [ "PIXELFORMATDESCRIPTOR *", "descr" ] ] ],
-    "wglGetPixelFormat" => [ "INT", [ [ "HDC", "hdc" ] ] ],
-    "wglGetProcAddress" => [ "PROC", [ [ "LPCSTR", "name" ] ] ],
-    "wglMakeCurrent" => [ "BOOL", [ [ "HDC", "hdc" ],
-                                    [ "struct wgl_context *", "context" ] ] ],
-    "wglSetPixelFormat" => [ "BOOL", [ [ "HDC", "hdc" ],
-                                       [ "INT", "format" ],
-                                       [ "const PIXELFORMATDESCRIPTOR *", "descr" ] ] ],
-    "wglShareLists" => [ "BOOL", [ [ "struct wgl_context *", "org" ],
-                                   [ "struct wgl_context *", "dst" ] ] ],
-    "wglSwapBuffers" => [ "BOOL", [ [ "HDC", "hdc" ] ] ],
-   );
+my %supported_wgl_functions =
+    (
+     "wglCopyContext" => 1,
+     "wglCreateContext" => 1,
+     "wglDeleteContext" => 1,
+     "wglDescribePixelFormat" => 1,
+     "wglGetPixelFormat" => 1,
+     "wglGetProcAddress" => 1,
+     "wglMakeCurrent" => 1,
+     "wglSetPixelFormat" => 1,
+     "wglShareLists" => 1,
+     "wglSwapBuffers" => 1,
+    );
+
+my %remapped_wgl_functions =
+    (
+     "ChoosePixelFormat" => "wglChoosePixelFormat",
+     "DescribePixelFormat" => "wglDescribePixelFormat",
+     "GetPixelFormat" => "wglGetPixelFormat",
+     "GetEnhMetaFilePixelFormat" => 0,
+     "SetPixelFormat" => "wglSetPixelFormat",
+     "SwapBuffers" => "wglSwapBuffers",
+     "wglUseFontBitmaps" => 0,
+     "wglUseFontOutlines" => 0,
+    );
 
 my %supported_wgl_extensions =
    (
@@ -578,6 +614,19 @@
                 }
             }
         }
+        elsif ($v->{api} eq "wgl")
+        {
+            for my $req (@{$v->{require}}) {
+                for (keys %{$req->{command}}) {
+                    if (defined $remapped_wgl_functions{$_}) {
+                        $wgl_functions{$remapped_wgl_functions{$_}} = $functions{$_} if $remapped_wgl_functions{$_};
+                    }
+                    else {
+                        $wgl_functions{$_} = $functions{$_};
+                    }
+                }
+            }
+        }
     }
 
     # generate extension functions
@@ -643,6 +692,7 @@
 print HEADER "    struct\n    {\n";
 foreach (sort keys %wgl_functions)
 {
+    next unless defined $supported_wgl_functions{$_};
     printf HEADER "        %s;\n", get_func_proto("(WINE_GLAPI *p_%s)", $_, $wgl_functions{$_});
 }
 print HEADER "    } wgl;\n\n";
@@ -690,6 +740,7 @@
 
 foreach (sort keys %arg_conv)
 {
+    next unless $arg_conv{$_}[1];
     printf HEADER "typedef %-22s %s;\n", $arg_conv{$_}[1], $_;
 }
 print HEADER "\n";
@@ -716,46 +767,11 @@
 open(SPEC, ">$spec_file") or die "cannot create $spec_file";
 
 foreach (sort keys %norm_functions) {
-    my $args=" ";
-    for (my $i = 0; $i < @{$norm_functions{$_}->[1]}; $i++) {
-        my $type = $norm_functions{$_}->[1]->[$i]->[0];
-        if ($type =~ /\*/) {
-            $args .= "ptr ";
-        } elsif (defined($arg_conv{$type})) {
-            $args .= "$@$arg_conv{$type}[0] ";
-        } else {
-            die "No conversion for GL type $type...\n";
-        }
-    }
-    $args = substr($args,1,-1);
-    print SPEC "@ stdcall $_($args)\n";
+    printf SPEC "%s\n", generate_spec_entry( $_, $norm_functions{$_} );
 }
-
-print SPEC "@ stdcall wglChoosePixelFormat(long ptr)
-@ stdcall wglCopyContext(long long long)
-@ stdcall wglCreateContext(long)
-@ stdcall wglCreateLayerContext(long long)
-@ stdcall wglDeleteContext(long)
-@ stdcall wglDescribeLayerPlane(long long long long ptr)
-@ stdcall wglDescribePixelFormat(long long long ptr)
-@ stdcall wglGetCurrentContext()
-@ stdcall wglGetCurrentDC()
-@ stub    wglGetDefaultProcAddress
-@ stdcall wglGetLayerPaletteEntries(long long long long ptr)
-@ stdcall wglGetPixelFormat(long)
-@ stdcall wglGetProcAddress(str)
-@ stdcall wglMakeCurrent(long long)
-@ stdcall wglRealizeLayerPalette(long long long)
-@ stdcall wglSetLayerPaletteEntries(long long long long ptr)
-@ stdcall wglSetPixelFormat(long long ptr)
-@ stdcall wglShareLists(long long)
-@ stdcall wglSwapBuffers(long)
-@ stdcall wglSwapLayerBuffers(long long)
-@ stdcall wglUseFontBitmapsA(long long long long)
-@ stdcall wglUseFontBitmapsW(long long long long)
-@ stdcall wglUseFontOutlinesA(long long long long long long long ptr)
-@ stdcall wglUseFontOutlinesW(long long long long long long long ptr)
-";
+foreach (sort keys %wgl_functions) {
+    printf SPEC "%s\n", generate_spec_entry( $_, $wgl_functions{$_} );
+}
 
 close(SPEC);
 
@@ -783,6 +799,7 @@
 }
 
 foreach (sort keys %wgl_functions) {
+    next unless defined $supported_wgl_functions{$_};
     print NORM generate_null_func($_, $wgl_functions{$_});
 }
 foreach (sort keys %norm_functions) {
@@ -793,7 +810,11 @@
 }
 
 print NORM "\nstruct opengl_funcs null_opengl_funcs =\n{\n    {\n";
-foreach (sort keys %wgl_functions) { print NORM "        null_$_,\n"; }
+foreach (sort keys %wgl_functions)
+{
+    next unless defined $supported_wgl_functions{$_};
+    print NORM "        null_$_,\n";
+}
 print NORM "    },\n    {\n";
 foreach (sort keys %norm_functions) { print NORM "        null_$_,\n" unless $_ eq "glDebugEntry"; }
 print NORM "    },\n    {\n";
diff --git a/dlls/opengl32/opengl32.spec b/dlls/opengl32/opengl32.spec
index f620ac4..4d4288c 100644
--- a/dlls/opengl32/opengl32.spec
+++ b/dlls/opengl32/opengl32.spec
@@ -344,7 +344,6 @@
 @ stdcall wglDescribePixelFormat(long long long ptr)
 @ stdcall wglGetCurrentContext()
 @ stdcall wglGetCurrentDC()
-@ stub    wglGetDefaultProcAddress
 @ stdcall wglGetLayerPaletteEntries(long long long long ptr)
 @ stdcall wglGetPixelFormat(long)
 @ stdcall wglGetProcAddress(str)
@@ -357,5 +356,5 @@
 @ stdcall wglSwapLayerBuffers(long long)
 @ stdcall wglUseFontBitmapsA(long long long long)
 @ stdcall wglUseFontBitmapsW(long long long long)
-@ stdcall wglUseFontOutlinesA(long long long long long long long ptr)
-@ stdcall wglUseFontOutlinesW(long long long long long long long ptr)
+@ stdcall wglUseFontOutlinesA(long long long long float float long ptr)
+@ stdcall wglUseFontOutlinesW(long long long long float float long ptr)
diff --git a/dlls/opengl32/opengl_norm.c b/dlls/opengl32/opengl_norm.c
index d974cb4..1640b17 100644
--- a/dlls/opengl32/opengl_norm.c
+++ b/dlls/opengl32/opengl_norm.c
@@ -2014,15 +2014,15 @@
   TRACE("(%d, %d, %d, %d)\n", x, y, width, height );
   funcs->gl.p_glViewport( x, y, width, height );
 }
-static BOOL null_wglCopyContext( struct wgl_context * src, struct wgl_context * dst, UINT mask ) { return 0; }
-static struct wgl_context * null_wglCreateContext( HDC hdc ) { return 0; }
-static void null_wglDeleteContext( struct wgl_context * context ) { }
-static INT null_wglDescribePixelFormat( HDC hdc, INT format, UINT size, PIXELFORMATDESCRIPTOR * descr ) { return 0; }
-static INT null_wglGetPixelFormat( HDC hdc ) { return 0; }
-static PROC null_wglGetProcAddress( LPCSTR name ) { return 0; }
-static BOOL null_wglMakeCurrent( HDC hdc, struct wgl_context * context ) { return 0; }
-static BOOL null_wglSetPixelFormat( HDC hdc, INT format, const PIXELFORMATDESCRIPTOR * descr ) { return 0; }
-static BOOL null_wglShareLists( struct wgl_context * org, struct wgl_context * dst ) { return 0; }
+static BOOL null_wglCopyContext( struct wgl_context * hglrcSrc, struct wgl_context * hglrcDst, UINT mask ) { return 0; }
+static struct wgl_context * null_wglCreateContext( HDC hDc ) { return 0; }
+static BOOL null_wglDeleteContext( struct wgl_context * oldContext ) { return 0; }
+static int null_wglDescribePixelFormat( HDC hdc, int ipfd, UINT cjpfd, PIXELFORMATDESCRIPTOR* ppfd ) { return 0; }
+static int null_wglGetPixelFormat( HDC hdc ) { return 0; }
+static PROC null_wglGetProcAddress( LPCSTR lpszProc ) { return 0; }
+static BOOL null_wglMakeCurrent( HDC hDc, struct wgl_context * newContext ) { return 0; }
+static BOOL null_wglSetPixelFormat( HDC hdc, int ipfd, const PIXELFORMATDESCRIPTOR* ppfd ) { return 0; }
+static BOOL null_wglShareLists( struct wgl_context * hrcSrvShare, struct wgl_context * hrcSrvSource ) { return 0; }
 static BOOL null_wglSwapBuffers( HDC hdc ) { return 0; }
 static void null_glAccum( GLenum op, GLfloat value ) { }
 static void null_glAlphaFunc( GLenum func, GLfloat ref ) { }
diff --git a/dlls/opengl32/winegl.xml b/dlls/opengl32/winegl.xml
index 683e910..2461d35 100644
--- a/dlls/opengl32/winegl.xml
+++ b/dlls/opengl32/winegl.xml
@@ -276,6 +276,14 @@
 
     <commands namespace="WGL">
         <command>
+            <proto>int <name>wglDescribePixelFormat</name></proto>
+            <param><ptype>HDC</ptype> <name>hdc</name></param>
+            <param>int <name>ipfd</name></param>
+            <param><ptype>UINT</ptype> <name>cjpfd</name></param>
+            <!-- pixel format is wrongly specified 'const' in wgl.xml -->
+            <param><ptype>PIXELFORMATDESCRIPTOR</ptype> *<name>ppfd</name></param>
+        </command>
+        <command>
             <proto>BOOL <name>wglSetPixelFormatWINE</name></proto>
             <param><ptype>HDC</ptype> <name>hdc</name></param>
             <param>int <name>format</name></param>
@@ -310,6 +318,12 @@
         </require>
     </feature>
 
+    <feature api="wgl" name="WGL_VERSION_1_0" number="1.0">
+        <require>
+            <command name="wglDescribePixelFormat"/>
+        </require>
+    </feature>
+
     <enums namespace="WGL" group="RendererWINE">
         <enum value="0x8183" name="WGL_RENDERER_VENDOR_ID_WINE"/>
         <enum value="0x8184" name="WGL_RENDERER_DEVICE_ID_WINE"/>
diff --git a/dlls/wineandroid.drv/opengl.c b/dlls/wineandroid.drv/opengl.c
index ec26000..d6cd93b 100644
--- a/dlls/wineandroid.drv/opengl.c
+++ b/dlls/wineandroid.drv/opengl.c
@@ -439,13 +439,13 @@
 /***********************************************************************
  *		android_wglDeleteContext
  */
-static void android_wglDeleteContext( struct wgl_context *ctx )
+static BOOL android_wglDeleteContext( struct wgl_context *ctx )
 {
     EnterCriticalSection( &drawable_section );
     list_remove( &ctx->entry );
     LeaveCriticalSection( &drawable_section );
     p_eglDestroyContext( display, ctx->context );
-    HeapFree( GetProcessHeap(), 0, ctx );
+    return HeapFree( GetProcessHeap(), 0, ctx );
 }
 
 /***********************************************************************
diff --git a/dlls/winemac.drv/opengl.c b/dlls/winemac.drv/opengl.c
index 6e1f151..a7a67de 100644
--- a/dlls/winemac.drv/opengl.c
+++ b/dlls/winemac.drv/opengl.c
@@ -4434,7 +4434,7 @@
 /***********************************************************************
  *              macdrv_wglDeleteContext
  */
-static void macdrv_wglDeleteContext(struct wgl_context *context)
+static BOOL macdrv_wglDeleteContext(struct wgl_context *context)
 {
     TRACE("deleting context %p/%p/%p\n", context, context->context, context->cglcontext);
 
@@ -4443,7 +4443,7 @@
     LeaveCriticalSection(&context_section);
 
     macdrv_dispose_opengl_context(context->context);
-    HeapFree(GetProcessHeap(), 0, context);
+    return HeapFree(GetProcessHeap(), 0, context);
 }
 
 /***********************************************************************
diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c
index 5eb70a8..f9faa4b 100644
--- a/dlls/winex11.drv/opengl.c
+++ b/dlls/winex11.drv/opengl.c
@@ -1841,7 +1841,7 @@
 /***********************************************************************
  *		glxdrv_wglDeleteContext
  */
-static void glxdrv_wglDeleteContext(struct wgl_context *ctx)
+static BOOL glxdrv_wglDeleteContext(struct wgl_context *ctx)
 {
     struct wgl_pbuffer *pb;
 
@@ -1860,7 +1860,7 @@
 
     if (ctx->ctx) pglXDestroyContext( gdi_display, ctx->ctx );
     if (ctx->vis) XFree( ctx->vis );
-    HeapFree( GetProcessHeap(), 0, ctx );
+    return HeapFree( GetProcessHeap(), 0, ctx );
 }
 
 /***********************************************************************
diff --git a/include/wine/wgl_driver.h b/include/wine/wgl_driver.h
index 16997e4..753d134 100644
--- a/include/wine/wgl_driver.h
+++ b/include/wine/wgl_driver.h
@@ -7,7 +7,7 @@
 #define WINE_GLAPI
 #endif
 
-#define WINE_WGL_DRIVER_VERSION 16
+#define WINE_WGL_DRIVER_VERSION 17
 
 struct wgl_context;
 struct wgl_pbuffer;
@@ -18,12 +18,12 @@
     {
         BOOL       (WINE_GLAPI *p_wglCopyContext)(struct wgl_context *,struct wgl_context *,UINT);
         struct wgl_context * (WINE_GLAPI *p_wglCreateContext)(HDC);
-        void       (WINE_GLAPI *p_wglDeleteContext)(struct wgl_context *);
-        INT        (WINE_GLAPI *p_wglDescribePixelFormat)(HDC,INT,UINT,PIXELFORMATDESCRIPTOR *);
-        INT        (WINE_GLAPI *p_wglGetPixelFormat)(HDC);
+        BOOL       (WINE_GLAPI *p_wglDeleteContext)(struct wgl_context *);
+        int        (WINE_GLAPI *p_wglDescribePixelFormat)(HDC,int,UINT,PIXELFORMATDESCRIPTOR*);
+        int        (WINE_GLAPI *p_wglGetPixelFormat)(HDC);
         PROC       (WINE_GLAPI *p_wglGetProcAddress)(LPCSTR);
         BOOL       (WINE_GLAPI *p_wglMakeCurrent)(HDC,struct wgl_context *);
-        BOOL       (WINE_GLAPI *p_wglSetPixelFormat)(HDC,INT,const PIXELFORMATDESCRIPTOR *);
+        BOOL       (WINE_GLAPI *p_wglSetPixelFormat)(HDC,int,const PIXELFORMATDESCRIPTOR*);
         BOOL       (WINE_GLAPI *p_wglShareLists)(struct wgl_context *,struct wgl_context *);
         BOOL       (WINE_GLAPI *p_wglSwapBuffers)(HDC);
     } wgl;
