hola makeros! hoy se me ha pasado un problema que me ha hecho quedarme de manos cruzadas jaja.. bueno, yo se que alguno de ustedes sabra:

El problema surge a traves del manejo de surfaces, lo que quiero es cortar una imagen particular de la siguiente manera


Lo que tengo hasta ahora es hasta la imagen 3, pero no se como llegar a la 4


        // vemos si la superficie existe, si no la volvemos a crear
        if (!surface_exists(surface)) surface = surface_create(radio*2,radio*2);
       
        // iniciamos la edicion del surface
        surface_set_target(surface)
            draw_clear_alpha(0,0);
            draw_circle_colour(radio,radio,radio,c_white,c_white,0);
            draw_set_blend_mode_ext(bm_dest_color,bm_zero);
                draw_sprite(sprite, 0, 0, 0)
            draw_set_blend_mode(bm_normal);
        surface_reset_target()


Otra cosa, la imagen 3 no se ve asi, se ve de esta manera:


de antemano muchas gracias, cualquier ayuda les agradecere mucho :)
si alguien me explica mejor acerca de los surfaces y los canales alpha seria mejor, o una pagina en donde se entienda realmente como funciona :P
El ayer es un recuerdo, el mañana un pensamiento, es el ahora en donde existo y vivo para ser feliz :D

Si ya tienes la tercera imagen, lo que falta es mostrar esa surface, pero "quitándole" lo blanco. Hasta donde entiendo, para hacerlo tienes dos opciones.

1) La fácil: usar un modo blending adecuado en el evento DRAW, para dibujar la surface sin que se vea lo blanco.

2) La difícil: usar un shader para detectar un rango/tonalidad en específico y remover esos pixeles (borrar los pixeles blancos).

Aquí se explican los blending mode
https://www.yoyogames.com/tech_blog/68
https://www.yoyogames.com/tech_blog/69

Este ejemplo te puede resultar útil
http://gmc.yoyogames.com/index.php?showtopic=512187

Tengo la sensación de que esto es un bug o depende de la versión de :GMS:. Yo tengo la versión 1.3 y usé exactamente el mismo código, el resultado es diferente, la parte blanca aparece en los bordes de la máscara de colisión del sprite rojo, y no en medio como en tu caso, al modificar la máscara de colisión el resultado no cambia.

La solución que encontré es dibujar los elementos en el orden inverso; primero el sprite rojo y luego la máscara de recorte, y en vez de usar "draw_circle_color" usé un sprite con forma circular, si no tampoco funciona.

Hice otras pruebas y si quieres usar texturas o máscaras con "anti-alias" (suavizadas) es mejor usar draw_set_blend_mode_ext( bm_one, bm_zero );, en vez de draw_clear_alpha(0,0);. Las pruebas están en el ejemplo adjunto.

En :GM8: el código funciona sin problemas.