@kitware/vtk.js 23.4.0 → 24.0.0-beta.1
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.
- package/BREAKING_CHANGES.md +33 -0
- package/Common/Core/DataArray.js +4 -0
- package/Common/Core/Math/index.js +2 -2
- package/Common/Core/Math.js +1 -1
- package/Common/DataModel/BoundingBox.js +3 -8
- package/Common/DataModel/DataSetAttributes/FieldData.js +9 -5
- package/Common/DataModel/ITKHelper.js +2 -346
- package/Common/DataModel/ImageData.d.ts +23 -6
- package/Common/DataModel/ImageData.js +8 -1
- package/Common/DataModel/PolyData.d.ts +8 -1
- package/Common/DataModel/PolyData.js +5 -3
- package/Common/DataModel/Triangle.js +217 -2
- package/Common/Transform/LandmarkTransform.js +1 -1
- package/Filters/General/OBBTree/OBBNode.js +82 -0
- package/Filters/General/OBBTree/helper.js +92 -0
- package/Filters/General/OBBTree.js +1249 -0
- package/Filters/General/WindowedSincPolyDataFilter.js +1 -1
- package/Filters/General.js +2 -0
- package/Filters/Sources/CircleSource.js +1 -1
- package/Filters/Sources/PointSource.js +1 -1
- package/Filters/Texture/TextureMapToPlane.js +1 -1
- package/Interaction/Manipulators/KeyboardCameraManipulator.js +1 -1
- package/Interaction/Manipulators/MouseCameraTrackballRollManipulator.js +1 -1
- package/Interaction/Manipulators/MouseCameraTrackballRotateManipulator.js +1 -1
- package/Interaction/Manipulators/MouseCameraUnicamManipulator.js +1 -1
- package/Interaction/Manipulators/MouseCameraUnicamRotateManipulator.js +1 -1
- package/Interaction/Style/InteractorStyleImage.js +3 -3
- package/Interaction/Style/InteractorStyleMPRSlice.js +12 -6
- package/Interaction/Style/InteractorStyleManipulator.js +42 -28
- package/Interaction/Style/InteractorStyleRemoteMouse.js +32 -14
- package/Interaction/Style/InteractorStyleTrackballCamera.js +7 -7
- package/Interaction/Widgets/OrientationMarkerWidget.js +18 -13
- package/Interaction/Widgets/PiecewiseGaussianWidget.js +1 -1
- package/Interaction/Widgets.js +1 -35
- package/Proxy/Core/View2DProxy.js +1 -1
- package/Rendering/Core/ColorTransferFunction.js +1 -1
- package/Rendering/Core/Coordinate.js +1 -1
- package/Rendering/Core/CubeAxesActor.js +1 -1
- package/Rendering/Core/Glyph3DMapper.js +1 -1
- package/Rendering/Core/ImageMapper.js +1 -1
- package/Rendering/Core/InteractorObserver.js +11 -10
- package/Rendering/Core/InteractorStyle.js +9 -4
- package/Rendering/Core/Mapper.js +1 -1
- package/Rendering/Core/Prop.js +6 -4
- package/Rendering/Core/Prop3D.js +1 -1
- package/Rendering/Core/RenderWindowInteractor.js +24 -17
- package/Rendering/Core/Renderer.js +24 -19
- package/Rendering/Core/ScalarBarActor.js +1 -1
- package/Rendering/Core/Viewport.js +1 -1
- package/Rendering/Core/VolumeMapper.js +1 -1
- package/Rendering/OpenGL/Actor.js +2 -2
- package/Rendering/OpenGL/Actor2D.js +2 -2
- package/Rendering/OpenGL/BufferObject.js +6 -5
- package/Rendering/OpenGL/Camera.js +3 -3
- package/Rendering/OpenGL/CellArrayBufferObject.js +1 -1
- package/Rendering/OpenGL/Framebuffer.js +13 -12
- package/Rendering/OpenGL/Glyph3DMapper.js +10 -8
- package/Rendering/OpenGL/HardwareSelector.js +35 -25
- package/Rendering/OpenGL/ImageMapper.js +51 -45
- package/Rendering/OpenGL/ImageSlice.js +2 -2
- package/Rendering/OpenGL/PixelSpaceCallbackMapper.js +4 -2
- package/Rendering/OpenGL/PolyDataMapper.js +14 -11
- package/Rendering/OpenGL/PolyDataMapper2D.js +17 -16
- package/Rendering/OpenGL/Renderer.js +11 -7
- package/Rendering/OpenGL/ReplacementShaderMapper.js +1 -1
- package/Rendering/OpenGL/ScalarBarActor.js +2 -2
- package/Rendering/OpenGL/ShaderCache.js +7 -5
- package/Rendering/OpenGL/Skybox.js +11 -9
- package/Rendering/OpenGL/SphereMapper.js +2 -2
- package/Rendering/OpenGL/StickMapper.js +2 -2
- package/Rendering/OpenGL/SurfaceLIC/LineIntegralConvolution2D/pingpong.js +13 -12
- package/Rendering/OpenGL/SurfaceLIC/LineIntegralConvolution2D.js +11 -9
- package/Rendering/OpenGL/SurfaceLIC/SurfaceLICInterface.js +19 -12
- package/Rendering/OpenGL/SurfaceLIC/SurfaceLICMapper.js +9 -6
- package/Rendering/OpenGL/Texture.js +44 -31
- package/Rendering/OpenGL/VertexArrayObject.js +7 -7
- package/Rendering/OpenGL/Volume.js +3 -2
- package/Rendering/OpenGL/VolumeMapper.js +30 -26
- package/Rendering/OpenGL/glsl/vtkVolumeFS.glsl.js +1 -1
- package/Rendering/SceneGraph/ViewNode.js +8 -7
- package/Rendering/WebGPU/Renderer.js +18 -10
- package/Widgets/Core/AbstractWidget.js +5 -4
- package/Widgets/Core/AbstractWidgetFactory.js +2 -1
- package/Widgets/Core/WidgetManager.js +66 -49
- package/Widgets/Manipulators/LineManipulator.js +1 -1
- package/Widgets/Representations/CircleContextRepresentation.js +1 -1
- package/Widgets/Representations/ImplicitPlaneRepresentation.js +5 -5
- package/Widgets/Representations/PolyLineRepresentation.js +1 -1
- package/Widgets/Representations/ResliceCursorContextRepresentation.js +7 -7
- package/Widgets/SVG/SVGLandmarkRepresentation/Constants.js +2 -2
- package/Widgets/SVG/SVGLandmarkRepresentation.js +21 -8
- package/Widgets/SVG/SVGRepresentation.js +1 -1
- package/Widgets/Widgets3D/AngleWidget/behavior.js +14 -6
- package/Widgets/Widgets3D/DistanceWidget/behavior.js +14 -6
- package/Widgets/Widgets3D/EllipseWidget.js +0 -1
- package/Widgets/Widgets3D/ImageCroppingWidget/behavior.js +6 -2
- package/Widgets/Widgets3D/ImplicitPlaneWidget.js +4 -2
- package/Widgets/Widgets3D/LabelWidget/behavior.js +138 -0
- package/Widgets/Widgets3D/LabelWidget/state.js +22 -0
- package/Widgets/Widgets3D/LabelWidget.js +79 -0
- package/Widgets/Widgets3D/LineWidget/behavior.js +18 -9
- package/Widgets/Widgets3D/LineWidget/helpers.js +1 -1
- package/Widgets/Widgets3D/LineWidget.js +0 -1
- package/Widgets/Widgets3D/PaintWidget/behavior.js +5 -3
- package/Widgets/Widgets3D/PolyLineWidget/behavior.js +18 -8
- package/Widgets/Widgets3D/RectangleWidget.js +0 -1
- package/Widgets/Widgets3D/ResliceCursorWidget/behavior.js +1 -1
- package/Widgets/Widgets3D/ResliceCursorWidget/helpers.js +1 -1
- package/Widgets/Widgets3D/ResliceCursorWidget.js +1 -1
- package/Widgets/Widgets3D/ShapeWidget/behavior.js +18 -11
- package/Widgets/Widgets3D/SplineWidget/behavior.js +33 -21
- package/index.d.ts +3 -4
- package/interfaces.d.ts +11 -0
- package/macros.d.ts +26 -1
- package/macros.js +51 -19
- package/package.json +1 -1
- package/types.d.ts +1 -0
- package/Interaction/Widgets/AbstractWidget.js +0 -104
- package/Interaction/Widgets/DistanceRepresentation.js +0 -116
- package/Interaction/Widgets/DistanceWidget.js +0 -77
- package/Interaction/Widgets/HandleRepresentation/Constants.js +0 -12
- package/Interaction/Widgets/HandleRepresentation.js +0 -100
- package/Interaction/Widgets/HandleWidget/Constants.js +0 -9
- package/Interaction/Widgets/HandleWidget.js +0 -194
- package/Interaction/Widgets/ImageCroppingRegionsRepresentation.js +0 -233
- package/Interaction/Widgets/ImageCroppingRegionsWidget/Constants.js +0 -16
- package/Interaction/Widgets/ImageCroppingRegionsWidget.js +0 -573
- package/Interaction/Widgets/LabelRepresentation/Constants.js +0 -17
- package/Interaction/Widgets/LabelRepresentation.js +0 -325
- package/Interaction/Widgets/LabelWidget.js +0 -65
- package/Interaction/Widgets/LineRepresentation/Constants.js +0 -21
- package/Interaction/Widgets/LineRepresentation.js +0 -498
- package/Interaction/Widgets/LineWidget/Constants.js +0 -11
- package/Interaction/Widgets/LineWidget.js +0 -296
- package/Interaction/Widgets/PointPlacer.js +0 -51
- package/Interaction/Widgets/ResliceCursor/ResliceCursor/Constants.js +0 -10
- package/Interaction/Widgets/ResliceCursor/ResliceCursor.js +0 -269
- package/Interaction/Widgets/ResliceCursor/ResliceCursorActor/Constants.js +0 -10
- package/Interaction/Widgets/ResliceCursor/ResliceCursorActor.js +0 -146
- package/Interaction/Widgets/ResliceCursor/ResliceCursorLineRepresentation.js +0 -332
- package/Interaction/Widgets/ResliceCursor/ResliceCursorPolyDataAlgorithm.js +0 -134
- package/Interaction/Widgets/ResliceCursor/ResliceCursorRepresentation/Constants.js +0 -16
- package/Interaction/Widgets/ResliceCursor/ResliceCursorRepresentation.js +0 -371
- package/Interaction/Widgets/ResliceCursor/ResliceCursorWidget/Constants.js +0 -10
- package/Interaction/Widgets/ResliceCursor/ResliceCursorWidget.js +0 -157
- package/Interaction/Widgets/SphereHandleRepresentation.js +0 -370
- package/Interaction/Widgets/WidgetRepresentation.js +0 -121
- package/Widgets/Representations/SphereContextRepresentation.js +0 -131
- package/Widgets/Widgets3D/SphereWidget/behavior.js +0 -177
- package/Widgets/Widgets3D/SphereWidget/state.js +0 -45
- package/Widgets/Widgets3D/SphereWidget.d.ts +0 -50
- package/Widgets/Widgets3D/SphereWidget.js +0 -62
|
@@ -9,7 +9,7 @@ import { v as vtkPolyData2DVS } from './glsl/vtkPolyData2DVS.glsl.js';
|
|
|
9
9
|
import vtkReplacementShaderMapper from './ReplacementShaderMapper.js';
|
|
10
10
|
import vtkShaderProgram from './ShaderProgram.js';
|
|
11
11
|
import vtkViewNode from '../SceneGraph/ViewNode.js';
|
|
12
|
-
import {
|
|
12
|
+
import { K as round } from '../../Common/Core/Math/index.js';
|
|
13
13
|
import { Representation } from '../Core/Property/Constants.js';
|
|
14
14
|
import { DisplayLocation } from '../Core/Property2D/Constants.js';
|
|
15
15
|
import { registerOverride } from './ViewNodeFactory.js';
|
|
@@ -35,7 +35,7 @@ function vtkOpenGLPolyDataMapper2D(publicAPI, model) {
|
|
|
35
35
|
if (prepass) {
|
|
36
36
|
model.openGLActor2D = publicAPI.getFirstAncestorOfType('vtkOpenGLActor2D');
|
|
37
37
|
model.openGLRenderer = model.openGLActor2D.getFirstAncestorOfType('vtkOpenGLRenderer');
|
|
38
|
-
model.
|
|
38
|
+
model._openGLRenderWindow = model.openGLRenderer.getParent();
|
|
39
39
|
model.openGLCamera = model.openGLRenderer.getViewNodeFor(model.openGLRenderer.getRenderable().getActiveCamera());
|
|
40
40
|
}
|
|
41
41
|
};
|
|
@@ -84,13 +84,13 @@ function vtkOpenGLPolyDataMapper2D(publicAPI, model) {
|
|
|
84
84
|
};
|
|
85
85
|
|
|
86
86
|
publicAPI.render = function () {
|
|
87
|
-
var ctx = model.
|
|
87
|
+
var ctx = model._openGLRenderWindow.getContext();
|
|
88
88
|
|
|
89
89
|
if (model.context !== ctx) {
|
|
90
90
|
model.context = ctx;
|
|
91
91
|
|
|
92
92
|
for (var i = primTypes.Start; i < primTypes.End; i++) {
|
|
93
|
-
model.primitives[i].setOpenGLRenderWindow(model.
|
|
93
|
+
model.primitives[i].setOpenGLRenderWindow(model._openGLRenderWindow);
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
|
|
@@ -426,7 +426,8 @@ function vtkOpenGLPolyDataMapper2D(publicAPI, model) {
|
|
|
426
426
|
};
|
|
427
427
|
publicAPI.buildShaders(shaders, ren, actor); // compile and bind the program if needed
|
|
428
428
|
|
|
429
|
-
var newShader = model.
|
|
429
|
+
var newShader = model._openGLRenderWindow.getShaderCache().readyShaderProgramArray(shaders.Vertex, shaders.Fragment, shaders.Geometry); // if the shader changed reinitialize the VAO
|
|
430
|
+
|
|
430
431
|
|
|
431
432
|
if (newShader !== cellBO.getProgram()) {
|
|
432
433
|
cellBO.setProgram(newShader); // reset the VAO as the shader has changed
|
|
@@ -436,7 +437,7 @@ function vtkOpenGLPolyDataMapper2D(publicAPI, model) {
|
|
|
436
437
|
|
|
437
438
|
cellBO.getShaderSourceTime().modified();
|
|
438
439
|
} else {
|
|
439
|
-
model.
|
|
440
|
+
model._openGLRenderWindow.getShaderCache().readyShaderProgram(cellBO.getProgram());
|
|
440
441
|
}
|
|
441
442
|
|
|
442
443
|
cellBO.getVAO().bind();
|
|
@@ -544,18 +545,18 @@ function vtkOpenGLPolyDataMapper2D(publicAPI, model) {
|
|
|
544
545
|
var shiftScaleEnabled = cellBO.getCABO().getCoordShiftAndScaleEnabled();
|
|
545
546
|
var inverseShiftScaleMatrix = shiftScaleEnabled ? cellBO.getCABO().getInverseShiftAndScaleMatrix() : null; // Get the position of the actor
|
|
546
547
|
|
|
547
|
-
var
|
|
548
|
-
var size = view.getViewportSize(ren);
|
|
548
|
+
var size = model.openGLRenderer.getTiledSizeAndOrigin();
|
|
549
549
|
var vport = ren.getViewport();
|
|
550
|
-
var actorPos = actor.getActualPositionCoordinate().
|
|
550
|
+
var actorPos = actor.getActualPositionCoordinate().getComputedViewportValue(ren); // Get the window info
|
|
551
|
+
// const tileViewport = ren.getVTKWindow().getTileViewport();
|
|
551
552
|
// Assume tile viewport is 0 1 based on vtkOpenGLRenderer
|
|
552
553
|
|
|
553
554
|
var tileViewport = [0.0, 0.0, 1.0, 1.0];
|
|
554
|
-
var visVP = [0
|
|
555
|
+
var visVP = [0, 1, 0, 1];
|
|
555
556
|
visVP[0] = vport[0] >= tileViewport[0] ? vport[0] : tileViewport[0];
|
|
556
557
|
visVP[1] = vport[1] >= tileViewport[1] ? vport[1] : tileViewport[1];
|
|
557
|
-
visVP[2] = vport[2]
|
|
558
|
-
visVP[3] = vport[3]
|
|
558
|
+
visVP[2] = vport[2] >= tileViewport[2] ? vport[2] : tileViewport[2];
|
|
559
|
+
visVP[3] = vport[3] >= tileViewport[3] ? vport[3] : tileViewport[3];
|
|
559
560
|
|
|
560
561
|
if (visVP[0] >= visVP[2]) {
|
|
561
562
|
return;
|
|
@@ -565,16 +566,16 @@ function vtkOpenGLPolyDataMapper2D(publicAPI, model) {
|
|
|
565
566
|
return;
|
|
566
567
|
}
|
|
567
568
|
|
|
568
|
-
size
|
|
569
|
-
size
|
|
569
|
+
size.usize = round(size.usize * (visVP[2] - visVP[0]) / (vport[2] - vport[0]));
|
|
570
|
+
size.vsize = round(size.vsize * (visVP[3] - visVP[1]) / (vport[3] - vport[1]));
|
|
570
571
|
var winSize = model.openGLRenderer.getParent().getSize();
|
|
571
572
|
var xoff = round(actorPos[0] - (visVP[0] - vport[0]) * winSize[0]);
|
|
572
573
|
var yoff = round(actorPos[1] - (visVP[1] - vport[1]) * winSize[1]); // set ortho projection
|
|
573
574
|
|
|
574
575
|
var left = -xoff;
|
|
575
|
-
var right = -xoff + size
|
|
576
|
+
var right = -xoff + size.usize;
|
|
576
577
|
var bottom = -yoff;
|
|
577
|
-
var top = -yoff + size
|
|
578
|
+
var top = -yoff + size.vsize; // it's an error to call glOrtho with
|
|
578
579
|
// either left==right or top==bottom
|
|
579
580
|
|
|
580
581
|
if (left === right) {
|
|
@@ -78,7 +78,8 @@ function vtkOpenGLRenderer(publicAPI, model) {
|
|
|
78
78
|
};
|
|
79
79
|
|
|
80
80
|
publicAPI.getAspectRatio = function () {
|
|
81
|
-
var size = model.
|
|
81
|
+
var size = model._parent.getSizeByReference();
|
|
82
|
+
|
|
82
83
|
var viewport = model.renderable.getViewportByReference();
|
|
83
84
|
return size[0] * (viewport[2] - viewport[0]) / ((viewport[3] - viewport[1]) * size[1]);
|
|
84
85
|
};
|
|
@@ -92,16 +93,19 @@ function vtkOpenGLRenderer(publicAPI, model) {
|
|
|
92
93
|
var vpu = vport[0] - tileViewPort[0];
|
|
93
94
|
var vpv = vport[1] - tileViewPort[1]; // store the result as a pixel value
|
|
94
95
|
|
|
95
|
-
var ndvp = model.
|
|
96
|
+
var ndvp = model._parent.normalizedDisplayToDisplay(vpu, vpv);
|
|
97
|
+
|
|
96
98
|
var lowerLeftU = Math.round(ndvp[0]);
|
|
97
99
|
var lowerLeftV = Math.round(ndvp[1]); // find the upper right corner of the viewport, taking into account the
|
|
98
100
|
// lower left boundary of this tile
|
|
99
101
|
|
|
100
102
|
var vpu2 = vport[2] - tileViewPort[0];
|
|
101
103
|
var vpv2 = vport[3] - tileViewPort[1];
|
|
102
|
-
|
|
104
|
+
|
|
105
|
+
var ndvp2 = model._parent.normalizedDisplayToDisplay(vpu2, vpv2); // now compute the size of the intersection of the viewport with the
|
|
103
106
|
// current tile
|
|
104
107
|
|
|
108
|
+
|
|
105
109
|
var usize = Math.round(ndvp2[0]) - lowerLeftU;
|
|
106
110
|
var vsize = Math.round(ndvp2[1]) - lowerLeftV;
|
|
107
111
|
|
|
@@ -155,16 +159,16 @@ function vtkOpenGLRenderer(publicAPI, model) {
|
|
|
155
159
|
};
|
|
156
160
|
|
|
157
161
|
publicAPI.setOpenGLRenderWindow = function (rw) {
|
|
158
|
-
if (model.
|
|
162
|
+
if (model._openGLRenderWindow === rw) {
|
|
159
163
|
return;
|
|
160
164
|
}
|
|
161
165
|
|
|
162
166
|
publicAPI.releaseGraphicsResources();
|
|
163
|
-
model.
|
|
167
|
+
model._openGLRenderWindow = rw;
|
|
164
168
|
model.context = null;
|
|
165
169
|
|
|
166
170
|
if (rw) {
|
|
167
|
-
model.context = model.
|
|
171
|
+
model.context = model._openGLRenderWindow.getContext();
|
|
168
172
|
}
|
|
169
173
|
};
|
|
170
174
|
} // ----------------------------------------------------------------------------
|
|
@@ -174,7 +178,7 @@ function vtkOpenGLRenderer(publicAPI, model) {
|
|
|
174
178
|
|
|
175
179
|
var DEFAULT_VALUES = {
|
|
176
180
|
context: null,
|
|
177
|
-
|
|
181
|
+
_openGLRenderWindow: null,
|
|
178
182
|
selector: null
|
|
179
183
|
}; // ----------------------------------------------------------------------------
|
|
180
184
|
|
|
@@ -22,7 +22,7 @@ function implementReplaceShaderCoincidentOffset(publicAPI, model) {
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
if (model.
|
|
25
|
+
if (model._openGLRenderWindow.getWebgl2()) {
|
|
26
26
|
if (cp.factor !== 0.0) {
|
|
27
27
|
FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::UniformFlow::Impl', ['float cscale = length(vec2(dFdx(gl_FragCoord.z),dFdy(gl_FragCoord.z)));', '//VTK::UniformFlow::Impl'], false).result;
|
|
28
28
|
FSSource = vtkShaderProgram.substitute(FSSource, '//VTK::Depth::Impl', 'gl_FragDepth = gl_FragCoord.z + cfactor*cscale + 0.000016*coffset;').result;
|
|
@@ -12,7 +12,7 @@ function vtkOpenGLScalarBarActor(publicAPI, model) {
|
|
|
12
12
|
publicAPI.buildPass = function (prepass) {
|
|
13
13
|
if (prepass) {
|
|
14
14
|
model.openGLRenderer = publicAPI.getFirstAncestorOfType('vtkOpenGLRenderer');
|
|
15
|
-
model.
|
|
15
|
+
model._openGLRenderWindow = model.openGLRenderer.getParent();
|
|
16
16
|
|
|
17
17
|
if (!model.scalarBarActorHelper.getRenderable()) {
|
|
18
18
|
model.scalarBarActorHelper.setRenderable(model.renderable);
|
|
@@ -29,7 +29,7 @@ function vtkOpenGLScalarBarActor(publicAPI, model) {
|
|
|
29
29
|
if (prepass) {
|
|
30
30
|
var camera = model.openGLRenderer ? model.openGLRenderer.getRenderable().getActiveCamera() : null;
|
|
31
31
|
var tsize = model.openGLRenderer.getTiledSizeAndOrigin();
|
|
32
|
-
model.scalarBarActorHelper.updateAPISpecificData([tsize.usize, tsize.vsize], camera, model.
|
|
32
|
+
model.scalarBarActorHelper.updateAPISpecificData([tsize.usize, tsize.vsize], camera, model._openGLRenderWindow.getRenderable());
|
|
33
33
|
}
|
|
34
34
|
};
|
|
35
35
|
} // ----------------------------------------------------------------------------
|
|
@@ -2,7 +2,7 @@ import Md5 from 'spark-md5';
|
|
|
2
2
|
import macro from '../../macros.js';
|
|
3
3
|
import vtkShaderProgram from './ShaderProgram.js';
|
|
4
4
|
|
|
5
|
-
var SET_GET_FIELDS = ['lastShaderBound', 'context', '
|
|
5
|
+
var SET_GET_FIELDS = ['lastShaderBound', 'context', '_openGLRenderWindow']; // ----------------------------------------------------------------------------
|
|
6
6
|
// vtkShaderCache methods
|
|
7
7
|
// ----------------------------------------------------------------------------
|
|
8
8
|
|
|
@@ -22,7 +22,8 @@ function vtkShaderCache(publicAPI, model) {
|
|
|
22
22
|
nFSSource = vtkShaderProgram.substitute(nFSSource, 'VSOut', 'GSOut').result;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
var gl2 = model.
|
|
25
|
+
var gl2 = model._openGLRenderWindow.getWebgl2();
|
|
26
|
+
|
|
26
27
|
var fragDepthString = '\n';
|
|
27
28
|
var version = '#version 100\n';
|
|
28
29
|
|
|
@@ -165,8 +166,8 @@ function vtkShaderCache(publicAPI, model) {
|
|
|
165
166
|
var DEFAULT_VALUES = {
|
|
166
167
|
lastShaderBound: null,
|
|
167
168
|
shaderPrograms: null,
|
|
168
|
-
context: null,
|
|
169
|
-
|
|
169
|
+
context: null // _openGLRenderWindow: null,
|
|
170
|
+
|
|
170
171
|
}; // ----------------------------------------------------------------------------
|
|
171
172
|
|
|
172
173
|
function extend(publicAPI, model) {
|
|
@@ -176,7 +177,8 @@ function extend(publicAPI, model) {
|
|
|
176
177
|
model.shaderPrograms = {}; // Build VTK API
|
|
177
178
|
|
|
178
179
|
macro.obj(publicAPI, model);
|
|
179
|
-
macro.setGet(publicAPI, model, SET_GET_FIELDS);
|
|
180
|
+
macro.setGet(publicAPI, model, SET_GET_FIELDS);
|
|
181
|
+
macro.moveToProtected(publicAPI, model, ['openGLRenderWindow']); // Object methods
|
|
180
182
|
|
|
181
183
|
vtkShaderCache(publicAPI, model);
|
|
182
184
|
} // ----------------------------------------------------------------------------
|
|
@@ -18,10 +18,10 @@ function vtkOpenGLSkybox(publicAPI, model) {
|
|
|
18
18
|
publicAPI.buildPass = function (prepass) {
|
|
19
19
|
if (prepass) {
|
|
20
20
|
model.openGLRenderer = publicAPI.getFirstAncestorOfType('vtkOpenGLRenderer');
|
|
21
|
-
model.
|
|
22
|
-
model.context = model.
|
|
23
|
-
model.tris.setOpenGLRenderWindow(model.
|
|
24
|
-
model.openGLTexture.setOpenGLRenderWindow(model.
|
|
21
|
+
model._openGLRenderWindow = model.openGLRenderer.getParent();
|
|
22
|
+
model.context = model._openGLRenderWindow.getContext();
|
|
23
|
+
model.tris.setOpenGLRenderWindow(model._openGLRenderWindow);
|
|
24
|
+
model.openGLTexture.setOpenGLRenderWindow(model._openGLRenderWindow);
|
|
25
25
|
var ren = model.openGLRenderer.getRenderable();
|
|
26
26
|
model.openGLCamera = model.openGLRenderer.getViewNodeFor(ren.getActiveCamera());
|
|
27
27
|
}
|
|
@@ -41,8 +41,10 @@ function vtkOpenGLSkybox(publicAPI, model) {
|
|
|
41
41
|
if (prepass && !model.openGLRenderer.getSelector()) {
|
|
42
42
|
publicAPI.updateBufferObjects();
|
|
43
43
|
model.context.depthMask(true);
|
|
44
|
-
|
|
45
|
-
model.
|
|
44
|
+
|
|
45
|
+
model._openGLRenderWindow.getShaderCache().readyShaderProgram(model.tris.getProgram());
|
|
46
|
+
|
|
47
|
+
model.openGLTexture.render(model._openGLRenderWindow);
|
|
46
48
|
var texUnit = model.openGLTexture.getTextureUnit();
|
|
47
49
|
model.tris.getProgram().setUniformi('sbtexture', texUnit);
|
|
48
50
|
var ren = model.openGLRenderer.getRenderable();
|
|
@@ -115,12 +117,12 @@ function vtkOpenGLSkybox(publicAPI, model) {
|
|
|
115
117
|
// But now we're stuck with it. From
|
|
116
118
|
// https://stackoverflow.com/questions/11685608/convention-of-faces-in-opengl-cubemapping
|
|
117
119
|
//
|
|
118
|
-
model.tris.setProgram(model.
|
|
120
|
+
model.tris.setProgram(model._openGLRenderWindow.getShaderCache().readyShaderProgramArray("//VTK::System::Dec\n attribute vec3 vertexMC;\n uniform mat4 IMCPCMatrix;\n varying vec3 TexCoords;\n void main () {\n gl_Position = vec4(vertexMC.xyz, 1.0);\n vec4 wpos = IMCPCMatrix * gl_Position;\n TexCoords = wpos.xyz/wpos.w;\n }", "//VTK::System::Dec\n //VTK::Output::Dec\n varying vec3 TexCoords;\n uniform samplerCube sbtexture;\n uniform vec3 camPos;\n void main () {\n // skybox looks from inside out\n // which means we have to adjust\n // our tcoords. Otherwise text would\n // be flipped\n vec3 tc = normalize(TexCoords - camPos);\n if (abs(tc.z) < max(abs(tc.x),abs(tc.y)))\n {\n tc = vec3(1.0, 1.0, -1.0) * tc;\n }\n else\n {\n tc = vec3(-1.0, 1.0, 1.0) * tc;\n }\n gl_FragData[0] = textureCube(sbtexture, tc);\n }", ''));
|
|
119
121
|
}
|
|
120
122
|
|
|
121
123
|
if (model.lastFormat === 'background') {
|
|
122
124
|
// maps the texture to the window
|
|
123
|
-
model.tris.setProgram(model.
|
|
125
|
+
model.tris.setProgram(model._openGLRenderWindow.getShaderCache().readyShaderProgramArray("//VTK::System::Dec\n attribute vec3 vertexMC;\n uniform mat4 IMCPCMatrix;\n varying vec2 TexCoords;\n void main () {\n gl_Position = vec4(vertexMC.xyz, 1.0);\n vec4 wpos = IMCPCMatrix * gl_Position;\n TexCoords = vec2(vertexMC.x, vertexMC.y)*0.5 + 0.5;\n }", "//VTK::System::Dec\n //VTK::Output::Dec\n varying vec2 TexCoords;\n uniform sampler2D sbtexture;\n void main () {\n gl_FragData[0] = texture2D(sbtexture, TexCoords);\n }", ''));
|
|
124
126
|
}
|
|
125
127
|
|
|
126
128
|
model.tris.getShaderSourceTime().modified();
|
|
@@ -139,7 +141,7 @@ function vtkOpenGLSkybox(publicAPI, model) {
|
|
|
139
141
|
}
|
|
140
142
|
|
|
141
143
|
if (model.openGLTexture.getRenderable() !== tmaps[0]) {
|
|
142
|
-
model.openGLTexture.releaseGraphicsResources(model.
|
|
144
|
+
model.openGLTexture.releaseGraphicsResources(model._openGLRenderWindow);
|
|
143
145
|
model.openGLTexture.setRenderable(tmaps[0]);
|
|
144
146
|
}
|
|
145
147
|
};
|
|
@@ -47,7 +47,7 @@ function vtkOpenGLSphereMapper(publicAPI, model) {
|
|
|
47
47
|
fragString = 'gl_FragDepthEXT = (pos.z / pos.w + 1.0) / 2.0;\n';
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
if (model.
|
|
50
|
+
if (model._openGLRenderWindow.getWebgl2()) {
|
|
51
51
|
fragString = 'gl_FragDepth = (pos.z / pos.w + 1.0) / 2.0;\n';
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -157,7 +157,7 @@ function vtkOpenGLSphereMapper(publicAPI, model) {
|
|
|
157
157
|
vbo.setColorBO(vtkBufferObject.newInstance());
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
-
vbo.getColorBO().setOpenGLRenderWindow(model.
|
|
160
|
+
vbo.getColorBO().setOpenGLRenderWindow(model._openGLRenderWindow);
|
|
161
161
|
} else if (vbo.getColorBO()) {
|
|
162
162
|
vbo.setColorBO(null);
|
|
163
163
|
}
|
|
@@ -46,7 +46,7 @@ function vtkOpenGLStickMapper(publicAPI, model) {
|
|
|
46
46
|
fragString = ' gl_FragDepthEXT = (pos.z / pos.w + 1.0) / 2.0;\n';
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
if (model.
|
|
49
|
+
if (model._openGLRenderWindow.getWebgl2()) {
|
|
50
50
|
fragString = 'gl_FragDepth = (pos.z / pos.w + 1.0) / 2.0;\n';
|
|
51
51
|
} // see https://www.cl.cam.ac.uk/teaching/1999/AGraphHCI/SMAG/node2.html
|
|
52
52
|
|
|
@@ -172,7 +172,7 @@ function vtkOpenGLStickMapper(publicAPI, model) {
|
|
|
172
172
|
vbo.setColorBO(vtkBufferObject.newInstance());
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
vbo.getColorBO().setOpenGLRenderWindow(model.
|
|
175
|
+
vbo.getColorBO().setOpenGLRenderWindow(model._openGLRenderWindow);
|
|
176
176
|
|
|
177
177
|
if (c) {
|
|
178
178
|
colorComponents = c.getNumberOfComponents();
|
|
@@ -95,20 +95,20 @@ function allocateVectorBuffer(openGLRenderWindow, size) {
|
|
|
95
95
|
function vtkLICPingPongBufferManager(publicAPI, model) {
|
|
96
96
|
model.classHierarchy.push('vtkLICPingPongBufferManager');
|
|
97
97
|
|
|
98
|
-
if (!model.
|
|
98
|
+
if (!model._openGLRenderWindow) {
|
|
99
99
|
console.error('Pass renderwindow to ping pong manager');
|
|
100
100
|
return;
|
|
101
101
|
} // Don't handle bind/restoring framebuffers, assume it has been done upstream
|
|
102
102
|
|
|
103
103
|
|
|
104
|
-
model.quad = getQuadPoly(model.
|
|
105
|
-
model.context = model.
|
|
106
|
-
model.licTexture0 = allocateLICBuffer(model.
|
|
107
|
-
model.seedTexture0 = allocateLICBuffer(model.
|
|
108
|
-
model.licTexture1 = allocateLICBuffer(model.
|
|
109
|
-
model.seedTexture1 = allocateLICBuffer(model.
|
|
110
|
-
model.eeTexture = model.doEEPass ? allocateNoiseBuffer(model.
|
|
111
|
-
model.imageVectorTexture = model.doVTPass ? allocateVectorBuffer(model.
|
|
104
|
+
model.quad = getQuadPoly(model._openGLRenderWindow);
|
|
105
|
+
model.context = model._openGLRenderWindow.getContext();
|
|
106
|
+
model.licTexture0 = allocateLICBuffer(model._openGLRenderWindow, model.size);
|
|
107
|
+
model.seedTexture0 = allocateLICBuffer(model._openGLRenderWindow, model.size);
|
|
108
|
+
model.licTexture1 = allocateLICBuffer(model._openGLRenderWindow, model.size);
|
|
109
|
+
model.seedTexture1 = allocateLICBuffer(model._openGLRenderWindow, model.size);
|
|
110
|
+
model.eeTexture = model.doEEPass ? allocateNoiseBuffer(model._openGLRenderWindow, model.size) : null;
|
|
111
|
+
model.imageVectorTexture = model.doVTPass ? allocateVectorBuffer(model._openGLRenderWindow, model.size) : null;
|
|
112
112
|
model.pingTextures[0] = model.licTexture0;
|
|
113
113
|
model.pingTextures[1] = model.seedTexture0;
|
|
114
114
|
model.pongTextures[0] = model.licTexture1;
|
|
@@ -127,7 +127,7 @@ function vtkLICPingPongBufferManager(publicAPI, model) {
|
|
|
127
127
|
|
|
128
128
|
if (!VAO) {
|
|
129
129
|
VAO = vtkVertexArrayObject.newInstance();
|
|
130
|
-
VAO.setOpenGLRenderWindow(model.
|
|
130
|
+
VAO.setOpenGLRenderWindow(model._openGLRenderWindow);
|
|
131
131
|
model.quadVAO = VAO;
|
|
132
132
|
}
|
|
133
133
|
|
|
@@ -417,7 +417,7 @@ function vtkLICPingPongBufferManager(publicAPI, model) {
|
|
|
417
417
|
}
|
|
418
418
|
|
|
419
419
|
var DEFAULT_VALUES = {
|
|
420
|
-
|
|
420
|
+
// _openGLRenderWindow: null,
|
|
421
421
|
vectorTexture: null,
|
|
422
422
|
maskVectorTexture: null,
|
|
423
423
|
noiseTexture: null,
|
|
@@ -437,7 +437,8 @@ function extend(publicAPI, model) {
|
|
|
437
437
|
Object.assign(model, DEFAULT_VALUES, initialValues);
|
|
438
438
|
macro.obj(publicAPI, model);
|
|
439
439
|
macro.get(publicAPI, model, ['readIndex']);
|
|
440
|
-
macro.setGet(publicAPI, model, ['doEEPass', 'doVTPass', '
|
|
440
|
+
macro.setGet(publicAPI, model, ['doEEPass', 'doVTPass', '_openGLRenderWindow', 'vectorTexture', 'maskVectorTexture', 'noiseTexture', 'framebuffer', 'size']);
|
|
441
|
+
macro.moveToProtected(publicAPI, model, ['openGLRenderWindow']); // Object methods
|
|
441
442
|
|
|
442
443
|
vtkLICPingPongBufferManager(publicAPI, model);
|
|
443
444
|
} // ----------------------------------------------------------------------------
|
|
@@ -33,7 +33,7 @@ function vtkLineIntegralConvolution2D(publicAPI, model) {
|
|
|
33
33
|
model.classHierarchy.push('vtkLineIntegralConvolution2D');
|
|
34
34
|
|
|
35
35
|
publicAPI.buildAShader = function (fSource) {
|
|
36
|
-
return model.
|
|
36
|
+
return model._openGLRenderWindow.getShaderCache().readyShaderProgramArray(vtkLineIntegralConvolution2D_quadVS, fSource, '');
|
|
37
37
|
};
|
|
38
38
|
|
|
39
39
|
publicAPI.dumpTextureValues = function (texture, _ref) {
|
|
@@ -42,7 +42,7 @@ function vtkLineIntegralConvolution2D(publicAPI, model) {
|
|
|
42
42
|
height = _ref2[1];
|
|
43
43
|
|
|
44
44
|
var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : model.context;
|
|
45
|
-
var openGLRenderWindow = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : model.
|
|
45
|
+
var openGLRenderWindow = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : model._openGLRenderWindow;
|
|
46
46
|
var nComp = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 4;
|
|
47
47
|
// To get texture values in es 2.0, we need to attach the texture to a fbo,
|
|
48
48
|
// then use glReadPixels
|
|
@@ -62,7 +62,7 @@ function vtkLineIntegralConvolution2D(publicAPI, model) {
|
|
|
62
62
|
|
|
63
63
|
publicAPI.getTextureMinMax = function (texture, size) {
|
|
64
64
|
var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : model.context;
|
|
65
|
-
var openGLRenderWindow = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : model.
|
|
65
|
+
var openGLRenderWindow = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : model._openGLRenderWindow;
|
|
66
66
|
var values = publicAPI.dumpTextureValues(texture, size, context, openGLRenderWindow, 4);
|
|
67
67
|
var min = Number.MAX_VALUE;
|
|
68
68
|
var max = Number.MIN_VALUE;
|
|
@@ -120,7 +120,7 @@ function vtkLineIntegralConvolution2D(publicAPI, model) {
|
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
publicAPI.executeLIC = function (size, vectorTexture, maskVectorTexture, noiseTexture, openGLRenderWindow, options) {
|
|
123
|
-
model.
|
|
123
|
+
model._openGLRenderWindow = openGLRenderWindow;
|
|
124
124
|
model.context = openGLRenderWindow.getContext();
|
|
125
125
|
Object.assign(model, options);
|
|
126
126
|
|
|
@@ -142,7 +142,7 @@ function vtkLineIntegralConvolution2D(publicAPI, model) {
|
|
|
142
142
|
var _fb;
|
|
143
143
|
|
|
144
144
|
fb = vtkOpenGLFramebuffer.newInstance();
|
|
145
|
-
fb.setOpenGLRenderWindow(model.
|
|
145
|
+
fb.setOpenGLRenderWindow(model._openGLRenderWindow);
|
|
146
146
|
fb.saveCurrentBindingsAndBuffers();
|
|
147
147
|
|
|
148
148
|
(_fb = fb).create.apply(_fb, _toConsumableArray(size));
|
|
@@ -182,7 +182,8 @@ function vtkLineIntegralConvolution2D(publicAPI, model) {
|
|
|
182
182
|
var noiseBoundsPt1 = [(noiseTexture.getWidth() + 1) / size[0], (noiseTexture.getHeight() + 1) / size[1]];
|
|
183
183
|
var dx = 1.0 / size[0];
|
|
184
184
|
var dy = 1.0 / size[1];
|
|
185
|
-
|
|
185
|
+
|
|
186
|
+
var shaderCache = model._openGLRenderWindow.getShaderCache();
|
|
186
187
|
|
|
187
188
|
if (model.transformVectors) {
|
|
188
189
|
var VTShaderProgram = model.VTProgram;
|
|
@@ -341,9 +342,9 @@ function vtkLineIntegralConvolution2D(publicAPI, model) {
|
|
|
341
342
|
};
|
|
342
343
|
|
|
343
344
|
publicAPI.contrastEnhance = function (isSecondStage, size) {
|
|
344
|
-
var shaderCache = model.
|
|
345
|
+
var shaderCache = model._openGLRenderWindow.getShaderCache();
|
|
345
346
|
|
|
346
|
-
var _publicAPI$getTexture = publicAPI.getTextureMinMax(model.bufs.getLastLICBuffer(), size, model.context, model.
|
|
347
|
+
var _publicAPI$getTexture = publicAPI.getTextureMinMax(model.bufs.getLastLICBuffer(), size, model.context, model._openGLRenderWindow),
|
|
347
348
|
min = _publicAPI$getTexture.min,
|
|
348
349
|
max = _publicAPI$getTexture.max;
|
|
349
350
|
|
|
@@ -390,7 +391,8 @@ function extend(publicAPI, model) {
|
|
|
390
391
|
var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
391
392
|
Object.assign(model, DEFAULT_VALUES, initialValues);
|
|
392
393
|
macro.obj(publicAPI, model);
|
|
393
|
-
macro.setGet(publicAPI, model, ['context', '
|
|
394
|
+
macro.setGet(publicAPI, model, ['context', '_openGLRenderWindow', 'nuberOfSteps', 'stepSize', 'normalizeVectors', 'maskThreshold', 'enhancedLIC', 'enhanceContrast', 'lowLICContrastEnhancementFactor', 'highLICContrastEnhancementFactor', 'antiAlias', 'componentIds', 'isComposite']);
|
|
395
|
+
macro.moveToProtected(publicAPI, model, ['openGLRenderWindow']); // Object methods
|
|
394
396
|
|
|
395
397
|
vtkLineIntegralConvolution2D(publicAPI, model);
|
|
396
398
|
} // ----------------------------------------------------------------------------
|
|
@@ -73,7 +73,7 @@ function vtkOpenGLSurfaceLICInterface(publicAPI, model) {
|
|
|
73
73
|
|
|
74
74
|
if (!VAO) {
|
|
75
75
|
VAO = vtkVertexArrayObject.newInstance();
|
|
76
|
-
VAO.setOpenGLRenderWindow(model.
|
|
76
|
+
VAO.setOpenGLRenderWindow(model._openGLRenderWindow);
|
|
77
77
|
model.licQuadVAO = VAO;
|
|
78
78
|
}
|
|
79
79
|
|
|
@@ -237,7 +237,7 @@ function vtkOpenGLSurfaceLICInterface(publicAPI, model) {
|
|
|
237
237
|
maxLevel: 0,
|
|
238
238
|
autoParameters: false
|
|
239
239
|
});
|
|
240
|
-
texture.setOpenGLRenderWindow(model.
|
|
240
|
+
texture.setOpenGLRenderWindow(model._openGLRenderWindow);
|
|
241
241
|
texture.create2DFromRaw(length, length, 4, 'Float32Array', values);
|
|
242
242
|
texture.activate();
|
|
243
243
|
texture.sendParameters();
|
|
@@ -247,13 +247,13 @@ function vtkOpenGLSurfaceLICInterface(publicAPI, model) {
|
|
|
247
247
|
};
|
|
248
248
|
|
|
249
249
|
publicAPI.buildAShader = function (fSource) {
|
|
250
|
-
return model.
|
|
250
|
+
return model._openGLRenderWindow.getShaderCache().readyShaderProgramArray(vtkLineIntegralConvolution2D_quadVS, fSource, '');
|
|
251
251
|
};
|
|
252
252
|
|
|
253
253
|
publicAPI.allocateTextures = function () {
|
|
254
254
|
var nearest = vtkOpenGLTexture.Filter.NEAREST;
|
|
255
255
|
var linear = vtkOpenGLTexture.Filter.LINEAR;
|
|
256
|
-
var rw = model.
|
|
256
|
+
var rw = model._openGLRenderWindow;
|
|
257
257
|
|
|
258
258
|
if (!model.geometryImage) {
|
|
259
259
|
model.geometryImage = publicAPI.allocateTexture(rw, nearest);
|
|
@@ -326,7 +326,7 @@ function vtkOpenGLSurfaceLICInterface(publicAPI, model) {
|
|
|
326
326
|
model.licHelper = null; // All buffers need rebuilding
|
|
327
327
|
|
|
328
328
|
var fb = vtkOpenGLFramebuffer.newInstance();
|
|
329
|
-
fb.setOpenGLRenderWindow(model.
|
|
329
|
+
fb.setOpenGLRenderWindow(model._openGLRenderWindow);
|
|
330
330
|
fb.saveCurrentBindingsAndBuffers();
|
|
331
331
|
fb.create.apply(fb, _toConsumableArray(model.size));
|
|
332
332
|
fb.populateFramebuffer();
|
|
@@ -362,7 +362,7 @@ function vtkOpenGLSurfaceLICInterface(publicAPI, model) {
|
|
|
362
362
|
publicAPI.buildAllShaders();
|
|
363
363
|
|
|
364
364
|
if (!model.licQuad) {
|
|
365
|
-
model.licQuad = getQuadPoly(model.
|
|
365
|
+
model.licQuad = getQuadPoly(model._openGLRenderWindow);
|
|
366
366
|
}
|
|
367
367
|
|
|
368
368
|
if (!model.licHelper) {
|
|
@@ -406,7 +406,9 @@ function vtkOpenGLSurfaceLICInterface(publicAPI, model) {
|
|
|
406
406
|
}
|
|
407
407
|
|
|
408
408
|
var copyPass = model.licCopyPass;
|
|
409
|
-
|
|
409
|
+
|
|
410
|
+
model._openGLRenderWindow.getShaderCache().readyShaderProgram(copyPass);
|
|
411
|
+
|
|
410
412
|
var gl = model.context;
|
|
411
413
|
gl.viewport.apply(gl, [0, 0].concat(_toConsumableArray(windowSize)));
|
|
412
414
|
gl.scissor.apply(gl, [0, 0].concat(_toConsumableArray(windowSize)));
|
|
@@ -443,7 +445,9 @@ function vtkOpenGLSurfaceLICInterface(publicAPI, model) {
|
|
|
443
445
|
}
|
|
444
446
|
|
|
445
447
|
var colorPass = model.licColorPass;
|
|
446
|
-
|
|
448
|
+
|
|
449
|
+
model._openGLRenderWindow.getShaderCache().readyShaderProgram(colorPass);
|
|
450
|
+
|
|
447
451
|
colorPass.setUniformi('texVectors', model.vectorImage.getTextureUnit());
|
|
448
452
|
colorPass.setUniformi('texGeomColors', model.geometryImage.getTextureUnit());
|
|
449
453
|
|
|
@@ -490,7 +494,9 @@ function vtkOpenGLSurfaceLICInterface(publicAPI, model) {
|
|
|
490
494
|
}
|
|
491
495
|
|
|
492
496
|
var enhanceContrastPass = model.enhanceContrastPass;
|
|
493
|
-
|
|
497
|
+
|
|
498
|
+
model._openGLRenderWindow.getShaderCache().readyShaderProgram(enhanceContrastPass);
|
|
499
|
+
|
|
494
500
|
enhanceContrastPass.setUniformi('texGeomColors', model.geometryImage.getTextureUnit());
|
|
495
501
|
enhanceContrastPass.setUniformi('texHSLColors', model.HSLColorImage.getTextureUnit());
|
|
496
502
|
enhanceContrastPass.setUniformi('texLIC', model.LICImage.getTextureUnit());
|
|
@@ -509,7 +515,7 @@ function vtkOpenGLSurfaceLICInterface(publicAPI, model) {
|
|
|
509
515
|
|
|
510
516
|
publicAPI.applyLIC = function () {
|
|
511
517
|
var options = model.licInterface.get('stepSize', 'numberOfSteps', 'enhancedLIC', 'enhanceContrast', 'lowLICContrastEnhancementFactor', 'highLICContrastEnhancementFactor', 'antiAlias', 'normalizeVectors', 'maskThreshold', 'transformVectors');
|
|
512
|
-
var resultTexture = model.licHelper.executeLIC(model.size, model.vectorImage, model.maskVectorImage, model.noiseTexture, model.
|
|
518
|
+
var resultTexture = model.licHelper.executeLIC(model.size, model.vectorImage, model.maskVectorImage, model.noiseTexture, model._openGLRenderWindow, options);
|
|
513
519
|
|
|
514
520
|
if (!resultTexture) {
|
|
515
521
|
console.error('Failed to compute image LIC');
|
|
@@ -575,7 +581,7 @@ function vtkOpenGLSurfaceLICInterface(publicAPI, model) {
|
|
|
575
581
|
|
|
576
582
|
var DEFAULT_VALUES = {
|
|
577
583
|
context: null,
|
|
578
|
-
|
|
584
|
+
// _openGLRenderWindow: null,
|
|
579
585
|
shadersNeedBuilding: true,
|
|
580
586
|
reallocateTextures: true,
|
|
581
587
|
size: null,
|
|
@@ -587,7 +593,8 @@ function extend(publicAPI, model) {
|
|
|
587
593
|
|
|
588
594
|
vtkSurfaceLICInterface.extend(publicAPI, model, initialValues);
|
|
589
595
|
macro.obj(publicAPI, model);
|
|
590
|
-
macro.setGet(publicAPI, model, ['context', '
|
|
596
|
+
macro.setGet(publicAPI, model, ['context', '_openGLRenderWindow', 'reallocateTextures', 'licInterface', 'size']);
|
|
597
|
+
macro.moveToProtected(publicAPI, model, ['openGLRenderWindow']); // Object methods
|
|
591
598
|
|
|
592
599
|
vtkOpenGLSurfaceLICInterface(publicAPI, model);
|
|
593
600
|
} // ----------------------------------------------------------------------------
|
|
@@ -104,7 +104,7 @@ function vtkOpenGLSurfaceLICMapper(publicAPI, model) {
|
|
|
104
104
|
publicAPI.renderPiece = function (ren, actor) {
|
|
105
105
|
var canDrawLIC = true; // Check for gl compatibility
|
|
106
106
|
|
|
107
|
-
var gl2 = model.
|
|
107
|
+
var gl2 = model._openGLRenderWindow.getWebgl2();
|
|
108
108
|
|
|
109
109
|
if (!gl2) {
|
|
110
110
|
vtkErrorMacro('SurfaceLICMapper Requires WebGL 2');
|
|
@@ -171,21 +171,24 @@ function vtkOpenGLSurfaceLICMapper(publicAPI, model) {
|
|
|
171
171
|
var frontfaceCulling = actor.getProperty().getFrontfaceCulling();
|
|
172
172
|
|
|
173
173
|
if (!backfaceCulling && !frontfaceCulling) {
|
|
174
|
-
model.
|
|
174
|
+
model._openGLRenderWindow.disableCullFace();
|
|
175
175
|
} else if (frontfaceCulling) {
|
|
176
|
-
model.
|
|
176
|
+
model._openGLRenderWindow.enableCullFace();
|
|
177
|
+
|
|
177
178
|
gl.cullFace(gl.FRONT);
|
|
178
179
|
} else {
|
|
179
|
-
model.
|
|
180
|
+
model._openGLRenderWindow.enableCullFace();
|
|
181
|
+
|
|
180
182
|
gl.cullFace(gl.BACK);
|
|
181
183
|
}
|
|
182
184
|
|
|
183
|
-
var windowSize = model.
|
|
185
|
+
var windowSize = model._openGLRenderWindow.getSize();
|
|
186
|
+
|
|
184
187
|
var size = windowSize.map(function (i) {
|
|
185
188
|
return Math.round(i * licInterface.getViewPortScale());
|
|
186
189
|
});
|
|
187
190
|
model.openGLLicInterface.setSize(size);
|
|
188
|
-
model.openGLLicInterface.setOpenGLRenderWindow(model.
|
|
191
|
+
model.openGLLicInterface.setOpenGLRenderWindow(model._openGLRenderWindow);
|
|
189
192
|
model.openGLLicInterface.setContext(model.context); // Pre-render
|
|
190
193
|
|
|
191
194
|
publicAPI.pushState(model.context);
|