> Date: Thu, 20 Mar 2003 09:36:52 +0700
> From: =?ISO-8859-1?Q?=E1=CD=B9=B4=C3=D9=C7=EC_=E0=B4=C7=D4=CA=D1=B9_=28Andr?=
> =?ISO-8859-1?Q?ew_Davison=29?= <[EMAIL PROTECTED]>
>
> The StereoGraphics Web site (http://www.stereographics.com/) is
> a great resource for information about stereo 3D.
>
> On their online support materials page
> (http://www.stereographics.com/support/body_support.html)
> there are several diagnostic tools for testing the stereo
> capabilities of your graphics card with OpenGL on Win 9x. The
> "diagnose" tool works with all versions of Windows, not just
> NT. The tools come with source code, which shows how the
> stereo API of OpenGL can be used.
>
> The advantage of using these tools is that they allow you to
> check your display card independent of Java 3D.
Thanks for the pointer. I downloaded the diagnose tool and verified that
they're doing essentially the same OpenGL tests for stereo availability that
Java 3D does in the native OpenGL layer. We don't call
glGetBooleanv(GL_STEREO, &ucTest);
but we do call
DescribePixelFormat(hdc, iPixelFormat, sizeof (PIXELFORMATDESCRIPTOR), &pfd);
and check if (pfd.dwFlags & PFD_STEREO) evaluates to non-zero.
So this tool should be pretty reliable for independently testing Java 3D stereo
compatibility. For the curious, I've attached the relevent part from
redblue.cpp in diagnose.zip.
-- Mark Hood
============================================================================
============================================================================
BOOL CMainWindow::EnableStereoWindow (void)
// This routine attempts to set the attributes of "this" window such that it
// will support stereo buffering. If activating the window's stereo
// buffering proves successful, this routine returns TRUE; otherwise it
// returns FALSE.
// Note that the Windows OpenGL implementation provides a method for querying
// stereo support availability without actually attempting to switch to
// a stereo-available window pixel mode; unfortunately the results of
// such a query are unreliable with some graphics cards.
{
hdc = ::GetDC (this->m_hWnd);
PIXELFORMATDESCRIPTOR pfd;
memset (&pfd, 0, sizeof (PIXELFORMATDESCRIPTOR)); // zero out all fields
pfd.nSize = sizeof (PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_GDI | PFD_SUPPORT_OPENGL |
PFD_DOUBLEBUFFER | PFD_STEREO;
int iPixelFormat = ChoosePixelFormat(hdc, &pfd);
BOOL bSuccess = SetPixelFormat(hdc, iPixelFormat, &pfd);
hGLRC = wglCreateContext (hdc);
bSuccess = wglMakeCurrent (hdc, hGLRC);
// glGetBooleanv(GL_STEREO, ...) is supposed to be the way to query for
// stereo support availability, but unfortunately, the results of
// this query are not reliable with some graphics boards...
unsigned char ucTest;
glGetBooleanv (GL_STEREO, &ucTest);
#ifdef LOTS_OF_MESSAGE_BOXES
if (ucTest)
AfxMessageBox (_T
("GL_STEREO flag set to TRUE, indicating that stereo should be supported")
);
else
AfxMessageBox (_T
("GL_STEREO flag set to FALSE, indicating that stereo should not be
supported")
);
#endif
// ...thus, we recommend the following approach for checking whether
// the attempted switch to stereo actually worked
iPixelFormat = GetPixelFormat (hdc);
DescribePixelFormat (hdc, iPixelFormat, sizeof (PIXELFORMATDESCRIPTOR),
&pfd);
if ((pfd.dwFlags & PFD_STEREO) == 0) { // stereo mode was not accepted
return FALSE;
}
else { // yes, we're now in stereo mode
SetTimer (1, 5000, NULL); // launch a 5-second timer;
// see OnTimer() comments below
return TRUE;
}
}
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".