Freetype2 Access Violation после FT_Load_Char только в режиме отладки

Возникли проблемы с реализацией FreeType2 для плагина X-Plane. Я использую реализацию freetype, которую я не писал, но хорошая новость в том, что она работает … в режиме релиза. Я не могу преодолеть эту точку в режиме отладки, что означает, что я не могу отлаживать любые другие части моей программы. Если у кого-то есть идеи о том, что может пойти не так или как я могу предотвратить возникновение проблемы при отладке, это было бы здорово. Вот код:

// We iterate through every letter that we care about
// and record the tallest letter and the width of all
// letters combined as well as the widest letter.
for(int n = FM_BASE_ASCII_RANGE; n <= FM_PEAK_ASCII_RANGE; ++n)
{
if(FT_Load_Char(*inFace, n, FT_LOAD_RENDER))
continue;

// If the bitmap doesn't exist, we have nothing to do
//access violation happens when executing the next line in debug
if(!(*inFace)->glyph->bitmap.rows || !(*inFace)->glyph->bitmap.width)
continue;

int width  = (*inFace)->glyph->metrics.width / 64.0;
int height = (*inFace)->glyph->metrics.height / 64.0;

// If any of the sizes are 0, we have nothing to do
if(!(*inFace)->glyph->metrics.width || !(*inFace)->glyph->metrics.height)
continue;

if(height > maxHeight)
maxHeight = height;

// Add this to our sum with some room for padding as well
curRowWidth += width + FM_PIX_PADDING;

// If it doesn't fit, we add a new row and put it there
if(curRowWidth > FM_DEFAULT_TEX_WIDTH)
{
nRows++;
curRowWidth = width + FM_PIX_PADDING;
}
}

Код выше вызывается для каждого шрифта и перебирает буквы, чтобы вычислить размер, который я считаю. Ошибка происходит впервые с первым загруженным шрифтом. Рендеринг шрифтов прекрасно работает и отлично выглядит в режиме релиза.

Я не уверен, имеет ли это значение, но если я нарушу перед этим нарушением доступа и оцениваю (* inFace) -> glyph-> bitmap, я вижу, что строки и ширина равны 0 … но bitmap.buffer указан как 0x0000 ~ ,

Также n равно 32 на первой итерации цикла. FT_Load_Char возвращается без ошибок.

Я использую Visual Studio 2010 с Windows 7.1 SDK в 64-разрядной версии Win 7, и это 64-разрядный проект. Я только что перешел на freetype 2.5.3, но у меня была та же проблема с моей предыдущей версией 2.4.12.

Если кто-то может помочь, это очень поможет мне, спасибо!

Изменить: Вот раздел разборки вокруг ошибки во время работы:

for(int n = FM_BASE_ASCII_RANGE; n <= FM_PEAK_ASCII_RANGE; ++n)
000007FEE531F29A  mov         dword ptr [n],20h
000007FEE531F2A2  jmp         FontMgr::CalcTexSize+6Eh (7FEE531F2AEh)
000007FEE531F2A4  mov         eax,dword ptr [n]
000007FEE531F2A8  inc         eax
000007FEE531F2AA  mov         dword ptr [n],eax
000007FEE531F2AE  cmp         dword ptr [n],0FEh
000007FEE531F2B6  jg          FontMgr::CalcTexSize+178h (7FEE531F3B8h)
{
if(FT_Load_Char(*inFace, n, FT_LOAD_RENDER))
000007FEE531F2BC  mov         r8d,4
000007FEE531F2C2  mov         edx,dword ptr [n]
000007FEE531F2C6  mov         rax,qword ptr [inFace]
000007FEE531F2CB  mov         rcx,qword ptr [rax]
000007FEE531F2CE  call        FT_Load_Char (7FEE5360790h)
000007FEE531F2D3  test        eax,eax
000007FEE531F2D5  je          FontMgr::CalcTexSize+99h (7FEE531F2D9h)
continue;
000007FEE531F2D7  jmp         FontMgr::CalcTexSize+64h (7FEE531F2A4h)

// If the bitmap doesn't exist, we have nothing to do
if(!(*inFace)->glyph->bitmap.rows ||!(*inFace)->glyph->bitmap.width)
000007FEE531F2D9  mov         rax,qword ptr [inFace]
000007FEE531F2DE  mov         rax,qword ptr [rax]
000007FEE531F2E1  mov         rax,qword ptr [rax+6Ch]
->000007FEE531F2E5  cmp         dword ptr [rax+60h],0
000007FEE531F2E9  je          FontMgr::CalcTexSize+0BDh (7FEE531F2FDh)
000007FEE531F2EB  mov         rax,qword ptr [inFace]
000007FEE531F2F0  mov         rax,qword ptr [rax]
000007FEE531F2F3  mov         rax,qword ptr [rax+6Ch]
000007FEE531F2F7  cmp         dword ptr [rax+64h],0
000007FEE531F2FB  jne         FontMgr::CalcTexSize+0BFh (7FEE531F2FFh)
continue;
000007FEE531F2FD  jmp         FontMgr::CalcTexSize+64h (7FEE531F2A4h)

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]