mirror of
https://github.com/quantum5/punyverse.git
synced 2025-04-24 13:11:57 -04:00
OpenGL 3.2 core profile compatibility achieved!
This commit is contained in:
parent
4430eb7d75
commit
52c1a328aa
|
@ -98,7 +98,7 @@ class Circle(object):
|
||||||
position_offset = 0
|
position_offset = 0
|
||||||
position_size = 2
|
position_size = 2
|
||||||
|
|
||||||
def __init__(self, r, segs):
|
def __init__(self, r, segs, shader):
|
||||||
self.vertex_count = segs
|
self.vertex_count = segs
|
||||||
buffer = segs * 2 * [0]
|
buffer = segs * 2 * [0]
|
||||||
delta = 2 * pi / segs
|
delta = 2 * pi / segs
|
||||||
|
@ -107,6 +107,13 @@ class Circle(object):
|
||||||
buffer[2*i:2*i+2] = [cos(theta) * r, sin(theta) * r]
|
buffer[2*i:2*i+2] = [cos(theta) * r, sin(theta) * r]
|
||||||
self.vbo = list_to_gl_buffer(buffer)
|
self.vbo = list_to_gl_buffer(buffer)
|
||||||
|
|
||||||
|
self.vao = VAO()
|
||||||
|
with self.vao:
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, self.vbo)
|
||||||
|
shader.vertex_attribute('a_position', self.position_size, self.type, GL_FALSE,
|
||||||
|
self.stride, self.position_offset)
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0)
|
||||||
|
|
||||||
|
|
||||||
class Disk(object):
|
class Disk(object):
|
||||||
type = GL_FLOAT
|
type = GL_FLOAT
|
||||||
|
@ -256,13 +263,22 @@ class FontEngine(object):
|
||||||
tex_offset = position_size * 2
|
tex_offset = position_size * 2
|
||||||
tex_size = 2
|
tex_size = 2
|
||||||
|
|
||||||
def __init__(self, max_length=256):
|
def __init__(self, shader, max_length=256):
|
||||||
self.storage = array('h', max_length * 24 * [0])
|
self.storage = array('h', max_length * 24 * [0])
|
||||||
vbo = GLuint()
|
vbo = GLuint()
|
||||||
glGenBuffers(1, byref(vbo))
|
glGenBuffers(1, byref(vbo))
|
||||||
self.vbo = vbo.value
|
self.vbo = vbo.value
|
||||||
self.vertex_count = None
|
self.vertex_count = None
|
||||||
|
|
||||||
|
self.vao = VAO()
|
||||||
|
with self.vao:
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, self.vbo)
|
||||||
|
shader.vertex_attribute('a_rc', self.position_size, self.type, GL_FALSE,
|
||||||
|
self.stride, self.position_offset)
|
||||||
|
shader.vertex_attribute('a_tex', self.tex_size, self.type, GL_FALSE,
|
||||||
|
self.stride, self.tex_offset)
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0)
|
||||||
|
|
||||||
def draw(self, string):
|
def draw(self, string):
|
||||||
index = 0
|
index = 0
|
||||||
row = 0
|
row = 0
|
||||||
|
@ -290,8 +306,6 @@ class FontEngine(object):
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, self.vbo)
|
glBindBuffer(GL_ARRAY_BUFFER, self.vbo)
|
||||||
glBufferData(GL_ARRAY_BUFFER, self.storage.itemsize * len(self.storage),
|
glBufferData(GL_ARRAY_BUFFER, self.storage.itemsize * len(self.storage),
|
||||||
array_to_ctypes(self.storage), GL_STREAM_DRAW)
|
array_to_ctypes(self.storage), GL_STREAM_DRAW)
|
||||||
|
|
||||||
def end(self):
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, 0)
|
glBindBuffer(GL_ARRAY_BUFFER, 0)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ def main():
|
||||||
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,
|
||||||
major_version=3, minor_version=0)
|
major_version=3, minor_version=2)
|
||||||
|
|
||||||
platform = pyglet.window.get_platform()
|
platform = pyglet.window.get_platform()
|
||||||
display = platform.get_default_display()
|
display = platform.get_default_display()
|
||||||
|
@ -57,9 +57,11 @@ def main():
|
||||||
loader = LoaderConsole()
|
loader = LoaderConsole()
|
||||||
punyverse = Punyverse(context=context, **create_args)
|
punyverse = Punyverse(context=context, **create_args)
|
||||||
else:
|
else:
|
||||||
|
context = config.create_context(None)
|
||||||
loader = LoaderWindow(width=INITIAL_WIN_WIDTH, height=INITIAL_WIN_HEIGHT,
|
loader = LoaderWindow(width=INITIAL_WIN_WIDTH, height=INITIAL_WIN_HEIGHT,
|
||||||
caption='Punyverse is loading...')
|
caption='Punyverse is loading...')
|
||||||
punyverse = Punyverse(config=config, **create_args)
|
punyverse = Punyverse(context=context, **create_args)
|
||||||
|
loader.context.set_current()
|
||||||
|
|
||||||
loader.set_main_context(punyverse.context)
|
loader.set_main_context(punyverse.context)
|
||||||
world = loader.load()
|
world = loader.load()
|
||||||
|
|
|
@ -121,15 +121,14 @@ class Punyverse(pyglet.window.Window):
|
||||||
glClearColor(0, 0, 0, 1)
|
glClearColor(0, 0, 0, 1)
|
||||||
glClearDepth(1.0)
|
glClearDepth(1.0)
|
||||||
|
|
||||||
glAlphaFunc(GL_GEQUAL, 0.2)
|
|
||||||
glDepthFunc(GL_LEQUAL)
|
glDepthFunc(GL_LEQUAL)
|
||||||
glEnable(GL_DEPTH_TEST)
|
glEnable(GL_DEPTH_TEST)
|
||||||
glShadeModel(GL_SMOOTH)
|
glShadeModel(GL_SMOOTH)
|
||||||
|
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
|
||||||
|
|
||||||
self.info_engine = FontEngine()
|
self.info_engine = FontEngine(self.world.activate_shader('text'))
|
||||||
self.circle = Circle(10, 20)
|
self.circle = Circle(10, 20, self.world.activate_shader('line'))
|
||||||
|
|
||||||
pyglet.clock.schedule(self.update)
|
pyglet.clock.schedule(self.update)
|
||||||
self.on_resize(self.width, self.height) # On resize handler does nothing unless it's loaded
|
self.on_resize(self.width, self.height) # On resize handler does nothing unless it's loaded
|
||||||
|
@ -256,20 +255,15 @@ class Punyverse(pyglet.window.Window):
|
||||||
glEnable(GL_BLEND)
|
glEnable(GL_BLEND)
|
||||||
shader = self.world.activate_shader('text')
|
shader = self.world.activate_shader('text')
|
||||||
shader.uniform_mat4('u_projMatrix', projection)
|
shader.uniform_mat4('u_projMatrix', projection)
|
||||||
self.info_engine.draw(info)
|
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, self.world.font_tex)
|
glBindTexture(GL_TEXTURE_2D, self.world.font_tex)
|
||||||
shader.uniform_texture('u_alpha', 0)
|
shader.uniform_texture('u_alpha', 0)
|
||||||
shader.uniform_vec3('u_color', 1, 1, 1)
|
shader.uniform_vec3('u_color', 1, 1, 1)
|
||||||
shader.uniform_vec2('u_start', 10, 10)
|
shader.uniform_vec2('u_start', 10, 10)
|
||||||
|
|
||||||
shader.vertex_attribute('a_rc', self.info_engine.position_size, self.info_engine.type, GL_FALSE,
|
self.info_engine.draw(info)
|
||||||
self.info_engine.stride, self.info_engine.position_offset)
|
with self.info_engine.vao:
|
||||||
shader.vertex_attribute('a_tex', self.info_engine.tex_size, self.info_engine.type, GL_FALSE,
|
|
||||||
self.info_engine.stride, self.info_engine.tex_offset)
|
|
||||||
|
|
||||||
glDrawArrays(GL_TRIANGLES, 0, self.info_engine.vertex_count)
|
glDrawArrays(GL_TRIANGLES, 0, self.info_engine.vertex_count)
|
||||||
self.info_engine.end()
|
|
||||||
|
|
||||||
glDisable(GL_BLEND)
|
glDisable(GL_BLEND)
|
||||||
|
|
||||||
|
@ -278,9 +272,6 @@ class Punyverse(pyglet.window.Window):
|
||||||
shader = self.world.activate_shader('line')
|
shader = self.world.activate_shader('line')
|
||||||
shader.uniform_vec4('u_color', 0, 1, 0, 1)
|
shader.uniform_vec4('u_color', 0, 1, 0, 1)
|
||||||
shader.uniform_mat4('u_mvpMatrix', mvp)
|
shader.uniform_mat4('u_mvpMatrix', mvp)
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, self.circle.vbo)
|
with self.circle.vao:
|
||||||
shader.vertex_attribute('a_position', self.circle.position_size, self.circle.type, GL_FALSE,
|
|
||||||
self.circle.stride, self.circle.position_offset)
|
|
||||||
glDrawArrays(GL_LINE_LOOP, 0, self.circle.vertex_count)
|
glDrawArrays(GL_LINE_LOOP, 0, self.circle.vertex_count)
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, 0)
|
|
||||||
glLineWidth(1)
|
glLineWidth(1)
|
||||||
|
|
Loading…
Reference in a new issue