В учебнике состояния
Функция my_draw_bitmap
не является частью FreeType, но должны быть предусмотрено приложением для рисования растрового изображения на поверхность мишени. В этом примере он принимает указатель на дескриптор FT_Bitmap и позицию его верхнего левого угла в качестве аргументов.
Что это означает, что вам нужно реализовать функцию для копирования глифы текстуры или растрового изображения, чтобы быть оказаны себя (при условии что не подходящая функция доступна в библиотеках, которые вы используете).
Приведенный ниже код должен соответствовать копированию пикселей одного символа в массив, который можно скопировать в текстуру.
unsigned char **tex;
void makeTex(const unsigned int width, const unsigned int height)
{
tex = (unsigned char**)malloc(sizeof(char*)*height);
tex[0] = (unsigned char*)malloc(sizeof(char)*width*height);
memset(tex[0], 0, sizeof(char)*width*height);
for (int i = 1; i < height;i++)
{
tex[i] = tex[i*width];
}
}
void paintGlyph(FT_GlyphSlot glyph, unsigned int penX, unsigned int penY)
{
for (int y = 0; y<glyph->bitmap.rows; y++)
{
//src ptr maps to the start of the current row in the glyph
unsigned char *src_ptr = glyph->bitmap.buffer + y*glyph->bitmap.pitch;
//dst ptr maps to the pens current Y pos, adjusted for the current char row
unsigned char *dst_ptr = tex[penY + (glyph->bitmap.rows - y - 1)] + penX;
//copy entire row
for (int x = 0; x<glyph->bitmap.pitch; x++)
{
dst_ptr[x] = src_ptr[x];
}
}
}
Это не определено в libpng. –
Где это определяется? Я нашел SDL_ttf также хорошим инструментом. – nicksona
Я не могу ответить, где он определен, но поскольку ваш вопрос отмечен libpng, я ответил на эту часть. Это не в libpng. Также строка «draw_bitmap» нигде в последнем источнике freetype, который у меня есть (версия 2.5.3). –