diff options
Diffstat (limited to 'Build/source/libs/freetype/docs/threads.txt')
-rw-r--r-- | Build/source/libs/freetype/docs/threads.txt | 117 |
1 files changed, 0 insertions, 117 deletions
diff --git a/Build/source/libs/freetype/docs/threads.txt b/Build/source/libs/freetype/docs/threads.txt deleted file mode 100644 index 6e157fa3e1a..00000000000 --- a/Build/source/libs/freetype/docs/threads.txt +++ /dev/null @@ -1,117 +0,0 @@ -Threads with FreeType -===================== - - -The FreeType engine can now be compiled in thread-safe mode. -Because we want to keep the engine small and fast, the thread -protection is simple. This file gives an overview of what you can -do, and what you should strictly never do. - - -How to enable thread-safe support? - -A. You must have a valid replacement for the file `lib/ttmutex.c' - which calls your system's API to create, lock, and release - mutexes or semaphores. The current implementation is a dummy and - doesn't do anything. - -B. You must re-define the configuration macro - TT_CONFIG_OPTION_THREAD_SAFE located in `ttconfig.h'. Then - recompile. - - -IMPORTANT NOTE: - - If two threads create and use their own TT_Engine structure, they - can freely call the library concurrently on each of them (as well - as all their related objects), even in the non-threaded build. - The following remarks only apply to concurrent requests performed - on a single TT_Engine shared by multiple threads. - - --------------------------------------------------------------------- - -- What you can do: - - With the exceptions listed below (in `What you can't do'), you can - call all API functions concurrently with two different threads. - This includes: - - Creating two or more faces from the same engine (i.e. concurrent - calls to TT_Open_Face()/TT_Open_Collection()). - - Creating two or more instances from the same face object - (i.e. concurrent calls to TT_New_Instance()). - - Creating two or more glyph containers from the same face object - (i.e. concurrent calls to TT_New_Glyph()). - - The same holds for destruction of objects. - - Load two or more glyphs concurrently for the same face or - instance (i.e. concurrent TT_Load_Glyph() calls). - - Render two or more glyphs at the same time, in the same engine - (i.e. calling TT_Get_Glyph_Bitmap()/TT_Get_Glyph_Pixmap() or - TT_Get_Outline_Bitmap()/TT_GetOutline_Pixmap() concurrently). - - NOTE: The scan-line converter can only render one glyph at a - time, for a given TT_Engine. Concurrent calls are - synchronized through a mutex, though. - - If you really, _really_, need to generate bitmaps or - pixmaps concurrently, create an additional engine and use - it with TT_Get_Outline_Bitmap()/TT_Get_Outline_Pixmap() - (you don't need to create any object in it, the outline - can come from any source too). - - This is, however, not recommended (it works perfectly, but - this could change in the future for various technical - reasons). - - ---------------------------------------------------------------------------- - -- What you cannot do: - - - You shouldn't try to delete an object while still using it with - another thread. The engine doesn't protect you from stupidity! - For example, these concurrent calls: - - TT_Close_Face( face ); - TT_Get_Glyph_Bitmap( glyph, &bitmap ); - - will act unexpectedly if the glyph is a child of the face (i.e., - was created with TT_New_Glyph( face, &glyph )) - ^^^^ - same face - - Here are some other examples: - - TT_Get_Glyph_Outline( glyph1, ... ); - TT_Load_Glyph( instance, glyph1, ... ); - - or - - TT_Get_Outline_BBox( outline, &bbox ); - TT_Transform_Outline( outline ); - - etc. - - You get the idea: Only the face and instances are protected -- - glyph containers and outlines should be thread-specific. - - - - You shouldn't initialize extensions in an engine concurrently - (which is what every mere mortal will do anyway :-). - - - -That's about it. Now enjoy the lib ;-) - - -PS: See the `MT-Note' and `MT-Safe' remarks in ttapi.c for more - detailed information on each specific function. - - ---- end of threads.txt --- |