2013-01-03 79 views
4

我正在FTGL中使用紋理字體將字體呈現爲多個畫布,作爲軸的標籤等。我的第一個情節出來很好。但是隨後的所有畫布都將我的紋理字體渲染爲簡單的黑色方塊。我也注意到一些數字不會顯示在實際呈現的畫布上。 「中心時間」應顯示8.3956,但會顯示以下內容。當使用多個畫布時,FTGL紋理字體僅顯示黑色框

enter image description here

字體呈現如下:

glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); 
    PushGLMatrices(); 
      GrSetPixelProjection(); 
      glTranslatef(pixelX, pixelY, 0.0); 
      glRotatef(ang, 0.0, 0.0, 1.0); 
      savedFont->Render(label); 
    PopGLMatrices(); 

其中

void PushGLMatrices() 
    { 
      glMatrixMode(GL_PROJECTION); 
      glPushMatrix(); 
      glMatrixMode(GL_MODELVIEW); 
      glPushMatrix(); 
    } 

void PopGLMatrices() 
{ 
    glMatrixMode(GL_PROJECTION); 
    glPopMatrix(); 
    glMatrixMode(GL_MODELVIEW); 
    glPopMatrix(); 
} 

我已經嘗試了一些東西,比如clearning顏色和深度位,glEnable(GL_TEXTURE_2D ); glDisable(GL_DEPTH_TEST);但這似乎沒有幫助。出於某種原因,如果我將FTTextureFont :: FaceSize(int)添加到返回文本寬度的例程中,則所有內容都可以正確顯示(雖然速度很慢)。從查看FTGL源代碼看來,FaceSize()似乎不會處理除glDeleteTexture()調用之外的openGL參數,所以我有點困惑爲什麼這會起作用。

+0

這是否解決了?我在Linux Ubuntu上看到類似的問題,除了它在啓動時是隨機的。要麼沒關係,要麼有盒子。 – Joe

回答

1

看起來,當您繪製後續圖時,alpha混合將被禁用。請確保您已啓用它,您渲染文本之前:

glEnable(GL_BLEND); 
+0

感謝您的建議,我只是嘗試將其添加到我的呈現代碼的開頭以及我初始化和繪製字體的位置,但不幸的是問題仍然存在 – foboi1122

+0

您爲什麼開發平臺? –

+0

對不起,這是一個遲到的回覆,但問題仍然存在於win64和arch linux上 – foboi1122

0

時它可能發生:

  1. 的OpenGL渲染線程和ftgl線程渲染::不一樣的。
  2. 以全屏模式進入(需要重置並重新加載所有紋理)。
  3. 不正確的Z possition(訂單)。首先渲染字體然後圖像或第一個圖像然後字體。
  4. glDeleteTexture()可以做到這一點。
0

我有一個類似的問題,我加入這個解決它

_font->FaceSize(fontsize); 

時更新文本渲染。

此函數調用刪除舊紋理新文本將顯示罰款

0

IIRC,在上下文中創建OpenGL紋理,並且每個窗口都有單獨的上下文。由於FTGL不使用共享上下文的概念(我在某處讀取了這種方法),最簡單的方法是爲每個窗口實例化一個新的FTTextureFont,並在設置每個窗口之後加載每個FaceSize(通過調用例如Freeglut上的glutSetWindow(id))。這將一次加載所有窗口/上下文的紋理。

FTTextureFont的唯一問題是每次更改FaceSize時都會使用FreeType重新加載所有字形並再次生成紋理。這非常慢。有人應該在某個時候解決這個問題。我通過創建一個我需要在我的應用程序中使用的PER尺寸的FTTextureFont PER窗口來解決該問題。