2015-09-28 74 views
1

我試圖從here運行「7.簡單文本渲染」的「a。基本代碼」,但函數「my_draw_bitmap」似乎是未定義的。我試圖使用GLEW,但問題是一樣的。然後我看到「pngwriter」庫here,但Cmake的Visual Studio 2013編譯出錯。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]; 
     } 
    } 
}