Make punyverse runnable on macOS

This commit is contained in:
Quantum 2018-11-27 01:27:59 -05:00
parent 885194c7a0
commit 9cdf3b8513
7 changed files with 36 additions and 9 deletions

4
.gitignore vendored
View file

@ -62,3 +62,7 @@ library.zip
# Our special launcher # Our special launcher
!/punyverse/launcher.c !/punyverse/launcher.c
# macOS
.DS_Store
._.DS_Store

View file

@ -2,7 +2,14 @@ IF UNAME_SYSNAME == "Windows":
cdef extern from "windows.h": cdef extern from "windows.h":
pass pass
cdef extern from "GL/gl.h": IF UNAME_SYSNAME == "Darwin":
cdef extern from "OpenGL/gl.h":
pass
ELSE:
cdef extern from "GL/gl.h":
pass
cdef extern from *:
ctypedef unsigned int GLenum ctypedef unsigned int GLenum
ctypedef unsigned char GLboolean ctypedef unsigned char GLboolean
ctypedef unsigned int GLbitfield ctypedef unsigned int GLbitfield

View file

@ -1,4 +1,5 @@
import argparse import argparse
import sys
import pyglet import pyglet
@ -8,6 +9,8 @@ DEBUG = False
def main(): def main():
macos = sys.platform == 'darwin'
parser = argparse.ArgumentParser(prog='punyverse', description=''' parser = argparse.ArgumentParser(prog='punyverse', description='''
Python simulator of a puny universe. Python simulator of a puny universe.
''') ''')
@ -22,12 +25,15 @@ def main():
action='store_true') action='store_true')
args = parser.parse_args() args = parser.parse_args()
versioning = dict(major_version=3, minor_version=3)
pyglet.options['debug_gl'] = args.debug pyglet.options['debug_gl'] = args.debug
if macos:
pyglet.options['shadow_window'] = False
versioning = dict(major_version=4, minor_version=1, forward_compatible=True)
template = pyglet.gl.Config(depth_size=args.depth, double_buffer=True, template = pyglet.gl.Config(depth_size=args.depth, double_buffer=True,
sample_buffers=args.multisample > 1, sample_buffers=args.multisample > 1,
samples=args.multisample, samples=args.multisample, **versioning)
major_version=3, minor_version=3)
platform = pyglet.window.get_platform() platform = pyglet.window.get_platform()
display = platform.get_default_display() display = platform.get_default_display()

View file

@ -34,7 +34,7 @@ void main() {
float diffuseIntensity = max(dot(v_normal, incident), 0.0); float diffuseIntensity = max(dot(v_normal, incident), 0.0);
float shininess = pow(max(dot(normalize(v_camDirection), reflected), 0), u_material.shininess); float shininess = pow(max(dot(normalize(v_camDirection), reflected), 0), u_material.shininess);
vec3 diffuse = u_material.hasDiffuse ? texture2D(u_material.diffuseMap, v_uv).rgb : vec3(1); vec3 diffuse = u_material.hasDiffuse ? texture(u_material.diffuseMap, v_uv).rgb : vec3(1);
vec3 ambient = u_material.ambient * u_sun.ambient * diffuse; vec3 ambient = u_material.ambient * u_sun.ambient * diffuse;
vec3 specular = u_material.specular * u_sun.specular * max(shininess, 0) * diffuseIntensity; vec3 specular = u_material.specular * u_sun.specular * max(shininess, 0) * diffuseIntensity;
diffuse *= u_material.diffuse * u_sun.diffuse * diffuseIntensity; diffuse *= u_material.diffuse * u_sun.diffuse * diffuseIntensity;

View file

@ -35,10 +35,10 @@ uniform Sun u_sun;
uniform Surface u_planet; uniform Surface u_planet;
void main() { void main() {
vec3 normal = u_planet.hasNormal ? normalize(v_TBN * texture2D(u_planet.normalMap, v_uv).rgb * 2 - 1) : v_normal; vec3 normal = u_planet.hasNormal ? normalize(v_TBN * texture(u_planet.normalMap, v_uv).rgb * 2 - 1) : v_normal;
vec3 diffuse = texture2D(u_planet.diffuseMap, v_uv).rgb; vec3 diffuse = texture(u_planet.diffuseMap, v_uv).rgb;
vec3 specular = u_planet.hasSpecular ? texture2D(u_planet.specularMap, v_uv).rgb : vec3(1); vec3 specular = u_planet.hasSpecular ? texture(u_planet.specularMap, v_uv).rgb : vec3(1);
vec3 emission = u_planet.hasEmission ? texture2D(u_planet.emissionMap, v_uv).rgb : vec3(1); vec3 emission = u_planet.hasEmission ? texture(u_planet.emissionMap, v_uv).rgb : vec3(1);
vec3 incident = normalize(u_sun.position - v_position); vec3 incident = normalize(u_sun.position - v_position);
vec3 reflected = normalize(reflect(-incident, normal)); vec3 reflected = normalize(reflect(-incident, normal));

View file

@ -199,6 +199,8 @@ class Punyverse(pyglet.window.Window):
if not width or not height: if not width or not height:
# Sometimes this happen for no reason? # Sometimes this happen for no reason?
return return
if hasattr(self, 'get_viewport_size'):
width, height = self.get_viewport_size()
glViewport(0, 0, width, height) glViewport(0, 0, width, height)
self.world.resize(width, height) self.world.resize(width, height)

View file

@ -26,9 +26,16 @@ else:
if os.name == 'nt': if os.name == 'nt':
gl_libs = ['opengl32'] gl_libs = ['opengl32']
elif sys.platform == 'darwin':
gl_libs = []
else: else:
gl_libs = ['GL'] gl_libs = ['GL']
if sys.platform == 'darwin':
extra_compile_args = extra_link_args = ['-framework', 'OpenGL']
else:
extra_compile_args = extra_link_args = []
with open(os.path.join(os.path.dirname(__file__), 'README.md')) as f: with open(os.path.join(os.path.dirname(__file__), 'README.md')) as f:
long_description = f.read() long_description = f.read()
@ -124,7 +131,8 @@ setup(
], ],
}, },
ext_modules=cythonize([ ext_modules=cythonize([
Extension('punyverse._glgeom', sources=[pyx_path('punyverse/_glgeom.pyx')], libraries=gl_libs), Extension('punyverse._glgeom', sources=[pyx_path('punyverse/_glgeom.pyx')], libraries=gl_libs,
extra_compile_args=extra_compile_args, extra_link_args=extra_link_args),
]) + extra_libs, ]) + extra_libs,
cmdclass={'build_ext': build_ext}, cmdclass={'build_ext': build_ext},