无法清除自由型字形缓冲区

时间:2018-06-25 00:58:24

标签: c++11 visual-c++ directx-11 direct3d freetype2

我无法将由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 :(得分:0)

我会在代码中验证您的偏移量与字形的宽度和高度结合不超过分配的范围。所以检查

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

我的猜测是它来自哪里。