PDA

View Full Version : Getting kicked back to software...



TheMyriad
03-27-2003, 08:13 PM
Hi! I'm developing a simple 2D game using OpenGL to draw sprites.
However, while the game runs fine on my development system, it goes back to software emulation on other systems that are not using the same drivers as I am.
I am currently using the nvidia 4.1.0.9 drivers, on Windows XP, using C++ on Visual Studio .NET.
Is there any way I could check if I'm in software mode? Thanks alot!

TheMyriad
03-27-2003, 08:15 PM
Sorry, forgot to add that I'm not using any special nvidia extensions or anything, just standard OpenGL, which is why I really don't know why it has become driver-specific.

shinpaughp
03-27-2003, 08:58 PM
I'm a little confused. You said you were in software emulation mode on the other systems, but you are asking if there is a way to check it?

Best way is to call glGetString for each GL_VENDOR, GL_RENDERER, and GL_VERSION. If you are in software mode, it will say Microsoft Corp, 1.1 etc. Otherwise, it will say whatever card type you have and the version it supports.

TheMyriad
03-27-2003, 10:55 PM
Oops... I guess I wasn't clear.
The problem is that I end up in software emulation mode on most other systems, and I don't know what could possibly have caused it.
Thanks!

shinpaughp
03-27-2003, 11:25 PM
You verified that they are in software mode using glGetString? What kind of GPU do you have? What kind do they have? You might also verify that they have the same dlls you have. Older systems come with 16 bit versions, newer systems come with 32 bit versions. Also, how do you define your pixel format? Is it something that should be supported by their cards. And, lastly, verify that their GPU properties are set up similarly.

TheMyriad
03-28-2003, 12:19 AM
Could someone give me an example of setting the pixel format for 32-bit drawing with alpha and z-buffer that is guaranteed to be supported on most cards?
That might help. Thanks again!

JD
03-29-2003, 11:54 PM
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 32;
pfd.cDepthBits = 32;
pfd.cStencilBits = 8;

That will give you rgb + alpha color buffer, 24 bit zbuffer and 8 bits stencil buffer I think.

Then check your pixel format descriptor like this:

// See what pixel format the computer chose for us
memset(&pfd, 0, sizeof(pfd));
DescribePixelFormat(hdc, GetPixelFormat(hdc), sizeof(PIXELFORMATDESCRIPTOR), &pfd);

int generic_format = pfd.dwFlags & PFD_GENERIC_FORMAT;
int generic_accelerated = pfd.dwFlags & PFD_GENERIC_ACCELERATED;

std::string str = "";
char arr[128] = "";

// generic_accelerated means it's MCD that accelerates a subset of the
// generic_format OpenGL implementation
if(generic_format && !generic_accelerated)
{
// software
str += "NO HARDWARE ACCELERATION\n";
}
else
{
if(generic_format && generic_accelerated)
{
// hardware - MCD
str += "HARDWARE MCD ACCELERATED\n";
}
else
{
if(!generic_format && !generic_accelerated)
{
// hardware - ICD
str += "HARDWARE ACCELERATED\n";
}
}
}