ПрограммированиеФорумОбщее

Проблема с OpenGL + интегрированный Sis

Страницы: 1 2 Следующая »
#0
11:15, 24 июня 2009

Есть программа, которая генерирует изображения (тест-таблицы). Написана на Delphi и исходники есть.
Работает везде и всюду... но кроме ноутбука с встроенным видео sis. 
Вываливается  на последовательности функций

ChoosePixelFormat
SetPixelFormat
wglCreateContext

Если формат пикселя задать вручную ( выбрать с использованием glview), то не работает его установка SetPixelFormat.
Все ключи у всех функций перепробованы.

Если удалить видеодрайвер, то работает, но естественно не переключает разрешения.

Заменить ноутбук возможности нет, драйвера пробовал последние и не очень.
Повторяю, что на других машинах  с НЕ SIS  адаптерами проблем нет.

Мож кто сталкивался??  Очень нужно...

#1
12:22, 24 июня 2009

rgsx
На этом железе работает рендер хоть в одной(любой) ГЛ-программе?

#2
12:54, 24 июня 2009

Да работает, программа glview выдаёт 12  форматов пикселей,  и тесты проходят

#3
13:06, 24 июня 2009

rgsx
Ну значит проблема в инициализации ГЛ-я. Давай свой код или пробуй чтото в нем изменить.

из безумно старинного

var
  DC   : HDC;
  glRC : hglrc;

procedure CreateOpenGLContext;
var
  PFDescriptor : TPixelFormatDescriptor;
  PixelFormat  : integer;
begin
  FillChar (PFDescriptor, SizeOf(TPixelFormatDescriptor), 0);
  with PFDescriptor do
    begin
      nSize        := sizeof(TPixelFormatDescriptor);  // Size of this structure
      nVersion     := 1;                     // Version number
      dwFlags      := PFD_DRAW_TO_WINDOW or
                      PFD_SUPPORT_OPENGL or
                      PFD_DOUBLEBUFFER;
      iPixelType   := PFD_TYPE_RGBA;         // RGBA pixel values
      cColorBits   := 16;                    // 16-bit color
      cDepthBits   := 16;                    // 16-bit depth buffer
      cStencilBits := 0;                     // 0-bit stencil buffer
      iLayerType   := PFD_MAIN_PLANE;        // Layer type
    end;

  PixelFormat := ChoosePixelFormat (DC, @PFDescriptor);
  SetPixelFormat (DC, PixelFormat, @PFDescriptor);
  DescribePixelFormat (DC, PixelFormat, SizeOf(TPixelFormatDescriptor), PFDescriptor);

  glRC := wglCreateContext (DC);

  // make it the calling thread's current rendering context
  wglMakeCurrent (DC, glRC);
  glRC := wglGetCurrentContext;
end;

Не хвататет обработки ошибок, но вроде работало на всяком железе (и на хламе тоже) в прошлом веке.

#4
14:10, 24 июня 2009

Давай попробуем...

вот кусок кода из функции:

SetDCPixelFormat (Canvas.Handle);


  hrc :=  wglCreateContext(Canvas.Handle);
  If hrc = 0 then ShowMessage ('Установите в Windows 24-х битный цвет');

вот код функции SetDCPixelFormat:

procedure TMForm.SetDCPixelFormat (DC : HDC);
var
  nPixelFormat: Integer;
  pfd: TPixelFormatDescriptor;
  flag: BOOL;
begin
  FillChar(pfd, SizeOf(pfd), 0);
  nPixelFormat := ChoosePixelFormat(DC, @pfd);

//  nPixelFormat:= 5;
  if (nPixelFormat=0) then
  ShowMessage('код ошибки = '+  IntToStr(GetLastError));
         
  flag := SetPixelFormat(DC, nPixelFormat, @pfd);
    If flag = false then  ShowMessage('код ошибки установки формата = '+  IntToStr(GetLastError));


end;

функция ChoosePixelFormat возвращает 50, вслед SetPixelFormat возвращает 6

вываливается из SetPixelFormat c ошибкой...

но только на Sis

предложения по структуре pfd -  пробовал все ключи и всевозможные сочетания... но тоже жду совета

#5
14:28, 24 июня 2009

Вообще то glView должна выдавать как минимум 36 форматов, которые поддерживает софтверная реализация.

#6
14:37, 24 июня 2009

OpenGL Extensions Viewer 3.0 возвращает 12 PixelFormats

Вот полный отчёт данной программы


Renderer: 661 VGA
Vendor: SiS
Memory: 16 MB
Version: 1.4.0
Shading language version: N/A


Max texture size: 2048 x 2048
Max texture coordinates: 0
Max vertex texture image units: 0
Max texture image units: 0
Max geometry texture units: 0
Max anisotropic filtering value: 0
Max number of light sources: 8
Max viewport size: 2048 x 2048
Max uniform vertex components: 0
Max uniform fragment components: 0
Max geometry uniform components: 0
Max varying floats: 0
Max samples: 4
Max draw buffers: 0


Extensions: 59

GL_ARB_depth_texture
GL_ARB_multisample
GL_ARB_multitexture
GL_ARB_point_parameters
GL_ARB_shadow
GL_ARB_texture_border_clamp
GL_ARB_texture_compression
GL_ARB_texture_cube_map
GL_ARB_texture_env_add
GL_ARB_texture_env_combine
GL_ARB_texture_env_crossbar
GL_ARB_texture_env_dot3
GL_ARB_texture_mirrored_repeat
GL_ARB_transpose_matrix
GL_ARB_window_pos
GL_EXT_abgr
GL_EXT_bgra
GL_EXT_blend_color
GL_EXT_blend_func_separate
GL_EXT_blend_minmax
GL_EXT_blend_subtract
GL_EXT_compiled_vertex_array
GL_EXT_draw_range_elements
GL_EXT_fog_coord
GL_EXT_multi_draw_arrays
GL_EXT_packed_pixels
GL_EXT_polygon_offset
GL_EXT_rescale_normal
GL_EXT_secondary_color
GL_EXT_separate_specular_color
GL_EXT_shadow_funcs
GL_EXT_stencil_wrap
GL_EXT_swap_control
GL_EXT_texture3D
GL_EXT_texture_edge_clamp
GL_EXT_texture_env_add
GL_EXT_texture_env_combine
GL_EXT_texture_env_dot3
GL_EXT_texture_lod_bias
GL_EXT_texture_object
GL_EXT_vertex_array
GL_KTX_buffer_region
GL_NV_blend_square
GL_SGIS_generate_mipmap
GL_SGIS_multitexture
GL_SGIS_texture_edge_clamp
GL_SGIS_texture_lod
GL_SGIX_depth_texture
GL_SGIX_shadow
GL_SUN_multi_draw_arrays
GL_WIN_swap_hint
WGL_ARB_extensions_string
WGL_ARB_multisample
WGL_ARB_pbuffer
WGL_ARB_pixel_format
WGL_ARB_render_texture
WGL_EXT_extensions_string
WGL_EXT_pixel_format
WGL_EXT_swap_control

OpenGL driver version check (Current: 6.14.10.3840, Latest known: 6.14.10.3680):
According the database, you are running the latest display drivers for your video card.

Compiled vertex array support
This feature improves OpenGL performance by using video memory to cache transformed vertices.

Multitexture support
This feature accelerates complex rendering such as lightmaps or environment mapping.
Secondary color support
This feature provides an alternate method of coloring specular highlights on polygons.
No S3TC compression support
This may cause performance loss in some applications.

Texture edge clamp support
This feature improves texturing quality by adding clamping control to edge texel filtering.

No vertex program support
This feature enables vertex programming (equivalent to DX8 Vertex Shader.) Some current or future OpenGL programs may require this feature.

No fragment program support
This feature enables per pixel programming (equivalent to DX9 Pixel Shader.) Some current or future OpenGL programs may require this feature.

No OpenGL Shading Language support
This may break compatibility for applications using per pixel shading.

No Frame buffer object support
This may break compatibility for applications using render to texture functions.

Few texture units found
This may slow down some applications using fragment programs or extensive texture mapping.

Extension verification:
GL_ARB_fragment_program was not found, but has the entry point glProgramStringARB
GL_ARB_fragment_program was not found, but has the entry point glBindProgramARB
GL_ARB_fragment_program was not found, but has the entry point glDeleteProgramsARB
....


Больше не влезает

#7
14:40, 24 июня 2009

Как только удаляю драйвера ваще - всё фунциклирует прекрасно, только разрешение без дров не меняется....

Косяк в драйвере , но чё с ним сделать - ума не приложу...

#8
14:41, 24 июня 2009

rgsx
> Больше не влезает
http://www.gamedev.ru/files/?upload

#9
14:45, 24 июня 2009

rgsx
> SetDCPixelFormat (Canvas.Handle);
> hrc := wglCreateContext(Canvas.Handle);
Во-первых: я бы не юзал постоянный опрос Canvas.Handle ибо на моей памяти он менялся. За давностью лет уже не помню конкретики.

Но это все мелочи, ибо есть во-вторых. ШО ЭТО ТАКОЕ???

  FillChar(pfd, SizeOf(pfd), 0);
  nPixelFormat := ChoosePixelFormat(DC, @pfd);

Кто будет выставлять корректные значения типа тех, которые я писал в посте 3???

#10
14:45, 24 июня 2009

Воть полный отчёт
Отчёт программы OpenGL viewer 3.0

#11
15:52, 24 июня 2009

Млин,  ChoosePixelFormat эта функция ПОДБИРАЕТ наиболее близкий формат к запрашиваемому :)

В примерах сплошь и рядом  берут нулевую, типа пусть выберет ЛЮБОЙ.

Заменял и до обращения сюда и сейчас твоей предложенной конструкцией

with pfd do
    begin
      nSize        := sizeof(TPixelFormatDescriptor);  // Size of this structure
      nVersion    := 1;                    // Version number
      dwFlags      := PFD_DRAW_TO_WINDOW or
                      PFD_SUPPORT_OPENGL or
                      PFD_DOUBLEBUFFER;
      iPixelType  := PFD_TYPE_RGBA;        // RGBA pixel values
      cColorBits  := 16;                    // 16-bit color
      cDepthBits  := 16;                    // 16-bit depth buffer
      cStencilBits := 0;                    // 0-bit stencil buffer
      iLayerType  := PFD_MAIN_PLANE;        // Layer type
    end;

Результат есть... только отрицательный.. Ничегошеньки не меняется

функция ChoosePixelFormat упорно возвращает 0 и ошибку GetLastError 50
вслед за ней  SetPixelFormat  вываливается с ошибкой 6.
если выбрать вместо ChoosePixelFormat с потолка 5 (а такой есть), то SetPixel всё равно ругается  и вываливается с той же ошибкой

P.S.  dwFlags  - ключи тоже все перепробованы.

#12
16:39, 24 июня 2009

rgsx
Формат который возвращает ChoosePixelFormat в glView вообще рабочий?

#13
22:52, 24 июня 2009

попробуй 32 бит цвет...

#14
8:21, 25 июня 2009

от параметров  структуры pfd  не зависит.  ChoosePixelFormat возвращает число.
Для примера я его беру из программы glview, ну допустим 5, так как он есть и существует  и его скармливаю непосредственно функции SetPixelFormat.

Такое решение абсолютно нормально работает  на другом компьютере , но на ноутбуке с видеокартой SIS  SetPixelFormat  ВСЕГДА возвращает False.


Все Ваши предложенные варианты как и мой изначальный вариант работают на другой видеокарте, но на имеющемся  SIS имеем болт.

Видимо проблема глубже.

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

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