MCPcopy Create free account
hub / github.com/BerkeleyAutomation/meshrender / OpenGLRenderer

Class OpenGLRenderer

meshrender/render.py:30–587  ·  view source on GitHub ↗

An OpenGL 3.0+ renderer, based on PyOpenGL.

Source from the content-addressed store, hash-verified

28 C_VOID_PS.append(ctypes.c_void_p(4*4*i))
29
30class OpenGLRenderer(object):
31 """An OpenGL 3.0+ renderer, based on PyOpenGL.
32 """
33
34 def __init__(self, scene):
35 """Initialize a renderer for a given scene.
36
37 Parameters
38 ----------
39 scene : Scene
40 A scene description.
41 """
42 self.scene = scene
43 self._width = self.scene.camera.intrinsics.width
44 self._height = self.scene.camera.intrinsics.height
45 self._vaids = None
46 self._colorbuf, self._depthbuf = None, None
47 self._framebuf = None
48
49 # Initialize the OpenGL context
50 self._init_gl_context()
51
52 # Bind the frame buffer for offscreen rendering
53 self._bind_frame_buffer()
54
55 # Use the depth test functionality of OpenGL. Don't clip -- many normals may be backwards.
56 glEnable(GL_DEPTH_TEST)
57 glDepthMask(GL_TRUE)
58 glDepthFunc(GL_LESS)
59 glDepthRange(0.0, 1.0)
60
61 # Load the meshes into VAO's
62 self._buffers = None
63 self._vaids = self._load_meshes()
64
65 # Load the shaders
66 # Fix for pyopengl -- bind a framebuffer
67 glBindVertexArray(self._vaids[0])
68 self._full_shader = self._load_shaders(vertex_shader, fragment_shader)
69 self._depth_shader = self._load_shaders(depth_vertex_shader, depth_fragment_shader)
70 glBindVertexArray(0)
71
72
73 def _init_gl_context(self):
74 if _USE_EGL_OFFSCREEN:
75 self._init_egl()
76 else:
77 self._init_pyglet()
78
79
80 def _make_gl_context_current(self):
81 if not _USE_EGL_OFFSCREEN:
82 if self._window:
83 self._window.switch_to()
84
85
86 def _init_pyglet(self):
87 import pyglet

Callers 1

renderMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected