Создайте два контекста OpenGL (представления, субворот) в окне One MFCC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Создайте два контекста OpenGL (представления, субворот) в окне One MFC

Сообщение 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());
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... mfc-window
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»