OpenGL 3.2 core profile compatibility achieved!

This commit is contained in:
Quantum 2018-08-29 00:51:25 -04:00
parent 4430eb7d75
commit 52c1a328aa
3 changed files with 29 additions and 22 deletions

View file

@ -98,7 +98,7 @@ class Circle(object):
position_offset = 0
position_size = 2
def __init__(self, r, segs):
def __init__(self, r, segs, shader):
self.vertex_count = segs
buffer = segs * 2 * [0]
delta = 2 * pi / segs
@ -107,6 +107,13 @@ class Circle(object):
buffer[2*i:2*i+2] = [cos(theta) * r, sin(theta) * r]
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):
type = GL_FLOAT
@ -256,13 +263,22 @@ class FontEngine(object):
tex_offset = position_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])
vbo = GLuint()
glGenBuffers(1, byref(vbo))
self.vbo = vbo.value
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):
index = 0
row = 0
@ -290,8 +306,6 @@ class FontEngine(object):
glBindBuffer(GL_ARRAY_BUFFER, self.vbo)
glBufferData(GL_ARRAY_BUFFER, self.storage.itemsize * len(self.storage),
array_to_ctypes(self.storage), GL_STREAM_DRAW)
def end(self):
glBindBuffer(GL_ARRAY_BUFFER, 0)

View file

@ -27,7 +27,7 @@ def main():
template = pyglet.gl.Config(depth_size=args.depth, double_buffer=True,
sample_buffers=args.multisample > 1,
samples=args.multisample,
major_version=3, minor_version=0)
major_version=3, minor_version=2)
platform = pyglet.window.get_platform()
display = platform.get_default_display()
@ -57,9 +57,11 @@ def main():
loader = LoaderConsole()
punyverse = Punyverse(context=context, **create_args)
else:
context = config.create_context(None)
loader = LoaderWindow(width=INITIAL_WIN_WIDTH, height=INITIAL_WIN_HEIGHT,
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)
world = loader.load()

View file

@ -121,15 +121,14 @@ class Punyverse(pyglet.window.Window):
glClearColor(0, 0, 0, 1)
glClearDepth(1.0)
glAlphaFunc(GL_GEQUAL, 0.2)
glDepthFunc(GL_LEQUAL)
glEnable(GL_DEPTH_TEST)
glShadeModel(GL_SMOOTH)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
self.info_engine = FontEngine()
self.circle = Circle(10, 20)
self.info_engine = FontEngine(self.world.activate_shader('text'))
self.circle = Circle(10, 20, self.world.activate_shader('line'))
pyglet.clock.schedule(self.update)
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)
shader = self.world.activate_shader('text')
shader.uniform_mat4('u_projMatrix', projection)
self.info_engine.draw(info)
glBindTexture(GL_TEXTURE_2D, self.world.font_tex)
shader.uniform_texture('u_alpha', 0)
shader.uniform_vec3('u_color', 1, 1, 1)
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.stride, self.info_engine.position_offset)
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)
self.info_engine.draw(info)
with self.info_engine.vao:
glDrawArrays(GL_TRIANGLES, 0, self.info_engine.vertex_count)
self.info_engine.end()
glDisable(GL_BLEND)
@ -278,9 +272,6 @@ class Punyverse(pyglet.window.Window):
shader = self.world.activate_shader('line')
shader.uniform_vec4('u_color', 0, 1, 0, 1)
shader.uniform_mat4('u_mvpMatrix', mvp)
glBindBuffer(GL_ARRAY_BUFFER, self.circle.vbo)
shader.vertex_attribute('a_position', self.circle.position_size, self.circle.type, GL_FALSE,
self.circle.stride, self.circle.position_offset)
with self.circle.vao:
glDrawArrays(GL_LINE_LOOP, 0, self.circle.vertex_count)
glBindBuffer(GL_ARRAY_BUFFER, 0)
glLineWidth(1)