11import math
2+ from copy import copy , deepcopy
23
34from panda3d .core import Texture , Shader , NodePath , LVecBase3i , ShaderAttrib , GeomEnums , GeomNode , \
45 GeomVertexFormat , GeomVertexData , GeomTriangles , Geom , OmniBoundingVolume , Material , LColor , SamplerState , \
@@ -29,7 +30,7 @@ def __init__(self, cubeformer: CubeFormer):
2930
3031 def EdgeGenerator (self ) -> Texture :
3132 if self .edgeVertexBuffer is None :
32- self .edgeVertexBuffer = Texture ("edge vertex buffer" )
33+ self .edgeVertexBuffer = deepcopy ( Texture ("edge vertex buffer" ) )
3334 self .edgeVertexBuffer .setup_3d_texture (self .size [0 ]* 3 , self .size [1 ], self .size [2 ],
3435 Texture .T_float , Texture .F_rgba32 )
3536 else :
@@ -53,21 +54,21 @@ def EdgeGenerator(self) -> Texture:
5354
5455 def MarchCube (self ):
5556 if self .atomic is None :
56- self .atomic = Texture ("atomic int" )
57+ self .atomic = copy ( Texture ("atomic int" ) )
5758 self .atomic .setupBufferTexture (1 , Texture .T_int , Texture .F_r32i , GeomEnums .UH_dynamic )
5859
5960 if self .triangleBuffer is None :
60- self .triangleBuffer = Texture ("Cube march triangle Buffer" )
61+ self .triangleBuffer = deepcopy ( Texture ("Cube march triangle Buffer" ) )
6162 self .triangleBuffer .setupBufferTexture ((self .size [0 ]- 1 )* (self .size [1 ]- 1 )* (self .size [2 ]- 1 )* 4 * 3 ,
6263 Texture .T_int , Texture .F_rgba32 , GeomEnums .UH_dynamic )
63- self .normalBuffer = Texture ("Cube march normal Buffer" )
64+ self .normalBuffer = deepcopy ( Texture ("Cube march normal Buffer" ) )
6465 self .normalBuffer .setupBufferTexture ((self .size [0 ] - 1 ) * (self .size [1 ] - 1 ) * (self .size [2 ] - 1 ) * 4 ,
6566 Texture .T_float , Texture .F_rgba32 , GeomEnums .UH_dynamic )
6667 else :
6768 self .triangleBuffer .setClearColor (- 1 )
6869
6970 if self .triangulationBuffer is None :
70- self .triangulationBuffer = Texture ("Triangulation buffer" )
71+ self .triangulationBuffer = deepcopy ( Texture ("Triangulation buffer" ) )
7172 self .triangulationBuffer .setup_2d_texture (16 , 256 , Texture .T_int , Texture .F_r32i )
7273 self .triangulationBuffer .set_ram_image (MarchTable .TRIANGULATION .tobytes ())
7374 else :
@@ -77,6 +78,7 @@ def MarchCube(self):
7778 shader = Shader .load_compute (Shader .SL_GLSL , "assets/shaders/compute/cubemarcher.glsl" )
7879 self .cubeMarchBufferGeneratorNode = NodePath ("Cube march triangle Generator" )
7980 self .cubeMarchBufferGeneratorNode .set_shader (shader )
81+ self .cubeMarchBufferGeneratorNode .set_shader_input ("isWater" , self .cubeformer .isWater )
8082 self .cubeMarchBufferGeneratorNode .set_shader_input ("isoLevel" , 0.5 )
8183 self .cubeMarchBufferGeneratorNode .set_shader_input ("size" , self .size )
8284 self .cubeMarchBufferGeneratorNode .set_shader_input ("triagIndexBuffer" , self .atomic )
0 commit comments