Hola a todos! Quería saber si alguien podría ayudarme con respecto a este tema.
Decidí utilizar fuentes ttf en mi programa pero al parecer un bug no deja que se vean cuando se las imprime en pantalla con write, write_var, etc.
Busqué información por todo el sitio, pero nada... ¿Alguien sabe si este módulo ya está desfasado o algo así? ¿Estaré haciendo algo mal?
Más abajo adjunto el código:
Program AdminBar;
Import "mod_video";
Import "mod_key";
Import "mod_screen";
Import "mod_map";
Import "mod_text";
Import "mod_wm";
Import "mod_mouse";
Import "mod_map";
Import "mod_grproc";
Import "mod_scroll";
Import "mod_draw";
Const
xSize = 1024;
ySize = 600;
End
Global
int idWallpaper;
int idButton;
int idMouseGraph;
int idMainFnt;
int dsx;
int dsy;
int cerveza;
int vino;
int champagne;
int whisky;
int daiquiri;
int agua;
int gaseosa;
int fernet;
int itemsTotal;
int precioTotal; // Guarda el total para generar el ticket
End
Process Main()
Begin
Set_mode(xSize,ySize,32,MODE_FRAMELESS); // Preparo la pantalla
Set_fps(30,0);
Set_title("Admin Bar");
Get_desktop_size(&dsx,&dsy); // Para centrar la ventana tomo el tamaño de la resolución del escritorio primero
Set_window_pos((dsx/2)-(xSize/2),(dsy/2)-(ySize/2)); // luego los divido por dos y les resto lamitad mas o menos de la resolución a la que está el juego
idMouseGraph = Load_png("C:\BennuGD Suite\Proyectos\AdminBar\graphics\Cursor3.png"); // Cargo los recursos
idWallpaper = Load_png("C:\BennuGD Suite\Proyectos\AdminBar\graphics\Fondo2.png");
idButton = Load_png("C:\BennuGD Suite\Proyectos\AdminBar\graphics\Button3-unpressed.png");
idMainFnt = Load_fnt("C:\BennuGD Suite\Proyectos\AdminBar\fonts\Font1.fnt");
Put_screen(0,idWallpaper); // Asigno los recursos
Mouse.graph = idMouseGraph;
Button(150,85,"Cerveza",cerveza); // Creo las instancias
Button(150,230,"Vino",vino);
Button(150,375,"Champagne",champagne);
Button(150,520,"Whisky",whisky);
Button(420,85,"Daiquiri",daiquiri);
Button(420,230,"Agua",agua);
Button(420,375,"Gaseosa",gaseosa);
Button(420,520,"Fernet",fernet);
While (not(key(_esc))) // Bucle principal
Frame;
End // While principal
Unload_fnt(idMainFnt); // Descargo los recursos que cargué al principio
End // Main
// -------------------------------------------------------------------------------------------
// ------------------------ DECLARACIÓN DE PROCESOS ------------------------------------------
// -------------------------------------------------------------------------------------------
Process Button(int x,int y,string text, int var)
Private
int idText;
Begin
Graph = idButton;
Shadow();
idText = Write(idMainFnt,x,y,4,text);
Write_var(idMainFnt,x,y+40,4,var);
While (not(key(_esc)))
If (mouse.left == true and collision(type mouse))
While (mouse.left) Frame; End
var = var + 1;
End
If (mouse.right == true and collision(type mouse))
While (mouse.right) Frame; End
If (var <> 0) var = var -1; End
End
Frame;
End
End
¿A nadie le pasó nunca esto? ¿Aunque sea alguien podría decirme si la mod_ttf ya funcionaba mal? Gracias...
no tengo los fuentes de la mod_ttf, pero en tu codigo no veo ninguna funcion de carga de un ttf, segun entiendo load_fnt solo carga fonts normales.
quizas me estoy perdiendo alguna linea de codigo.
Es cierto, pegué el código de cuando borré Load_ttf.
La línea para reemplazar a Load_fnt es:
Import "mod_ttf";
[size=78%]idMainFnt = [/size]Load_ttf("C:\BennuGD Suite\Proyectos\AdminBar\fonts\segoeui.ttf",RGB(50,50,50));
Igualmente, antes ya lo había puesto asi, probé todas las combinaciones de colores pero nada.
cuando lei tu PM, realmente pense que ponias los fuentes de la mod_ttf y tenias problemas para compilarla.
la verdad que nunca use la mod_ttf.
Uh! Entonces, estoy en problemas no? :o
la verdad yo la compilé para Pandora hace tiempo y funcionaba (realmente sólo probé el ejemplo de windows y pandora en su dia)
http://gecasoft.no.sapo.pt/RecentProjects/BennuGDModTTF.html (http://gecasoft.no.sapo.pt/RecentProjects/BennuGDModTTF.html)
viene con un ejemplo de test, pruebalo en windows a ver si te funciona (no he tenido tiempo de ver tu problema ni tengo idea si es similar al test o no...)
Ok Free, ya me pongo a probarlo! ;D
Edit: Ya lo probé, y de hecho es un .so que BennuGD para Windows no reconoce, casi obvio pero bueno, tenía que probar. Lego por si acaso cambié la extensión a .dll y dice que no está diseñado para ejecutarse en Windows.
no, no va a funcionar asi
joer que lamer!!!! xDDD
usa solo el test prg con tu modulo ttf que ya usabas en tu prg... sólo el ejemplo, olvidate del modulo, el tuyo sirve
yo tengo un fuente, pero parece que es de fenix... te fijaste en el bennupack
me suena que falla porque creo que el 2do parametro no es el color, sino que es el size.
free, en lugar de poner un ejemplo, podrias explicar que significa cada parametro... :P
Probé el ejemplo, pero como suponía, sigue sin funcionar. La falla debe estar en la .dll misma. Los parámetros están bien, y el segundo de ellos es el tamaño de la fuente. El color se especifica con set_color().
A veces peco de lamer como dice Free, pero es por no saber C arrrggg!!! :P
¿Alguna otra idea?
segun este mensaje viejuno que acabo de encontrar:
I'm porting this module to Pandora.
Splinter you break the compatibility with this module changing the 'libfont' module on release r194 xDDDD
Changes:
int gr_font_new() --> int gr_font_new( int charset, uint32_t bpp )
prueba un bennu anterior a r194 a ver si te funciona.
por cierto estas usando esta de dcelso ?
http://forum.bennugd.org/index.php?action=dlattach;topic=837.0;attach=578 (http://forum.bennugd.org/index.php?action=dlattach;topic=837.0;attach=578)
Hola Free, gracias por responder!
Con respecto a la de DCelso, no, estaba usando otra. Recién probé la de él, pero tampoco funcionó.
Voy a probar con una versión más antigua de bennu a ver qué sucede...
¡Saludos!
EDITO:
Free, la mod_ttf finalmente funcionó con la versión "bgd-1.0.0RC19(r189)-win32". Tal vez Splinter recuerde qué sucedió con esto...
¡Muchísimas gracias por tu ayuda Free!
me alegro :) afinal ya no recordaba que habia dejado de ser compatible, todo porque esa función cambio en bennu y el modulo dependia de ella, a lo mejor compilando de nuevo el modulo con los cambios la hariamos de nuevo compatible con las ultimas versiones de bennu.
Eso estaría muy bueno, pero como te dije antes, tengo que hacer un curso de C urgente...
Y otra cosa con respecto al módulo: ¿no se supone que las fuentes no tienen que pixelarse?
Depende del modo gráfico y de los colores que estés usando. Si la mod_ttf soporta 32 bits no debería pixelar, porque haría uso de los distintos niveles de transparencia para hacer antialiasing, pero si sólo sirve en 16, o peor aun, en 8 bits, no hay forma de que no pixelice sin que suavices los bordes a mano por soft.
Estoy usando 32 bits, asi que aparentemente debe ir solamente en 16 o menos... Es raro igual.
ya han dicho que el problema es por incompatibilidad de funciones que han cambiado (cambiado parametros de funciones internas del runtime bennugd)
si comparten los fuentes de la ultima mod_ttf, los miro y corrijo, incluso quizas los meta en la rama oficial.
salutes
Hola Splinter! Qué bueno sería si pudieras darle compatibilidad de nuevo con la última versión de bennu. Este es el enlace desde donde descargué el módulo: http://www.bennugd.org/downloads/mod_ttf-1.1.zip (http://www.bennugd.org/downloads/mod_ttf-1.1.zip)
Espero que te sirva, saludos!
aca esta el fuente fixeado.
no tengo el entorno windows preparado, asi que pongo el fuente y algun otro colabore compilandola.
Splinter, tal vez con un poco de ayuda lo pueda compilar yo...
tenes que instalar compilador y dependencias... compilarlo es simple, me falta instalar la freetype6, luego la busco y te compilo la dll.
o era para linux?
Genial! Yo necesito la versión para Windows, pero si podés hacer las dos creo que sería bueno para toda la comunidad! Gracias por tu ayuda!
Quote from: SplinterGU on August 05, 2013, 03:03:42 PM
tenes que instalar compilador y dependencias... compilarlo es simple, me falta instalar la freetype6, luego la busco y te compilo la dll.
o era para linux?
Hola de nuevo Splinter! Pudiste compilarlo al final?
la verdad que no, hoy a la noche intento hacerlo, la verdad que aun estoy trabajando y estoy atrasado.
Ok, gracias igual y no te preocupes que puedo esperar...
la compile a mano desde linux, con el cross compiler de windows, asi que probalo y contame como va.
saludos
tenes que usar la ultima version de bennugd (binario)
Splinter, intenté usarla... Volví con la última versión de Bennu ("bgd-1.0.0-r307-win32"), me pedía libfreetype-6.dll como siempre asi que lo puse también. El tema es que ahora me pide una dependencia "libgcc_s_sjlj-1.dll" (creo que del compilador de C no?).
Ya sé que es redundante, pero te pongo el mensaje de error que me aparece:
"El programa no puede iniciarse por falta libgcc_s_sjlj-1.dll en el equipo. Intente reinstalar el programa para corregir este problema."
Saludos y gracias por tu tiempo!
no se porque ahora el compilador gcc la requiere.
aca va.
(puede que no vaya, ya que el resto de bennugd no la tiene)
Bueno, ya con la dependencia que me pasaste no tira más error. El tema es que las fuentes que cargo con Load_ttf o Ttf_load, no se visualizan para nada. Incluso probé alterando los valores de:
Set_mode (probé con una profundidad de 8, 16, 24 y 32)
Set_text_color (probé con una buena variedad de valores RGBA, por si acaso estaba el alpha muy bajo)
Probé con varias fuentes .ttf y con otras versiones de freetype6, que renombré a libfreetype-6 ya que me lo pide asi. ¿Puede ser que tenga algo que ver con ésto último? Tal vez tendrías que pasarme la freetype6 que usaste vos para compilarlo... ???
no la tengo con dll, que loco!
estoy con una gripe y un dolor de cabeza que no puedo pensar nada.
Uuh!! Bueno, dejemos esto para cuando te mejores! Descansá tranquilo y mejorate! ;)
a ver esta.
mod_ttf sin dependencias al runtime dinamico de gcc
Hola Splinter, ya probé con las últimas dos .dll pero tampoco pasa nada, incluso al usar la última que colgaste me sigue pidiendo la dependencia "libgcc_s_sjlj-1.dll". Luego, cuando la vuelvo a incluir, tampoco funciona.
También lo probé con el ejemplo de [size=78%]http://wiki.bennugd.org/index.php?title=Mod_ttf (http://wiki.bennugd.org/index.php?title=Mod_ttf)[/size] para ver si estaba haciendo algo mal...
Estoy pensando que tal vez esta librería no la utiliza nadie y tampoco te quiero hacer perder más tiempo, asi que no te preocupes!
la ultima la tenes que usar con la freetype que tenias vos...
Ok, ya la pruebo...
No anduvo tampoco... Querés que te pase mi .prg? Seré yo el único que tiene este problema? :o
Yo también tengo el problema, incluso postie hace un par de meses y ahora me encuentro con este hilo, la verdad no se como hacen sus juegos sin el modttf!! Ahora somos dos.
Por favor no abandonen en tema y hagan que funcione de nuevo mod_tff ya que en la web hay fuentes muy buenas en ese formato, mod_tff solo funciona en la 189 como comentaron, yo estoy animado y me animaría mas si salen las ttf en las versiones recientes, no se nada de c, si no, lo haría yo mismo.
no la voy a mantener, pero si queres pone todo completo lo que tengas, ejemplo + fuentes + lo que sea necesario, y la pruebo... si es algo evidente la corrijo, si es algo que requiera mucho tiempo, no lo hare... quiero meterme con el poco tiempo que dispongo en el nuevo bennugd.
mod_ttf es un módulo opcional porque es innecesario, bennu tiene su propio formato interno para fuentes, no es tan potente como el ttf pero es el justo y necesario para juegos (además de añadir más florituras como bordes, sombras, texturas, soportes de canal alfa).
Además y lo más importante es que mod_ttf internamente lo que hace es una conversión al formato de fuentes de bennu por lo que al final estás consumiendo de cpu para hacer un trabajo que no es propio de un juego.
Nadie, o casi nade usa .ttf porque para ello tienes los .fnt.
Así que os recomiendo que creeis los .fnt (en los distintos tamaños de letra que necesiteis) a partir del .ttf usando fnt make, fnt edit o la última versión de fpg editor (4.0 o superior). Así independizáis vuestro juego de la mod_ttf dándole así mas compatibilidad de plataformas para los que no existe mod_ttf y evitando espacio y consumo de cpu innecesario. ;)
NOTA: Esto solo es un consejo, cada cual que haga lo que más le plazca, en la diversidad está el gusto ;D
Yo estoy de acuerdo con lo que decís DCelso, nada más acertado! Pero lo que yo buscaba era tener fuentes que se vean bien, sin pixelarse. Es por eso que pensaba que una fuente true type sería la solución. De hecho, nunca antes se me había pasado por la cabeza por el hecho de que las .fnt tienen mucha más personalización.
Pero, volviendo al tema, lo que necesito es una fuente que no pixele, ¿hay alguna manera de hacer esto con las .fnt?
Y edito: ¿Hay alguna manera de aplicar antialiasing a una .fnt? Claro, una vez cargada en memoria, en pleno procesamiento del programa...
podrias hacerlo dibujando varias veces el texto con alpha, 1 pixel corrido.
ya no recuerdo si se puede escribir textos con alphas, creo que si.
Puedes dentro del fnt puedes poner los gráficos de cada caracter de tu fuente para el tamaño que quieras con el efecto de antialiasing, yo lo que hago es escribir en un programa de dibujo como Inkscape y luego mas tarde lo exporto a png y las inserto en el fnt Con el FPGeditor 4 r81 de DCelso, las letras se verán con el efecto de antialiasing con todo y transparencia (esto si estas usando 32 bits. También se puede hacer esto mismo para fuentes de 16, pero necesitas saber el color de fondo para simular el efecto)
Tal ves sea tardado, pero ya no dependes de los ttf y el efecto es el mismo
Gracias por sus respuestas. De hecho pensé que había una forma más fácil de hacerlo, pero bueno capaz que haya que esperar a la nueva versión de Bennu, tal vez haya algo para estos menesteres.
Mientras tanto estuve leyendo mucho sobre algoritmos de anti-aliasing, tal vez con un poco de tiempo me anime a tratar de hacer algo con eso... Pero bueno, creo que lo mejor sería quitar la mod_ttf de las librerías, y cerrar este hilo. Saludos y gracias a todos!
igual tengo entendido que la mod_ttf no te dibuja las fuentes vectorizadas, las convierte a bitmaps y se manejan como fonts normales pixelados de bennugd, supongo que tendran antialias, pero tu tambien puedes crear las fonts normales con antialias con el fntedit (o eso creo)
Tal cual Splinter, creo que la única persona que pensó que se vectorizaban fui yo :P
De cualquier manera, creo que lo ideal es que me ponga a ver si puedo hacer una función que imprima texto en pantalla pero con un proceso de anti-aliasing. Igual, es algo que le tengo que dedicar tiempo, tal vez me salga o tal vez no. Si tengo algún avance ya lo postearé por acá!
Saludos!
outlaw. No se lo que pretendes hacer pero quizás no estés empleando bien el término antialiasing.
Con la antialiasing lo que se hace es "suavizar" los bordes de una imagen, para ello se entremezclan (a traves de transiciones de color) los bordes poco a poco con los colores del fondo, en formatos inferiores a 32 bits es un diseño manual dependiente del color de fondo ya que hay que generar los colores intermedios entre el fondo y los bordes.
En formatos de 32 bits ello se hace con transiciones alfas del color del borde por lo que sirve para cualquier fondo que pongas ya que la componente alfa será la que se encargue de mezclar y sacar los colores intermedios.
Quizas tu texto se vea pixelado porque sea extraído de un tipo de letra pequeño y luego ampliado sin aplicar filtros de redimensionado.
Necesitaría un ejemplo exacto, pantallazo o lo que sea, para ver más a fondo lo que mencionas.
Pero el truco de master es buenísmo para sacar .fnts de 32 bits con antialiasing integrado.
Creas tu texto, los 256 caracteres que permite un fnt, con inkscape con la opcion antialiasing marcada y tu fuente truetype que quieras, luego lo exportas a png y finalmente lo conviertes a fnt con fpgedit 4.0 (es lento, hay que hacerlo letra a letra, o sea 256 veces, pero es eficaz)
No se si el editor de fuentes de fpgedit puede crear letras con antialiasing, porque yo directamente no se lo he añadido, pero creo recordar que vi algo de ello en las opciones de selección de fuente, por lo que quizás puedas hacerlo del tirón.
Te recomiendo que pruebes todas las opciones de generar fnts del fpg editor 4.0 (para el que no lo sepa os recuerdo que fpg editor 4.0 es un IDE basado en el propio de DIV que intenta dar todas las opciones que éste tenía, por lo que no solo sirve para editar fpgs, sino también para editar .prgs y .fnts, retocar gráficos modo pixel art, y lanzar la compilación o ejecución de .prgs, osea que va completito)
En bennu se pueden modificar los gliphs de una fuente?
Me suena haber leido algo al respecto, si la respuesta es si, te recomiendo que te mires el algoritmo Square/Diamond, es super sencillo de implementar en bennu y te permite hacer suavizados de todo lo que quieras, interior, contornos, exterior, contornos interiores etc..
Gracias por tan útil información DCelso, y a vos también Erko. Saludos!
Respondiendo a erkosone: sí, se pueden editar las fuentes desde Bennu mediante get_glyph y set_glyph. Creo que existe una new_fnt, pero la profundidad de color no recuerdo si va en la función o adopta los bpp del primer gráfico que se le añada.