PDA

View Full Version : SetPixelFormat Fails



gunsboy
11-19-2002, 06:27 AM
Below is my code. I can't seem to understand whats wrong with it.

I'm getting a very wierd error number too.
m_GLPixelIndex = 4
and
errCode = 3221684230 ?

Anyone has an idea ?


bool GL3DView::setFormat()
{
//HWND hMainWnd = ::GetDesktopWindo();
//HDC hMainDC = ::GetDC(hMainWnd);
HDC hDC = qt_display_dc();

PIXELFORMATDESCRIPTOR pixelDesc = // pfd Tells Windows How We Want Things To Be
{
sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor
1, // Version Number
PFD_DRAW_TO_WINDOW | // Format Must Support Window
PFD_SUPPORT_OPENGL | // Format Must Support OpenGL
PFD_DOUBLEBUFFER, // Must Support Double Buffering
PFD_TYPE_RGBA, // Request An RGBA Format
24, // Select Our Color Depth
0, 0, 0, 0, 0, 0, // Color Bits Ignored
0, // No Alpha Buffer
0, // Shift Bit Ignored
0, // No Accumulation Buffer
0, 0, 0, 0, // Accumulation Bits Ignored
16, // 16Bit Z-Buffer (Depth Buffer)
0, // No Stencil Buffer
0, // No Auxiliary Buffer
PFD_MAIN_PLANE, // Main Drawing Layer
0, // Reserved
0, 0, 0 // Layer Masks Ignored
};

int m_GLPixelIndex = ChoosePixelFormat(hDC,&pixelDesc);

if(SetPixelFormat(hDC,m_GLPixelIndex,&pixelDesc)==FALSE)
{
DWORD errCode = GetLastError();
return FALSE;
}

return TRUE;
}

kehziah
11-19-2002, 07:22 AM
You could try to know what is in the pixel format to see if the format index sounds reasonnable (and matches your request) :

DescribePixelFormat(hDC,FormatIndex,sizeof(PIXELFO RMATDESCRIPTOR),&pixelDesc);

Add this line after the ChoosePixelFormat call and look at which fields of the pixeldesc change.

Some ideas :
are you sure the dc you get is valid?
when do you call this 'setFormat' method?
are you sure this method is called only once?
are you sure qt does not use SetPixelFormat itself (MSDN states that SetPixelFormat is allowed only once per window)?
also, SetPixelFormat must be called before creating the rendering context

hope this helps
regards

gunsboy
11-19-2002, 09:03 AM
I know QT runs setFormat ..

I was trying to override without having to reimplement the class ...


Is there a way to release it then set it again ?

Bob
11-19-2002, 10:07 AM
Destroy and recreate the window, then call SetPixelFormat again.