Мне нужно сделать два независимых представления OpenGL в одном окне на основе диалога MFC. Эти представления покажут разные сцены с разными шейдерами и разными Vao. Мне не сложно сделать единственный взгляд. Я создаю прямоугольник управления изображением, а затем oninitdialog () я называю это: < /p>
BOOL CMYAPPDlg::setRenderingContext()
{
CWnd* pImage = GetDlgItem(IDC_OF_PICTURE_CONTROL);
m_pDC = pImage->GetDC();
static PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR),
1 ,
PFD_DRAW_TO_WINDOW |
PFD_SUPPORT_OPENGL |
PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
32 ,
0 , 0 , 0 , 0 , 0 , 0 ,
0 ,
0 ,
0 ,
0 , 0 , 0 , 0 ,
24 ,
0 ,
0 ,
PFD_MAIN_PLANE,
0 ,
0 , 0 , 0
};
int pixelFormat = ChoosePixelFormat(m_pDC->GetSafeHdc(), &pfd);
SetPixelFormat(m_pDC->GetSafeHdc(), pixelFormat, &pfd);
HGLRC RC_OF_PICTURE_CONTROL= wglCreateContext(m_pDC->GetSafeHdc());
wglMakeCurrent(m_pDC->GetSafeHdc(), RC_OF_PICTURE_CONTROL);
glewExperimental = GL_TRUE;
glewInit();
GLint attribs[] =
{
WGL_CONTEXT_MAJOR_VERSION_ARB, 3 ,
WGL_CONTEXT_MINOR_VERSION_ARB, 3 ,
WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
0
};
HGLRC tmpRC = wglCreateContextAttribsARB(m_pDC->GetSafeHdc(), CompHRC, attribs);
if (tmpRC && wglMakeCurrent(m_pDC->GetSafeHdc(), tmpRC)) RC_OF_PICTURE_CONTROL = tmpRC ;
}
< /code>
Теперь я рисую представление в методе Ontimer, и все работает идеально. < /p>
void CXENLPTNEWDlg::OnTimer(UINT_PTR nIDEvent)
{
CDialogEx::OnTimer(nIDEvent);
glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
SwapBuffers(m_pDC->GetSafeHdc());
}
< /code>
Но как я могу сделать два разных представления для двух разных элементов управления изображениями? Стоит ли сделать два контекста? Если так, должен ли я позвонить в wglmakecurrent () два раза для каждого представления каждый кадр что -то подобное? < /P>
void CXENLPTNEWDlg::OnTimer(UINT_PTR nIDEvent)
{
CDialogEx::OnTimer(nIDEvent);
wglMakeCurrent(m_pDC->GetSafeHdc(), RC_OF_PICTURE_CONTROL_1));
glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
wglMakeCurrent(NULL, NULL);
wglMakeCurrent(m_pDC->GetSafeHdc(), RC_OF_PICTURE_CONTROL_2));
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
wglMakeCurrent(NULL, NULL);
SwapBuffers(m_pDC->GetSafeHdc());
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... mfc-window
Создайте два контекста OpenGL (представления, субворот) в окне One MFC ⇐ C++
Программы на C++. Форум разработчиков
1748476854
Anonymous
Мне нужно сделать два независимых представления OpenGL в одном окне на основе диалога MFC. Эти представления покажут разные сцены с разными шейдерами и разными Vao. Мне не сложно сделать единственный взгляд. Я создаю прямоугольник управления изображением, а затем oninitdialog () я называю это: < /p>
BOOL CMYAPPDlg::setRenderingContext()
{
CWnd* pImage = GetDlgItem(IDC_OF_PICTURE_CONTROL);
m_pDC = pImage->GetDC();
static PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR),
1 ,
PFD_DRAW_TO_WINDOW |
PFD_SUPPORT_OPENGL |
PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
32 ,
0 , 0 , 0 , 0 , 0 , 0 ,
0 ,
0 ,
0 ,
0 , 0 , 0 , 0 ,
24 ,
0 ,
0 ,
PFD_MAIN_PLANE,
0 ,
0 , 0 , 0
};
int pixelFormat = ChoosePixelFormat(m_pDC->GetSafeHdc(), &pfd);
SetPixelFormat(m_pDC->GetSafeHdc(), pixelFormat, &pfd);
HGLRC RC_OF_PICTURE_CONTROL= wglCreateContext(m_pDC->GetSafeHdc());
wglMakeCurrent(m_pDC->GetSafeHdc(), RC_OF_PICTURE_CONTROL);
glewExperimental = GL_TRUE;
glewInit();
GLint attribs[] =
{
WGL_CONTEXT_MAJOR_VERSION_ARB, 3 ,
WGL_CONTEXT_MINOR_VERSION_ARB, 3 ,
WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
0
};
HGLRC tmpRC = wglCreateContextAttribsARB(m_pDC->GetSafeHdc(), CompHRC, attribs);
if (tmpRC && wglMakeCurrent(m_pDC->GetSafeHdc(), tmpRC)) RC_OF_PICTURE_CONTROL = tmpRC ;
}
< /code>
Теперь я рисую представление в методе Ontimer, и все работает идеально. < /p>
void CXENLPTNEWDlg::OnTimer(UINT_PTR nIDEvent)
{
CDialogEx::OnTimer(nIDEvent);
glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
SwapBuffers(m_pDC->GetSafeHdc());
}
< /code>
Но как я могу сделать два разных представления для двух разных элементов управления изображениями? Стоит ли сделать два контекста? Если так, должен ли я позвонить в wglmakecurrent () два раза для каждого представления каждый кадр что -то подобное? < /P>
void CXENLPTNEWDlg::OnTimer(UINT_PTR nIDEvent)
{
CDialogEx::OnTimer(nIDEvent);
wglMakeCurrent(m_pDC->GetSafeHdc(), RC_OF_PICTURE_CONTROL_1));
glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
wglMakeCurrent(NULL, NULL);
wglMakeCurrent(m_pDC->GetSafeHdc(), RC_OF_PICTURE_CONTROL_2));
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
wglMakeCurrent(NULL, NULL);
SwapBuffers(m_pDC->GetSafeHdc());
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79643113/create-two-opengl-contexts-views-subwindows-in-the-one-mfc-window[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия