Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ошибка при вызове функции wglCreateContext 
:(
    Опции темы
ИванМ
Дата 6.7.2009, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: нет
Всего: 23



при вызове функции wglCreateContext возникает ошибка GL_INVALID_OPERATION.
При чем не только в моей программе, но еще и в программах с демонстрационного диска.
Может быть дело в формате пикселей?
Я пишу так:
Код


    memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
    pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
    pfd.nVersion = 1;
    pfd.dwFlags = PFD_DOUBLEBUFFER|PFD_SUPPORT_OPENGL|PFD_DRAW_TO_WINDOW;
    pfd.iPixelType = PFD_TYPE_RGBA;
    pfd.cColorBits = pfd.cAlphaBits = pfd.cAccumBits = pfd.cDepthBits = pfd.cStencilBits = 64;
    pfd.iLayerType = PFD_MAIN_PLANE;

    PAINTSTRUCT pnt;

    dc=BeginPaint(hwnd, &pnt) ;
    int nPixelFormat = ChoosePixelFormat(dc, &pfd);
    BOOL Result = SetPixelFormat(dc, nPixelFormat, &pfd);
    HGLRC hrc=wglCreateContext(dc); //здесь возникает ошибка GL_INVALID_OPERATION

Ошибка в последней строчке. Предыдущие операции работают.
PM MAIL   Вверх
Vetos
Дата 6.7.2009, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: 3
Всего: 4



Попробуй переписать кусок:
Код

dc=BeginPaint(hwnd, &pnt) ;

вот так
Код

dc = GetDC(hwnd);



--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
ИванМ
Дата 6.7.2009, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: нет
Всего: 23



Я этот кусок кода (начиная с PAINTSTRUCT pnt;) выдернул из обработчика события WM_PAINT, так что в этом ошибки нет. Но в любом случае пробовал делать и так: вообще виснит.
PM MAIL   Вверх
Alexeis
Дата 6.7.2009, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



а если pfd вообще не заполнять?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Vetos
Дата 6.7.2009, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: 3
Всего: 4



Так а окно у тебя уже создано или нет?


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
ИванМ
Дата 6.7.2009, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: нет
Всего: 23



Vetos, создано.
Код

hMainWnd = CreateWindow(TEXT("OpenGL"), TEXT("OpenGL"), WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);



Alexeis, если не заполнять та же самая ошибка.
PM MAIL   Вверх
Vetos
Дата 6.7.2009, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: 3
Всего: 4



Так у тебя переменная hMainWnd, а в GetDC ты передавал hwnd, это она у тебя в другой функции??
Просто если зависает то значит не может получить dc. 


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
ИванМ
Дата 6.7.2009, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: нет
Всего: 23



hwnd это и есть hMainWnd. hwnd - параметр функции. Переданным параметром является hMainWnd.
Код

void OnPaint(HWND hwnd)
{    
    PAINTSTRUCT pnt;

    dc=BeginPaint(hwnd, &pnt) ;

Код


LRESULT CALLBACK WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    HANDLE_MSG(hWnd, WM_PAINT, OnPaint);


Видимо у меня какой-то глюк в виндах, потому что на моем ноутбуке все работает. Странно...
PM MAIL   Вверх
Vetos
Дата 6.7.2009, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: 3
Всего: 4



Я так понял вопрос решен, или пока решен))


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
ИванМ
Дата 6.7.2009, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: нет
Всего: 23



Vetos, 3-е: вопрос пока не решен) Может кто даст идею что мне делать, чтобы заработало.
PM MAIL   Вверх
Vetos
Дата 7.7.2009, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: 3
Всего: 4



Я так понял у тебя dc глобальная. Попробуй задать dc = GetDC(hMainWnd);
Сразу после создания окна
Код

hMainWnd = CreateWindow(TEXT("OpenGL"), TEXT("OpenGL"), WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
dc = GetDC(hMainWnd);


И немогу понять у тебя что каждый раз при перерисовке окна создается контекст воспроизведения, просто почему ты находишь dc в OnPaint? Если можешь кинь пример с которого ты пишешь.


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
Alexeis
Дата 7.7.2009, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



  Странный пример всегда пересоздавать контекст OpenGL
Порядок такой
Инициализация.
1) ChoosePixelFormat
2) SetPixelFormat
3) wglCreateContext
4) glViewport
Рисуем очередной кадр 
1)wglMakeCurrent , не вызываем wglCreateContext
2) Рисование
3) Если используется двойная буферизация то SwapBuffers

Контекст можно 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Vetos
Дата 7.7.2009, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: 3
Всего: 4



Цитата(Alexeis @  7.7.2009,  09:38 Найти цитируемый пост)
 Странный пример всегда пересоздавать контекст OpenGL


Ну это незнаю что за пример, смысл тратить драгоценное время??


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0525 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.