Shader- Surface Problem auf Android Gerät

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Shader- Surface Problem auf Android Gerät

    Hallo, ich kenne mich noch nicht so gut aus mit GM und weiß einfach nicht woran es liegt das meine Surface nicht mehr gezeichnet wird auf dem Handy.

    Also folgendes Problem, ich habe einen Shader der ein Bild in eine Surface Schwarz weiß zeichnen soll, funktioniert auch super.
    Bei der Surfaces ist es ja so das wenn das Fenster den Fokus verliert diese gelöscht wird und wieder um step event gezeichnet werden sollte.
    Das funktioniert alles super wenn ich es in Windows teste. Lasse ich es auf dem android Handy laufen wird die erste Surface korrekt gezeichnet, verliert das Fenster den Fokus dann verschwindet alles und nur der Hintergrund ist zu sehen, die 2 Surface aus dem Step Event wird nicht mehr gezeichnet. Das passiert nur wenn ich den Shader nutze.
    Mir fehlt da einfach die Erfahrung, warum tritt der Fehler auf dem andoird auf und bei Windows nicht ?

    Hier mal der Code vom Shader in glsl:

    /////

    GML-Quellcode

    1. attribute vec3 in_Position; // (x,y,z)
    2. attribute vec4 in_Colour; // (r,g,b,a)
    3. attribute vec2 in_TextureCoord; // (u,v)
    4. varying vec2 v_vTexcoord;
    5. varying vec4 v_vColour;
    6. void main()
    7. {
    8. vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0);
    9. gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos;
    10. v_vColour = in_Colour;
    11. v_vTexcoord = in_TextureCoord;
    12. }
    Alles anzeigen


    ///////////

    und von meiner Surface im externen Script:

    /////

    GML-Quellcode

    1. pz_sf=surface_create((sprite_width*pz_gr),(sprite_height*pz_gr));
    2. surface_set_target(pz_sf);
    3. shader_set(sh_black_and_white)
    4. draw_sprite_ext(sprite_index,0,0,0,pz_gr,pz_gr,0,c_white,1);
    5. draw_sprite_ext(global.rh,0,0,0,pz_gr,pz_gr,0,c_white,1);
    6. shader_reset()
    7. surface_reset_target();

    ///////
    (die variablen sind alle richtig ich hab den code jetzt nicht komplett rein gestellt da sie nur größe definieren, global.rh ist ein rahmen den ich über das erste bild zeichne)

    dann das surfaces im step event vom object :
    //////

    GML-Quellcode

    1. if !surface_exists(pz_sf)
    2. {
    3. pz_sf=surface_create((sprite_width*pz_gr),(sprite_height*pz_gr));
    4. surface_set_target(pz_sf);
    5. shader_set(sh_black_and_white)
    6. draw_sprite_ext(sprite_index,0,0,0,pz_gr,pz_gr,0,c_white,1);
    7. draw_sprite_ext(global.rh,0,0,0,pz_gr,pz_gr,0,c_white,1);
    8. shader_reset()
    9. surface_reset_target();
    10. }

    //////////


    Was kann ich da tun damit das Surface nicht verschwindet nach dem das Fenster den Fokus verliert? Beziehungsweise was mache ich falsch?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von steven919 ()

  • Ich kann dir nur sagen, das bei meinem Android Spiel die Shader auch nicht auf jedem Handy funktionieren. Am PC ist alles super, bei meinem honor 4x funktioniert nur der "globale" Shader, also der Shader fürs Application Surface. Die Shader für meine einzelnen Objekte gehen nur am PC und bei meinem Bruder.
  • Der Shader funktioniert nur wird die Surfaces das 2 mal nicht gezeichnet auf dem Handy. Auf dem Pc läuft es aber ohne Probleme. Es muss etwas mit dem Shader zu tun haben da ich alles andere ausgeschlossen habe durch testen, ich kenne mich leider mit glsl nicht aus und weiß nicht worauf dort zugegriffen wird.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von steven919 ()

  • Habe heute noch einiges getestet, der Fehler tritt sogar auf wenn ich den Shader gar nicht nutze sondern ihn nur zu den Ressourcen im Game Maker lade. auch andere Shader verursachen den selben Fehler wenn man die App minimiert und dann wieder öffnet verschwindet alles.
    Hat niemand einen Tipp was man da machen kann? Wenn das Betriebssystem den Shader nicht nutzen könnte würde die Surface ja beim ersten mal bereits nicht richtig gezeichnet werden .