|
@@ -33,7 +33,7 @@ class Pipelines extends DataMap {
|
|
|
|
|
|
// release previous cache
|
|
|
|
|
|
- this._releasePipeline( computeNode );
|
|
|
+ const previousPipeline = this._releasePipeline( computeNode );
|
|
|
|
|
|
// get shader
|
|
|
|
|
@@ -45,6 +45,8 @@ class Pipelines extends DataMap {
|
|
|
|
|
|
if ( stageCompute === undefined ) {
|
|
|
|
|
|
+ if ( previousPipeline ) this._releaseProgram( previousPipeline.computeShader );
|
|
|
+
|
|
|
stageCompute = new ProgrammableStage( nodeBuilder.computeShader, 'compute' );
|
|
|
this.programs.compute.set( nodeBuilder.computeShader, stageCompute );
|
|
|
|
|
@@ -81,7 +83,7 @@ class Pipelines extends DataMap {
|
|
|
|
|
|
// release previous cache
|
|
|
|
|
|
- this._releasePipeline( renderObject );
|
|
|
+ const previousPipeline = this._releasePipeline( renderObject );
|
|
|
|
|
|
// get shader
|
|
|
|
|
@@ -93,6 +95,8 @@ class Pipelines extends DataMap {
|
|
|
|
|
|
if ( stageVertex === undefined ) {
|
|
|
|
|
|
+ if ( previousPipeline ) this._releaseProgram( previousPipeline.vertexProgram );
|
|
|
+
|
|
|
stageVertex = new ProgrammableStage( nodeBuilder.vertexShader, 'vertex' );
|
|
|
this.programs.vertex.set( nodeBuilder.vertexShader, stageVertex );
|
|
|
|
|
@@ -104,6 +108,8 @@ class Pipelines extends DataMap {
|
|
|
|
|
|
if ( stageFragment === undefined ) {
|
|
|
|
|
|
+ if ( previousPipeline ) this._releaseProgram( previousPipeline.fragmentShader );
|
|
|
+
|
|
|
stageFragment = new ProgrammableStage( nodeBuilder.fragmentShader, 'fragment' );
|
|
|
this.programs.fragment.set( nodeBuilder.fragmentShader, stageFragment );
|
|
|
|
|
@@ -133,7 +139,18 @@ class Pipelines extends DataMap {
|
|
|
|
|
|
delete( object ) {
|
|
|
|
|
|
- this._releasePipeline( object );
|
|
|
+ const pipeline = this._releasePipeline( object );
|
|
|
+
|
|
|
+ if ( pipeline.isComputePipeline ) {
|
|
|
+
|
|
|
+ this._releaseProgram( pipeline.computeProgram );
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ this._releaseProgram( pipeline.vertexProgram );
|
|
|
+ this._releaseProgram( pipeline.fragmentProgram );
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
super.delete( object );
|
|
|
|
|
@@ -236,19 +253,10 @@ class Pipelines extends DataMap {
|
|
|
|
|
|
this.caches.delete( pipeline.cacheKey );
|
|
|
|
|
|
- if ( pipeline.isComputePipeline ) {
|
|
|
-
|
|
|
- this._releaseProgram( pipeline.computeProgram );
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
- this._releaseProgram( pipeline.vertexProgram );
|
|
|
- this._releaseProgram( pipeline.fragmentProgram );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
}
|
|
|
|
|
|
+ return pipeline;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
_releaseProgram( program ) {
|