#Probleme affichage d'un simple rectangle avec un renderer (frame buffer) app C Upsilon

1 messages · Page 1 of 1 (latest)

winter summit
#

J'ai un soucis d'affichage et ca viens surement de mon programme, si qqn pourrait m'aider.

void extapp_main(void)
{
    Renderer renderer;
    renderer.width = 250;
    renderer.height = 150;
    init(&renderer);
    uint64_t dt;
    uint64_t dt_start;
    char fps_buf[16];

    dt = 0;
    while (!extapp_isKeydown(KEY_CTRL_EXIT))
    {
        dt_start = extapp_millis();
        refresh(0xffff, &renderer);
        draw_rectangle(25, 50, 50, 100, 0x0fab, &renderer);
        update(renderer);
        sprintf(fps_buf, "fps: %d", (int)(1/((double)dt/1000)));
        extapp_drawTextLarge(fps_buf, 0, 0, 0x0000, 0xffff, false);
        extapp_waitForVBlank();
        dt = extapp_millis() - dt_start;
    };
    deinit(&renderer);
}

Pour le main.
Et pour la fonction du rectangle :

int draw_rectangle(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color, Renderer *r)
{
    uint16_t end_x;
    uint16_t end_y;
    uint16_t xx;
    uint16_t yy;

    xx = x;
    yy = y;
    end_x = x + width;
    end_y = y + height;
    while (yy < end_y)
    {
        while (xx < end_x)
        {
            r->pixels[to_index(xx, yy, r->width)] = color;
            xx++;
        }
        yy++;
    }
    
    return 0;
}

Le resultat :

ionic ice
#

hello, est ce que tu pourrais donner le code de to_index stp ?

winter summit
#

oui, tiens :

int to_index(int x, int y, int width) {
    return y * width + x;
}
sweet shuttle
#

Quel est le problème ? Le trait vert ?

ionic ice
#

c'est censé faire un plus grand rectangle

winter summit
#

c'est sense etre un rectangle et non ce petit trais justement

ionic ice
#

apres ça peut aussi venir de ton frame buffer

sweet shuttle
#

Et ton pushRect ressemble à quoi ?

#

Bon après si il trace bien le rectangle blanc, c'est que ça doit marcher

ionic ice
#

est ce que ce serai pas un probleme de vblank ?

winter summit
#
int update(Renderer r)
{
    extapp_pushRect(0, 0, r.width, r.height, r.pixels);
    return 0;
}
ionic ice
#

ça parrait bon

sweet shuttle
#

On n'envoie que l'image finie, pas l'image intermédiaire avec du 0xFFFF partout

ionic ice
#

mais si il y a du tilling

winter summit
ionic ice
#

et si tu retires le rectangle blanc ça donne quoi ?

winter summit
#

je test

ionic ice
sweet shuttle
ionic ice
#

Base toi sur ce projet pour pouvoir lancer ton code dans le simulateur

ionic ice
#

Emilie Feral travaille chez Numworks

sweet shuttle
#

Je veux dire, cette appli

ionic ice
#

non c'est pour Epsilon

#

ah oui tu devs sur Upsilon

#

MB ça marchera pas

sweet shuttle
#

extapp_waitForVBlank, c'est dans EADK ?

winter summit
ionic ice
#

toujours une ligne ?

sweet shuttle
ionic ice
#

et si tu déplaces ton rectangle vert, ça change quelquechose ou pas ,

winter summit
ionic ice
#

ah j'ai trouvé

#

il faut remettre xx à 0 à chaque ligne

winter summit
ionic ice
#
int draw_rectangle(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color, Renderer *r)
{
    uint16_t end_x;
    uint16_t end_y;
    uint16_t xx;
    uint16_t yy;

    xx = x;
    yy = y;
    end_x = x + width;
    end_y = y + height;
    while (yy < end_y)
    {
        xx = x; // < ----- ICI
        while (xx < end_x)
        {
            r->pixels[to_index(xx, yy, r->width)] = color;
            xx++;
        }
        yy++;
    }
    
    return 0;
}
winter summit
#

ca marche enfin

ionic ice
#

ça m'arrive souvant comme erreur aussi 😆

winter summit
#

Merci les gens

ionic ice
#

pourquoi pas de boucle for ? t'es à 42 ?

winter summit
ionic ice
#

😂 Je sais reconnaitre les piscineux de 42

winter summit
#

je retente dans 3 ans apres mon BUT info (j'essaie d'avoir le double diplome)

ionic ice
#

nice

sweet shuttle
#

Il se passe quoi avec les boucles for à 42 ?

ionic ice
#

perso j'ai fait la piscine cet été et je rentre en Octobre

ionic ice
sweet shuttle
#

Ah

ionic ice
#

"trop high level"

winter summit
#

et ca gene tant que ca de reflash la calc a chaque modif d'une app ?

ionic ice
#

ça use très legerement la rom

sweet shuttle
#

Pas forcément, la durée de vie de la flash est théoriquement de 100 000 cycles si je me souviens bien

winter summit
ionic ice
#

logique

winter summit
sweet shuttle
#

Si, mais avec peut-être moins de wear-leveling

ionic ice
#

Mais la norme 42 est hyper stricte

winter summit
ionic ice
#

oui

sweet shuttle
#

L'intérêt de debug sur simulateur, c'est d'avoir du step-to-step en debug, ou si tu n'as pas de calculatrice

ionic ice
#

et plus rapide à lancer aussi

sweet shuttle
#

Le principal problème, c'est les ressources qui sont illimitées

#

Donc tu ne vois pas si tu serais limité par le processeur ou la RAM

ionic ice
#

le simulateur de Epsilon se débrouille bien avec Numcraft

#

il tourne à 500 fps en moyenne sur Linux

winter summit
sweet shuttle
#

Tu ne vois pas si une modifs poserait problème sur calculatrice

ionic ice
#

ah ok j'avais compris à l'envers

ionic ice
winter summit
#

j'atteint meme pas 500 fps sur real hardware en faisant juste un pushrect sans delay

sweet shuttle
#

Soit parce que tu exploserais la RAM, soit que tu passerais de 500 à 400 FPS sur simulateur, donc 50 à 40 sur calculatrice

ionic ice
#

masi je ne fais pas mes optis sur simulateur

#

c'est à peu pres le ratio que j'ai sur Numcraft

sweet shuttle
#

Sur Peanut-GB, la plupart de mes modifs ont un impact de 100 ns/f en général, donc j'essaye de tester