我正在使用OpenGL构建渲染引擎,并且我想添加一个类似Minecraft的调试叠加层。
对于那些不知道我在说什么的人:
我使用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;
}
答案 0 :(得分:0)
对于那些与众不同的人来说,遗憾的是我无法解决这个问题,但是/ r / opengl上的好朋友能够推荐我一些其他的库:
stb_truetype:https://github.com/nothings/stb/blob/master/stb_truetype.h
glText:https://github.com/MrVallentin/glText
可以在这里找到reddit线程:
https:www.reddit.com r opengl comments 6taul5 text_rendered_using_ftgl_not_visible?st = j6c1d8tm&amp; sh = 37fd330b
(我没有足够的代表来上传超过2个链接,所以如果有人可以请用'/'替换网址中的所有空格,那就非常好了)