| 322 | self.render(camera) |
| 323 | |
| 324 | def render(self, camera: Camera): |
| 325 | if not self.visible: return |
| 326 | |
| 327 | # For point rendering |
| 328 | if self.render_type == Mesh.RenderType.POINTS: |
| 329 | gl.glUseProgram(self.point_program) |
| 330 | self.use_gl_program(self.point_program) |
| 331 | else: |
| 332 | gl.glUseProgram(self.mesh_program) |
| 333 | self.use_gl_program(self.mesh_program) |
| 334 | |
| 335 | self.upload_gl_uniforms(camera) |
| 336 | gl.glBindVertexArray(self.vao) |
| 337 | |
| 338 | if self.render_type == Mesh.RenderType.POINTS: |
| 339 | gl.glDrawArrays(gl.GL_POINTS, 0, len(self.verts)) # number of vertices |
| 340 | elif self.render_type == Mesh.RenderType.LINES: |
| 341 | gl.glBindBuffer(gl.GL_ELEMENT_ARRAY_BUFFER, self.ebo) |
| 342 | gl.glDrawElements(gl.GL_LINES, len(self.faces) * self.face_size, gl.GL_UNSIGNED_INT, ctypes.c_void_p(0)) # number of indices |
| 343 | elif self.render_type == Mesh.RenderType.TRIS: |
| 344 | gl.glBindBuffer(gl.GL_ELEMENT_ARRAY_BUFFER, self.ebo) |
| 345 | gl.glDrawElements(gl.GL_TRIANGLES, len(self.faces) * self.face_size, gl.GL_UNSIGNED_INT, ctypes.c_void_p(0)) # number of indices |
| 346 | elif self.render_type == Mesh.RenderType.QUADS: |
| 347 | gl.glBindBuffer(gl.GL_ELEMENT_ARRAY_BUFFER, self.ebo) |
| 348 | gl.glDrawElements(gl.GL_QUADS, len(self.faces) * self.face_size, gl.GL_UNSIGNED_INT, ctypes.c_void_p(0)) # number of indices |
| 349 | elif self.render_type == Mesh.RenderType.STRIPS: |
| 350 | gl.glDrawArrays(gl.GL_TRIANGLE_STRIP, 0, len(self.verts)) |
| 351 | else: |
| 352 | raise NotImplementedError |
| 353 | |
| 354 | gl.glBindVertexArray(0) |
| 355 | |
| 356 | def use_gl_program(self, program: shaders.ShaderProgram): |
| 357 | use_gl_program(program) |