OpenGL 3.2 core profile compatibility achieved!

This commit is contained in:
Quantum 2018-08-29 00:51:25 -04:00
parent f135856762
commit 50426a5cfa
3 changed files with 29 additions and 22 deletions

View file

@ -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)

View file

@ -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()

View file

@ -120,15 +120,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
@ -255,20 +254,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)
@ -277,9 +271,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)