2015-09-28 4 views
1

Я пытаюсь запустить «7. Простой текстовый рендеринг» «Базовый код» от here, но функция «my_draw_bitmap» кажется неопределенной. Я пытался использовать GLEW, но проблема такая же. Затем я увидел библиотеку pngwriter here, но компиляция для Visual Studio 2013 с Cmake дает ошибку.FreeType2 my_draw_bitmap undefined

PNG_LIBRARY ERROR

Пожалуйста, кто поможет, где функция 'my_draw_bitmap' определяется?

+1

Это не определено в libpng. –

+0

Где это определяется? Я нашел SDL_ttf также хорошим инструментом. – nicksona

+1

Я не могу ответить, где он определен, но поскольку ваш вопрос отмечен libpng, я ответил на эту часть. Это не в libpng. Также строка «draw_bitmap» нигде в последнем источнике freetype, который у меня есть (версия 2.5.3). –

ответ

0

В учебнике состояния

Функция 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]; 
     } 
    } 
}