TTF-po čase nejde otevřít font – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

TTF-po čase nejde otevřít font – C / C++ – Fórum – Programujte.comTTF-po čase nejde otevřít font – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Kowalsky950
Stálý člen
29. 5. 2013   #1
-
0
-

Dobrý den, mám problém s knihovnou TTF. Když spustím program tak jede naprosto v pořádku, ovšem po nějaké době zmizí všechen text a když se podívám do logu tak to píše že nejde otevřít font. Nicméně se začátku to všechno jede v pohodě.
Doplním ještě že to samozřejmě kombinuji s SDLkem.

Diky

Nahlásit jako SPAM
IP: 90.176.114.–
nergal+1
Návštěvník
29. 5. 2013   #2
-
0
-

zatváraš deskriptory?

Nahlásit jako SPAM
IP: 85.135.211.–
viem že neviem čo viem
Kowalsky950
Stálý člen
29. 5. 2013   #3
-
0
-

Zaviram právě....vůbec netuším v čem může byt ta chyba. Nechci sem házet celý zdroják protože má asi 400 řádků..

Nahlásit jako SPAM
IP: 90.176.114.–
KIIV
~ Moderátor
+43
God of flame
29. 5. 2013   #4
-
0
-

co uvolnovani zdroju - ne jen filedescriptoru a tak?

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kowalsky950
Stálý člen
29. 5. 2013   #5
-
0
-

Jak to myslis? Ja s grafikou teprve zacinam a tak jsem si jen rychle nasel jak vyrenderovat text a tim to pro me skoncilo. Jedine co tam mam je TTF_Init(), TTF_OpenFont(), TTF_CloseFont() a TTF_Quit(). Nic dál jsem neřešil.

Nahlásit jako SPAM
IP: 90.176.114.–
KIIV
~ Moderátor
+43
God of flame
29. 5. 2013   #6
-
0
-

mozna bude nakonec precijen lepsi nekam nahrat ten kod a poslat odkaz

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kowalsky950
Stálý člen
29. 5. 2013   #7
-
0
-

   

#include <iostream>
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>
#include <stdio.h> 
#include <stdlib.h>
using namespace std; 
void lock(SDL_Surface *Surface)
{
     if (SDL_MUSTLOCK(Surface))
        {
        if (SDL_LockSurface(Surface)<0) cout<< "Error";
        }
     else
        {
        SDL_UnlockSurface(Surface);
        }
};
void funkce(SDL_Surface *Surface,SDL_Surface *text)
{
     SDL_Rect rectangle={30,585,15,50};
     lock(Surface);
     SDL_BlitSurface(text,NULL,Surface,&rectangle);
     TTF_Font *textFont;
     {    //TEXT    
          //promenne pro text
          SDL_Color barvaTextu={255,0,0,0};
          SDL_Color barvaBila={255,255,255,0};
          SDL_Color barvaPozadi={0,0,0,100};
          //otevreni fontu
          cout<< "Otevreni fontu" << endl; 
          textFont=TTF_OpenFont("times.ttf",50);
          if (!textFont)
             {
             cout<< "font se nepovedlo otevrit" << endl;
             TTF_Quit();
             if(TTF_Init()==-1)
                 {
                 cout<< "Opetovna inicializase SDL_TTF se nezdarila"<<endl << TTF_GetError();
                 }
             else {cout<< "Opetovna inicializace SDL_TTF se zdarila" << endl;}
             textFont=TTF_OpenFont("times.ttf",50);
             if (!textFont)
                 {
                 cout<< "Tak a je to v prdeli..." << endl << TTF_GetError() << endl;
                 }
             }
          //samotny text
          text=TTF_RenderText_Shaded(textFont,"nejakyText",barvaTextu,barvaPozadi);
          SDL_BlitSurface(text,NULL,Surface,&rectangle);
          if(textFont!=NULL)
              {
              cout<< "Zavreni fontu" << endl;
              TTF_CloseFont(textFont);
              textFont=NULL;
              }
    	lock(Surface);
}
int main(int argc, char *argv[])
{

  //inicializase SDL
  if( SDL_Init(SDL_INIT_VIDEO) < 0 ) 
      {
      cout<<"Inicializace SDL se nezdařila: \n"<< SDL_GetError(); 
      return -1;
      }
  if(TTF_Init()==-1)
      {
      cout<< "Inicializase SDL_TTF se nezdarila \n" << TTF_GetError();
      return -1;
      }

  SDL_Surface *screen=new SDL_Surface;
  screen = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);

  if ( screen == NULL )
      {
      cout<<"Vytvoření okna se nezdařilo: \n"<< SDL_GetError();
      return -1;
      } 
  //promenne pro text
  TTF_Font *textFontFPS;
  SDL_Color barvaTextu={255,255,255,0}; 
  SDL_Color barvaPozadi={0,0,0,100};
  SDL_Surface *text=new SDL_Surface;
  
  //otevreni fontu
  cout<< "Otevreni fontu" << endl; 
  textFontFPS=TTF_OpenFont("times.ttf",15);
  if (!textFontFPS)
     { 
     cout<< "font se nepovedlo otevrit" << endl;
     TTF_Quit();
     if(TTF_Init()==-1)
         {
         cout<< "Opetovna inicializase SDL_TTF se nezdarila"<<endl << TTF_GetError();
         }
     else {cout<< "Opetovna inicializace SDL_TTF se zdarila" << endl;}
     textFontFPS=TTF_OpenFont("times.ttf",15);
     if (!textFontFPS) 
         {
         cout<< "Tak a je to v prdeli..." << endl << TTF_GetError() << endl;
         }
     }  
bool done=true;
while(done)
    {
    SDL_Event event; 
        while(SDL_PollEvent(&event))
            {
            if(event.type == SDL_QUIT) done=false;
   	    }
    text=TTF_RenderText_Shaded(textFontFPS,"FPS",barvaTextu,barvaPozadi);
    funkce(screen,text);
    SDL_Flip(screen);
    }
TTF_Quit();
}

Trošku jsem to čistil, tak snad jsem nic nevynechal.
V zavírání fontů to nebude, mám uzavřené všechno. Navíc jsou všechny ukazatele ve funkcích a neukazují na volnou paměť, takže by se měli smazat při skončení funkce.

Nahlásit jako SPAM
IP: 90.176.114.–
nergal+1
Návštěvník
29. 5. 2013   #8
-
0
-

ak do TTF_OpenFont dáš plnú cestu k fontu tak to aspoň mňa beží... a predpokladám že nieje potrebné

TTF_Quit();
if(TTF_Init()==-1)

IMHO stačí init na začiatku a quit na konci...

Nahlásit jako SPAM
IP: 85.135.211.–
viem že neviem čo viem
Kowalsky950
Stálý člen
29. 5. 2013   #9
-
0
-

Já vím že to běží. Mě to běží i tak. Jenže se to po nějaké době klekne a TTF_GetError() hlásí že nejde otevřít font. Přitom asi 10 minut jde v pohodě otevřít, potom to klekne. To jak mám za sebou QUIT a INIT byla taková zkouška to vypnout a zapnout, ale pořád nic :/ :D

Nahlásit jako SPAM
IP: 90.176.114.–
nergal+1
Návštěvník
29. 5. 2013   #10
-
0
-

ok tak ešte jeden nápad TTF_RenderText_Shaded vytvára nový surface ktorý podľa dokumentácie treba uvoľniť cez SDL_FreeSurface ...

Nahlásit jako SPAM
IP: 85.135.211.–
viem že neviem čo viem
KIIV
~ Moderátor
+43
God of flame
29. 5. 2013   #11
-
0
-

to TTF_Init by melo stacit jednou na zacatku programu a quit na konci...

+ pokud pouzivas furt ten samy font, tak by melo stacit nacist taky na zacatku a pak uz jen vykreslovat... furt to otvirat a zavirat  + i dokonce inicializovat a rusit cely je podle me asi zbytecny

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kowalsky950
Stálý člen
29. 5. 2013   #12
-
0
-

Zkusím, ale až zítra. Nicméně nevidím souvilost mezi Surfacem a tím že nejde otevřít font.
To Init a Quit jsem měl právě na začátku a na konci. Jinak je to v podmínce jestliže se nepodařilo přidat font k ukazateli, a spustí se tedy jen tehdy. Jak jsme psal byla to snaha zkusit to zapnout a vypnout. Jinak otevírám ho a zavírám kvůli různé velikosti písma (tedy TTF_FontOpen a TTF_FontClose)

Nahlásit jako SPAM
IP: 90.176.114.–
Kowalsky950
Stálý člen
1. 6. 2013   #13
-
0
-

Skutečně bylo nutné na každý *text surface zavolat SDL_FreeSurface ....diky, na toto bych vážně sám nepřišel.
označuji tedy za vyřešené.

Nahlásit jako SPAM
IP: 90.176.114.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 61 hostů

Podobná vlákna

Ttf pismo podobne Arial-u — založil marioff

Font — založil Tukan

@font-face — založil ANV

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý