vao = GL.NewVertexArray(grass_prog, vbo, '3f3f3f1f1f', ['vert', 'direction', 'color', 'thickness', 'power'], ibo) ssao_vbo = GL.NewVertexBuffer( struct.pack('8f', 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0)) ssao_vao = GL.NewVertexArray(ssao_prog, ssao_vbo, '2f', ['vert']) ubo = GL.NewUniformBuffer(b''.join(struct.pack('2f', x, y) for x, y in kernel)) fbo, color, depth = GL.NewFramebuffer() GL.SetUniform(grass_prog['mat'], struct.pack('16f', *camera)) GL.SetUniform(ssao_prog['texture'], 0) GL.SetUniform(ssao_prog['depth'], 1) GL.UseUniformBuffer(ubo, ssao_prog['Kernel']) while WND.Update(): GL.UseFramebuffer(fbo) GL.EnableDepthTest() GL.Clear(0, 0, 0) GL.RenderTriangleStrip(vao, 1000 * 8) GL.UseFramebuffer(GL.SCREEN) GL.DisableDepthTest() GL.UseTexture(color, 0) GL.UseTexture(depth, 1) GL.RenderTriangleStrip(ssao_vao, 4)
GL.SetUniform(circles_prog['scale'], 0.002 * height / width, 0.002) circle_vbo = GL.NewVertexBuffer(b''.join(struct.pack('2f', cos(i * 2 * pi / 128), sin(i * 2 * pi / 128)) for i in range(128))) circle_vao = GL.NewVertexArray(circles_prog, circle_vbo, '2f', ['vert']) circles = [ (-400, -200, 100), (-250, -350, 100), (0, -300, 100), (250, -350, 100), (400, -200, 100), ] circles_ubo = GL.NewUniformBuffer(struct.pack('i4x', len(circles)) + b''.join(struct.pack('2f1f4x', *c) for c in circles)) GL.UseUniformBuffer(circles_ubo, circles_prog['Circles']) particles_prog = GL.NewProgram([particles_vert, particles_frag]) GL.SetUniform(particles_prog['scale'], 0.002 * height / width, 0.002) particle_vbo = GL.NewVertexBuffer(b''.join(struct.pack('2f', cos(i * 2 * pi / 16), sin(i * 2 * pi / 16)) for i in range(16))) particle_vao = GL.NewVertexArray(particles_prog, particle_vbo, '2f', ['vert']) sbo = GL.NewStorageBuffer(b''.join(struct.pack('ffffff', -10000, 0, -10000, 0, 0, 0) for i in range(10240))) GL.UseUniformBuffer(circles_ubo, circles_prog['Circles']) GL.UseStorageBuffer(sbo) k = 0 while WND.Update(): k = (k + 32) % 10240
GL.RenderLineStrip() GL.RenderLines() GL.RenderPoints() GL.RenderTriangleFan() GL.RenderTriangleStrip() GL.RenderTriangles() GL.RenderLinesAdjacency() GL.RenderLineStripAdjacency() GL.RenderTrianglesAdjacency() GL.RenderTriangleStripAdjacency() GL.SetTextureFiltered() GL.SetTextureMipmapped() GL.SetTexturePixelated() GL.SetUniform() GL.SetUniformMatrix() # GL.UpdateIndexBuffer() # GL.UpdateTexture() # GL.UpdateUniformBuffer() # GL.UpdateVertexBuffer() GL.UseDefaultFramebuffer() GL.UseFramebuffer() GL.UseTexture() GL.UseTextureAsImage() GL.UseUniformBuffer() GL.Viewport()