Alright, I'm playing around with font stuff, and now I want more font functionality. Maybe some of this already exists?
1 - I want to load a true type font as a new font type. I have no idea what font I could use other than love.default_font, or loading a font in via an image.
2 - I want to use bold and italics.
3 - I want to use rotated & formatted text together. Currently I can only do one or the other! (sad panda face) Ideally the "wrap after this many pixels" value would be smart enough to act as the # of pixels in the current font orientation.
4 - I haven't been able to get the "align" portion of drawf to work for me. Could someone post an example of what valid values for align are? Or maybe this is currently working sub-optimally?
5 - Technical question - I have 50-100 elements on screen which have several text areas. If I wanted to have each area drawn with a different font / font size / font color would the overhead of switching fonts be something I might worry about? That is to say, would I be better off drawing font style A across all elements, then switch the font and draw all of style B, or would it be fine to simply draw each of the multiple font areas for each element in turn?
6 - Finally, I've noticed that my performance drops significantly with even a modest amount of wrapping text on the screen. Is this consistent with everyone else's experience?
--Mr. Strange
Fonts!
Forum rules
Before you make a thread asking for help, read this.
Before you make a thread asking for help, read this.
Re: Fonts!
- Use love.graphics.newFont("myfont.ttf", 14)
- Then use the corresponding font file. Bold and italics are not embedded into the same ttf-file.
- Font switching will probably not be a bottleneck.
- Yes.
I believe the entire Font system is subject to review, but frankly, drawing vast amount of text is of limited importance right now. The "fix font"-task has been gathering dust somwhere in the task list for some time now, and it will continue to do so ... for now.
-
- Party member
- Posts: 101
- Joined: Mon Aug 11, 2008 5:19 am
Re: Fonts!
Is it just the wrapping text which is slow, or is text in general slow?
If it's just wrapping that is a problem, I could take the time to "pre-wrap" all of my text. Lots more display calls, since I'd need one per line. But it would give me better control.
That would also be a work around for not supporting wrap & rotate at the same time. Of course, it's a hugely unpleasant data-munge task.
Mike, I'm hoping you have a more positive outlook on these matters?
--Mr. Strange
If it's just wrapping that is a problem, I could take the time to "pre-wrap" all of my text. Lots more display calls, since I'd need one per line. But it would give me better control.
That would also be a work around for not supporting wrap & rotate at the same time. Of course, it's a hugely unpleasant data-munge task.
Mike, I'm hoping you have a more positive outlook on these matters?
--Mr. Strange
-
- Party member
- Posts: 101
- Joined: Mon Aug 11, 2008 5:19 am
Re: Fonts!
I discovered the source of my performance woes - it was actually the way I was scaling my text.
Since I want word wrap, I coludn't scale my text in the draw function, so I was re-loading my font dozens of time every frame with different size values.
When I got rid of word wrap, and loaded the font only once my performance shot right back up.
So I optimized my script, and re-loaded the fonts only when the scale was adjusted. Now I have performance, and scaled text. Yay!
But I'm still not quite there, because I can't format my text when it is rotated.
I'd really like to use the align and wrap formatting options on rotated and scaled text.
Please?
--Mr. Strange
Since I want word wrap, I coludn't scale my text in the draw function, so I was re-loading my font dozens of time every frame with different size values.
When I got rid of word wrap, and loaded the font only once my performance shot right back up.
So I optimized my script, and re-loaded the fonts only when the scale was adjusted. Now I have performance, and scaled text. Yay!
But I'm still not quite there, because I can't format my text when it is rotated.
I'd really like to use the align and wrap formatting options on rotated and scaled text.
Please?
--Mr. Strange
Re: Fonts!
I just remembered some undocumented functions:
Love.graphics.scale and love.graphics.translate also exist. Be warned that these functions may be removed.
Code: Select all
love.graphics.push()
love.graphics.rotate(deg)
--draw whatever
love.graphics.pop()
Re: Fonts!
Haha. Put this at the start of your draw callback.
You should totally keep that in. And add some way to rotate around a different point.
Code: Select all
if(not shake) then
shake = 3
end
love.graphics.rotate(shake)
shake = shake * -1
if(shake > 0) then
shake = math.random()*3
end
Re: Fonts!
The only way to rotate around "a different point" (in computer graphics in general) is to translate your point to origo, perform the rotation, and then translate back.
Re: Fonts!
It is quite possible to rotate about "a different point" as follows:
love.graphics.rotate(angle,centrex,centrey) -- in keeping with the current api
c + opengl implementation:
With this, your love.graphics.push/rotate/pop code should do what Mr. Strange is after.
love.graphics.rotate(angle,centrex,centrey) -- in keeping with the current api
c + opengl implementation:
Code: Select all
static int fancy_rotate(lua_State *s) {
float x,y,r;
if (lua_gettop(s)>2 && lua_isnumber(s,1) &&
lua_isnumber(s,2) && lua_isnumber(s,3)) {
r=lua_tonumber(s,1); // positive angle -> anticlockwise rotation
x=lua_tonumber(s,2); // x of rotation point
y=lua_tonumber(s,3); // y of rotation point
GLfloat m[]={cos(r),sin(r),0,0,-sin(r),cos(r),0,0,
x*(1-cos(r))+y*sin(r),y*(1-cos(r))-x*sin(r),
1,0,0,0,0,1};
glLoadMatrix(m);
} else return existing_rotate(s);
return 0;
}
Who is online
Users browsing this forum: Amazon [Bot], Bing [Bot], Google [Bot] and 6 guests