FTGL纹理字体在使用多个画布时只显示黑色方块

4
我正在使用FTGL中的纹理字体将字体渲染到多个画布上作为轴标签等。我的第一个图绘制得很好。但是所有随后的画布都将我的纹理字体渲染为简单的黑色正方形。我还注意到,一些数字在实际渲染的画布上不显示。"中心时间"应该显示8.3956,但实际显示如下所示。 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();
}

我曾尝试过清除颜色和深度位,并启用 GL_TEXTURE_2D,禁用 GL_DEPTH_TEST,但这似乎没有什么帮助。奇怪的是,如果我将 FTTextureFont::FaceSize(int) 添加到我的某个程序中,该程序返回文本宽度,那么一切就会正确显示(尽管速度较慢)。从 FTGL 源代码中看,FaceSize() 除了调用 glDeleteTexture() 之外,似乎并没有修改 openGL 参数,所以我有点困惑为什么这样可以。

这个问题解决了吗?我在Linux Ubuntu上遇到了类似的问题,只不过它是在启动时随机出现的。有时候没问题,有时候就会出现方框。 - Joe
4个回答

1

当您绘制后续的图形时,似乎禁用了 alpha 混合。在渲染文本之前,请确保已启用它:

glEnable(GL_BLEND);

谢谢您的建议,我刚刚尝试将其添加到我的渲染代码开头以及初始化和绘制字体的位置,但不幸的是问题仍然存在。 - foboi1122
你开发哪个平台? - Aleksejs Mjaliks
抱歉回复晚了,但问题在Win64和Arch Linux上仍然存在。 - foboi1122

0

我有一个类似的问题,我通过添加以下内容来解决它:

_font->FaceSize(fontsize);

更新文本以呈现。

此函数调用删除旧纹理新文本将显示良好


0

可能发生的情况包括:

  1. OpenGL渲染线程和ftgl :: Render线程不同。
  2. 进入全屏模式(需要重置和重新加载所有纹理)。
  3. 不正确的Z位置(顺序)。先渲染字体再渲染图像或先渲染图像再渲染字体。
  4. glDeleteTexture()可以做到这一点。

0

据我所知,OpenGL纹理是在上下文中创建的,每个窗口都有一个单独的上下文。由于FTGL不使用共享上下文的概念(我在某个地方读到过有一种方法可以做到这一点),最简单的方法是为每个窗口实例化一个新的FTTextureFont,并在设置每个窗口后加载每个FaceSize(例如,在Freeglut上调用glutSetWindow(id))。这将同时为所有窗口/上下文加载纹理。

FTTextureFont唯一的问题是,每次更改FaceSize时,它都会重新加载所有字形并再次生成纹理。这非常缓慢。有人应该在某个时候解决这个问题。我通过为我应用程序中需要使用的每个大小创建一个FTTextureFont PER窗口来解决这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接