11import type { ArrayType } from "./math/types" ;
2+ import type { Scene } from "./rendering/scene" ;
23import { character_to_uint , SB_TOKENS , string_to_uint , type StringBuffer } from "./utils/string_buffer" ;
34
45export type vec3 = [ number , number , number ] ;
@@ -130,7 +131,7 @@ export function build_3d_svg_legacy(vertices:ArrayType, end:number, use_rect:boo
130131 const thickness = 0.005 ;
131132
132133
133- for ( let i = 0 ; i < n ; i += 6 ) {
134+ for ( let i = 0 ; i < n ; i += 9 ) {
134135 const x1 = vertices [ i ] ;
135136 const y1 = vertices [ i + 1 ] ;
136137
@@ -168,7 +169,7 @@ const PATH_TOKENS = {
168169export function build_3d_svg ( vertices :ArrayType , end :number , wireframe_mode :boolean , buffer :StringBuffer ) :string {
169170 buffer . reset ( ) ;
170171 buffer . write_chunk ( PATH_TOKENS . HEAD ) ;
171- for ( let i = 0 ; i < end ; i += 6 ) {
172+ for ( let i = 0 ; i < end ; i += 9 ) {
172173 const x1 = vertices [ i ] ;
173174 const y1 = vertices [ i + 1 ] ;
174175
@@ -192,4 +193,42 @@ export function build_3d_svg(vertices:ArrayType, end:number, wireframe_mode:bool
192193 buffer . write_chunk ( PATH_TOKENS . TAIL_SOLID ) ;
193194 }
194195 return decoder . decode ( buffer . buffer . subarray ( 0 , buffer . cursor ) ) ;
196+ }
197+
198+
199+
200+
201+
202+ export function build_scene ( scene :Scene , wireframe_mode : boolean , buffer :StringBuffer ) :string {
203+ buffer . reset ( ) ;
204+ if ( wireframe_mode )
205+ buffer . write_chunk ( PATH_TOKENS . HEAD ) ;
206+ const vertices = scene . scene_buffer ;
207+ for ( let i = 0 ; i < scene . draw_end ; i ++ ) {
208+ const index = scene . draw_order [ i ] ;
209+ const x1 = vertices [ index ] ;
210+ const y1 = vertices [ index + 1 ] ;
211+
212+ const x2 = vertices [ index + 3 ] ;
213+ const y2 = vertices [ index + 4 ] ;
214+
215+ const x3 = vertices [ index + 6 ] ;
216+ const y3 = vertices [ index + 7 ] ;
217+
218+ if ( ! wireframe_mode )
219+ buffer . write_chunk ( PATH_TOKENS . HEAD ) ;
220+ buffer . write_chunk ( PATH_TOKENS . M ) ;
221+ push_pair ( x1 , y1 , buffer ) ;
222+ buffer . write_chunk ( PATH_TOKENS . L ) ;
223+ push_pair ( x2 , y2 , buffer ) ;
224+ buffer . write_chunk ( PATH_TOKENS . L ) ;
225+ push_pair ( x3 , y3 , buffer ) ;
226+ buffer . write_chunk ( PATH_TOKENS . Z ) ;
227+ if ( ! wireframe_mode )
228+ buffer . write_chunk ( PATH_TOKENS . TAIL_SOLID ) ;
229+ }
230+ if ( wireframe_mode ) {
231+ buffer . write_chunk ( PATH_TOKENS . TAIL_WIREFRAME ) ;
232+ }
233+ return decoder . decode ( buffer . buffer . subarray ( 0 , buffer . cursor ) ) ;
195234}
0 commit comments