5
5
BufferAttribute ,
6
6
BufferGeometry ,
7
7
Color ,
8
+ DataTexture ,
8
9
DepthTexture ,
9
10
Group ,
10
11
LineBasicMaterial ,
@@ -16,10 +17,10 @@ import {
16
17
PerspectiveCamera ,
17
18
ShaderMaterial ,
18
19
ShapeGeometry ,
20
+ Texture ,
19
21
Vector2 ,
20
22
Vector3 ,
21
23
WebGLRenderer ,
22
- WebGLRenderTarget ,
23
24
} from "three" ;
24
25
25
26
import FusedChannelData from "./FusedChannelData.js" ;
@@ -37,17 +38,6 @@ import { VolumeRenderSettings, SettingsFlags } from "./VolumeRenderSettings.js";
37
38
38
39
const BOUNDING_BOX_DEFAULT_COLOR = new Color ( 0xffff00 ) ;
39
40
40
- function createEmptyDepthTexture ( renderer : WebGLRenderer ) : DepthTexture {
41
- const depthTexture = new DepthTexture ( 2 , 2 ) ;
42
- const target = new WebGLRenderTarget ( 2 , 2 ) ;
43
- target . depthTexture = depthTexture ;
44
- renderer . setRenderTarget ( target ) ;
45
- // Don't clear color, do clear depth, don't clear stencil
46
- renderer . clear ( false , true , false ) ;
47
- renderer . setRenderTarget ( null ) ;
48
- return depthTexture ;
49
- }
50
-
51
41
export default class RayMarchedAtlasVolume implements VolumeRenderImpl {
52
42
private settings : VolumeRenderSettings ;
53
43
public volume : Volume ;
@@ -59,7 +49,7 @@ export default class RayMarchedAtlasVolume implements VolumeRenderImpl {
59
49
private geometryTransformNode : Group ;
60
50
private uniforms : ReturnType < typeof rayMarchingShaderUniforms > ;
61
51
private channelData ! : FusedChannelData ;
62
- private emptyDepthTex ?: DepthTexture ;
52
+ private emptyPositionTex : DataTexture ;
63
53
64
54
/**
65
55
* Creates a new RayMarchedAtlasVolume.
@@ -89,6 +79,8 @@ export default class RayMarchedAtlasVolume implements VolumeRenderImpl {
89
79
90
80
this . geometryTransformNode . add ( this . boxHelper , this . tickMarksMesh , this . geometryMesh ) ;
91
81
82
+ this . emptyPositionTex = new DataTexture ( new Uint8Array ( Array ( 16 ) . fill ( 0 ) ) , 2 , 2 ) ;
83
+
92
84
this . settings = settings ;
93
85
this . updateSettings ( settings , SettingsFlags . ALL ) ;
94
86
// TODO this is doing *more* redundant work! Fix?
@@ -325,17 +317,15 @@ export default class RayMarchedAtlasVolume implements VolumeRenderImpl {
325
317
public doRender (
326
318
renderer : WebGLRenderer ,
327
319
camera : PerspectiveCamera | OrthographicCamera ,
328
- depthTexture ?: DepthTexture
320
+ depthTexture ?: DepthTexture | Texture
329
321
) : void {
330
322
if ( ! this . geometryMesh . visible ) {
331
323
return ;
332
324
}
333
325
334
- if ( ! this . emptyDepthTex ) {
335
- this . emptyDepthTex = createEmptyDepthTexture ( renderer ) ;
336
- }
337
-
338
- this . setUniform ( "textureDepth" , depthTexture ?? this . emptyDepthTex ) ;
326
+ const depthTex = depthTexture ?? this . emptyPositionTex ;
327
+ this . setUniform ( "textureDepth" , depthTex ) ;
328
+ this . setUniform ( "usingPositionTexture" , ( depthTex as DepthTexture ) . isDepthTexture ? 0 : 1 ) ;
339
329
this . setUniform ( "CLIP_NEAR" , camera . near ) ;
340
330
this . setUniform ( "CLIP_FAR" , camera . far ) ;
341
331
0 commit comments