2016-11-10 3 views
0

Я пытаюсь создать приложение OpenGL для окон. Насколько я понимаю, одной из первых вещей, которые я должен приобрести, является Контекст устройства, который должен быть передан нескольким функциям, которые выбирают и устанавливают формат пикселей и создают контекст рендеринга. Я использовал the OpenGL wiki, чтобы получить общее представление о том, что я должен делать. Мой код что-то вроде:OpenGL get Device Context

#include <iostream> 
#include <windef.h> 
#include <wingdi.h> 

HDC hdc; 

int main() { 
    hdc = wglGetCurrentDC(); 
    std::cout << "HDC: " << hdc << std::endl; 
    return 0; 
} 

Печатается

HDC: 0 

Я приобрела устройство контекст относится к физическому устройству, но я где-то читал, что это относится к любой вытяжке «поверхности». В обоих случаях мой вопрос: как я могу получить ненулевой DC? Или я должен выполнить совершенно другой набор шагов, чтобы настроить всю систему OpenGL?

Я нашел много обучающих онлайн, но все они используют GLUT, GLEW, GLFW, X11, SDL и т. Д., Которые являются библиотеками. Библиотеки упрощают некоторые вещи, но обычно они не выполняют задачи, которые невозможно без их использования. На этот раз я хочу попытаться сделать что-то трудное и поэтому не использовать библиотеки, просто OpenGL.

Я нашел, наконец, a tutorial, который использовал только библиотеки окон для создания окна.

+0

Я тоже так думаю, но в основном речь идет о создании контекста OpenGL, в то время как контекст, который мне нужен, - это контекст устройства. В статье говорится: «Вы должны знать, что такое дескриптор окна (HWND) и контекст устройства (DC), а также как их создавать». –

+0

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

+0

Извините, вы правы; потому что это была функция WGL, я принял ее за «wglGetCurrentContext». –

ответ

3

Вы не указали свою OS, но я предполагаю, что Windows является именем функции. Проблема в том, что Рото Коради заявил в комментарии. Чтобы настроить OpenGL вам нужно сделать, это:

  1. Получить OS дескриптор объекта с валидным контекстом

    устройства может быть OS окна или OS растровых. Если у вас есть только консольное приложение, вам нужно сначала создать действующее окно OS и использовать его дескриптор (на моей консоли знаний нет Canvas).

    вы можете использовать GLUT для создания окна или если ваш компилятор IDE имеет окно приложения, вы можете использовать это. Вы также можете комбинировать OpenGL и компоненты Window. VCL тоже не проблема (я использую его в течение многих лет с OpenGL)

    В окнах вы можете использовать CreateWindowEx так Google пример этого ...

    В любом случае вы должны иметь свою ручку переменная, как:

    HWND hwin=NULL; 
    

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

  2. Get Device контекст, что ручка

    HDC hdc = GetDC(hwin); 
    
  3. формата Set пикселя вам нужен контекст устройства

    PIXELFORMATDESCRIPTOR pfd; 
    ZeroMemory(&pfd, sizeof(pfd));  // set the pixel format for the DC 
    pfd.nSize = sizeof(pfd); 
    pfd.nVersion = 1; 
    pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; 
    pfd.iPixelType = PFD_TYPE_RGBA; 
    pfd.cColorBits = 24; 
    pfd.cDepthBits = 24; 
    pfd.iLayerType = PFD_MAIN_PLANE; 
    SetPixelFormat(hdc,ChoosePixelFormat(hdc, &pfd),&pfd); 
    
  4. Создание OpenGL контекста отображения для контекста устройства

    HGLRC hrc = wglCreateContext(hdc); 
    
  5. Установите его в качестве контекста OpenGL по умолчанию

    wglMakeCurrent(hdc, hrc); 
    

Это абсолютный минимум без проверки ошибок, дополнительные буферы и т.д. Для получения дополнительной информации и фактического кода см связаны QA «ю.ш. :

Вы можете использовать GLUT для всего этого. Это первый удар я нашел быстрый поиск:

Или следовать OpenGL учебников Есть тонны из них там ...

+0

Прошу прощения, я не упоминал о своей ОС. Это окна, как вы уже догадались. Что касается описанных выше шагов: я получаю 3, 4 и 5, поскольку они довольно четко описаны в статье wiki, которую я использовал. Благодарим вас за то, что я впервые создал окно. Об использовании GLUT ... GLUT - это библиотека, что означает, что, вероятно, есть возможность создать окно без его использования? CreateWindow или CreateWindowEx могут работать, поэтому я попробую это. Спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^