mirror of
https://github.com/quantum5/punyverse.git
synced 2025-04-24 13:11:57 -04:00
Make punyverse runnable on macOS
This commit is contained in:
parent
885194c7a0
commit
9cdf3b8513
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -62,3 +62,7 @@ library.zip
|
||||||
|
|
||||||
# Our special launcher
|
# Our special launcher
|
||||||
!/punyverse/launcher.c
|
!/punyverse/launcher.c
|
||||||
|
|
||||||
|
# macOS
|
||||||
|
.DS_Store
|
||||||
|
._.DS_Store
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
10
setup.py
10
setup.py
|
@ -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},
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue