Есть программа, которая генерирует изображения (тест-таблицы). Написана на Delphi и исходники есть.
Работает везде и всюду... но кроме ноутбука с встроенным видео sis.
Вываливается на последовательности функций
ChoosePixelFormat
SetPixelFormat
wglCreateContext
Если формат пикселя задать вручную ( выбрать с использованием glview), то не работает его установка SetPixelFormat.
Все ключи у всех функций перепробованы.
Если удалить видеодрайвер, то работает, но естественно не переключает разрешения.
Заменить ноутбук возможности нет, драйвера пробовал последние и не очень.
Повторяю, что на других машинах с НЕ SIS адаптерами проблем нет.
Мож кто сталкивался?? Очень нужно...
rgsx
На этом железе работает рендер хоть в одной(любой) ГЛ-программе?
Да работает, программа glview выдаёт 12 форматов пикселей, и тесты проходят
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;Не хвататет обработки ошибок, но вроде работало на всяком железе (и на хламе тоже) в прошлом веке.
Давай попробуем...
вот кусок кода из функции:
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 - пробовал все ключи и всевозможные сочетания... но тоже жду совета
Вообще то glView должна выдавать как минимум 36 форматов, которые поддерживает софтверная реализация.
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
....
Больше не влезает
Как только удаляю драйвера ваще - всё фунциклирует прекрасно, только разрешение без дров не меняется....
Косяк в драйвере , но чё с ним сделать - ума не приложу...
rgsx
> Больше не влезает
http://www.gamedev.ru/files/?upload
rgsx
> SetDCPixelFormat (Canvas.Handle);
> hrc := wglCreateContext(Canvas.Handle);
Во-первых: я бы не юзал постоянный опрос Canvas.Handle ибо на моей памяти он менялся. За давностью лет уже не помню конкретики.
Но это все мелочи, ибо есть во-вторых. ШО ЭТО ТАКОЕ???
FillChar(pfd, SizeOf(pfd), 0); nPixelFormat := ChoosePixelFormat(DC, @pfd);
Кто будет выставлять корректные значения типа тех, которые я писал в посте 3???
Воть полный отчёт
Отчёт программы OpenGL viewer 3.0
Млин, 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 - ключи тоже все перепробованы.
rgsx
Формат который возвращает ChoosePixelFormat в glView вообще рабочий?
попробуй 32 бит цвет...
от параметров структуры pfd не зависит. ChoosePixelFormat возвращает число.
Для примера я его беру из программы glview, ну допустим 5, так как он есть и существует и его скармливаю непосредственно функции SetPixelFormat.
Такое решение абсолютно нормально работает на другом компьютере , но на ноутбуке с видеокартой SIS SetPixelFormat ВСЕГДА возвращает False.
Все Ваши предложенные варианты как и мой изначальный вариант работают на другой видеокарте, но на имеющемся SIS имеем болт.
Видимо проблема глубже.
Тема в архиве.