Важная информация
Показано с 1 по 4 из 4

Тема: OpenGL без glutMainLoop

  1. #1 OpenGL без glutMainLoop 
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    Приложение имеет функцию WinMain и самописный главный цикл. Как в нём использовать OpenGL? Из "суперкниги":
    C++ Code:
    1. void RenderScene()
    2. {
    3. glClear(GL_COLOR_BUFFER_BIT);
    4. glFlush();
    5. }
    6. void SetupRC()
    7. {
    8. glClearColor(0.0f, 0.0f, 1.0f, 0.0f);
    9. }
    . Но это для glutCratgeWindow, GlutDisplayFunc и glutMainLoop. А без них как? Как указать OpenGL, в какое окно рендерить? Как инициировать OpenGL?
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    Решение найдено.
    1. В оконной процедуре:
    C++ Code:
    1. case WM_CREATE      : GDIContext=GetDC(Window);
    2.                         SetDCPixelFormat(Window, GDIContext);
    3.                         GLContext=wglCreateContext (GDIContext);
    4.                         wglMakeCurrent(GDIContext, GLContext);
    5.                         Initialize(Window);
    6.   break;
    7.   case WM_SIZE        : wglMakeCurrent(GDIContext, GLContext);
    8.                         ReSize(Window);
    9.   break;
    10.   case WM_DESTROY     : wglMakeCurrent (NULL, NULL);
    11.                         wglDeleteContext (GLContext);
    12.                         ReleaseDC (Window, GDIContext);
    13.                         PostQuitMessage(0);
    14.   break;
    , где GDIContext - статическая, или глобальная переменная типа HDC, GLContext - статическая, или глобальная переменная типа HGLRC, Window - дескриптор окна.
    2.
    C++ Code:
    1. GLvoid                           Initialize                                (const HWND                   &Window               )
    2. {
    3. RECT Rectangle;
    4. glClearColor(0.0f, 0.0, 0.5, 0.0);
    5. GetClientRect(Window, &Rectangle);
    6. glViewport(0, 0, Rectangle.right, Rectangle.bottom);
    7. glMatrixMode(GL_PROJECTION);
    8. glLoadIdentity();
    9. gluPerspective (45.0, ((GLdouble)Rectangle.right)/((GLdouble)Rectangle.bottom), 1.0, 1000.0);
    10. }
    .
    3.
    C++ Code:
    1. GLvoid                           ReSize                                    (const HWND                   &Window               )
    2. {
    3. RECT Rectangle;
    4. GetClientRect(Window, &Rectangle);
    5. glViewport(0, 0, Rectangle.right, Rectangle.bottom);
    6. glMatrixMode(GL_PROJECTION);
    7. glLoadIdentity();
    8. gluPerspective (45.0, ((GLdouble)Rectangle.right)/((GLdouble)Rectangle.bottom), 1.0, 1000.0);
    9. }
    .
    4. WM_PAINT не обрабатывать.
    5. InvalidateRect на окно с OpenGL не делать.
    6. WM_SIZE обрабатывать обязательно.
    7. Главный цикл:
    C++ Code:
    1. while (true)
    2. {
    3.   if (PeekMessage(&Message, NULL, 0, 0, PM_NOREMOVE))
    4.   {
    5.    if (GetMessage(&Message, NULL, 0, 0))
    6.    {
    7.     TranslateMessage(&Message);
    8.     DispatchMessage(&Message);
    9.    }
    10.    else
    11.    {
    12.     break;
    13.    }
    14.   }
    15.   else
    16.   {
    17.    /*Здесь вызывать функцию рассчёта игровых событий, она же должна вызывать ReDraw*/
    18.   }
    19. }
    .
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
    Ответить с цитированием  
     

  3. #3  
    Начинающий
    Регистрация
    24.04.2015
    Сообщений
    33
    Сказал(а) спасибо
    4
    Поблагодарили 3 раз(а) в 3 сообщениях
    Сам спросил сам ответил)
    Ответить с цитированием  
     

  4. #4  
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    Спросил, когда не знал, ответил для тех, кто может быть набредёт на тему с поисковика.
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
    Ответить с цитированием  
     

  5. Пользователь сказал cпасибо:

    Free Admin (08.02.2016)

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Проблема с изучением OpenGL С++
    от Lagger в разделе C/C++
    Ответов: 1
    Последнее сообщение: 17.06.2015, 12:47
  2. OpenGL под DOS? Не верите? - Тогда бисквит идёт к вам!
    от >Quiet Snow< в разделе Демосцена\Демомейкинг\Ретрокомпьютеринг
    Ответов: 0
    Последнее сообщение: 09.05.2015, 08:41
  3. OpenGL демка
    от Kakos_nonos в разделе Проекты на Pascal
    Ответов: 3
    Последнее сообщение: 19.06.2011, 21:02
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •