Это выстрел в темноте, но шрифты, как правило, настраиваются рано, потому что без текста без удовольствия. Поэтому убедитесь, что первый вызов wglMakeCurrent
предшествует glGenTextures
, используемому для создания имени для текстуры шрифта.
В целом, хотя я когда-либо использовал OpenGL только из C ++, у меня было определенное количество странного поведения, которое мне пришлось отследить. Поэтому я предлагаю две вещи, которые я нашел полезными при работе с OpenGL довольно напрямую:
Во-первых, вставьте вызовы на glGetError
в максимально возможном количестве мест. Помещать это после каждого отдельного вызова OpenGL - за исключением вызова wglMakeCurrent
для деактивации текущего контекста, поскольку glGetError
всегда возвращает ошибку без контекста - всегда хорошо.
Что-то простое, например assert(glGetError()==GL_NO_ERROR)
, является разумным началом (или выберите любой другой метод взлома отладчика, который в любом случае позволяет продолжить, чтобы увидеть, что произойдет дальше), и если вы проверите документы на glGetError
, вы, вероятно, можете прийти с чем-то более полным.
Во-вторых, по крайней мере, в Windows, убедитесь, что вы всегда работаете с действующим текущим контекстом. Это особенно важно для вызовов glGenTextures
, которые генерируют имена текстур.
assert(wglGetCurrentContext())
выполнит эту задачу здесь, в идеале перед каждым блоком вызовов OpenGL, за исключением, разумеется, любого вызова wglMakeCurrent
, устанавливающего текущий контекст.