Я визуализировал шрифт в окне OpenGL с помощью библиотеки GLC, но теперь, если я хочу применить некоторые операции к визуализированному шрифту, он заканчивается как ошибка сегментации.
Код дляВизуализация шрифта, как показано ниже,
char * msg = "ABCD";
void drawString(char* name, int x, int y){
ctx = glcGenContext();
glcContext(ctx);
myFont = glcGenFontID();
glcNewFontFromFamily(myFont, "Courier");
glcFont(myFont);
glEnable(GL_LINE_SMOOTH);
glViewport(0, 0, 500, 500);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 500.0, 500.0, 0.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glcScale(20,20);
glColor3f(1,0,0);
glPushMatrix();
glRasterPos3f(x,y,0);
glcRenderString(name);
glPopMatrix();
}
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
if (key == GLFW_KEY_E && action == GLFW_PRESS)
msg = "abcd";
}
int main()
{
if (!glfwInit())
exit(EXIT_FAILURE);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
GLFWwindow* window = glfwCreateWindow(500, 500, "font rendering", NULL, NULL);
if (!window)
{
glfwTerminate();
exit(EXIT_FAILURE);
}
glfwMakeContextCurrent(window);
glewExperimental = GL_TRUE;
glfwSwapInterval(1);
if ( GLEW_OK != glewInit( ) )
{
std::cout << "Failed to initialize GLEW" << std::endl;
}
glfwSetKeyCallback(window, key_callback);
GLint ctx, myFont;
while(!glfwWindowShouldClose(window)){
drawString(msg, 100, 100);
glfwPollEvents();
glfwSwapBuffers(window);
}
}
при нажатии E
, он должен изменить ABCD
на abcd
, но он не заменяет исходный текст, он смешивает два текста.
Я понял, что есть проблема в создании контекста и его правильном использовании, я также пытался использовать glcDeleteContext()
, но он также делает то же самое.