bkaradzic 12 years ago
parent
commit
ed9761e9c9
2 changed files with 54 additions and 63 deletions
  1. 32 35
      examples/common/cube_atlas.cpp
  2. 22 28
      examples/common/font/font_manager.cpp

+ 32 - 35
examples/common/cube_atlas.cpp

@@ -8,7 +8,6 @@
 
 #include <limits.h> // INT_MAX
 #include <memory.h> // memset
-
 #include <vector>
 
 #include "cube_atlas.h"
@@ -175,12 +174,10 @@ float RectanglePacker::getUsageRatio()
 	uint32_t total = m_width * m_height;
 	if (total > 0)
 	{
-		return (float) m_usedSpace / (float) total;
-	}
-	else
-	{
-		return 0.0f;
+		return (float)m_usedSpace / (float)total;
 	}
+
+	return 0.0f;
 }
 
 void RectanglePacker::clear()
@@ -441,11 +438,11 @@ void Atlas::packUV(const AtlasRegion& _region, uint8_t* _vertexBuffer, uint32_t
 	static const int16_t maxVal = INT16_MAX;
 	float texMult = (float)(maxVal - minVal) / ( (float)(m_textureSize) );
 	
-	int16_t x0 = (int16_t)( ((float)_region.x * texMult) - float(INT16_MAX) );
-	int16_t y0 = (int16_t)( ((float)_region.y * texMult) - float(INT16_MAX) );
-	int16_t x1 = (int16_t)( (((float)_region.x + _region.width) * texMult) - float(INT16_MAX) );
-	int16_t y1 = (int16_t)( (((float)_region.y + _region.height) * texMult) - float(INT16_MAX) );
-	int16_t w =  (int16_t)( (float(INT16_MAX) / 4.0f) * (float) _region.getComponentIndex() );
+	int16_t x0 = (int16_t)( ( (float)_region.x * texMult) - float(INT16_MAX) );
+	int16_t y0 = (int16_t)( ( (float)_region.y * texMult) - float(INT16_MAX) );
+	int16_t x1 = (int16_t)( ( ( (float)_region.x + _region.width) * texMult) - float(INT16_MAX) );
+	int16_t y1 = (int16_t)( ( ( (float)_region.y + _region.height) * texMult) - float(INT16_MAX) );
+	int16_t ww = (int16_t)( (float(INT16_MAX) / 4.0f) * (float) _region.getComponentIndex() );
 
 	_vertexBuffer += _offset;
 	switch (_region.getFaceIndex() )
@@ -455,44 +452,44 @@ void Atlas::packUV(const AtlasRegion& _region, uint8_t* _vertexBuffer, uint32_t
 		x1 = -x1;
 		y0 = -y0;
 		y1 = -y1;
-		writeUV(_vertexBuffer, maxVal, y0, x0, w); _vertexBuffer += _stride;
-		writeUV(_vertexBuffer, maxVal, y1, x0, w); _vertexBuffer += _stride;
-		writeUV(_vertexBuffer, maxVal, y1, x1, w); _vertexBuffer += _stride;
-		writeUV(_vertexBuffer, maxVal, y0, x1, w); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, maxVal, y0, x0, ww); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, maxVal, y1, x0, ww); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, maxVal, y1, x1, ww); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, maxVal, y0, x1, ww); _vertexBuffer += _stride;
 		break;
 
 	case 1: // -X
 		y0 = -y0;
 		y1 = -y1;
-		writeUV(_vertexBuffer, minVal, y0, x0, w); _vertexBuffer += _stride;
-		writeUV(_vertexBuffer, minVal, y1, x0, w); _vertexBuffer += _stride;
-		writeUV(_vertexBuffer, minVal, y1, x1, w); _vertexBuffer += _stride;
-		writeUV(_vertexBuffer, minVal, y0, x1, w); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, minVal, y0, x0, ww); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, minVal, y1, x0, ww); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, minVal, y1, x1, ww); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, minVal, y0, x1, ww); _vertexBuffer += _stride;
 		break;
 
 	case 2: // +Y
-		writeUV(_vertexBuffer, x0, maxVal, y0, w); _vertexBuffer += _stride;
-		writeUV(_vertexBuffer, x0, maxVal, y1, w); _vertexBuffer += _stride;
-		writeUV(_vertexBuffer, x1, maxVal, y1, w); _vertexBuffer += _stride;
-		writeUV(_vertexBuffer, x1, maxVal, y0, w); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, x0, maxVal, y0, ww); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, x0, maxVal, y1, ww); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, x1, maxVal, y1, ww); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, x1, maxVal, y0, ww); _vertexBuffer += _stride;
 		break;
 
 	case 3: // -Y
 		y0 = -y0;
 		y1 = -y1;
-		writeUV(_vertexBuffer, x0, minVal, y0, w); _vertexBuffer += _stride;
-		writeUV(_vertexBuffer, x0, minVal, y1, w); _vertexBuffer += _stride;
-		writeUV(_vertexBuffer, x1, minVal, y1, w); _vertexBuffer += _stride;
-		writeUV(_vertexBuffer, x1, minVal, y0, w); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, x0, minVal, y0, ww); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, x0, minVal, y1, ww); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, x1, minVal, y1, ww); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, x1, minVal, y0, ww); _vertexBuffer += _stride;
 		break;
 
 	case 4: // +Z
 		y0 = -y0;
 		y1 = -y1;
-		writeUV(_vertexBuffer, x0, y0, maxVal, w); _vertexBuffer += _stride;
-		writeUV(_vertexBuffer, x0, y1, maxVal, w); _vertexBuffer += _stride;
-		writeUV(_vertexBuffer, x1, y1, maxVal, w); _vertexBuffer += _stride;
-		writeUV(_vertexBuffer, x1, y0, maxVal, w); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, x0, y0, maxVal, ww); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, x0, y1, maxVal, ww); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, x1, y1, maxVal, ww); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, x1, y0, maxVal, ww); _vertexBuffer += _stride;
 		break;
 
 	case 5: // -Z
@@ -500,10 +497,10 @@ void Atlas::packUV(const AtlasRegion& _region, uint8_t* _vertexBuffer, uint32_t
 		x1 = -x1;
 		y0 = -y0;
 		y1 = -y1;
-		writeUV(_vertexBuffer, x0, y0, minVal, w); _vertexBuffer += _stride;
-		writeUV(_vertexBuffer, x0, y1, minVal, w); _vertexBuffer += _stride;
-		writeUV(_vertexBuffer, x1, y1, minVal, w); _vertexBuffer += _stride;
-		writeUV(_vertexBuffer, x1, y0, minVal, w); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, x0, y0, minVal, ww); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, x0, y1, minVal, ww); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, x1, y1, minVal, ww); _vertexBuffer += _stride;
+		writeUV(_vertexBuffer, x1, y0, minVal, ww); _vertexBuffer += _stride;
 		break;
 	}
 }

+ 22 - 28
examples/common/font/font_manager.cpp

@@ -16,22 +16,12 @@
 #if BGFX_CONFIG_USE_TINYSTL
 namespace tinystl
 {
-	//struct bgfx_allocator
-	//{
-	//static void* static_allocate(size_t _bytes);
-	//static void static_deallocate(void* _ptr, size_t /*_bytes*/);
-	//};
 } // namespace tinystl
-//#	define TINYSTL_ALLOCATOR tinystl::bgfx_allocator
-#   include <TINYSTL/unordered_map.h>
-//#	include <TINYSTL/unordered_set.h>
+#   include <TINYSTL/unordered_map.hh>
 namespace stl = tinystl;
 #else
 #   include <unordered_map>
-namespace std
-{ namespace tr1
-{}
-}
+namespace std { namespace tr1 {} }
 namespace stl
 {
 	using namespace std;
@@ -201,25 +191,25 @@ bool TrueTypeFont::bakeGlyphAlpha(CodePoint _codePoint, GlyphInfo& _glyphInfo, u
 
 	FT_BitmapGlyph bitmap = (FT_BitmapGlyph)glyph;
 
-	int32_t x = bitmap->left;
-	int32_t y = -bitmap->top;
-	int32_t w = bitmap->bitmap.width;
-	int32_t h = bitmap->bitmap.rows;
+	int32_t xx = bitmap->left;
+	int32_t yy = -bitmap->top;
+	int32_t ww = bitmap->bitmap.width;
+	int32_t hh = bitmap->bitmap.rows;
 
-	_glyphInfo.offset_x = (float) x;
-	_glyphInfo.offset_y = (float) y;
-	_glyphInfo.width = (float) w;
-	_glyphInfo.height = (float) h;
+	_glyphInfo.offset_x = (float)xx;
+	_glyphInfo.offset_y = (float)yy;
+	_glyphInfo.width = (float)ww;
+	_glyphInfo.height = (float)hh;
 	_glyphInfo.advance_x = (float)slot->advance.x / 64.0f;
 	_glyphInfo.advance_y = (float)slot->advance.y / 64.0f;
 
 	int32_t charsize = 1;
 	int32_t depth = 1;
 	int32_t stride = bitmap->bitmap.pitch;
-	for (int32_t ii = 0; ii < h; ++ii)
+	for (int32_t ii = 0; ii < hh; ++ii)
 	{
-		memcpy(_outBuffer + (ii * w) * charsize * depth,
-			bitmap->bitmap.buffer + (ii * stride) * charsize, w * charsize * depth);
+		memcpy(_outBuffer + (ii * ww) * charsize * depth,
+			bitmap->bitmap.buffer + (ii * stride) * charsize, ww * charsize * depth);
 	}
 
 	FT_Done_Glyph(glyph);
@@ -270,8 +260,10 @@ bool TrueTypeFont::bakeGlyphSubpixel(CodePoint _codePoint, GlyphInfo& _glyphInfo
 	int32_t stride = bitmap->bitmap.pitch;
 	for (int32_t ii = 0; ii < h; ++ii)
 	{
-		memcpy(_outBuffer + (ii * w) * charsize * depth,
-			bitmap->bitmap.buffer + (ii * stride) * charsize, w * charsize * depth);
+		memcpy(_outBuffer + (ii * w) * charsize * depth
+			, bitmap->bitmap.buffer + (ii * stride) * charsize
+			, w * charsize * depth
+			);
 	}
 
 	FT_Done_Glyph(glyph);
@@ -472,9 +464,11 @@ typedef stl::unordered_map<CodePoint, GlyphInfo> GlyphHashMap;
 struct FontManager::CachedFont
 {
 	CachedFont()
+		: trueTypeFont(NULL)
 	{
-		trueTypeFont = NULL; masterFontHandle.idx = -1;
+		masterFontHandle.idx = bx::HandleAlloc::invalid;
 	}
+
 	FontInfo fontInfo;
 	GlyphHashMap cachedGlyphs;
 	TrueTypeFont* trueTypeFont;
@@ -568,7 +562,7 @@ FontHandle FontManager::createFontByPixelSize(TrueTypeHandle _tt_handle, uint32_
 	if (!ttf->init(m_cachedFiles[_tt_handle.idx].buffer, m_cachedFiles[_tt_handle.idx].bufferSize, _typefaceIndex, _pixelSize) )
 	{
 		delete ttf;
-		FontHandle invalid = BGFX_INVALID_HANDLE;
+		FontHandle invalid = { bx::HandleAlloc::invalid };
 		return invalid;
 	}
 
@@ -580,7 +574,7 @@ FontHandle FontManager::createFontByPixelSize(TrueTypeHandle _tt_handle, uint32_
 	m_cachedFonts[fontIdx].fontInfo.fontType = _fontType;
 	m_cachedFonts[fontIdx].fontInfo.pixelSize = _pixelSize;
 	m_cachedFonts[fontIdx].cachedGlyphs.clear();
-	m_cachedFonts[fontIdx].masterFontHandle.idx = -1;
+	m_cachedFonts[fontIdx].masterFontHandle.idx = bx::HandleAlloc::invalid;
 	FontHandle ret = {fontIdx};
 	return ret;
 }