icone et SDL2

a marqué ce sujet comme résolu.

Bonjour, Je suis le tutoriel sur la SDL 2, et dans la partie IV. les surfaces, il y a un code à priori complet pour créer une icône de 4 carrés… lorsque je compile ce code sur mon mac (j’ai déjà du adapter la partie SDL_Delay) j’obtiens une fenêtre toute noire… et pas tu tout les 4 carrés prévus. Je ne comprends pas pourquoi ? Quelqu’un peut-il m’aider ?

+0 -0

Voici ce que j’ai codé. Je suis désolée mais je n’arrive pas à mettre les numéros des lignes devant !

//
//  main.c
//  SDL icone
//
//  Created by Cécile WEBER on 27/08/2018.
//  Copyright © 2018 Cécile WEBER. All rights reserved.
//

#include <stdio.h>
#include <stdlib.h>
#include <SDL2/SDL.h>

/* Cette structure permet de représenter un carré par sa couleur et un SDL_Rect. */
struct carre {SDL_Rect rect ; Uint32 couleur ; };

int main(int argc, char *argv[])
{
    SDL_Window *window;
    SDL_Surface *surface;
    SDL_Renderer *rendu;
    size_t i;
    
    SDL_Init(SDL_INIT_VIDEO);
    window = SDL_CreateWindow("icone", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
                              800, 600, SDL_WINDOW_RESIZABLE);
    surface = SDL_CreateRGBSurface(0, 32 , 32, 32, 0, 0, 0, 0);
    rendu = SDL_CreateRenderer(window, -1, SDL_RENDERER_TARGETTEXTURE);
   
    /* On crée quatre carré pour notre icône. */
    struct carre carre[4] = {
        { {  4,  4, 10, 10 }, SDL_MapRGB(surface->format, 0, 0, 0) }, /* Noir */
        { {  4, 18, 10, 10 }, SDL_MapRGB(surface->format, 0, 0, 255) }, /* Bleu */
        { { 18,  4, 10, 10 }, SDL_MapRGB(surface->format, 0, 255, 0) }, /* Vert */
        { { 18, 18, 10, 10 }, SDL_MapRGB(surface->format, 255, 255, 255) } /* Blanc */
    };
    
    /* On remplit notre surface grâce à nos carrés. */
    for(i = 0; i < 4; i++)
        SDL_FillRect(surface, &carre[i].rect, carre[i].couleur);
    
    SDL_SetWindowIcon(window, surface);
    SDL_CreateTextureFromSurface(rendu, surface);
    
    
    SDL_Event e;
    while (SDL_WaitEvent(&e) && e.type != SDL_QUIT);
    
    /* Libérations */
    return 0;
}
+0 -0

Salut,

Il y a méprise j’ai l’impression. La fenêtre est censée restée noire, c’est l'icône de la fenêtre qu’on modifie.

PS : Qu’est-ce que tu veux dire par « j’ai déjà du adapter la partie SDL_Delay ». Comme ça, s’il y a un problème dans le tutoriel à ce niveau, on peut le corriger.

+0 -0

Actuellement ton code crée en mémoire toutes les structures nécessaires, mais tu ne les affiche jamais, je pense que tu devrais chercher du coté des fonctions de dessins, telles que :

SDL_RenderFillRect

ou bien

SDL_RenderFillRects

Avec leurs homologues pour dessiner seulement le contour,

SDL_RenderDrawRect, SDL_RenderDrawRects
+0 -0

Note de plus que le commentaire /* Libérations */ est là pour indiquer au lecteur qu’à cet endroit, il doit libérer les choses allouées. Par exemple, dans ton code, il manque la libération des surfaces, la destruction de la fenêtre et du renderer, et tu ne quittes pas non plus la SDL.

+0 -0

Même sans les libérations, le code proposé dans le tutoriel fonctionne.

Il ne modifie pas du tout la fenêtre mais modifie juste son icône. Sous OS X, je ne sais pas où cela se voit, sûrement dans la barre où il y a les applications. Peut-on avoir une capture d’écran ?

+0 -0

Je veux bien, mais je ne sais pas comment intégrer ma capture d’écran, même après avoir lu les Astuces…

MC

MCW

Pour ce faire, il te suffit de cliquer sur ton avatar, de te rendre dans « galeries d’image », d’y créer une galerie si tu n’en as pas encore, d’y ajouter ton image et de copier dans ton message le texte qui te sera fourni. ;)

Plus globalement, la syntaxe pour insérer une image dans un message est la suivante.

![description](url)
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte