Skip to content

Commit c2345fe

Browse files
committed
Support and default to webgl2
1 parent d2ba8ac commit c2345fe

File tree

5 files changed

+46
-4
lines changed

5 files changed

+46
-4
lines changed

js/src/_base/Renderable.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,7 @@ var RenderableView = widgets.DOMWidgetView.extend({
413413
var config = {
414414
antialias: this.model.get('_antialias'),
415415
alpha: this.model.get('_alpha'),
416+
webglVersion: this.model.get('_webgl_version'),
416417
};
417418
this.renderer = RendererPool.acquire(
418419
config,

js/src/_base/RendererPool.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,22 @@ _.extend(KeyedCollection.prototype, {
6161
},
6262
});
6363

64+
var isWebgl2Available = (function() {
65+
var isAvailable;
66+
function inner() {
67+
if (isAvailable === undefined) {
68+
try {
69+
var canvas = document.createElement( 'canvas' );
70+
isAvailable = !! ( window.WebGL2RenderingContext && canvas.getContext( 'webgl2' ) );
71+
} catch ( e ) {
72+
isAvailable = false;
73+
}
74+
}
75+
return isAvailable;
76+
}
77+
return inner;
78+
})();
79+
6480
function RendererPool() {
6581
this.numCreated = 0;
6682
this.freePool = new KeyedCollection();
@@ -69,6 +85,25 @@ function RendererPool() {
6985
_.extend(RendererPool.prototype, {
7086

7187
_createRenderer: function(config) {
88+
config = _.extend({}, config);
89+
var webglVersion = config.webglVersion;
90+
delete config.webglVersion;
91+
92+
if (webglVersion === 2 && isWebgl2Available()) {
93+
// We need to map the right config for the context ourselves:
94+
var canvas = document.createElement('canvas');
95+
config =_.extend({
96+
depth: true,
97+
stencil: true,
98+
premultipliedAlpha: true,
99+
preserveDrawingBuffer: false,
100+
powerPreference: 'default'
101+
}, config);
102+
var context = canvas.getContext('webgl2', config);
103+
config.canvas = canvas;
104+
config.context = context;
105+
}
106+
72107
var renderer = new THREE.WebGLRenderer(
73108
_.extend({},
74109
config,

pythreejs/_base/renderable.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from ipywidgets import DOMWidget, Widget, widget_serialization
2-
from traitlets import Unicode, CInt, CFloat, Enum, Bool, Instance, List
2+
from traitlets import Unicode, CInt, CFloat, Enum, Bool, Int, Instance, List
33

44
from .._package import npm_pkg_name
55
from .._version import EXTENSION_SPEC_VERSION
@@ -21,6 +21,7 @@ class RenderableWidget(DOMWidget):
2121
_height = CInt(200).tag(sync=True)
2222
_antialias = Bool(False).tag(sync=True)
2323
_alpha = Bool(False).tag(sync=True)
24+
_webgl_version = Int(2).tag(sync=True)
2425

2526
autoClear = Bool(True).tag(sync=True)
2627
autoClearColor = Bool(True).tag(sync=True)

pythreejs/core/Renderer.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,14 @@ class Renderer(RenderableWidget):
3232
background = Color('black', allow_none=True).tag(sync=True)
3333
background_opacity = Float(1.0, min=0.0, max=1.0).tag(sync=True)
3434

35-
def __init__(self, scene, camera, controls=None, antialias=False, alpha=False, **kwargs):
35+
def __init__(self, scene, camera, controls=None, antialias=False, alpha=False, webgl_version=2, **kwargs):
3636
super(Renderer, self).__init__(
3737
scene=scene,
3838
camera=camera,
3939
controls=controls or [],
4040
_antialias=antialias,
4141
_alpha=alpha,
42+
_webgl_version=webgl_version,
4243
**kwargs)
4344
link((self, 'width'), (self, '_width'))
4445
link((self, 'height'), (self, '_height'))

pythreejs/renderers/WebGLRenderer.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,12 @@ class WebGLRenderer(RenderableWidget):
1919
width = CInt(200)
2020
height = CInt(200)
2121

22-
def __init__(self, antialias=False, alpha=False, **kwargs):
23-
super(WebGLRenderer, self).__init__(_antialias=antialias, _alpha=alpha, **kwargs)
22+
def __init__(self, antialias=False, alpha=False, webgl_version=2, **kwargs):
23+
super(WebGLRenderer, self).__init__(
24+
_antialias=antialias,
25+
_alpha=alpha,
26+
_webgl_version=webgl_version,
27+
**kwargs)
2428
link((self, 'width'), (self, '_width'))
2529
link((self, 'height'), (self, '_height'))
2630

0 commit comments

Comments
 (0)