1

我正在使用 OpenGL 构建一个渲染引擎,我想添加一个类似于我的世界的调试覆盖。

对于那些不知道我在说什么的人:

我的世界调试覆盖

我正在使用 FTGL 进行字体渲染,并且我正在使用这段代码(我还渲染了一些其他的东西(使用 GL_TRIANGLE 作为原语),它们都做了他们应该做的事情

最初设定:

FTGLPixmapFont debugFont (debugFontStr.c_str());

if (debugFont.Error())
{
    std::cerr << "[GameScreen::renderLoop()]\tFailed to load debugging font" << std::endl;
}
else
{
    if(!debugFont.FaceSize(static_cast<unsigned int> (debugFontSize)))
    {
        std::cerr << "[GameScreen::renderLoop()]\tCouldn't set fontSize" << std::endl;
    }
}

主渲染循环(至少相关部分):

glPushAttrib(GL_ALL_ATTRIB_BITS);
glDisable(GL_DEPTH_TEST);

glColor4d(1.0f, 0.0f, 0.0f, 1.0f);
debugFont.Render(this->generateDebugOutput().c_str());

glEnable(GL_DEPTH_TEST);
glPopAttrib();

SDL_GL_SwapWindow(this->sdlWindow);

不幸的是,我的屏幕上看不到 FTGL 文本。如果这是一个相关因素,我正在整个程序中使用多个纹理单元。

我检查了结果,this->generateDebugOutput()它生成了一个普通的 C++ 字符串。我没有使用GL_LIGHTING,我在渲染之前检查了禁用它的效果,完成后重新启用它,没有效果。

你们中的任何人都可以给我一些关于可能导致这种行为的指示吗?

我正在使用 SDL2 创建我的窗口,这是我的 SDL、OpenGL 和 GLEW 的初始化代码:

if (SDL_Init(SDL_INIT_EVERYTHING) >= 0)
{
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, GameScreen::OPENGL_MAJOR_VERSION);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, GameScreen::OPENGL_MINOR_VERSION);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);

    SDL_DisplayMode dm;
    SDL_GetCurrentDisplayMode(0, &dm);
    this->screenWidth = dm.w;
    this->screenHeight = dm.h;
    this->frameCap = dm.refresh_rate;

    this->sdlWindow = SDL_CreateWindow(GameScreen::DEFAULT_TITLE.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, this->screenWidth, this->screenHeight, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);
    if (this->sdlWindow != NULL)
    {
        this->openGLContext = SDL_GL_CreateContext(this->sdlWindow);
        if (this->openGLContext != NULL)
        {
            glewExperimental = GL_TRUE;
            GLenum glewError = glewInit();
            if (glewError == GLEW_OK)
            {
                if (SDL_GL_SetSwapInterval(1) < 0)
                {
                    std::cout << "[GameScreen::GameScreen()]\tWARNING: Unable to use VSync: " << SDL_GetError() << std::endl;
                }
            }
            else
            {
                std::cerr << "[GameScreen::GameScreen()]\tFailed to intialize GLEW: " << glewGetErrorString(glewError) << std::endl;
            }
        }
        else
        {
            std::cerr << "[GameScreen::GameScreen()]\tFailed to create OpenGL Context from SDL2 Window: " << SDL_GetError() << std::endl;
        }
    }
    else
    {
        std::cerr << "[GameScreen::GameScreen()]\tFailed to create SDL2 Window: " << SDL_GetError() << std::endl;
    }
}
else
{
    std::cerr << "[GameScreen::GameScreen()]\tFailed to intialize SDL2: " << SDL_GetError() << std::endl;
}
4

1 回答 1

0

对于所有感兴趣的人,不幸的是我无法解决这个问题,但是/r/opengl的好人能够向我推荐其他一些库:

可以在这里找到 reddit 线程:https ://www.reddit.com/r/opengl/comments/6taul5/text_rendered_using_ftgl_not_visible/

于 2017-08-14T10:52:38.877 回答