scikit-robot-pyrender 0.1.46__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. pyrender/__init__.py +50 -0
  2. pyrender/camera.py +439 -0
  3. pyrender/constants.py +149 -0
  4. pyrender/font.py +273 -0
  5. pyrender/fonts/OpenSans-Bold.ttf +0 -0
  6. pyrender/fonts/OpenSans-BoldItalic.ttf +0 -0
  7. pyrender/fonts/OpenSans-ExtraBold.ttf +0 -0
  8. pyrender/fonts/OpenSans-ExtraBoldItalic.ttf +0 -0
  9. pyrender/fonts/OpenSans-Italic.ttf +0 -0
  10. pyrender/fonts/OpenSans-Light.ttf +0 -0
  11. pyrender/fonts/OpenSans-LightItalic.ttf +0 -0
  12. pyrender/fonts/OpenSans-Regular.ttf +0 -0
  13. pyrender/fonts/OpenSans-Semibold.ttf +0 -0
  14. pyrender/fonts/OpenSans-SemiboldItalic.ttf +0 -0
  15. pyrender/light.py +385 -0
  16. pyrender/material.py +709 -0
  17. pyrender/mesh.py +328 -0
  18. pyrender/node.py +262 -0
  19. pyrender/offscreen.py +160 -0
  20. pyrender/opengl_utils.py +135 -0
  21. pyrender/platforms/__init__.py +6 -0
  22. pyrender/platforms/base.py +76 -0
  23. pyrender/platforms/egl.py +232 -0
  24. pyrender/platforms/osmesa.py +61 -0
  25. pyrender/platforms/pyglet_platform.py +123 -0
  26. pyrender/primitive.py +492 -0
  27. pyrender/renderer.py +1337 -0
  28. pyrender/sampler.py +102 -0
  29. pyrender/scene.py +588 -0
  30. pyrender/shader_program.py +283 -0
  31. pyrender/shaders/debug_quad.frag +23 -0
  32. pyrender/shaders/debug_quad.vert +25 -0
  33. pyrender/shaders/flat.frag +126 -0
  34. pyrender/shaders/flat.vert +86 -0
  35. pyrender/shaders/mesh.frag +456 -0
  36. pyrender/shaders/mesh.vert +86 -0
  37. pyrender/shaders/mesh_depth.frag +8 -0
  38. pyrender/shaders/mesh_depth.vert +13 -0
  39. pyrender/shaders/segmentation.frag +13 -0
  40. pyrender/shaders/segmentation.vert +14 -0
  41. pyrender/shaders/text.frag +12 -0
  42. pyrender/shaders/text.vert +12 -0
  43. pyrender/shaders/vertex_normals.frag +10 -0
  44. pyrender/shaders/vertex_normals.geom +74 -0
  45. pyrender/shaders/vertex_normals.vert +27 -0
  46. pyrender/shaders/vertex_normals_pc.geom +29 -0
  47. pyrender/texture.py +258 -0
  48. pyrender/trackball.py +215 -0
  49. pyrender/utils.py +115 -0
  50. pyrender/viewer.py +1190 -0
  51. scikit_robot_pyrender-0.1.46.dist-info/METADATA +55 -0
  52. scikit_robot_pyrender-0.1.46.dist-info/RECORD +55 -0
  53. scikit_robot_pyrender-0.1.46.dist-info/WHEEL +5 -0
  54. scikit_robot_pyrender-0.1.46.dist-info/licenses/LICENSE +22 -0
  55. scikit_robot_pyrender-0.1.46.dist-info/top_level.txt +1 -0
pyrender/__init__.py ADDED
@@ -0,0 +1,50 @@
1
+ import sys
2
+
3
+ from .camera import Camera
4
+ from .camera import IntrinsicsCamera
5
+ from .camera import OrthographicCamera
6
+ from .camera import PerspectiveCamera
7
+ from .constants import GLTF
8
+ from .constants import RenderFlags
9
+ from .constants import TextAlign
10
+ from .light import DirectionalLight
11
+ from .light import Light
12
+ from .light import PointLight
13
+ from .light import SpotLight
14
+ from .material import Material
15
+ from .material import MetallicRoughnessMaterial
16
+ from .mesh import Mesh
17
+ from .node import Node
18
+ from .offscreen import OffscreenRenderer
19
+ from .primitive import Primitive
20
+ from .renderer import Renderer
21
+ from .sampler import Sampler
22
+ from .scene import Scene
23
+ from .texture import Texture
24
+ from .viewer import Viewer
25
+
26
+
27
+ def determine_version(module_name):
28
+ """Determine version of the package."""
29
+ if (sys.version_info[0] == 3 and sys.version_info[1] >= 8) \
30
+ or sys.version_info[0] > 3:
31
+ import importlib.metadata
32
+ return importlib.metadata.version(module_name)
33
+ else:
34
+ import pkg_resources
35
+ return pkg_resources.get_distribution(module_name).version
36
+
37
+
38
+ try:
39
+ __version__ = determine_version('scikit-robot-pyrender')
40
+ except Exception:
41
+ __version__ = '0.1.45' # fallback version
42
+
43
+ __all__ = [
44
+ 'Camera', 'PerspectiveCamera', 'OrthographicCamera', 'IntrinsicsCamera',
45
+ 'Light', 'PointLight', 'DirectionalLight', 'SpotLight',
46
+ 'Sampler', 'Texture', 'Material', 'MetallicRoughnessMaterial',
47
+ 'Primitive', 'Mesh', 'Node', 'Scene', 'Renderer', 'Viewer',
48
+ 'OffscreenRenderer', '__version__', 'RenderFlags', 'TextAlign',
49
+ 'GLTF'
50
+ ]
pyrender/camera.py ADDED
@@ -0,0 +1,439 @@
1
+ """Virtual cameras compliant with the glTF 2.0 specification as described at
2
+ https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-camera
3
+
4
+ Author: Matthew Matl
5
+ """
6
+ import abc
7
+ import sys
8
+
9
+ import numpy as np
10
+ import six
11
+
12
+ from .constants import DEFAULT_Z_FAR
13
+ from .constants import DEFAULT_Z_NEAR
14
+
15
+
16
+ @six.add_metaclass(abc.ABCMeta)
17
+ class Camera(object):
18
+ """Abstract base class for all cameras.
19
+
20
+ Note
21
+ ----
22
+ Camera poses are specified in the OpenGL format,
23
+ where the z axis points away from the view direction and the
24
+ x and y axes point to the right and up in the image plane, respectively.
25
+
26
+ Parameters
27
+ ----------
28
+ znear : float
29
+ The floating-point distance to the near clipping plane.
30
+ zfar : float
31
+ The floating-point distance to the far clipping plane.
32
+ ``zfar`` must be greater than ``znear``.
33
+ name : str, optional
34
+ The user-defined name of this object.
35
+ """
36
+
37
+ def __init__(self,
38
+ znear=DEFAULT_Z_NEAR,
39
+ zfar=DEFAULT_Z_FAR,
40
+ name=None):
41
+ self.name = name
42
+ self.znear = znear
43
+ self.zfar = zfar
44
+
45
+ @property
46
+ def name(self):
47
+ """str : The user-defined name of this object.
48
+ """
49
+ return self._name
50
+
51
+ @name.setter
52
+ def name(self, value):
53
+ if value is not None:
54
+ value = str(value)
55
+ self._name = value
56
+
57
+ @property
58
+ def znear(self):
59
+ """float : The distance to the near clipping plane.
60
+ """
61
+ return self._znear
62
+
63
+ @znear.setter
64
+ def znear(self, value):
65
+ value = float(value)
66
+ if value < 0:
67
+ raise ValueError('z-near must be >= 0.0')
68
+ self._znear = value
69
+
70
+ @property
71
+ def zfar(self):
72
+ """float : The distance to the far clipping plane.
73
+ """
74
+ return self._zfar
75
+
76
+ @zfar.setter
77
+ def zfar(self, value):
78
+ value = float(value)
79
+ if value <= 0 or value <= self.znear:
80
+ raise ValueError('zfar must be >0 and >znear')
81
+ self._zfar = value
82
+
83
+ @abc.abstractmethod
84
+ def get_projection_matrix(self, width=None, height=None):
85
+ """Return the OpenGL projection matrix for this camera.
86
+
87
+ Parameters
88
+ ----------
89
+ width : int
90
+ Width of the current viewport, in pixels.
91
+ height : int
92
+ Height of the current viewport, in pixels.
93
+ """
94
+ pass
95
+
96
+
97
+ class PerspectiveCamera(Camera):
98
+
99
+ """A perspective camera for perspective projection.
100
+
101
+ Parameters
102
+ ----------
103
+ yfov : float
104
+ The floating-point vertical field of view in radians.
105
+ znear : float
106
+ The floating-point distance to the near clipping plane.
107
+ If not specified, defaults to 0.05.
108
+ zfar : float, optional
109
+ The floating-point distance to the far clipping plane.
110
+ ``zfar`` must be greater than ``znear``.
111
+ If None, the camera uses an infinite projection matrix.
112
+ aspectRatio : float, optional
113
+ The floating-point aspect ratio of the field of view.
114
+ If not specified, the camera uses the viewport's aspect ratio.
115
+ name : str, optional
116
+ The user-defined name of this object.
117
+ """
118
+
119
+ def __init__(self,
120
+ yfov,
121
+ znear=DEFAULT_Z_NEAR,
122
+ zfar=None,
123
+ aspectRatio=None,
124
+ name=None):
125
+ super(PerspectiveCamera, self).__init__(
126
+ znear=znear,
127
+ zfar=zfar,
128
+ name=name,
129
+ )
130
+
131
+ self.yfov = yfov
132
+ self.aspectRatio = aspectRatio
133
+
134
+ @property
135
+ def yfov(self):
136
+ """float : The vertical field of view in radians.
137
+ """
138
+ return self._yfov
139
+
140
+ @yfov.setter
141
+ def yfov(self, value):
142
+ value = float(value)
143
+ if value <= 0.0:
144
+ raise ValueError('Field of view must be positive')
145
+ self._yfov = value
146
+
147
+ @property
148
+ def zfar(self):
149
+ """float : The distance to the far clipping plane.
150
+ """
151
+ return self._zfar
152
+
153
+ @zfar.setter
154
+ def zfar(self, value):
155
+ if value is not None:
156
+ value = float(value)
157
+ if value <= 0 or value <= self.znear:
158
+ raise ValueError('zfar must be >0 and >znear')
159
+ self._zfar = value
160
+
161
+ @property
162
+ def aspectRatio(self):
163
+ """float : The ratio of the width to the height of the field of view.
164
+ """
165
+ return self._aspectRatio
166
+
167
+ @aspectRatio.setter
168
+ def aspectRatio(self, value):
169
+ if value is not None:
170
+ value = float(value)
171
+ if value <= 0.0:
172
+ raise ValueError('Aspect ratio must be positive')
173
+ self._aspectRatio = value
174
+
175
+ def get_projection_matrix(self, width=None, height=None):
176
+ """Return the OpenGL projection matrix for this camera.
177
+
178
+ Parameters
179
+ ----------
180
+ width : int
181
+ Width of the current viewport, in pixels.
182
+ height : int
183
+ Height of the current viewport, in pixels.
184
+ """
185
+ aspect_ratio = self.aspectRatio
186
+ if aspect_ratio is None:
187
+ if width is None or height is None:
188
+ raise ValueError('Aspect ratio of camera must be defined')
189
+ aspect_ratio = float(width) / float(height)
190
+
191
+ a = aspect_ratio
192
+ t = np.tan(self.yfov / 2.0)
193
+ n = self.znear
194
+ f = self.zfar
195
+
196
+ P = np.zeros((4, 4))
197
+ P[0][0] = 1.0 / (a * t)
198
+ P[1][1] = 1.0 / t
199
+ P[3][2] = -1.0
200
+
201
+ if f is None:
202
+ P[2][2] = -1.0
203
+ P[2][3] = -2.0 * n
204
+ else:
205
+ P[2][2] = (f + n) / (n - f)
206
+ P[2][3] = (2 * f * n) / (n - f)
207
+
208
+ return P
209
+
210
+
211
+ class OrthographicCamera(Camera):
212
+ """An orthographic camera for orthographic projection.
213
+
214
+ Parameters
215
+ ----------
216
+ xmag : float
217
+ The floating-point horizontal magnification of the view.
218
+ ymag : float
219
+ The floating-point vertical magnification of the view.
220
+ znear : float
221
+ The floating-point distance to the near clipping plane.
222
+ If not specified, defaults to 0.05.
223
+ zfar : float
224
+ The floating-point distance to the far clipping plane.
225
+ ``zfar`` must be greater than ``znear``.
226
+ If not specified, defaults to 100.0.
227
+ name : str, optional
228
+ The user-defined name of this object.
229
+ """
230
+
231
+ def __init__(self,
232
+ xmag,
233
+ ymag,
234
+ znear=DEFAULT_Z_NEAR,
235
+ zfar=DEFAULT_Z_FAR,
236
+ name=None):
237
+ super(OrthographicCamera, self).__init__(
238
+ znear=znear,
239
+ zfar=zfar,
240
+ name=name,
241
+ )
242
+
243
+ self.xmag = xmag
244
+ self.ymag = ymag
245
+
246
+ @property
247
+ def xmag(self):
248
+ """float : The horizontal magnification of the view.
249
+ """
250
+ return self._xmag
251
+
252
+ @xmag.setter
253
+ def xmag(self, value):
254
+ value = float(value)
255
+ if value <= 0.0:
256
+ raise ValueError('X magnification must be positive')
257
+ self._xmag = value
258
+
259
+ @property
260
+ def ymag(self):
261
+ """float : The vertical magnification of the view.
262
+ """
263
+ return self._ymag
264
+
265
+ @ymag.setter
266
+ def ymag(self, value):
267
+ value = float(value)
268
+ if value <= 0.0:
269
+ raise ValueError('Y magnification must be positive')
270
+ self._ymag = value
271
+
272
+ @property
273
+ def znear(self):
274
+ """float : The distance to the near clipping plane.
275
+ """
276
+ return self._znear
277
+
278
+ @znear.setter
279
+ def znear(self, value):
280
+ value = float(value)
281
+ if value <= 0:
282
+ raise ValueError('z-near must be > 0.0')
283
+ self._znear = value
284
+
285
+ def get_projection_matrix(self, width=None, height=None):
286
+ """Return the OpenGL projection matrix for this camera.
287
+
288
+ Parameters
289
+ ----------
290
+ width : int
291
+ Width of the current viewport, in pixels.
292
+ Unused in this function.
293
+ height : int
294
+ Height of the current viewport, in pixels.
295
+ Unused in this function.
296
+ """
297
+ xmag = self.xmag
298
+ ymag = self.ymag
299
+
300
+ # If screen width/height defined, rescale xmag
301
+ if width is not None and height is not None:
302
+ xmag = width / height * ymag
303
+
304
+ n = self.znear
305
+ f = self.zfar
306
+ P = np.zeros((4, 4))
307
+ P[0][0] = 1.0 / xmag
308
+ P[1][1] = 1.0 / ymag
309
+ P[2][2] = 2.0 / (n - f)
310
+ P[2][3] = (f + n) / (n - f)
311
+ P[3][3] = 1.0
312
+ return P
313
+
314
+
315
+ class IntrinsicsCamera(Camera):
316
+ """A perspective camera with custom intrinsics.
317
+
318
+ Parameters
319
+ ----------
320
+ fx : float
321
+ X-axis focal length in pixels.
322
+ fy : float
323
+ Y-axis focal length in pixels.
324
+ cx : float
325
+ X-axis optical center in pixels.
326
+ cy : float
327
+ Y-axis optical center in pixels.
328
+ znear : float
329
+ The floating-point distance to the near clipping plane.
330
+ If not specified, defaults to 0.05.
331
+ zfar : float
332
+ The floating-point distance to the far clipping plane.
333
+ ``zfar`` must be greater than ``znear``.
334
+ If not specified, defaults to 100.0.
335
+ name : str, optional
336
+ The user-defined name of this object.
337
+ """
338
+
339
+ def __init__(self,
340
+ fx,
341
+ fy,
342
+ cx,
343
+ cy,
344
+ znear=DEFAULT_Z_NEAR,
345
+ zfar=DEFAULT_Z_FAR,
346
+ name=None):
347
+ super(IntrinsicsCamera, self).__init__(
348
+ znear=znear,
349
+ zfar=zfar,
350
+ name=name,
351
+ )
352
+
353
+ self.fx = fx
354
+ self.fy = fy
355
+ self.cx = cx
356
+ self.cy = cy
357
+
358
+ @property
359
+ def fx(self):
360
+ """float : X-axis focal length in meters.
361
+ """
362
+ return self._fx
363
+
364
+ @fx.setter
365
+ def fx(self, value):
366
+ self._fx = float(value)
367
+
368
+ @property
369
+ def fy(self):
370
+ """float : Y-axis focal length in meters.
371
+ """
372
+ return self._fy
373
+
374
+ @fy.setter
375
+ def fy(self, value):
376
+ self._fy = float(value)
377
+
378
+ @property
379
+ def cx(self):
380
+ """float : X-axis optical center in pixels.
381
+ """
382
+ return self._cx
383
+
384
+ @cx.setter
385
+ def cx(self, value):
386
+ self._cx = float(value)
387
+
388
+ @property
389
+ def cy(self):
390
+ """float : Y-axis optical center in pixels.
391
+ """
392
+ return self._cy
393
+
394
+ @cy.setter
395
+ def cy(self, value):
396
+ self._cy = float(value)
397
+
398
+ def get_projection_matrix(self, width, height):
399
+ """Return the OpenGL projection matrix for this camera.
400
+
401
+ Parameters
402
+ ----------
403
+ width : int
404
+ Width of the current viewport, in pixels.
405
+ height : int
406
+ Height of the current viewport, in pixels.
407
+ """
408
+ width = float(width)
409
+ height = float(height)
410
+
411
+ cx, cy = self.cx, self.cy
412
+ fx, fy = self.fx, self.fy
413
+ if sys.platform == 'darwin':
414
+ cx = self.cx * 2.0
415
+ cy = self.cy * 2.0
416
+ fx = self.fx * 2.0
417
+ fy = self.fy * 2.0
418
+
419
+ P = np.zeros((4, 4))
420
+ P[0][0] = 2.0 * fx / width
421
+ P[1][1] = 2.0 * fy / height
422
+ P[0][2] = 1.0 - 2.0 * cx / width
423
+ P[1][2] = 2.0 * cy / height - 1.0
424
+ P[3][2] = -1.0
425
+
426
+ n = self.znear
427
+ f = self.zfar
428
+ if f is None:
429
+ P[2][2] = -1.0
430
+ P[2][3] = -2.0 * n
431
+ else:
432
+ P[2][2] = (f + n) / (n - f)
433
+ P[2][3] = (2 * f * n) / (n - f)
434
+
435
+ return P
436
+
437
+
438
+ __all__ = ['Camera', 'PerspectiveCamera', 'OrthographicCamera',
439
+ 'IntrinsicsCamera']
pyrender/constants.py ADDED
@@ -0,0 +1,149 @@
1
+ DEFAULT_Z_NEAR = 0.05 # Near clipping plane, in meters
2
+ DEFAULT_Z_FAR = 100.0 # Far clipping plane, in meters
3
+ DEFAULT_SCENE_SCALE = 2.0 # Default scene scale
4
+ MAX_N_LIGHTS = 4 # Maximum number of lights of each type allowed
5
+ TARGET_OPEN_GL_MAJOR = 4 # Target OpenGL Major Version
6
+ TARGET_OPEN_GL_MINOR = 1 # Target OpenGL Minor Version
7
+ MIN_OPEN_GL_MAJOR = 3 # Minimum OpenGL Major Version
8
+ MIN_OPEN_GL_MINOR = 3 # Minimum OpenGL Minor Version
9
+ FLOAT_SZ = 4 # Byte size of GL float32
10
+ UINT_SZ = 4 # Byte size of GL uint32
11
+ SHADOW_TEX_SZ = 2048 # Width and Height of Shadow Textures
12
+ TEXT_PADDING = 20 # Width of padding for rendering text (px)
13
+
14
+
15
+ # Flags for render type
16
+ class RenderFlags(object):
17
+ """Flags for rendering in the scene.
18
+
19
+ Combine them with the bitwise or. For example,
20
+
21
+ >>> flags = OFFSCREEN | SHADOWS_DIRECTIONAL | VERTEX_NORMALS
22
+
23
+ would result in an offscreen render with directional shadows and
24
+ vertex normals enabled.
25
+ """
26
+ NONE = 0
27
+ """Normal PBR Render."""
28
+ DEPTH_ONLY = 1
29
+ """Only render the depth buffer."""
30
+ OFFSCREEN = 2
31
+ """Render offscreen and return the depth and (optionally) color buffers."""
32
+ FLIP_WIREFRAME = 4
33
+ """Invert the status of wireframe rendering for each mesh."""
34
+ ALL_WIREFRAME = 8
35
+ """Render all meshes as wireframes."""
36
+ ALL_SOLID = 16
37
+ """Render all meshes as solids."""
38
+ SHADOWS_DIRECTIONAL = 32
39
+ """Render shadows for directional lights."""
40
+ SHADOWS_POINT = 64
41
+ """Render shadows for point lights."""
42
+ SHADOWS_SPOT = 128
43
+ """Render shadows for spot lights."""
44
+ SHADOWS_ALL = 32 | 64 | 128
45
+ """Render shadows for all lights."""
46
+ VERTEX_NORMALS = 256
47
+ """Render vertex normals."""
48
+ FACE_NORMALS = 512
49
+ """Render face normals."""
50
+ SKIP_CULL_FACES = 1024
51
+ """Do not cull back faces."""
52
+ RGBA = 2048
53
+ """Render the color buffer with the alpha channel enabled."""
54
+ FLAT = 4096
55
+ """Render the color buffer flat, with no lighting computations."""
56
+ SEG = 8192
57
+
58
+
59
+ class TextAlign:
60
+ """Text alignment options for captions.
61
+
62
+ Only use one at a time.
63
+ """
64
+ CENTER = 0
65
+ """Center the text by width and height."""
66
+ CENTER_LEFT = 1
67
+ """Center the text by height and left-align it."""
68
+ CENTER_RIGHT = 2
69
+ """Center the text by height and right-align it."""
70
+ BOTTOM_LEFT = 3
71
+ """Put the text in the bottom-left corner."""
72
+ BOTTOM_RIGHT = 4
73
+ """Put the text in the bottom-right corner."""
74
+ BOTTOM_CENTER = 5
75
+ """Center the text by width and fix it to the bottom."""
76
+ TOP_LEFT = 6
77
+ """Put the text in the top-left corner."""
78
+ TOP_RIGHT = 7
79
+ """Put the text in the top-right corner."""
80
+ TOP_CENTER = 8
81
+ """Center the text by width and fix it to the top."""
82
+
83
+
84
+ class GLTF(object):
85
+ """Options for GL objects."""
86
+ NEAREST = 9728
87
+ """Nearest neighbor interpolation."""
88
+ LINEAR = 9729
89
+ """Linear interpolation."""
90
+ NEAREST_MIPMAP_NEAREST = 9984
91
+ """Nearest mipmapping."""
92
+ LINEAR_MIPMAP_NEAREST = 9985
93
+ """Linear mipmapping."""
94
+ NEAREST_MIPMAP_LINEAR = 9986
95
+ """Nearest mipmapping."""
96
+ LINEAR_MIPMAP_LINEAR = 9987
97
+ """Linear mipmapping."""
98
+ CLAMP_TO_EDGE = 33071
99
+ """Clamp to the edge of the texture."""
100
+ MIRRORED_REPEAT = 33648
101
+ """Mirror the texture."""
102
+ REPEAT = 10497
103
+ """Repeat the texture."""
104
+ POINTS = 0
105
+ """Render as points."""
106
+ LINES = 1
107
+ """Render as lines."""
108
+ LINE_LOOP = 2
109
+ """Render as a line loop."""
110
+ LINE_STRIP = 3
111
+ """Render as a line strip."""
112
+ TRIANGLES = 4
113
+ """Render as triangles."""
114
+ TRIANGLE_STRIP = 5
115
+ """Render as a triangle strip."""
116
+ TRIANGLE_FAN = 6
117
+ """Render as a triangle fan."""
118
+
119
+
120
+ class BufFlags(object):
121
+ POSITION = 0
122
+ NORMAL = 1
123
+ TANGENT = 2
124
+ TEXCOORD_0 = 4
125
+ TEXCOORD_1 = 8
126
+ COLOR_0 = 16
127
+ JOINTS_0 = 32
128
+ WEIGHTS_0 = 64
129
+
130
+
131
+ class TexFlags(object):
132
+ NONE = 0
133
+ NORMAL = 1
134
+ OCCLUSION = 2
135
+ EMISSIVE = 4
136
+ BASE_COLOR = 8
137
+ METALLIC_ROUGHNESS = 16
138
+ DIFFUSE = 32
139
+ SPECULAR_GLOSSINESS = 64
140
+
141
+
142
+ class ProgramFlags:
143
+ NONE = 0
144
+ USE_MATERIAL = 1
145
+ VERTEX_NORMALS = 2
146
+ FACE_NORMALS = 4
147
+
148
+
149
+ __all__ = ['RenderFlags', 'TextAlign', 'GLTF']