[ Thread Index | 
Date Index
| More lists.liballeg.org/allegro-developers Archives
] 
- To: "Coordination of admins/developers of the game programming library	Allegro" <alleg-developers@xxxxxxxxxx>
 
- Subject: [AD] mingw, static, tls
 
- From: Matthew Leverton <meffer@xxxxxxxxxx>
 
- Date: Fri, 17 Jul 2009 19:07:10 -0500
 
In an attempt to profile the slow allegro fonts, I've finally gotten
allegro to actually compile a usable profile mode. (Man vs Machine).
Shared profile didn't seem to give me any profile information, despite
-pg being passed everywhere (after manually editing some link.txt
files).
So I went with a static profile, and noticed that mingw32 static
doesn't work. I assume this is a known bug because it just crashes on
the display code, but it took me a while to figure out what was going
on since I'm not familiar with A5's internals.
Anyway, I altered the function as follows. Obviously this isn't at all
correct, but the hack works for my purposes. I assume the problem is
the DllMain thing doesn't get called, so the tls data never gets
initialized.
static thread_local_state *tls_get(void)
{
	static int foo = 0;
	if (!foo )
	{
		foo = 1;
		tls_index = TlsAlloc();
		  thread_local_state *data = _AL_MALLOC(sizeof(*data));
          if (data != NULL) {
             memset(data, 0, sizeof(*data));
             data->new_bitmap_format = ALLEGRO_PIXEL_FORMAT_ANY;
             data->blend_source = ALLEGRO_ALPHA;
             data->blend_dest = ALLEGRO_INVERSE_ALPHA;
             data->blend_alpha_source = ALLEGRO_ONE;
             data->blend_alpha_dest = ALLEGRO_ONE;
             data->blend_color.r = data->blend_color.g = data->blend_color.b
                = data->blend_color.a = 1.0f;
             //data->memory_blender = _al_blender_alpha_inverse_alpha;
             TlsSetValue(tls_index, data);
             _al_fill_display_settings(&data->new_display_settings);
          }
		
	}
   thread_local_state *t = TlsGetValue(tls_index);
   return t;
}
--
Matthew Leverton