Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec SDL_ttf ??

Sujet résolu
10 avril 2019 à 12:51:26

Bonjour,

Dans le cadre du chapitre  SDL_ttf du cours c  l'exécution du programme test ne se passe pas bien : la fenêtre apparaît une fraction de seconde et je suis à nouveau sur la console avec un statut 3 pour le programme. La compilation se déroule sans problème. Les .h et .lib sont à leur place. Concernant le fichier SDL_ttf.h j'ai eu un petit souci car le répertoire mingw32 avec un dossier include n'est pas disponible dans CodeBlocks 17.12. Il y a un répertoire MinGW avec les dossiers include et lib. J'ai donc crée un dossier SDL dans include et y ai copié SDL_ttf.h. D'ailleurs toutes les dépendances requises sont satisfaites via "build options". Concernant les dll j'ai mis dans le répertoire racine du projet les fichiers suivants :

SDL.dll

SDL_image.dll

SDL_ttf.dll

libfreetype-6.dll

libjpeg-8.dll

libpng15-15.dll

libtiff-5.dll

libwebp-2.dll

zlib1.dll

Il y en a probablement qui ne sont pas utiles. A l'exception de celles liées à ttf ce sont celles que j'ai utilisé sans problème pour le TP Sokoban.

La seule modification dans le source concerne le chargement d'une autre image que j'ai évidemment ajouté dans l'espace de travail.

Qu'ai je donc fait (ou pas fait) ?

Merci et bien cordialement

g.rio

-
Edité par GerardRio1 10 avril 2019 à 13:19:51

  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2019 à 13:25:53

Bonjour,

Peut-être (sûrement même ?) as-tu un problème dans le code ? Montre-le.

  • Partager sur Facebook
  • Partager sur Twitter
Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
10 avril 2019 à 15:02:37

Bonjour,

Merci pour cette réponse rapide. Voici le main :

#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_ttf.h>

int main(int argc, char *argv[])
{
    SDL_Surface *ecran = NULL, *texte = NULL, *fond = NULL;
    SDL_Rect position;
    SDL_Event event;
    TTF_Font *police = NULL;
    SDL_Color couleurNoire = {0, 0, 0};
    int continuer = 1;

    SDL_Init(SDL_INIT_VIDEO);
    TTF_Init();

    ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    SDL_WM_SetCaption("Gestion du texte avec SDL_ttf", NULL);

    fond = IMG_Load("menu.jpg");

    /* Chargement de la police */
    police = TTF_OpenFont("angelina.ttf", 65);
    /* Écriture du texte dans la SDL_Surface texte en mode Blended (optimal) */
    texte = TTF_RenderText_Blended(police, "Salut les Zér0s !", couleurNoire);

    while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
                break;
        }

        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));

        position.x = 0;
        position.y = 0;
        SDL_BlitSurface(fond, NULL, ecran, &position); /* Blit du fond */

        position.x = 60;
        position.y = 370;
        SDL_BlitSurface(texte, NULL, ecran, &position); /* Blit du texte */
        SDL_Flip(ecran);
    }

    TTF_CloseFont(police);
    TTF_Quit();

    SDL_FreeSurface(texte);
    SDL_Quit();

    return EXIT_SUCCESS;
}

Un changement conscient : le chargement d'une autre image. Un(des) changement(s) à l'insu de mon plein gré (fausse manip lors du copier/coller) ?

Bien cordialement

g.rio

Nota : je viens de faire une comparaison avec l'exemple du cours via winmerge et la seule différence est dans le chargement de l'image

-
Edité par GerardRio1 10 avril 2019 à 15:09:56

  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2019 à 15:42:35

Lu'

Pourrez-tu utiliser le bouton </> pour le code, sinon on peut pas lire aisément ton programme. 

  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2019 à 15:59:20

Vérifie le retour des fonctions à risques.

  • Partager sur Facebook
  • Partager sur Twitter
Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
10 avril 2019 à 17:32:04

Bonjour,

J'ai activé le debugger et dans la fenêtre "call stack" il y a les informations suivantes :

0x40140c   SDL_main(argc=1,argv=0xf815f8)

Le plantage a lieu à la ligne 27 "texte = TTF_RenderText_Blended(police, "Salut les Zér0s !", couleurNoire);"

Pour ce qui est de l'utilisation de </> je n'ai pas compris ce qu'il fallait faire. Je n'ai rien trouvé (ou pas su trouver) dans le forum ou sur le net où cela devient très compliqué pour un novice.

Merci pour un lien expliquant comment utiliser ce bouton.

Bien cordialement.

g.rio

  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2019 à 18:10:56

Lu',

Je pense qu'à la ligne du TTF_OpenFont, la fonction ne trouve pas le fichier de police,

il faudrait tester ce qu'elle retourne.

Ensuite, quand tu écris un message sur ce forum, tu as la balise juste au dessus de la zone de texte. ( </> )

-
Edité par MoPingouin 10 avril 2019 à 18:11:23

  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2019 à 18:46:22

Bonjour,

Après le start du debugger il y a une apparition fugace d'une petite fenêtre en bas à droite : j'ai eu le temps de lire "segmentation fault". Ensuite il faut que je passe par le gestionnaire de taches pour sortir du programme et de CB.

J'avais bien remarqué le bouton </> mais son utilisation génère chez moi une autre fenêtre dans laquelle je pensais pouvoir copier le code mais il ne se passe rien : cette fenêtre est complètement bloquée. Désolé si cela devait être évident.

J'ai essayé d'autres polices (calig.ttf, Timeless.ttf) : même problème.

Bien cordialement

g.rio

  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2019 à 18:50:05

Lu',

Ou sont tes fichiers .ttf ?

  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2019 à 19:07:01

Hello,

>> J'avais bien remarqué le bouton </> mais son utilisation génère chez moi une autre fenêtre dans laquelle je pensais pouvoir copier le code mais il ne se passe rien : cette fenêtre est complètement bloquée

T'inquiète, ça fait un petit temps que le site déconne solide au niveau de l'éditeur. On attend toujours que ce soir réglé. P'têt que la partie forum n'intéresse plus OC....

>>J'ai essayé d'autres polices (calig.ttf, Timeless.ttf) : même problème.

Et si tu mets le path absolu, qu'en est-il ?

Et il y a toujours aussi ce code pour t'aider:

TTF_Font *font_I_tried_to_open=TTF_OpenFont(..... , ....);
if(font_I_tried_to_open==NULL)
    printf("ttf openFont error: %s\n",TTF_GetError());

-
Edité par edgarjacobs 10 avril 2019 à 19:19:06

  • Partager sur Facebook
  • Partager sur Twitter

On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

10 avril 2019 à 19:35:11

Bonsoir,

Chaque fois que cela m'a été demandé j'ai gardé les chemins absolus. Concernant les fichiers ttf :

- SDL_ttf.h est dans CodeBlocks\MinGW\include\SDL

- SDL_ttf.lib est dans CodeBlocks\MinGW\lib

- les dll (libfreetype-6, SDL_tff, zlib1) sont dans la racine du projet.

Le dossier téléchargé initialement est SDL_ttf-devel-2.0.11-VC et dans le sous-dossier lib j'ai récupéré les fichiers x86. Je ne vois vraiment pas où se situe l'erreur ou le manque.

La remarque sur </> est elle générale ou vient elle de ma configuration ?

Bien cordialement

g.rio

  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2019 à 19:45:42

Lu'

Je pense que edgarjacobs parlait du chemin absolu des .ttf, et pas le .h et .lib, sauf si j'ai pas bien compris ta réponse.

Je pense que l'erreur provient du fait que la SDL ne trouve pas le fichier font, ce qui créer un segmentation fault ;)

-
Edité par MoPingouin 10 avril 2019 à 19:46:13

  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2019 à 20:11:37

Bonsoir,

Je viens de faire un tour sur le net et ai remarqué que ce problème de localisation des "fonts" par SDL n'était vraiment pas nouveau ...

Bien cordialement et merci pour les idées

g.rio

  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2019 à 20:21:03

Lu'

Cela est-il l'origine du problème ?

  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2019 à 23:23:26

>> Je viens de faire un tour sur le net et ai remarqué que ce problème de localisation des "fonts" par SDL n'était vraiment pas nouveau ...

TTF n'a aucun problème à ouvrir les fonts.... à condition de lui dire où les trouver. ttf ne connait pas les paths par défaut installés dans ton système, il faut tout lui dire. Par exemple, si tu es sous windows, ttf ignore que les font sont (en génral) dans c:\windows\fonts !

@poweRiCube: bien vu, je parle de fait du chemin absolu pour trouver les fonts.

-
Edité par edgarjacobs 10 avril 2019 à 23:34:44

  • Partager sur Facebook
  • Partager sur Twitter

On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

10 avril 2019 à 23:45:33

Bonsoir,

Oui et non. J'ai effectivement lu que ce problème était assez souvent évoqué et que des solutions proposées dans d'anciens posts du forum OCR différaient sensiblement de la marche à suivre du cours actuel bien qu'étant basées sur les mêmes bibliothèques que celles mises en œuvre ici. Je n'ai pas essayé ces solutions car si je télécharge les fichiers ttf dont j'ai besoin et que je les place dans la racine de mon projet tout marche correctement.

Cette façon de faire me permet d'avancer mais ce n'est pas la bonne solution. Il faudrait que les fonctions SDL_ttf puissent trouver elles mêmes les fichiers ttf demandés dans la librairie installée dans CB. Je suis donc toujours à la recherche de la bonne configuration de l'ensemble (CB SDL) pour atteindre cet objectif et j'aimerai comprendre ce que je n'ai pas fait correctement lors de mon suivi de la procédure du cours.

J'avoue ne pas être très rassuré quant à la suite du cours avec l'introduction d'une autre librairie (celle du son en l'occurrence).

En tout cas merci et bien cordialement.

g.rio

  • Partager sur Facebook
  • Partager sur Twitter
11 avril 2019 à 0:21:09

>> Il faudrait que les fonctions SDL_ttf puissent trouver elles mêmes les fichiers ttf demandés

Je me répète: ttf ne connait pas les paths par défaut installés dans ton système

>> J'avoue ne pas être très rassuré quant à la suite du cours avec l'introduction d'une autre librairie (celle du son en l'occurrence)

Ben, déjà, tu peux "oublier" le tutoriel sdl 1.x présent sur oc, sdl 2.x est sorti depuis 6 ans. Pour des tutoriels sur sdl 2.x voir zeste de savoir ou dvp

Quant à la gestion du son, deux choses:

1) le tutoriel d'oc utilise fmod, qui est un logiciel propriétaire (donc utilisable uniquement à des fins privées)

2) le tutoriel en question est dépassé et tu ne trouveras plus cette version de fmod (sauf si tu es sous windows et que tu profites de ma grande mansuétude: voir ici)

-
Edité par edgarjacobs 11 avril 2019 à 0:26:11

  • Partager sur Facebook
  • Partager sur Twitter

On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

11 avril 2019 à 8:10:01

Bonjour,

En fait je pensais que les polices faisaient partie de la librairie SDL_ttf.lib d'où mon problème. Ces polices sont déjà quasiment toutes dans mon ordinateur. Il me faut donc les récupérer soit directement soit via un PATH. Le point positif est que j'ai appris de nouvelles notions. J'ai parcouru le site "zeste de savoir" et j'y viendrai. Pour le moment l'avantage que je trouve au cours OCR sur le c est qu'il forme un tout cohérent englobant beaucoup d'aspects du langage. Le fait qu'il soit obsolète sur certains aspects n'est pas encore un problème (pour moi tout au moins).

En tout cas merci pour votre aide.

Bien cordialement

g.rio

  • Partager sur Facebook
  • Partager sur Twitter
11 avril 2019 à 11:13:46

Lu'

Si c'est un GROS problème. 

Apprendre des choses obsolètes c'est signer un contrat pour faire de la mer** plus tard.

Conseil : apprend avec un cours à jour :) 

  • Partager sur Facebook
  • Partager sur Twitter
11 avril 2019 à 11:50:19

Salut,

« il forme un tout cohérent englobant beaucoup d'aspects du langage ». Malheureusement pas vraiment et il est plutôt bof sur certains points (dont la SDL d'ailleurs, et je ne parle pas seulement du fait que la version 2 de la SDL est sortie depuis plus de cinq ans). Même pour le C en lui-même (donc pas la SDL), je te dirais d'aller voir le tutoriel de Zeste de Savoir.

  • Partager sur Facebook
  • Partager sur Twitter
Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
11 avril 2019 à 12:21:02

Bonjour,

Je suis entièrement d'accord avec vous. Dans mon cas le problème est un peu différent car je suis retraité et ai fait du fortran pendant toute ma carrière : ma motivation est donc essentiellement basée sur l'envie de découvrir d'autres langages ayant des horizons  plus ouverts et des potentialités bien plus en phase avec les besoins actuels. C'est vrai que cela aurait été préférable de commencer cette découverte avec un cours plus "up to date". Mais pourquoi ce retard de plusieurs années dans le cours OCR ?

Bien cordialement

g.rio

  • Partager sur Facebook
  • Partager sur Twitter
6 septembre 2021 à 20:34:59

Vraiment désolé les gars mais je n'ai toujours rien compris. J'ai téléchargé la police et je l'ai copiée dans le dossier de mon projet mais le programme ne fonctionne toujours pas.

-
Edité par ChristianAlbertLamy 6 septembre 2021 à 20:43:50

  • Partager sur Facebook
  • Partager sur Twitter
6 septembre 2021 à 20:38:11

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter