Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];

Вниз

wglCreateContext возвращает ошибку   Найти похожие ветки 

 
_fox ©   (2006-05-20 12:53) [0]

В программе есть следующий код

dc:=GetDC(Win);
SetDCPixelFormat(dc);
hrc:=wglCreateContext(dc);

// сообщение об ошибке
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER or FORMAT_MESSAGE_FROM_SYSTEM,
                         nil, GetLastError(), LANG_NEUTRAL, @lpMsgBuf, 0, nil);
MessageBox(Win, lpMsgBuf, "GetLastError", MB_OK);


У меня на компьютере (GeForce FX6200) выскакивает сообщение
Операция успешно завершена. Такое сообщение появляется на всех компьютерах, где программа работает нормально.
На другом компьютере с Radeon 9250 - сообщение
Параметр задан неверно.
Что это значит?
Программа работает, но частота кадров очень низкая.

И вообще, если после wglCreateContext возникает ошибка, как это понимать?
Ставил Catalyst"ы 5 и 6, не помогает.


 
Rial ©   (2006-05-21 02:08) [1]

1. GetLastError возвращает посленюю ошибку.
Так если ее не было, то ?..
Ты хотябы проверяй, была ли эта ошибка вообще, потому что
ошибка эта может быть вовсе и не здесь, и даже очень не близко случилась.
Или, возможно, ее вообще не было в твоей программе.

2. С трудом телепатируя могу предположить,
что что инициализация OpenGL (или зачем функция wglCreateContext).

Тодга ты забыл слишком многое, чтобы мне хотелось писать тут об этом. Посмотри книгу Краснова для начала. Есть и других куча справочников в инете.

3. Кстати, ошибка может возникнуть и в этой строчке:
SetDCPixelFormat(dc);
Почему ты там ее не проверяешь ? :))


 
_fox ©   (2006-05-21 14:56) [2]

Я ставил код проверки перед wglCreateContext. Ошибка возникает именно после wglCreateContext.

А вот процедура SetDCPixelFormat:

Procedure SetDCPixelFormat(hdc: HDC);
var pfd: PIXELFORMATDESCRIPTOR;
     pf: integer;
begin
FillChar(pfd, sizeOf(PIXELFORMATDESCRIPTOR), 0);
with pfd do begin
   nSize           := SizeOf(TPIXELFORMATDESCRIPTOR); // Size Of This Pixel Format Descriptor
   nVersion        := 1;                    // The version of this data structure
   dwFlags         := PFD_DRAW_TO_WINDOW    // Buffer supports drawing to window
                      or PFD_SUPPORT_OPENGL // Buffer supports OpenGL drawing
                      or PFD_DOUBLEBUFFER;  // Supports double buffering
   iPixelType      := PFD_TYPE_RGBA;        // RGBA color format
   cColorBits      := col_Depth;           // OpenGL color depth
   cRedBits        := 0;                    // Number of red bitplanes
   cRedShift       := 0;                    // Shift count for red bitplanes
   cGreenBits      := 0;                    // Number of green bitplanes
   cGreenShift     := 0;                    // Shift count for green bitplanes
   cBlueBits       := 0;                    // Number of blue bitplanes
   cBlueShift      := 0;                    // Shift count for blue bitplanes
   cAlphaBits      := 0;                    // Not supported
   cAlphaShift     := 0;                    // Not supported
   cAccumBits      := 0;                    // No accumulation buffer
   cAccumRedBits   := 0;                    // Number of red bits in a-buffer
   cAccumGreenBits := 0;                    // Number of green bits in a-buffer
   cAccumBlueBits  := 0;                    // Number of blue bits in a-buffer
   cAccumAlphaBits := 0;                    // Number of alpha bits in a-buffer
   cDepthBits      := 16;                   // Specifies the depth of the depth buffer
   cStencilBits    := 0;                    // Turn off stencil buffer
   cAuxBuffers     := 0;                    // Not supported
   iLayerType      := PFD_MAIN_PLANE;       // Ignored
   bReserved       := 0;                    // Number of overlay and underlay planes
   dwLayerMask     := 0;                    // Ignored
   dwVisibleMask   := 0;                    // Transparent color of underlay plane
   dwDamageMask    := 0;                     // Ignored
end;{}
pf:=ChoosePixelFormat(hdc, @pfd);
SetPixelFormat(hdc, pf, @pfd);
end;

Или я что-то не так делаю?


 
Rial ©   (2006-05-21 17:11) [3]

hrc:=wglCreateContext(dc);
 wglMakeCurrent(DC,HRC);
...


 
_fox ©   (2006-05-21 17:47) [4]

Это у меня есть:)


 
Rial ©   (2006-05-21 19:23) [5]

1.
dwFlags   :=PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
 cDepthBits:=32; //Необходимо для корректной работы объёмного текста
 cColorBits:=32;
 nVersion  :=1;
 iLayerType:=PFD_MAIN_PLANE;

А зачем без толку забивать все поля нулями по два раза ?

Вполне достаточно только это :

dwFlags   :=PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
 cColorBits:=32;

2.
После  
SetDCPixelFormat(dc);
проверь
If (GetPixelFormat(Canvas)<0)then begin
//Ошибка !
  Exit;
 end;

3.
Не трогай ты эту
GetLastError().
Или уж тогда проверяй наличие самой ошибки как таковой.

Проверь (HRC=0) просто.


 
_fox ©   (2006-05-30 19:03) [6]

Rial
1.

> А зачем без толку забивать все поля нулями по два раза ?

Это у меня просто в процессе отлова глюков так получилось:)

2.

> После  
> SetDCPixelFormat(dc);
> проверь
> If (GetPixelFormat(Canvas)<0)then begin
> //Ошибка !
>   Exit;
>  end;

Проверил GetPixelFormat(dc). Оказалось равным 3.

3.

> Проверь (HRC=0) просто

HRC = 65536.

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



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.045 c
4-1157543469
DroNIX
2006-09-06 15:51
2007.01.21
Проблема эмуляция VK клавиш с программой GogleEarth


15-1167780991
Ringo
2007-01-03 02:36
2007.01.21
2007 год. Ваш прогноз для России и всех остальных?


2-1167323023
Kostafey
2006-12-28 19:23
2007.01.21
Null в SQL и Delphi


2-1166703414
VovaRamms
2006-12-21 15:16
2007.01.21
Текстовый редактор


15-1167083250
Footballer
2006-12-26 00:47
2007.01.21
Прикол от Bornald





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский