Make prebuild gl3w.c/.h available
ocornut opened this issue · 7 comments
May I suggest creating a separate repository to publish prebuilt gl3w.c/.h ?
Running Python is an additional step that is pretty much in the way for most people willing to use the resulting output (especially for Windows users). And it'd be nice to have versioned updates of gl3w.c following updates of glcorearb.h
Thanks a lot!
+1 I can't think of a good reason not to do this, unless there is a copyright/licensing issue (my reading of glcorearb.h
suggests not).
Please do this.. I really don't want to have to install Python to build a single header file.
+1
I know this is a ancient issue, but i think this could have releases done (semi) automatically?
@warmist I like the idea. A script can run periodically, downloading glcorearb.h, compare it with the one from the latest gl3w release and cook a new release if they differ.
I'll take a stab at it when I find some time. In the mean time PRs are welcome.
@skaslev - if you leave the generated files as part of the repo, people could just wget or download the raw versions straight from GitHub.
In case its useful to anyone else, here's my python script that downloads gl3w, glxext.h, wglext.h, then runs gl3w. It's still python but it's one step rather than cloning a repo then running a file etc.
get-deps.py
import helpers
helpers.file_get("gl3w_gen.py", "gl3w_gen", "https://raw.githubusercontent.com/skaslev/gl3w/master/gl3w_gen.py")
helpers.file_get("include/GL/glxext.h", "glxext.h", "https://www.khronos.org/registry/OpenGL/api/GL/glxext.h")
helpers.file_get("include/GL/wglext.h", "wglext.h", "https://www.khronos.org/registry/OpenGL/api/GL/wglext.h")
print("\ngl3w_gen:")
import gl3w_gen
helpers/init.py
import os
import requests
import sys
import time
CHUNK_SIZE = 32*1024
class Progress:
def __init__(self, text):
self.current = 0
self.old_current = 0
self.max = 100
self.tolerance = 100.0 / 211 # first prime > 200
self.lastline = ""
sys.stdout.write(text)
sys.stdout.flush()
def start(self, total):
self.max = total
self.tolerance = (1.0 * total) / 211 # first prime > 200
def update(self, current):
self.old_current += self.current
self.current = current
if abs(self.current - self.old_current) > self.tolerance:
self.display()
self.old_current = current
def done(self):
self.out("Done")
sys.stdout.write("\n")
sys.stdout.flush()
def display(self):
pc = (100.0 * self.current) / self.max
self.out("%d/%d (%.1f%%)" % (self.current, self.max, pc))
def out(self, line):
padding = len(self.lastline) - len(line)
if padding > 0:
padding = " " * padding
else:
padding = ""
sys.stdout.write(("\b"*len(self.lastline)) + line + padding)
sys.stdout.flush()
self.lastline = line
def file_get(dest, name, uri):
if os.path.isfile(dest):
print("Cached: %s" % name)
return
progress = Progress("Downloading %s: " % name)
r = requests.get(uri, stream=True)
if not "content-length" in r.headers:
raise Exception("Missing content-length (download not found?) for %s" % uri)
with open(dest, 'wb') as f:
content_length = int(r.headers.get('content-length'))
chunk_size = CHUNK_SIZE
was_read = 0
progress.start(content_length)
for chunk in r.iter_content(chunk_size=chunk_size):
if chunk:
was_read += len(chunk)
f.write(chunk)
f.flush()
progress.update(was_read)
progress.done()