@@ -466,6 +466,36 @@ pub extern "C" fn processing_shear_y(graphics_id: u64, angle: f32) {
466466 error:: check ( || graphics_record_command ( graphics_entity, DrawCommand :: ShearY { angle } ) ) ;
467467}
468468
469+ #[ unsafe( no_mangle) ]
470+ pub extern "C" fn processing_set_blend_mode ( graphics_id : u64 , mode : u8 ) {
471+ error:: clear_error ( ) ;
472+ let graphics_entity = Entity :: from_bits ( graphics_id) ;
473+ error:: check ( || {
474+ let blend_state = processing:: prelude:: BlendMode :: try_from ( mode) ?. to_blend_state ( ) ;
475+ graphics_record_command ( graphics_entity, DrawCommand :: BlendMode ( blend_state) )
476+ } ) ;
477+ }
478+
479+ #[ unsafe( no_mangle) ]
480+ pub extern "C" fn processing_set_custom_blend_mode (
481+ graphics_id : u64 ,
482+ color_src : u8 ,
483+ color_dst : u8 ,
484+ color_op : u8 ,
485+ alpha_src : u8 ,
486+ alpha_dst : u8 ,
487+ alpha_op : u8 ,
488+ ) {
489+ error:: clear_error ( ) ;
490+ let graphics_entity = Entity :: from_bits ( graphics_id) ;
491+ error:: check ( || {
492+ let blend_state = custom_blend_state (
493+ color_src, color_dst, color_op, alpha_src, alpha_dst, alpha_op,
494+ ) ?;
495+ graphics_record_command ( graphics_entity, DrawCommand :: BlendMode ( Some ( blend_state) ) )
496+ } ) ;
497+ }
498+
469499/// Draw a rectangle.
470500///
471501/// SAFETY:
@@ -767,6 +797,35 @@ pub const PROCESSING_STROKE_JOIN_ROUND: u8 = 0;
767797pub const PROCESSING_STROKE_JOIN_MITER : u8 = 1 ;
768798pub const PROCESSING_STROKE_JOIN_BEVEL : u8 = 2 ;
769799
800+ pub const PROCESSING_BLEND_MODE_BLEND : u8 = 0 ;
801+ pub const PROCESSING_BLEND_MODE_ADD : u8 = 1 ;
802+ pub const PROCESSING_BLEND_MODE_SUBTRACT : u8 = 2 ;
803+ pub const PROCESSING_BLEND_MODE_DARKEST : u8 = 3 ;
804+ pub const PROCESSING_BLEND_MODE_LIGHTEST : u8 = 4 ;
805+ pub const PROCESSING_BLEND_MODE_DIFFERENCE : u8 = 5 ;
806+ pub const PROCESSING_BLEND_MODE_EXCLUSION : u8 = 6 ;
807+ pub const PROCESSING_BLEND_MODE_MULTIPLY : u8 = 7 ;
808+ pub const PROCESSING_BLEND_MODE_SCREEN : u8 = 8 ;
809+ pub const PROCESSING_BLEND_MODE_REPLACE : u8 = 9 ;
810+
811+ pub const PROCESSING_BLEND_FACTOR_ZERO : u8 = 0 ;
812+ pub const PROCESSING_BLEND_FACTOR_ONE : u8 = 1 ;
813+ pub const PROCESSING_BLEND_FACTOR_SRC : u8 = 2 ;
814+ pub const PROCESSING_BLEND_FACTOR_ONE_MINUS_SRC : u8 = 3 ;
815+ pub const PROCESSING_BLEND_FACTOR_SRC_ALPHA : u8 = 4 ;
816+ pub const PROCESSING_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA : u8 = 5 ;
817+ pub const PROCESSING_BLEND_FACTOR_DST : u8 = 6 ;
818+ pub const PROCESSING_BLEND_FACTOR_ONE_MINUS_DST : u8 = 7 ;
819+ pub const PROCESSING_BLEND_FACTOR_DST_ALPHA : u8 = 8 ;
820+ pub const PROCESSING_BLEND_FACTOR_ONE_MINUS_DST_ALPHA : u8 = 9 ;
821+ pub const PROCESSING_BLEND_FACTOR_SRC_ALPHA_SATURATED : u8 = 10 ;
822+
823+ pub const PROCESSING_BLEND_OP_ADD : u8 = 0 ;
824+ pub const PROCESSING_BLEND_OP_SUBTRACT : u8 = 1 ;
825+ pub const PROCESSING_BLEND_OP_REVERSE_SUBTRACT : u8 = 2 ;
826+ pub const PROCESSING_BLEND_OP_MIN : u8 = 3 ;
827+ pub const PROCESSING_BLEND_OP_MAX : u8 = 4 ;
828+
770829#[ unsafe( no_mangle) ]
771830pub extern "C" fn processing_geometry_layout_create ( ) -> u64 {
772831 error:: clear_error ( ) ;
@@ -1564,6 +1623,16 @@ pub extern "C" fn processing_key_is_down(key_code: u32) -> bool {
15641623 . unwrap_or ( false )
15651624}
15661625
1626+ #[ unsafe( no_mangle) ]
1627+ pub extern "C" fn processing_key_just_pressed ( key_code : u32 ) -> bool {
1628+ error:: clear_error ( ) ;
1629+ error:: check ( || {
1630+ let kc = key_code_from_u32 ( key_code) ?;
1631+ input_key_just_pressed ( kc)
1632+ } )
1633+ . unwrap_or ( false )
1634+ }
1635+
15671636#[ unsafe( no_mangle) ]
15681637pub extern "C" fn processing_key ( ) -> u32 {
15691638 error:: clear_error ( ) ;
0 commit comments