Я перешел с freeglut на SFML для создания контекста / окна OpenGL 3.3. Теперь, когда я использую freeglut и инициализирую режим отображения с помощью
unsigned int displayMode = GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH | GLUT_STENCIL;
glutInitDisplayMode (displayMode);
Я могу просто набрать
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glDepthFunc(GL_LEQUAL);
glDepthRange(0.0f, 1.0f);
и тогда будет включено тестирование глубины. Однако в SFML все немного сложнее. Я не буду вдаваться в код SFML, но в основном SFML создает контекст / окно для вас. Вы можете указать количество битов глубины и битов трафарета, но кажется, что SFML фактически не выделяет буфер глубины и не присоединяет его к буферу кадров по умолчанию.
Так как же я на самом деле это делаю? Я предполагаю, что вы должны сделать что-то вроде glGenRenderbuffers
, затем glBindRenderbuffer
, затем glRenderbufferStorage
, затем glFramebufferRenderbuffer
. Документация немного запутанная. glRenderbufferStorage
принимает параметр internalformat
, и я не совсем уверен, как указать, что мне нужен буфер глубиной 24 бита. Кроме того, я не совсем уверен, как получить доступ к кадровому буферу по умолчанию (или есть два кадровых буфера по умолчанию, потому что есть двойная буферизация?).