Войти
ПрограммированиеФорумГрафика

Вопросы по созданию контекста OpenGL2 / OpenGL3+

Страницы: 1 2 Следующая »
#0
15:35, 30 мар. 2014

Приветствую!
Разбираюсь с созданием контекста OpenGL.
Раньше с этим не сталкивался, поэтому не пинайте за глупые вопросы)

1) Возник вопрос по методам ChoosePixelFormat и wglChoosePixelFormat : собственно, что из них предпочесть?)
Краткий ресерч не сильно помог, хотелось бы услышать, какие преимущества дает (если дает) использование wglChoosePixelFormat.

2) Вдогонку вопрос - с какой версии ОГЛ доступно расширение wglChoosePixelFormatARB / wglChoosePixelFormat? И в каком случае вообще нужно использовать ARB-версию расширения(-й)?

3) Также есть вопрос по непосредственно созданию контекста. Цель - попробовать создать контекст OpenGL3+, в случае неудачи - использовать стандартный.
Пока сделал такой набросок. Вопросы ниже:

memset(&_pixelFormatDesc, 0, sizeof(PIXELFORMATDESCRIPTOR));

_pixelFormatDesc.nSize      = sizeof(PIXELFORMATDESCRIPTOR);
_pixelFormatDesc.nVersion   = 1;
_pixelFormatDesc.dwFlags    = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
_pixelFormatDesc.iPixelType = PFD_TYPE_RGBA;
_pixelFormatDesc.cColorBits = 32;
_pixelFormatDesc.cDepthBits = 24;

_hDC = GetDC( _hWnd );

int resultPfd = ChoosePixelFormat( _hDC, &_pixelFormatDesc );

if( resultPfd != 0 )
{
    PIXELFORMATDESCRIPTOR bestMatch_pfd;
    DescribePixelFormat( _hDC, resultPfd, sizeof(_pixelFormatDesc), &bestMatch_pfd );

    if(SetPixelFormat( _hDC, resultPfd, &_pixelFormatDesc) == FALSE)
    {
        return;
    }
}
else
{
    return;
}

_hRC = wglCreateContext( _hDC );
wglMakeCurrent( _hDC, _hRC );

// аттрибуты для OGL3 контекста
int attribs[] =
{
    WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
    WGL_CONTEXT_MINOR_VERSION_ARB, 1,
    WGL_CONTEXT_FLAGS_ARB, 0,
    0
};

// Если доступно это расширение - создаем OGL3 контекст
if (wglCreateContextAttribsARB != null)
{
    _finalRC = wglCreateContextAttribsARB(_hDC, 0, attribs);
    wglMakeCurrent(NULL,NULL);
    wglDeleteContext(_hRC);
    wglMakeCurrent(_hDC, _finalRC);
}
else 
{
    _finalRC = _hRC;
}

Возвращаясь к первому вопросу : мы ведь не можем использовать wglChoosePixelFormat до того, как создали контекст (темповый)?
В каких случаях использовать wglCreateContextAttribsARB, а в каких wglCreateContextAttribs?
Как подставить в WGL_CONTEXT_MINOR_VERSION_ARB правильную доступную версию?

4) Для того, чтобы использовать deprecated-функционал достаточно указать при создании контекста аттрибут WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB?
Если создаю OGL3-контекст вместо обычного - не рисуется кубик.

+ Код отрисовки:

Заранее спасибо.

П.С. sdl, glfw и прочее не предлагать - юзал. Интереснее самому поразбираться с созданием контекста и прочего)


#1
20:39, 30 мар. 2014

И еще вопрос вдогонку)
Имеет ли смысл использовать GLhandleARB, или можно смело юзать GLhandle?

#2
20:48, 30 мар. 2014

wgl-версия дает возможность, например, юзать multisample. И создавать контекст для ogl 3 и выше естественно. Но пока ты не создашь обычный контекст через ChoosePixelFormat, ты не получишь адрес функции wgl*, это ты верно понял. Поэтому обычно создают временный контекст для получения адреса wgl-функции, убивают его и создают уже контекст через wgl.

Если планируешь использовать deprecated-функционал, зачем создавать ogl3-контекст?

#3
20:57, 30 мар. 2014

Daemon19
> Если планируешь использовать deprecated-функционал, зачем создавать
> ogl3-контекст?
Хочу большой спектр девайсов охватить. Т.е. железо, которое не держит ГЛ3 + железо уровня ГЛ3 со всеми его плюхами.
П.С. Чисто академический интерес.

#4
20:59, 30 мар. 2014

student
>2) Вдогонку вопрос - с какой версии ОГЛ доступно расширение wglChoosePixelFormatARB / wglChoosePixelFormat? И в каком случае вообще нужно использовать ARB->версию расширения(-й)?
3.0 и выше.
по поводу создания контекстов смотри тут уроки на Сообществе OpenGL все подробно и доступно.
>В каких случаях использовать wglCreateContextAttribsARB, а в каких wglCreateContextAttribs?
Они одинаковы. Конечно говорят что они могут быть разные но это врядли, просто typdef определен и все.
>Как подставить в WGL_CONTEXT_MINOR_VERSION_ARB правильную доступную версию?
Ну пробуй в цикле от большей к меньшей подставлять :) для какой-то версии контекст будет создан.
>Если создаю OGL3-контекст вместо обычного - не рисуется кубик.
Все вызовы кроме glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); если не ошибаюсь depricated, но не знаю будут ли они корректны с флагом WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB

Вообще есть есть 3.0 контекст я использую glVertexAttribPointer, в противном случае gl*Pointer, кстати GL_QUADS точно depricated и забудь про него. Только треугольники точки линии и еще что-то новое есть.

#5
21:08, 30 мар. 2014

Andrey
Спасибо!
> если не ошибаюсь depricated
Так в том то и дело, что по идее должны работать deprecated-функции при выставленном аттрибуте WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB..
> Ну пробуй в цикле от большей к меньшей подставлять :) для какой-то версии
> контекст будет создан.
Хотелось бы поэлегантнее решение)

#6
21:32, 30 мар. 2014

student
> Так в том то и дело, что по идее должны работать deprecated-функции при
> выставленном аттрибуте WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB
не должны

#7
21:43, 30 мар. 2014

j7wk
> не должны
Видимо я неправильно понял.
Разъясните плз, если не трудно, что делает этот аттрибут.

#8
23:38, 30 мар. 2014

student
http://www.gamedev.ru/community/ogl/articles/lesson01
Ты задаёшь правильные вопросы, но на мой взгляд, бессмысленно поддерживать старое железо и писать что-то на GL 2.1.
(читай по губам, НЕ ТРАТЬ ВРЕМЯ НА СТАРЬЁ!)
Изучай современное, и постарайся разобраться, что устарело, а что нет. Начни изучать GL 3.3  и выше.

#9
0:15, 31 мар. 2014

Monte-Kristo
GL 2.1 уже настолько плох и стар?)

#10
0:20, 31 мар. 2014

Да - это факт! На дворе уже GL 4.4

#11
0:33, 31 мар. 2014

Кстати, а OpenGL ES 2.0 ближе к OGL 3 ведь, чем к прошлым?

#12
0:34, 31 мар. 2014

К сожалению, я ещё с OpenGL ES не разбирался... не могу сказать...

#13
0:35, 31 мар. 2014

student
> Кстати, а OpenGL ES 2.0 ближе к OGL 3 ведь, чем к прошлым?
Да

#14
0:47, 31 мар. 2014

Интересует все-таки еще вопрос о суффиксе ARB.
В каком случае я могу уверенно использовать функции (wglCreateContextAttribs / wglCreateContextAttribsARB) и типы GLhandleARB / GLhandle без него?

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.