Возникли проблемы с перезаписью буфера глифов freetype - PullRequest
0 голосов
/ 25 июня 2018

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

Полный код находится на github https://github.com/live627/Engine/blob/master/Engine/Engine/fontmanager.cpp#L171

Я выделяю буфер

unsigned char * charmap = new unsigned char[m_width * m_height]();

Я бью пиксельные буферы вот так и получаю нарушения прав доступа

void Font::StitchGlyph(const GlyphInfo g,
    unsigned int px, unsigned int py, unsigned int total_width,
    unsigned int max_height, unsigned char * charmap)
{
    auto WIDTH = total_width, HEIGHT = max_height;

    for (int y = 0; y < g.bh; y++)
    {
        for (int x = 0; x < g.bw; x++)
        {
            //if (x >= WIDTH || y >= HEIGHT)
            //  continue; 

            charmap[(py + y) * WIDTH + (px + x)] = g.img[y * g.bw + x];
        }
    }
}

1 Ответ

0 голосов
/ 25 июня 2018

Я бы подтвердил в коде, что ваши смещения в сочетании с шириной и высотой глифа не превышают выделенных границ.Так что проверьте

if (px + GlyphInfo.bw > m_width || py + GlyphInfo.bh > m_height) 
    // error

Я думаю, это то, откуда оно исходит.

...