SPECIALIZED-ARRAY: float
IN: fluids
-STRUCT: float2_t
- { x float }
- { y float } ;
-
-: f2+ ( lhs rhs -- res )
- [ [ x>> ] bi@ + ]
- [ [ y>> ] bi@ + ]
- 2bi float2_t <struct-boa> ; inline
-
-: f2- ( lhs rhs -- res )
- [ [ x>> ] bi@ - ]
- [ [ y>> ] bi@ - ]
- 2bi float2_t <struct-boa> ; inline
-
-: f2*n ( lhs rhs -- res )
- [ [ x>> ] dip * ]
- [ [ y>> ] dip * ]
- 2bi float2_t <struct-boa> ; inline
-
STRUCT: particle_t
- { p float2_t }
- { p' float2_t }
- { m float } ;
+ { p float[2] }
+ { v float[2] }
+ { m float } ;
SPECIALIZED-ARRAY: particle_t
-CONSTANT: gravity S{ float2_t f 0.0 -0.1 }
+CONSTANT: gravity { 0.0 -0.1 }
-:: verlet-integrate-particle ( p dt -- p' )
- p p>> 2.0 f2*n :> v1
- p p'>> :> v2
- gravity dt dt * 1.0 p m>> 2.0 * / * f2*n :> v3
- v1 v2 f2- v3 f2+
- p p m>> particle_t <struct-boa> ; inline
+:: verlet-integrate-particle ( particle dt -- particle' )
+ particle [ p>> ] [ v>> ] bi dt v*n v+
+ gravity dt dt * particle m>> 2 * / v*n v+ :> p'
+ p' particle p>> v- dt v/n :> v'
+ p' v' particle m>> particle_t <struct-boa> ; inline
CONSTANT: initial-particles
particle_t-array{
- S{ particle_t f S{ float2_t f 0.5 0.6 } S{ float2_t f 0.499 0.599 } 1.0 }
- S{ particle_t f S{ float2_t f 0.5 0.6 } S{ float2_t f 0.501 0.599 } 3.0 }
+ S{ particle_t f float-array{ 0.5 0.6 } float-array{ 0 0.1 } 1.0 }
+ S{ particle_t f float-array{ 0.5 0.6 } float-array{ 0.1 0 } 3.0 }
- S{ particle_t f S{ float2_t f 0.5 0.5 } S{ float2_t f 0.5 0.5 } 2.0 }
- S{ particle_t f S{ float2_t f 0.5 0.6 } S{ float2_t f 0.5 0.599 } 1.0 }
- S{ particle_t f S{ float2_t f 0.6 0.5 } S{ float2_t f 0.6 0.5 } 3.0 }
- S{ particle_t f S{ float2_t f 0.7 0.5 } S{ float2_t f 0.7 0.5 } 1.0 }
- S{ particle_t f S{ float2_t f 0.1 0.5 } S{ float2_t f 0.1 0.5 } 5.0 }
- S{ particle_t f S{ float2_t f 0.2 0.5 } S{ float2_t f 0.2 0.5 } 1.0 }
- S{ particle_t f S{ float2_t f 0.3 0.3 } S{ float2_t f 0.3 0.3 } 4.0 }
- S{ particle_t f S{ float2_t f 0.5 0.15 } S{ float2_t f 0.5 0.15 } 1.0 }
- S{ particle_t f S{ float2_t f 0.5 0.1 } S{ float2_t f 0.5 0.1 } 9.0 }
+ S{ particle_t f float-array{ 0.5 0.5 } float-array{ 0.1 0.1 } 2.0 }
+ S{ particle_t f float-array{ 0.5 0.6 } float-array{ -0.1 0 } 1.0 }
+ S{ particle_t f float-array{ 0.6 0.5 } float-array{ 0 -0.1 } 3.0 }
+ S{ particle_t f float-array{ 0.7 0.5 } float-array{ 0.1 0.1 } 1.0 }
+ S{ particle_t f float-array{ 0.1 0.5 } float-array{ -0.1 -0.1 } 5.0 }
+ S{ particle_t f float-array{ 0.2 0.5 } float-array{ 0 0 } 1.0 }
+ S{ particle_t f float-array{ 0.3 0.3 } float-array{ 0 0 } 4.0 }
+ S{ particle_t f float-array{ 0.5 0.15 } float-array{ 0 0 } 1.0 }
+ S{ particle_t f float-array{ 0.5 0.1 } float-array{ 0 0 } 9.0 }
}
: integrate-particles! ( particles dt -- particles )
M:: fluids-world draw-world* ( world -- )
world particles>> [
- [ p>> [ x>> , ] [ y>> , ] bi ] each
+ [ p>> [ first , ] [ second , ] bi ] each
] curry float-array{ } make :> verts
[
- verts world texture>> 50.0 { 320 240 } blended-point-sprite-batch &dispose
-
+ verts world texture>> 30.0 world dim>> { 4 4 } v/
+ blended-point-sprite-batch &dispose
blend-state new set-gpu-state
-
- gaussian-blur &dispose world ramp>> { 1024 768 } step-texture &dispose
- { 1024 768 } draw-texture
- ] with-destructors
- ;
+ gaussian-blur &dispose
+ world ramp>> world dim>> step-texture &dispose
+ world dim>> draw-texture
+ ] with-destructors ;
GAME: fluids {
{ world-class fluids-world }
{ tick-interval-micros $[ 60 fps ] }
} ;
-MAIN: fluids
-
fluids-world H{
{ T{ button-down } [ [
- hand-loc get { 1024 768 } v/ 2 v*n 1 v-n { 1 -1 } v* first2 float2_t <struct-boa>
- dup 2.0 particle_t <struct-boa> suffix
+ hand-loc get >float-array
+ world get dim>> >float-array v/ 2 v*n 1 v-n { 1 -1 } v*
+ float-array{ 0 0.2 } 2.0 particle_t <struct-boa> suffix
] change-particles drop ] }
} set-gestures
ALIAS: libusb_le16_to_cpu libusb_cpu_to_le16
-CONSTANT: LIBUSB_CLASS_PER_INTERFACE 0
-CONSTANT: LIBUSB_CLASS_AUDIO 1
-CONSTANT: LIBUSB_CLASS_COMM 2
-CONSTANT: LIBUSB_CLASS_HID 3
-CONSTANT: LIBUSB_CLASS_PRINTER 7
-CONSTANT: LIBUSB_CLASS_PTP 6
-CONSTANT: LIBUSB_CLASS_MASS_STORAGE 8
-CONSTANT: LIBUSB_CLASS_HUB 9
-CONSTANT: LIBUSB_CLASS_DATA 10
-CONSTANT: LIBUSB_CLASS_VENDOR_SPEC HEX: ff
-TYPEDEF: int libusb_class_code
-
-CONSTANT: LIBUSB_DT_DEVICE HEX: 01
-CONSTANT: LIBUSB_DT_CONFIG HEX: 02
-CONSTANT: LIBUSB_DT_STRING HEX: 03
-CONSTANT: LIBUSB_DT_INTERFACE HEX: 04
-CONSTANT: LIBUSB_DT_ENDPOINT HEX: 05
-CONSTANT: LIBUSB_DT_HID HEX: 21
-CONSTANT: LIBUSB_DT_REPORT HEX: 22
-CONSTANT: LIBUSB_DT_PHYSICAL HEX: 23
-CONSTANT: LIBUSB_DT_HUB HEX: 29
-TYPEDEF: int libusb_descriptor_type
+C-ENUM: libusb_class_code
+ { LIBUSB_CLASS_PER_INTERFACE 0 }
+ { LIBUSB_CLASS_AUDIO 1 }
+ { LIBUSB_CLASS_COMM 2 }
+ { LIBUSB_CLASS_HID 3 }
+ { LIBUSB_CLASS_PRINTER 7 }
+ { LIBUSB_CLASS_PTP 6 }
+ { LIBUSB_CLASS_MASS_STORAGE 8 }
+ { LIBUSB_CLASS_HUB 9 }
+ { LIBUSB_CLASS_DATA 10 }
+ { LIBUSB_CLASS_VENDOR_SPEC HEX: ff } ;
+
+C-ENUM: libusb_descriptor_type
+ { LIBUSB_DT_DEVICE HEX: 01 }
+ { LIBUSB_DT_CONFIG HEX: 02 }
+ { LIBUSB_DT_STRING HEX: 03 }
+ { LIBUSB_DT_INTERFACE HEX: 04 }
+ { LIBUSB_DT_ENDPOINT HEX: 05 }
+ { LIBUSB_DT_HID HEX: 21 }
+ { LIBUSB_DT_REPORT HEX: 22 }
+ { LIBUSB_DT_PHYSICAL HEX: 23 }
+ { LIBUSB_DT_HUB HEX: 29 } ;
CONSTANT: LIBUSB_DT_DEVICE_SIZE 18
CONSTANT: LIBUSB_DT_CONFIG_SIZE 9
CONSTANT: LIBUSB_ENDPOINT_ADDRESS_MASK HEX: 0f
CONSTANT: LIBUSB_ENDPOINT_DIR_MASK HEX: 80
-CONSTANT: LIBUSB_ENDPOINT_IN HEX: 80
-CONSTANT: LIBUSB_ENDPOINT_OUT HEX: 00
-TYPEDEF: int libusb_endpoint_direction
+C-ENUM: libusb_endpoint_direction
+ { LIBUSB_ENDPOINT_IN HEX: 80 }
+ { LIBUSB_ENDPOINT_OUT HEX: 00 } ;
CONSTANT: LIBUSB_TRANSFER_TYPE_MASK HEX: 03
-CONSTANT: LIBUSB_TRANSFER_TYPE_CONTROL 0
-CONSTANT: LIBUSB_TRANSFER_TYPE_ISOCHRONOUS 1
-CONSTANT: LIBUSB_TRANSFER_TYPE_BULK 2
-CONSTANT: LIBUSB_TRANSFER_TYPE_INTERRUPT 3
-TYPEDEF: int libusb_transfer_type
-
-CONSTANT: LIBUSB_REQUEST_GET_STATUS HEX: 00
-CONSTANT: LIBUSB_REQUEST_CLEAR_FEATURE HEX: 01
-CONSTANT: LIBUSB_REQUEST_SET_FEATURE HEX: 03
-CONSTANT: LIBUSB_REQUEST_SET_ADDRESS HEX: 05
-CONSTANT: LIBUSB_REQUEST_GET_DESCRIPTOR HEX: 06
-CONSTANT: LIBUSB_REQUEST_SET_DESCRIPTOR HEX: 07
-CONSTANT: LIBUSB_REQUEST_GET_CONFIGURATION HEX: 08
-CONSTANT: LIBUSB_REQUEST_SET_CONFIGURATION HEX: 09
-CONSTANT: LIBUSB_REQUEST_GET_INTERFACE HEX: 0A
-CONSTANT: LIBUSB_REQUEST_SET_INTERFACE HEX: 0B
-CONSTANT: LIBUSB_REQUEST_SYNCH_FRAME HEX: 0C
-TYPEDEF: int libusb_standard_request
-
-CONSTANT: LIBUSB_REQUEST_TYPE_STANDARD HEX: 00
-CONSTANT: LIBUSB_REQUEST_TYPE_CLASS HEX: 20
-CONSTANT: LIBUSB_REQUEST_TYPE_VENDOR HEX: 40
-CONSTANT: LIBUSB_REQUEST_TYPE_RESERVED HEX: 60
-
-CONSTANT: LIBUSB_RECIPIENT_DEVICE HEX: 00
-CONSTANT: LIBUSB_RECIPIENT_INTERFACE HEX: 01
-CONSTANT: LIBUSB_RECIPIENT_ENDPOINT HEX: 02
-CONSTANT: LIBUSB_RECIPIENT_OTHER HEX: 03
-TYPEDEF: int libusb_request_recipient
+C-ENUM: libusb_transfer_type
+ { LIBUSB_TRANSFER_TYPE_CONTROL 0 }
+ { LIBUSB_TRANSFER_TYPE_ISOCHRONOUS 1 }
+ { LIBUSB_TRANSFER_TYPE_BULK 2 }
+ { LIBUSB_TRANSFER_TYPE_INTERRUPT 3 } ;
+
+C-ENUM: libusb_standard_request
+ { LIBUSB_REQUEST_GET_STATUS HEX: 00 }
+ { LIBUSB_REQUEST_CLEAR_FEATURE HEX: 01 }
+ { LIBUSB_REQUEST_SET_FEATURE HEX: 03 }
+ { LIBUSB_REQUEST_SET_ADDRESS HEX: 05 }
+ { LIBUSB_REQUEST_GET_DESCRIPTOR HEX: 06 }
+ { LIBUSB_REQUEST_SET_DESCRIPTOR HEX: 07 }
+ { LIBUSB_REQUEST_GET_CONFIGURATION HEX: 08 }
+ { LIBUSB_REQUEST_SET_CONFIGURATION HEX: 09 }
+ { LIBUSB_REQUEST_GET_INTERFACE HEX: 0A }
+ { LIBUSB_REQUEST_SET_INTERFACE HEX: 0B }
+ { LIBUSB_REQUEST_SYNCH_FRAME HEX: 0C } ;
+
+C-ENUM: libusb_request_type
+ { LIBUSB_REQUEST_TYPE_STANDARD HEX: 00 }
+ { LIBUSB_REQUEST_TYPE_CLASS HEX: 20 }
+ { LIBUSB_REQUEST_TYPE_VENDOR HEX: 40 }
+ { LIBUSB_REQUEST_TYPE_RESERVED HEX: 60 } ;
+
+C-ENUM: libusb_request_recipient
+ { LIBUSB_RECIPIENT_DEVICE HEX: 00 }
+ { LIBUSB_RECIPIENT_INTERFACE HEX: 01 }
+ { LIBUSB_RECIPIENT_ENDPOINT HEX: 02 }
+ { LIBUSB_RECIPIENT_OTHER HEX: 03 } ;
CONSTANT: LIBUSB_ISO_SYNC_TYPE_MASK HEX: 0C
-CONSTANT: LIBUSB_ISO_SYNC_TYPE_NONE 0
-CONSTANT: LIBUSB_ISO_SYNC_TYPE_ASYNC 1
-CONSTANT: LIBUSB_ISO_SYNC_TYPE_ADAPTIVE 2
-CONSTANT: LIBUSB_ISO_SYNC_TYPE_SYNC 3
-TYPEDEF: int libusb_iso_sync_type
+C-ENUM: libusb_iso_sync_type
+ { LIBUSB_ISO_SYNC_TYPE_NONE 0 }
+ { LIBUSB_ISO_SYNC_TYPE_ASYNC 1 }
+ { LIBUSB_ISO_SYNC_TYPE_ADAPTIVE 2 }
+ { LIBUSB_ISO_SYNC_TYPE_SYNC 3 } ;
CONSTANT: LIBUSB_ISO_USAGE_TYPE_MASK HEX: 30
-CONSTANT: LIBUSB_ISO_USAGE_TYPE_DATA 0
-CONSTANT: LIBUSB_ISO_USAGE_TYPE_FEEDBACK 1
-CONSTANT: LIBUSB_ISO_USAGE_TYPE_IMPLICIT 2
-TYPEDEF: int libusb_iso_usage_type
+C-ENUM: libusb_iso_usage_type
+ { LIBUSB_ISO_USAGE_TYPE_DATA 0 }
+ { LIBUSB_ISO_USAGE_TYPE_FEEDBACK 1 }
+ { LIBUSB_ISO_USAGE_TYPE_IMPLICIT 2 } ;
STRUCT: libusb_device_descriptor
{ bLength uint8_t }
C-TYPE: libusb_device
C-TYPE: libusb_device_handle
-CONSTANT: LIBUSB_SUCCESS 0
-CONSTANT: LIBUSB_ERROR_IO -1
-CONSTANT: LIBUSB_ERROR_INVALID_PARAM -2
-CONSTANT: LIBUSB_ERROR_ACCESS -3
-CONSTANT: LIBUSB_ERROR_NO_DEVICE -4
-CONSTANT: LIBUSB_ERROR_NOT_FOUND -5
-CONSTANT: LIBUSB_ERROR_BUSY -6
-CONSTANT: LIBUSB_ERROR_TIMEOUT -7
-CONSTANT: LIBUSB_ERROR_OVERFLOW -8
-CONSTANT: LIBUSB_ERROR_PIPE -9
-CONSTANT: LIBUSB_ERROR_INTERRUPTED -10
-CONSTANT: LIBUSB_ERROR_NO_MEM -11
-CONSTANT: LIBUSB_ERROR_NOT_SUPPORTED -12
-CONSTANT: LIBUSB_ERROR_OTHER -99
-TYPEDEF: int libusb_error
+C-ENUM: libusb_error
+ { LIBUSB_SUCCESS 0 }
+ { LIBUSB_ERROR_IO -1 }
+ { LIBUSB_ERROR_INVALID_PARAM -2 }
+ { LIBUSB_ERROR_ACCESS -3 }
+ { LIBUSB_ERROR_NO_DEVICE -4 }
+ { LIBUSB_ERROR_NOT_FOUND -5 }
+ { LIBUSB_ERROR_BUSY -6 }
+ { LIBUSB_ERROR_TIMEOUT -7 }
+ { LIBUSB_ERROR_OVERFLOW -8 }
+ { LIBUSB_ERROR_PIPE -9 }
+ { LIBUSB_ERROR_INTERRUPTED -10 }
+ { LIBUSB_ERROR_NO_MEM -11 }
+ { LIBUSB_ERROR_NOT_SUPPORTED -12 }
+ { LIBUSB_ERROR_OTHER -99 } ;
C-ENUM: libusb_transfer_status
LIBUSB_TRANSFER_COMPLETED
LIBUSB_TRANSFER_NO_DEVICE
LIBUSB_TRANSFER_OVERFLOW ;
-CONSTANT: LIBUSB_TRANSFER_SHORT_NOT_OK 1
-CONSTANT: LIBUSB_TRANSFER_FREE_BUFFER 2
-CONSTANT: LIBUSB_TRANSFER_FREE_TRANSFER 4
-TYPEDEF: int libusb_transfer_flags
+C-ENUM: libusb_transfer_flags
+ { LIBUSB_TRANSFER_SHORT_NOT_OK 1 }
+ { LIBUSB_TRANSFER_FREE_BUFFER 2 }
+ { LIBUSB_TRANSFER_FREE_TRANSFER 4 } ;
STRUCT: libusb_iso_packet_descriptor
{ length uint }