Skip to content

Commit 9ec4c43

Browse files
committed
Add robust fallback for OpenGL on Windows based on OSMesa.
1 parent c670822 commit 9ec4c43

File tree

7 files changed

+41
-14
lines changed

7 files changed

+41
-14
lines changed

genesis/ext/pyrender/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from . import _pyopengl
12
from .camera import Camera, PerspectiveCamera, OrthographicCamera, IntrinsicsCamera
23
from .light import Light, PointLight, DirectionalLight, SpotLight
34
from .sampler import Sampler

genesis/ext/pyrender/_pyopengl.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from OpenGL.GL import *
2+
from OpenGL.GL import __dict__ as _gl_dict
3+
import OpenGL.platform as _platform
4+
import OpenGL.arrays as _arrays
5+
from OpenGL.raw.GL import _errors
6+
from OpenGL.wrapper import wrapper as _wrapper
7+
8+
9+
# Fix broken 'glGenVertexArrays' OpenGL function when using OSMesa on Windows OS
10+
if not glGenVertexArrays:
11+
func = _platform.nullFunction(
12+
"glGenVertexArrays",
13+
_platform.PLATFORM.GL,
14+
resultType=None,
15+
argTypes=(GLsizei, _arrays.arraydatatype.GLuintArray),
16+
doc=None,
17+
argNames=('n', 'arrays'),
18+
extension='GL_VERSION_GL_3_0',
19+
error_checker=_errors._error_checker,
20+
force_extension=True,
21+
)
22+
glGenVertexArrays = _wrapper(func).setOutput(
23+
'arrays', size=lambda x:(x,), pnameArg='n', orPassIn=True
24+
)
25+
26+
27+
__all__ = [
28+
name for name in _gl_dict if not name.startswith('_')
29+
]

genesis/ext/pyrender/font.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
33
Author: Matthew Matl
44
"""
5+
import os
56

67
import freetype
78
import numpy as np
8-
import os
99

1010
import OpenGL
11-
from OpenGL.GL import *
1211

12+
from ._pyopengl import *
1313
from .constants import TextAlign, FLOAT_SZ
1414
from .texture import Texture
1515
from .sampler import Sampler
@@ -122,7 +122,6 @@ def font_pt(self, value):
122122
self._font_pt = int(value)
123123

124124
def _add_to_context(self):
125-
126125
self._vao = glGenVertexArrays(1)
127126
glBindVertexArray(self._vao)
128127
self._vbo = glGenBuffers(1)

genesis/ext/pyrender/numba_gl_wrapper.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from contextlib import ExitStack
2+
13
import numpy as np
24
from numba import *
35
from numba import types
@@ -11,7 +13,7 @@
1113
NativeValue,
1214
)
1315
from numba.core import cgutils
14-
from contextlib import ExitStack
16+
1517
import OpenGL.GL as GL
1618
from OpenGL._bytes import as_8_bit
1719
from OpenGL.GL import GLint, GLuint, GLvoidp, GLvoid, GLfloat, GLsizei, GLboolean, GLenum, GLsizeiptr, GLintptr

genesis/ext/pyrender/primitive.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@
33
44
Author: Matthew Matl
55
"""
6-
76
import numpy as np
8-
from OpenGL.GL import *
97

8+
from ._pyopengl import *
109
from .constants import FLOAT_SZ, GLTF, UINT_SZ, BufFlags
1110
from .material import Material, MetallicRoughnessMaterial
1211
from .utils import format_color_array
@@ -330,8 +329,8 @@ def calc_vertex_normal(self):
330329

331330
def _add_to_context(self):
332331
if self._vaid is not None:
333-
return
334332
# raise ValueError('Mesh is already bound to a context')
333+
return
335334

336335
# Generate and bind VAO
337336
self._vaid = glGenVertexArrays(1)

genesis/ext/pyrender/renderer.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,14 @@
22
33
Author: Matthew Matl
44
"""
5-
65
import sys
7-
from time import time
86

97
import PIL
108
import pyglet
119
import numpy as np
12-
from OpenGL.GL import *
1310
import matplotlib.pyplot as plt
1411

12+
from ._pyopengl import *
1513
from .constants import (
1614
DEFAULT_Z_FAR,
1715
DEFAULT_Z_NEAR,
@@ -25,7 +23,6 @@
2523
TextAlign,
2624
)
2725
from .font import FontCache
28-
from .jit_render import JITRenderer
2926
from .light import DirectionalLight, PointLight, SpotLight
3027
from .material import MetallicRoughnessMaterial, SpecularGlossinessMaterial
3128
from .shader_program import ShaderProgramCache

genesis/ext/pyrender/shader_program.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@
66
import numpy as np
77

88
import OpenGL
9-
from OpenGL.GL import *
109
from OpenGL.platform import ctypesloader
1110
from OpenGL.GL import shaders as gl_shader_utils
12-
from time import time
11+
12+
from ._pyopengl import *
13+
1314

1415
func = None
1516

@@ -91,7 +92,6 @@ class ShaderProgram(object):
9192
"""
9293

9394
def __init__(self, vertex_shader, fragment_shader, geometry_shader=None, defines=None):
94-
9595
self.vertex_shader = vertex_shader
9696
self.fragment_shader = fragment_shader
9797
self.geometry_shader = geometry_shader

0 commit comments

Comments
 (0)