const char在作为Freetype的参数传递时被清空

时间:2012-07-12 23:54:13

标签: c++ c freetype2

我正在试图弄清楚为什么这个论点没有被正确传递。以下是相关代码,为简洁起见缩短:

bool CCImage::initWithString(
    const char * pText,
    int nWidth/* = 0*/,
    int nHeight/* = 0*/,
    ETextAlign eAlignMask/* = kAlignCenter*/,
    const char * pFontName/* = nil*/,
    int nSize/* = 0*/)
{
    do
    {
        BitmapDC &dc = sharedBitmapDC();

        const char* pFullFontName = CCFileUtils::fullPathFromRelativePath(pFontName);
        CCLog("font is %s\n", pFullFontName);

        dc.getBitmap(pText, nWidth, nHeight, eAlignMask, pFullFontName, nSize);
    }

bool getBitmap(const char *text, int nWidth, int nHeight, CCImage::ETextAlign eAlignMask, const char * pFontName, float fontSize) {
    FT_Face face;
    FT_Error iError;

    bool bRet = false;
    if (libError) {
        return false;
    }
    do {
        iError = FT_New_Face( library, pFontName, 0, &face );
        CCLog("error is %d font is %s\n", iError, pFontName);
        if (iError) {
            iError = FT_New_Face( library, "/usr/share/fonts/arial.ttf", 0, &face );
        }
    }

大约20%的时间,字体显示正确。其余的时间在第一次FT_NEW_FACE失败后显示为arial。 CCLogs的输出(它只是printf的一个宏)显示了原因。以下是尝试为四个标签加载字体Abduction的输出:

font is ./Res/fonts/Abduction.ttf
error is 1 font is 
font is ./Res/fonts/Abduction.ttf
error is 0 font is ./Res/fonts/Abduction.ttf
font is ./Res/fonts/Abduction.ttf
error is 1 font is 
font is ./Res/fonts/Abduction.ttf
error is 1 font is 

正如你所看到的,除了第二个之外的所有pFontName在被initWithString传递并被getBitmap接收之间以某种方式被清空。但我不确定为什么。更令人困惑的是,它是完全随机的,它会起作用,什么时候不起作用。我正在为WebOS编译它,它似乎没有发生在其他平台上(事实上,它在几天前在WebOS上运行良好)但我不认为它是一个平台问题,它似乎太基础了。我比计划落后两周并且很努力,所以也许我错过了一些简单的事情。但我很欣赏一些可能让我重新取得进步而不是转动轮子的想法。

0 个答案:

没有答案