Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Создание контекста воспроизведения!


Автор: Mephisto 1.11.2004, 18:13
Существует следующая проблема: решил подключить библиотеки OpenGL к Visual Basicy, но столкнулся со следующей проблемой: не могу создать контекст воспроизведения. Что вообще это такое. Какую структуру имеет? Что содержит в себе HGLRC?
До момента вызова wglCreateContext всё идет нормально, результаты идентичны программе на С++, сравнивал результаты, но после...
Может кто владеет информацией поэтому поводу, пишите!

Автор: Mad 2.11.2004, 11:30
Mephisto
C VB я вобщето не работал, но в MSDN написанно что wgl функции определенны в wingdi.h, может проблемма в этом :hmmm

Автор: Gorbatovsky 2.11.2004, 15:54
контекст воспроизведения можно создать в окне или в памяти
// OpenGL требует наличия стилей WS_CLIPCHILDREN и WS_CLIPSIBLINGS
Код

int CView3d::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
  if (CView::OnCreate(lpCreateStruct) == -1)
        return -1;
// Формируем контекст рабочей области
  m_pDC = new CClientDC(this);

// Получаем дескриптор контекста устройства
HDC hdc = m_pDC->GetSafeHdc();
// Устанавливаем формат пикселей
   if (SetPixelFormat(hdc)==FALSE)
        return -1;

// Создаем и делаем текущим контекст воспроизведения
m_hglrc= ::wglCreateContext(hdc);

   if(m_hglrc  == NULL)
       return -1;
 return 0;
}



здесь еще одна функция
Код

BOOL CView3d::SetPixelFormat(HDC hdc)
{
//Step("SetPixelFormat\n");
// Заполняем поля структуры необходимыми значениями
 static PIXELFORMATDESCRIPTOR pfd =  {
   sizeof(PIXELFORMATDESCRIPTOR),  // размер структуры
   1,                              // номер версии
   PFD_DRAW_TO_WINDOW   | //  PFD_DRAW_TO_BITMAP поддержка вывода в память
     PFD_SUPPORT_OPENGL | PFD_GENERIC_ACCELERATED|       // поддержка OpenGL 3DACCELERATORа
     PFD_DOUBLEBUFFER,             // двойная буферизация
   PFD_TYPE_RGBA,         // цвета в режиме RGBA
   24,                    // 24-разряда на цвет
   0, 0, 0, 0, 0, 0,      // биты цвета игнорируются
   0,                     // не используется альфа параметр
   0,                     // смещение цветов игнорируются
   0,                     // буфер аккумулятора не используется
   0, 0, 0, 0,            // биты аккумулятора игнорируются
   32,                    // 32-разрядный буфер глубины
   8,                     // буфер трафарета не используется
   0,                     // вспомогательный буфер не используется
   PFD_MAIN_PLANE,        // основной слой
   0,                     // зарезервирован
   0, 0, 0                // маски слоя игнорируются
 };
 
 int pixelFormat;
 
// Поддерживает ли система необходимый формат пикселей?
 if((pixelFormat = ::ChoosePixelFormat(hdc, &pfd)) == 0){
   MessageBox("С заданным форматом пикселей работать нельзя");
   return FALSE;
 }

 if (::SetPixelFormat(hdc, pixelFormat, &pfd) == FALSE)
   {
       MessageBox("SetPixelFormat failed");
       return FALSE;
   }

 return TRUE;
}


Автор: Mad 3.11.2004, 11:46
Gorbatovsky
Цитата(Gorbatovsky @ 2.11.2004, 15:54)

// OpenGL требует наличия стилей WS_CLIPCHILDREN и WS_CLIPSIBLINGS

Ничего подобного, окно созданное с одним стилем WS_POPUPWINDOW нормально работает с OGL

Автор: Mephisto 4.11.2004, 16:50
Цитата
OpenGL требует наличия стилей WS_CLIPCHILDREN и WS_CLIPSIBLINGS

Спасибо, всё, пора сливать воду. О стиле окна я не подумал.
Ладно сейчас попробую проверить, хотя в VB это достаточно проблематично.

Да, кстати, кто нить может перечислить все стили окон которые поддерживает OpenGL?

По поводу этого:
Цитата
здесь еще одна функция


Я это делаю до создания контекста воспроизведения. Всё проходит удачно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)