Buenas familia, hace tiempo que no me paso por aqui. He vuelto a retomar mi proyecto y bueno, empiezo con los problemillas.

Os resumo, estoy usando un efecto monitor, el cual lleva un draw_surface para crear todo el ambiente monitor CRT etc etc. El caso es que funciona a la perfeccion. Pero.....
Cuando lo meto en mi juego, en una roomCOMPUTER (la he llamado), al darle pinchar al objecto que me lleva a la roomCOMPUTER. Me muestra el siguiente error;

Trying to use non-existing surface.
at gml_Object_objectSHADER2_DrawPost_1 (line 43) - draw_surface(application_surface, 0, 0);

El caso, es que si pruebo esta room sola, funciona perfecto, o tambien, si la pongo la primera tambien funciona perfecto.

No se si tendra que ver, que en las otras room tambien estoy usando otra draw_surface.

Bueno, si sabeis algo, os agradeceria mucho que me comentarais. Saludos y gracias a todos!!!!  ;)

PD; Pasaros por Juegos Completos que he dejado varios juegos mios. Jejeje.
PCNONOGames  www.pcnono.es

Puede estar el error porque el draw_surface(application_surface, 0, 0); se encuentra en el Post Draw???

Y se produce el error tanto al entrar en la room como al salir de ella.

Por favor, si alguien sabe algo que comente. Please.  ???
PCNONOGames  www.pcnono.es

Lo que dice el error es que se trata de usar una surface que no existe, que ha sido eliminada. Fijate si en alguna parte del codigo eliminas una surface.

Pero el surface si que existe. No entiendo nada.

He estado haciendo pruebas en un proyecto limpio y aqui si que funciona al entrar y salir de la room.

Pero cuando lo introduzco en mi proyecto, al entrar o salir de la room donde se encuentra el surface sale el maldito error.

Quizas sea porque en mi proyecto ya estoy usando otra surface aparte??

Espero vuestra ayuda familia!!!  ???

Cita de: 3dgeminis en Mayo 14, 2017, 04:40:37 AM
Lo que dice el error es que se trata de usar una surface que no existe, que ha sido eliminada. Fijate si en alguna parte del codigo eliminas una surface.
PCNONOGames  www.pcnono.es

Os paso todo el codigo, a ver si me podeis ayudar por favor;  :'(

Information about object: objectSHADER2
Sprite:
Solid: false
Visible: true
Depth: -10000
Persistent: true
Parent:
Children:
Mask:

No Physics Object
Create Event:

execute code:

/// Prepare for application-wide shader.
application_surface_draw_enable(false);


set variable ticks to 3050
execute code:

apagar = false;

Step Event:

execute code:

/// Scale the application surface to the current display size.
if (surface_get_width(application_surface) != display_get_width())
    surface_resize(application_surface, room_width, room_height);



execute code:

/// Advance time.
//ticks++;
if (apagar)
{
    ticks++;
}

Draw Event:

execute code:

//draw_text(room_width/2 ,y,ticks);

Post Draw Event:

execute code:

/// Apply shader to entire application.
var is_compiled = shader_is_compiled(crtmonitor_shader);

if (is_compiled)
{
    var progress_param = shader_get_uniform(crtmonitor_shader, "progress");
    var shutdown_progress_param = shader_get_uniform(crtmonitor_shader, "shutdown_progress");
    var scanlines_param = shader_get_uniform(crtmonitor_shader, "scanline_count");
    var green_levels_param = shader_get_uniform(crtmonitor_shader, "green_levels");

    shader_set(crtmonitor_shader);

    // Fade the CRT effect in over time.   
    var fade_start_time = 3.0 * room_speed;
    var fade_duration = 3.0 * room_speed;
    shader_set_uniform_f(progress_param, min(1.0, max(0.0, (ticks - fade_start_time) / fade_duration)));
   
    // Switch on the scanlines.
    var demo_start_secs = 43.0;
    var scanline_start_time = demo_start_secs * room_speed;
    if (ticks > scanline_start_time)
        shader_set_uniform_f(scanlines_param, 128.0); // Configure no. of scanlines.
    else
        shader_set_uniform_f(scanlines_param, 0.0);
   
    // Switch on the green screen.
    var greenscreen_start_time = scanline_start_time + 4.0 * room_speed;
    if (ticks > greenscreen_start_time)
        shader_set_uniform_f(green_levels_param, 32.0); // Configure no. of color levels.
    else
        shader_set_uniform_f(green_levels_param, 0.0);

    // Switch off the CRT.   
    var shutdown_start_time = greenscreen_start_time + 4.0 * room_speed;
    var shutdown_duration = 4.0 * room_speed;
    shader_set_uniform_f(shutdown_progress_param, min(1.0, max(0.0, (ticks - shutdown_start_time) / shutdown_duration)));

    // Reset the demo.   
    if (ticks > shutdown_start_time + 6.0 * 10)
        room_goto(roomNIVEL1);
}

draw_surface(application_surface, 0, 0);

if (is_compiled)
    shader_reset();


Key Release Event for <Escape> Key:

execute code:

apagar = true;

PCNONOGames  www.pcnono.es

Bueno he estado haciendo mas pruebas y no entiendo nada.

Las pruebas que he realizado son las siguientes;

El surface lo utilizo en una roomCOMPUTER. vale, pues si inicio el juego con esa room este arranca sin error, pero no se ve nada. Ahora, copio dicha room, le cambio de nombre (roomPRE-COMPUTER), y le borro el object que contiene el shader. Que vaya casi sin nada la room, y ahora pongo un object para avanzar de room, es decir, para pasar a la roomCOMPUTER.
Arranco el juego, efectivamente se inicia sin problemas en la roomPRE-COMPUTER, pincho en el boton para avanzar de room, y efectivamente se va a la roomCOMPUTER, y con todo el efecto shader las letras todo perfecto. PERO ESTO PORQUE?? PORQUE FUNCIONA ASI??

ahora, avanzo a la siguiente room, donde realmente comienza el juego, me encuentro con el objectCOMPUTER, que es el que deberia de llevarme a la roomCOMPUTER, pincho en el, que realmente he puesto para que vaya primero a la roomPRE-COMPUTER, y despues pincho para ir a roomCOMPUTER, y me sale ERROR SURFACE NO EXISTE!!!

Por la cara colega. NO ENTIENDO NADA!!! porque a veces si detecta la surfaces otra nooo. Es una puta locura!!!!!   ???

Quizas sea porque en las otras rooms tambien uso una surfaces para el efecto linterna??

Por favor que alguien me ayude!!!!  :'(
PCNONOGames  www.pcnono.es

En esta parte
Citar
/// Prepare for application-wide shader.
application_surface_draw_enable(false);
estas desactivando la application surface y no la volves a activar, proba borrando esta parte.

Ya probe ponerlo en true, y lo que ocurre es que entra en la room pero no se dibuja el efecto shader.

No se que mas hacer, estoy desesperado ya.  ???

Cita de: 3dgeminis en Mayo 16, 2017, 04:53:20 AM
En esta parte
Citar
/// Prepare for application-wide shader.
application_surface_draw_enable(false);
estas desactivando la application surface y no la volves a activar, proba borrando esta parte.
PCNONOGames  www.pcnono.es

Esta línea no debería causar problemas
[gml]application_surface_draw_enable(false);[/gml]
solo evita que la application_surface se dibuje automáticamente en el evento Draw, por eso se dibuja manualmente en el evento Post Draw.

El error debe estar en otro objeto que borra la surface
[gml]application_surface_enable(false);[/gml]

Si, clamud, ya lo resolví.

Vaya tonteria era. Ahora estoy con la rescalada de dimensiones. De todas formas, muchas gracias a todos saludos.  ;)

Cita de: Clamud en Mayo 17, 2017, 11:00:08 PM
Esta línea no debería causar problemas
[gml]application_surface_draw_enable(false);[/gml]
solo evita que la application_surface se dibuje automáticamente en el evento Draw, por eso se dibuja manualmente en el evento Post Draw.

El error debe estar en otro objeto que borra la surface
[gml]application_surface_enable(false);[/gml]
PCNONOGames  www.pcnono.es