Blendop y actualizar Frame

Started by Abash, June 18, 2019, 03:11:01 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Abash

Muy buenas gente. Tengo un problema que seguramente sea una tontería y sea fácil el arreglo, pero no doy con la solución.
En una pantalla de opciones tengo 3 deslizadores que lo que hacen es darme valores R G B según donde los ponga.
Estos valores los meto en los blendop_tint del proceso que pongo debajo. Lo que me crea una mascara de color que superpongo sobre una imagen en blanco y negro.
El problema es que solo me actualizan los valores si voy a la pantalla anterior, por lo tanto no me actualiza al vuelo en el momento.



PROCESS Imagenfigmascara(x,y,cual)
PRIVATE

begin
    z=-20;
blendop = blendop_new();

    switch (cual);
    case 0:
            blendop_tint (blendop, 1.0, skin_rojo, skin_verde, skin_azul);
            blendop_assign(player_fpg,graph,blendop);
    blendop_translucency(blendop,0.45); end;         // cara
case 1:
                    blendop_tint (blendop, 1.0, ojo_rojo, ojo_verde, ojo_azul);
    blendop_assign(player_fpg,graph,blendop);
                    blendop_translucency(blendop,0.45); end;         // ojo
case 2:
    blendop_assign(player_fpg,graph,blendop);
    blendop_tint (blendop, 1.0, pelo_rojo, pelo_verde, pelo_azul);
                    blendop_translucency(blendop,0.45); end;         // pelo
end;

    loop
   
switch (cual);
               case 0: file=player_fpg; graph=1;              // cara
              end 
       case 1: file=player_fpg; graph=2;              // ojo
                  end 
       case 2: file=player_fpg; graph=cuentapelo+50;  // pelo
      end 
end

    frame;
    end
end


Al igual que el fpg y el graph que tengo dentro del Loop supongo que tendría que meter los skin_rojo... ojo_rojo... de alguna manera pero no se como.
Es la primera vez que uso Blendop y por mas que miro en los ejemplos, estos solo me dicen   como hacerlo a través de la pulsación de una tecla.
Se agradece cualquier ayuda.

Drumpi

Yo hace eones que no uso blendops, pero creo que tienes que meter el Blendop_tint dentro del loop. Ten en cuenta que son FUNCIONES, se ejecutan en el momento en que se llaman, no generan procesos y, mucho menos, actualizan los valores si modificas los valores: estás pasando datos por valor, no por referencia (a menos que le pases punteros, pero BlendopTint no admite punteros).

El Blendop_assign y Blendop_traslucency, como entiendo que no se cambian, con que se ejecuten una vez, ya vale.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Abash

 Tienes razón. Los Blendop_tint van dentro del Loop y con eso arreglado.
Lo que también e tenido que cambiar a sido poner /2 a cada valor de skin_rojo, verde... ya que al llegar el deslizador a media barra este me empezaba a hacer cosas raras con el color.



Gracias por la ayuda  :)

Drumpi

Creo que, más bien que poner un /2 deberías controlar los valores que contienen skin_rojo, verde, etc desde el sitio donde les asignas valor, no desde el proceso. No saber si le estás metiendo valores positivos, negativos o te estás saliendo del rango de uso al asignarlo, puede ser peligroso, por eso, desde este proceso que has escrito, dentro del bucle, sería interesante que comprobases que skin_rojo y demás contienen valores válidos para la función BLENDOP_TINT antes de aplicársela. Sí, puede que sea una comprobación absurda y que consuma tiempo de CPU, pero a menos que estés MUY apurado de recursos, una capa extra de seguridad en tu código nunca está de más.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)