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

Драйвер не поддерживает версии OpenGL ниже 3.0 Intel HD 3000

Страницы: 1 2 Следующая »
#0
16:15, 10 ноя. 2011

Недавно столкнулся на одном ноуте с чипом Intel HD 3000 с такой ситуацией: драйвер не поддерживает версии OpenGL ниже 3.0

Точнее так:

При запуске GLView версий 2.xx показывает поддержку только 1.1 и частично 1.2 (драйвер Microsoft)
При запуске GLView версии 3.36 выдается три варианта Renderer:
  1. GDI Generic - показывает поддержку только 1.1 и частично 1.2 (драйвер Microsoft)
  2. Intel HD - поддержка всего (от 1.1 до 3.3) (драйвер Intel)
  3. Intel HD 3000 - поддержка 3.0 до 3.3 (драйвер Intel)


При этом на домашнем компе у меня поддерживается все от 1.1 до 4.1, а варианта Renderer'а с поддержкой версий только выше 3.0 нет.

Мне нужно проинициализировать контекст OpenGL с поддержкой 1.1 - 1.5 (на ноуте с Intel HD 3000).
Как быть? Обычным образом получается только OpenGL 1.1, что меня не устраивает. Причем wglGetProcAddress для всех функций возвращает пустой указатель.


Что самое интересное каким-то образом моя программа запускалась на этом ноуте. Т.е. принципиально она точно может на нем работать. Но воспроизвести ситуацию не могу.


#1
18:11, 10 ноя. 2011

ya_vanka
Тупо дропнули старый шит.

#2
21:21, 10 ноя. 2011

Да нет, он поддерживается, но как-то специфично.

Хотелось бы разобраться.

#3
23:22, 10 ноя. 2011

>> драйвер не поддерживает версии OpenGL ниже 3.0
>> Intel HD - поддержка всего (от 1.1 до 3.3) (драйвер Intel)
две взаимоисключающие фразы

Создание контекста любой (2.1, 3.0, 3.1, 3.0FC, 3.1FC) версии происходит также, как и на компе с другой видеокартой.

P.S.: у меня HP dm4 c точно такой же картой.

#4
23:58, 10 ноя. 2011

Ну я же уточнил, что на самом деле это зависит от подхода к созданию контекста.

Старый подход, который использовался и в GLView версий 2.xx не позволяет задействовать версии 1.1 - 2.1 на Intel HD 3000, а новый (GLView 3.xx) - позволяет.
Но даже во втором случае есть вариант контекста с поддержкой всех версий, а есть только начиная с 3.0.

Понять бы что делает GLView 3.xx


Моя инициализация работает на компах с другими видеокартами. На разных компах. А вот на этом (с Intel HD 3000) - нет. Т.е. только OpenGL 1.1

#5
0:04, 11 ноя. 2011

GLView 3.xx делает так
1.Coздаёт fake-context *обычным* способом
2.С помощью WGL_ARB_create_context создаёт контекст с нужной версией

#6
0:43, 11 ноя. 2011

ya_vanka
Попробуй переставить драйвера.

#7
15:24, 12 ноя. 2011

Erion, а нет примера использования WGL_ARB_create_context?

#8
13:45, 23 ноя. 2011

Реализовал создание контекста через  WGL_ARB_create_context. Везде работает, кроме Intel HD 3000.
Т.е. проблема даже не в WGL_ARB_create_context.
Проблема в том, что wglGetProcAddress возвращает 0. Для всех процедур. Соответственно выполнить WGL_ARB_create_context я не могу.
При этом контекст создан (1.1, GDI Generic) и выбран.

А GLView 3.xx работает и видит расширения.
Уже не знаю что и думать!

#9
13:57, 23 ноя. 2011

ya_vanka
> Уже не знаю что и думать!
Что мешает создать контекст через wglCreateContext ? Он дает самую старшую доступную версию OpenGL.

> При этом контекст создан (1.1, GDI Generic) и выбран.
GDI Generic это software реализация, фактически можно сказать что контекст не создан, потому что без аппаратного ускорения никакого смысла в нем нету.

Покажите код который у вас создает контекст "обычным образом".

#10
14:15, 23 ноя. 2011

> Что мешает создать контекст через wglCreateContext ?
А как еще я мог получить контекст 1.1? Именно через wglCreateContext.
Но комп поддерживает контекст 3.3. Определено через GLView 3.xx


Код такой:


FillChar(PxFrmDescr, SizeOf(PxFrmDescr), 0);
with PxFrmDescr do
    begin
      nSize := sizeof(PxFrmDescr);
      //nVersion := 1;
      dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
      iPixelType:= PFD_TYPE_RGBA;

      cAccumBits := 0;
      cColorBits := 16;

      cDepthBits := 16;              // 32-bit z-buffer
      iLayerType := PFD_MAIN_PLANE;  // main layer
    end;


_DC := GetDC(Win_handle);

nPixelFormat := ChoosePixelFormat(_DC, @PxFormatDescr);
SetPixelFormat(_DC, nPixelFormat, @PxFormatDescr);
Win_GLRC := wglCreateContext(_DC);


wglMakeCurrent(Win_DC, Win_GLRC);

wglCreateContextAttribsARB := wglGetProcAddress('wglCreateContextAttribsARB'); // вот здесь wglGetProcAddress возвращает 0 и соот. последующий код не выполняется


if (Assigned(wglCreateContextAttribsARB)) then
    begin
      ClearARBAttribs;

      AddI3Attrib(WGL_CONTEXT_MAJOR_VERSION_ARB, 3);
      AddI3Attrib(WGL_CONTEXT_MINOR_VERSION_ARB, 0);
      AddI3Attrib(WGL_CONTEXT_FLAGS_ARB, 0);

      Win_GLRC := wglCreateContextAttribsARB(Win_DC, 0, @ARBi3Attributes[0]);
    end;

#11
14:37, 23 ноя. 2011

ya_vanka
> cColorBits := 16;
> cDepthBits := 16; // 32-bit z-buffer
Это вообще как? Попробуй 32 и 24.

Еще неплохо бы тогда проверить что именно тебе возвращает ChoosePixelFormat и повставлять везде GetLastError после wgl* функций и функций PFD.

#12
14:44, 23 ноя. 2011

ChoosePixelFormat = 4

GetLastError вызывается после wglMakeCurrent (убрал, чтобы пример не перегружать). Ошибок нет.

#13
14:45, 23 ноя. 2011

ya_vanka
> ChoosePixelFormat = 4
Зачем нам цифра? Ты запроси параметры этого формата, цифру можешь оставить себе.

#14
15:14, 23 ноя. 2011

ya_vanka
Драйвера пробовал переставлять или нет?
У тебя ничего работать не будет так как по дефолту по какойто неведомой причине GDI Generic.

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

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