Полный экран в openGL

Я пытаюсь визуализировать окно openGL в полноэкранном режиме и использую учебники NeHe, чтобы узнать, как это сделать. однако я достиг точки, где я использую один и тот же код и в приведенном примере кода, и в своем собственном коде, но когда он достигает этой строки:

if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)

это не соответствует истине в моем коде, хотя в приведенном примере. это еще более запутанно, так как при удалении ошибок все было точно так же до этого момента.

Есть ли что-то простое, что мне не хватает, например, что-то в свойствах проекта, или, если нет, может кто-нибудь посоветовать мне какие-либо другие способы создания полноэкранного окна.

NeHe учебник я использую:
http://nehe.gamedev.net/tutorial/creating_an_opengl_window_%28win32%29/13001/

1

Решение

Если вы только учитесь, вы можете попробовать использовать GLUT. Вы можете создать окно с несколькими строками, и вы можете просто возиться с вашим кодом OpenGL, пока вы не освоитесь с ним достаточно, чтобы на самом деле опробовать API для конкретных платформ, такие как WinAPI.

Вам нужно будет установить Freeglut (реализация устаревшей GLUT) и GLEW (для простоты использования функций OpenGL 1.1+, потому что Microsoft gl.h с тех пор не обновлялся)

Голый минимальный код:

#define FREEGLUT_STATIC // defined so you can link to freeglut_static.lib when compiling
#define GLEW_STATIC     // defined so you can link to glew's static .lib when compiling

#include <GL/glew.h>     // has to be included before gl.h, or any header that includes gl.h
#include <GL/freeglut.h>

void draw()
{
// code for rendering here
glutSwapBuffers();   // swapping image buffer for double buffering
glutPostRedisplay(); // redrawing. Omit this line if you don't want constant redraw
}

int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); // enabling double buffering and RGBA
glutInitWindowSize(600, 600);
glutCreateWindow("OpenGL"); // creating the window
glutFullScreen();           // making the window full screen
glutDisplayFunc(draw);      // draw is your function for redrawing the screen

glutMainLoop();

return 0;
}
7

Другие решения

Windows имеет тенденцию быть очень разборчивым в том, что вы помещаете в такие структуры, как DEVMODE, Взгляни на DEVMODEэта структура огромный и имеет много записей, совершенно не относящихся к мониторам, например, к размерам бумаги (оказывается, такую ​​же структуру можно использовать и для принтеров).

Теперь, если вы создаете DEVMODE самостоятельно, скорее всего, вы создаете то, что Windows не понравится. Это также относится ко многим другим структурам такого рода, например, настройки последовательного порта довольно придирчивы.

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

Для перечисления используйте функцию EnumDisplaySettings. Затем найдите место, наиболее близкое к вашим потребностям; или, что лучше, покажите пользователю список доступных режимов и дайте ему выбрать. Затем используйте структуру, переданную вам Windows, чтобы установить режим отображения ChangeDisplaySettings

2

По вопросам рекламы [email protected]