Почему мы должны загружать текстуры ПОСЛЕ создания окон в OpenGL? - PullRequest
3 голосов
/ 19 февраля 2011

В моей ситуации

glutInitWindowSize(w_walker*8, h_walker);
glutCreateWindow("walker");
loadTexture("./fighter512.png");

работал, но

loadTexture("./fighter512.png");
glutInitWindowSize(w_walker*8, h_walker);
glutCreateWindow("walker");

нет. Почему?

Ответы [ 2 ]

2 голосов
/ 20 февраля 2011

Команды OpenGL работают в контексте OpenGL. GLUT создает контекст OpenGL только после того, как окно было создано. С PBuffers можно иметь контекст OpenGL без окна. В X11 / GLX создание PBuffers просто; в Windows нужно сначала создать фиктивное окно для доступа к расширениям OpenGL, используемым для создания PBuffer, для чего заранее требуется активный контекст OpenGL. Но как только PBuffer и контекст OpenGL на нем созданы, пустое окно больше не требуется.

1 голос
/ 19 февраля 2011

Зачастую в некоторых реализациях драйверов / OpenGL процесс создания окна имеет побочный эффект, заключающийся в том, чтобы определить, где на самом деле будет жить память для текстур, внеэкранные буферы и само окно и, следовательно, насколько оно будет большим.

Без создания окна (или, точнее, контекста рендеринга) сложно (т.е. невозможно) определить, куда поместить текстуру после загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...