Я пытаюсь создать приложение OpenGL на Windows. Насколько я понимаю, одной из первых вещей, которые я должен получить, является Контекст устройства, который должен быть передан паре функций, которые выбирают и устанавливают формат пикселей и создают контекст рендеринга. я использовал OpenGL вики чтобы получить общее представление о том, что я должен делать.
Мой код что-то вроде:
#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.
Я нашел, наконец, учебник который использовал только библиотеки Windows для создания окна.
Вы не указали свой Операционные системы но я предполагаю Windows из имен функций. Проблема именно в том, что Рето Коради заявил в комментарии. Установить OpenGL вам нужно сделать это:
Получить дескриптор ОС для объекта с допустимым контекстом устройства
Может быть Операционные системы окно или Операционные системы битовая карта. Если у вас есть только консольное приложение, вам нужно создать действительное Операционные системы сначала окно и использовать его дескриптор (насколько мне известно, консоль не имеет Canvas).
ты можешь использовать GLUT для создания окна или если ваш компилятор IDE имеет окно приложения, которое вы можете использовать. Вы также можете комбинировать OpenGL и оконные компоненты. VCL также не проблема (я использую его годами OpenGL)
В окнах вы можете использовать CreateWindowEx так гугл пример для этого …
В любом случае вы должны иметь свой дескриптор в такой переменной
HWND hwin=NULL;
Если у вас нет опыта работы с Windows-приложениями, используйте GLUT за это. В противном случае вам нужно было бы изучить много всего, чтобы охватить создание окон, обработку сообщений и взаимодействие между пользователем и приложением, что может быть очень сложно для новичка без руководства.
Получить контекст устройства для этого дескриптора
HDC hdc = GetDC(hwin);
Установите необходимый вам формат пикселя контекста устройства
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);
Создать контекст рендеринга OpenGL для контекста устройства
HGLRC hrc = wglCreateContext(hdc);
Установите его как контекст OpenGL по умолчанию
wglMakeCurrent(hdc, hrc);
Это абсолютный минимум без какой-либо проверки ошибок, дополнительных буферов и т. Д. Для получения дополнительной информации и фактического кода см. Связанные контроль качества«S:
Ты можешь использовать GLUT за все это. Это первый хит, который я нашел в результате быстрого поиска:
Или следовать OpenGL учебники есть тонны их там …
Других решений пока нет …