Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2011, 23:38   #21
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
Kostia
iFormat = ChoosePixelFormat(hDC, &pfd);

SetPixelFormat(hDC, iFormat, &pfd);
WTF???

а кто делает
Код:
DescribePixelFormat(hDC, iFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd);
перед SetPixelFormat?
f.hump вне форума Ответить с цитированием
Старый 24.12.2011, 07:17   #22
Warn
Форумчанин
 
Аватар для Warn
 
Регистрация: 03.11.2011
Сообщений: 230
По умолчанию

Цитата:
WTF???
Всмысле где проверки?

Цитата:
а кто делает DescribePixelFormat перед SetPixelFormat?
Да, а иначе как? он же вытаскивает структуру PIXELFORMATDESCRIPTOR по индексу, которую мы потом загоняем в SetPixelFormat с остальными данными. Смысл от обратного? К тому же, у меня на ноуте с атишкой 3600 бегает все прекрасно, но вот нивидиа капризничает почему-то(
Warn вне форума Ответить с цитированием
Старый 24.12.2011, 11:10   #23
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Цитата:
WTF???
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Я вас не понял
Цитата:
а кто делает
Код:

DescribePixelFormat(hDC, iFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd);

перед SetPixelFormat?
Код:
int Count = DescribePixelFormat( hDC, 0, 0, NULL );
for (int i=0; i < Count; i++) {
//ищем что хотели
DescribePixelFormat( hDC, i, sizeof(pfd), &pfd);
if (...) break;
}
Kostia вне форума Ответить с цитированием
Старый 24.12.2011, 12:17   #24
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

просто не наблюдаю у Kostia в InitOpenGL DescribePixelFormat, что настораживает
f.hump вне форума Ответить с цитированием
Старый 24.12.2011, 12:47   #25
Warn
Форумчанин
 
Аватар для Warn
 
Регистрация: 03.11.2011
Сообщений: 230
По умолчанию

Цитата:
просто не наблюдаю у Kostia в InitOpenGL DescribePixelFormat, что настораживает
почему?) вполне реально и без него

Kostia, в #20 сообщении новая версия для теста ) вдруг случиться чудо.
Warn вне форума Ответить с цитированием
Старый 24.12.2011, 12:50   #26
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

кстати, тест из десятого поста у меня работает (ATI HD 5670)

более ранние версии тоже работают.

Последний раз редактировалось f.hump; 24.12.2011 в 13:07.
f.hump вне форума Ответить с цитированием
Старый 24.12.2011, 13:13   #27
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Цитата:
ChoosePixelFormat = 9
ColorBits = 32
DepthBits = 24
StencilBits = 8
GetLastError (After ChoosePixelFormat()) = 0
GetLastError (After SetPixelFormat()) = 0
GetLastError (After load_lib()) = 0
GetLastError (After load_wgl_procs()) = 0
GetLastError (After wglCreateContext) = 2000
wglCreateContext( hDC= 3254850047 ) = 0
GetLastError (After wglMakeCurrent) = 0
Error - create fake open gl context
Error - gl3_init()
EnterPixelFormat:ChoosePixelFormat = 7
ColorBits = 32
DepthBits = 24
StencilBits = 0
GetLastError (After ChoosePixelFormat()) = 0
GetLastError (After SetPixelFormat()) = 0
GetLastError (After load_lib()) = 0
GetLastError (After load_wgl_procs()) = 0
GetLastError (After wglCreateContext) = 2000
The first time has fail wglCreateContext
Try Again - SetPixelFormat and wglCreateContext
wglCreateContext( DC= 3892394188 ) = 65536
GetLastError (After wglMakeCurrent) = 0
glGetError (After wglMakeCurrent) = 0
Default opengl version 4.2.0
Renderer GeForce GT 540M/PCI/SSE2
Vendor NVIDIA Corporation
Glsl version 4.20 NVIDIA via Cg compiler
found wglChoosePixelFormatARB() - OK
found wglCreateContextAttribsARB() - OK
Warn, может вы свой код скинете(в личку или на мыло icetomcatпёсgmail.com), я на своей машине поколдую. Правда у меня Delphi 7й версии.
Все примеры отсюда http://code.google.com/p/gl33lessons/w/list и приложения использующие ГЛ у меня запускаются на раз.
Kostia вне форума Ответить с цитированием
Старый 24.12.2011, 15:13   #28
Warn
Форумчанин
 
Аватар для Warn
 
Регистрация: 03.11.2011
Сообщений: 230
По умолчанию

f.hump
Цитата:
кстати, тест из десятого поста у меня работает (ATI HD 5670)
более ранние версии тоже работают.
либо проблема специфична только для некоторых nv, возможно и интеля, либо же у меня руки крюки.

Kostia, я так понял, было проведено два теста
Один с pf = 7 (я так понял он был успешным, программа работала)
Другой с pf = 9 (не формат)

Логика инициализации в программе следующая (после многих правок)

0. (Хиромантия) Загружаем OpenGL32.dll получаем указатель на glGetString() делаем nop-вызов glGetString(0). Для подгрузки Opengl32.dll перед gdi32.dll

1. Выбрать/Найти подходящий формат PF (ChoosePixelFormat/ DescribePixelFormat)
2. Установить PF для DC окна SetPixelFormat
3. Загрузка указателей на wgl-ф-ции
4. Создаем контекст GL (wglCreateContext)
5. Если контекст не создан либо возникла ошибка GetLastError установить выбранный формат заново (SetPixelFormat) и попытаться создать контекст вновь (wglCreateContext).
6. Если контекст создан устанавливаем его текущим (wglMakeCurrent (DC, temp_context)) 7. Получаем адрес ф-и wglCreateContextAttribsARB.
8. Устанавливаем текущий контекст в пустой wglMakeCurrent (0, 0) удаляем временный wglDeleteContext(temp_context);
9. Создаем GL33-контекст ф-й wglCreateContextAttribsARB
10. Установка указателей на ф-ии ядра gl33.
Выход

По логу видно, что в обоих случаях, даже с поддерживаемым выбранным форматом (на GF540M) wglCreateContext первый раз возвращает ERROR_INVALID_PIXEL_FORMAT всегда. Далее при попытке повторного создания контекста с вариантом PF = 9, у нас опять возникает ошибка, и программа вылетает (поскольку не формат). А с вариантом PF = 7 (тот формат который GF540M держит, но почему-то wglCreateContext первый раз вернула ошибку) повторная установка формата для DC и последующий вызов wglCreateContext – решает проблему, странным образом но решает. О чем собственно и писалось в дискуссии на opengl.org

Цитата:
Looks like first call to wglCreateContext always produce "Invalid pixel format".

Solution: call SetPixelFormat again after wglCreateContext and all will work fine.

P.S. Windows 7, NVidia, Intel.
Код мне особо не от кого скрывать могу выложить сюда. Еще не доделанный фреймворк под дельфи 2010.

gl3.pas – функции, константы, инициализация контекста и уничтожение.
gl3app – класс обертка над окном и gl3.pas (окно с контекстом gl33 и обработкой событий).
gl3ut – утилитки функции и классы пока там два класса (TGLShader и TGLTexture)
glmath – математическая библиотека в стиле glsl.

Конечно, хотелось бы что бы код инициализации работал на всех картах, которые поддерживают gl33 core, а не раз на раз запускался)
Вложения
Тип файла: rar gl33test.rar (271.5 Кб, 16 просмотров)
Warn вне форума Ответить с цитированием
Старый 24.12.2011, 15:34   #29
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Прога из 20го поста вылетала с ошибкой.

Прога из предыдущего поста запускается и даже работает )).
Kostia вне форума Ответить с цитированием
Старый 24.12.2011, 16:33   #30
Warn
Форумчанин
 
Аватар для Warn
 
Регистрация: 03.11.2011
Сообщений: 230
По умолчанию

Цитата:
Прога из предыдущего поста запускается и даже работает )).
Интересно с чем это связанно, в честь чего она вдруг заработала? Ты на delphi7 компилировал проект? Изменений не вносил?
Warn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для проверки (правильности кода). Контекст. AmbaQ Софт 4 14.11.2010 16:50
Контекст устройства. Основы работы с изображением Claster Win Api 1 03.04.2010 00:26
BitBlt на контекст DC и его альтернатива notHaker Мультимедиа в Delphi 7 03.12.2009 01:04
Контекст воспроизведения OpenGL Gerzs Мультимедиа в Delphi 5 23.11.2009 11:33
Контекст воспроизведения OpenGL Sergeevich Gamedev - cоздание игр: Unity, OpenGL, DirectX 6 08.11.2009 21:50