PDA

View Full Version : How to get driver version ?



Andrew Jameson
06-05-2003, 06:01 AM
I know that OpenGL can use glGetString to get vender, renderer and version ... but how do you get the driver version ?

I need to support all Windows OS ...

Andrew

SirKnight
06-05-2003, 09:14 AM
1) Right Click on Desktop
2) Click Properties
3) Click Settings tab
4) Click Advanced button
5) Click the tab that has the name of your video card on it*

Now the version will be in there.

*This works for nvidia drivers, if you have an ati or something else, you may have to go somewhere else after you click the Advanced button.

-SirKnight

Andrew Jameson
06-05-2003, 09:36 AM
I thought after posting that I'd get this response ... thanks ... but I need to get it programmatically !

Andrew

Tom Nuydens
06-05-2003, 11:06 AM
Win9x/Me: HKLM\Software\Microsoft\Windows\CurrentVersion\Ope nGLdrivers
Win2K/XP: HKLM\Software\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers

In these registry keys, you will find the filename of the OpenGL ICD (e.g. nvoglnt.dll). You can read the version info resource from this DLL using the GetFileVersionInfo() API function. Note that the .DLL extension may or may not be present, so check for it.

-- Tom

Andrew Jameson
06-05-2003, 11:39 AM
Thanks Tom ... that's just what I wanted !

Andrew

Andrew Jameson
06-05-2003, 12:12 PM
Sorry Tom ... How do you know the KeyName ? Mine's only got one key and that's RIVATNT ... is it safe just to use the fisrt value returned by GetValueNames ?

Thanks

Andrew

Tom Nuydens
06-05-2003, 12:49 PM
Technically if you have multiple video cards installed (or if you installed a new one without uninstalling the drivers of the old one), there may be more than one key. These cases are pretty rare, though.

-- Tom

jwatte
06-05-2003, 07:18 PM
Several large vendors have system images with all kinds of interesting stuff in them. I would not assume that there will only be one entry.

Obli
06-10-2003, 02:21 AM
This is really interesting since allows to pull out the dll name... not sure this is useful however.

In my app, I pull out the driver info from the following key:
"HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Control \\Class\\{4D36E968-E325-11CE-BFC1-08002BE10318}\\0000".
Now, I checked out two nv cards (geforce2 and geforce4) and a matrox card (G400) and looks to be just fine.
Too bad the key name itself does not make any sense at all to me.
From there, you can get video card type (as the OS sees it, usually similar to GL_RENDERER), who provided the driver and, most important of all, the driver version. This is however, a little different from what you expect. For example, nv driver 43.45 is described as "4.3.4.5". Not a problem however.

The problem with this is that, it pulls out information on a single display device which may be not enough. In my opinion this is not a problem since I heard only the primary got GL acceleration. BTW, most computers (98%?) got a single video card.

knackered
06-10-2003, 05:10 AM
Is there not an interface for this via directX for win32? That would seem a more reliable solution than reading stab-in-the-dark entries from the registry.
How do you get a driver version for Linux and Macs, while we're at it?

Obli
06-10-2003, 06:17 AM
Originally posted by knackered:
Is there not an interface for this via directX for win32?

I totally forgot that. I found the interesting structure in the DX sdk and I am going to try that out.
In the meanwhile, here's my reference:
"D3DADAPTER_IDENTIFIER8"
filled using "GetAdapterIdentifier".
Thank you for issuing that one!


EDIT - UPDATE:
Tried that out. Looks like it can be used without too much truoble. Here are the results of the query:
-----------------
Driver: "nv4_disp.dll", description: "NVIDIA GeForce4 Ti 4400"
Product = "6"
Version.SubVersion.Build = "14.10.4403"
-----------------
The problem is that I don't know how to should I look at the values in the 'Product' field. 'Version', 'SubVersion' also look unclear to me. 'Build' is actually the driver version as I know (NV 44.03). Can someone post queries on other video cards please?



[This message has been edited by Obli (edited 06-10-2003).]

titan
06-11-2003, 08:54 AM
What do the fields mean? I've got a XP system with 6.14.10.4403 nvidia drivers and a 2k system with 6.14.10.6343 ATI drivers and 1.04.00.068 Matrox Parhelia drivers.

I noticed the first three numbers are the same for nvidia and ATI. Is this a coincedence or does it mean something?

Should one just look at the last number or does x.y.z+1.w imply a newer driver than x.y.z.w-1?

I know of a couple "bad" drivers for nvidia and ati. I was thinking about detecting mtxogl.dll, atioglxx.dll, nvoglnt.dll (and whatever the win9x version is) in the system directory and getting whatever version it is. If it is less than a value I encode then I display a warning saying my app runs better with newer drivers. Of course I detect the vendor string in OpenGL first to know which one of those files to check. http://www.opengl.org/discussion_boards/ubb/smile.gif

titan
06-11-2003, 09:17 AM
Originally posted by Obli:
In my app, I pull out the driver info from the following key:
"HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Control \\Class\\{4D36E968-E325-11CE-BFC1-08002BE10318}\\0000".
In my opinion this is not a problem since I heard only the primary got GL acceleration. BTW, most computers (98%?) got a single video card.

FYI my computer here has 15 entries there from 0000 to 0014. 0000 is the Intel integrated graphics drivers that were originally installed. 0001 is an old ATI 9700 driver. 0002 is the same, but labeled "- Secondary" (BTW you can have OpenGL accelleration on a 2nd monitor as long as it is one video card which treats the desktop as a single really wide resolution.) 0003 is a GeForce2 and 0004 is my current 9700 driver, which is what I think corresponds to my current video card.

So... If you search 0000 it'll be wrong. If you somehow detected I had a ATI 9700 and search all of them for ATI and 9700 you'd come up with four entries. I guess you could just do that and choose the newest version...

ehart
06-11-2003, 09:37 AM
FWIW, I believe all recent ATI OpenGL drivers append a GL driver version onto the end of the version string. I am not sure if other vendors do this, but if they do this would obviously provide a more simple/robust solution to the issue.

For those planning on searching the path provided by the registry or looking in system32, be aware that a dll in the local directory can over-ride this. It isn't that common a case, but you should be aware of the potential problem.

-Evan

[Edit for spelling]

[This message has been edited by ehart (edited 06-11-2003).]

matt_weird
06-11-2003, 09:48 AM
btw, have you heard of DEVMODE structure in windows and the function EnumDisplaySettings? http://www.opengl.org/discussion_boards/ubb/confused.gif well, it can give you the info about the current display device and the info about driver version, as well as current or either registry settings http://www.opengl.org/discussion_boards/ubb/wink.gif

roffe
06-11-2003, 10:35 AM
This might not be the best/most accurate alternative but it's fairly simple.

When your app has a valid glcontext(your ogl icd is loaded for sure) enumerate dlls loaded in your process. Find dlls/modules that export some common function,such as DrvSetPixelFormat. Might be more than one if you have multiple video cards. Then get the filename and retrieve file version info.

NOTE: On MS OSs that lack the process status api(psapi) enumerating dlls might require some work. For older OSs check out the toolhelp32 api.

[This message has been edited by roffe (edited 06-11-2003).]

Obli
06-11-2003, 11:19 PM
Originally posted by matt_weird:
btw, have you heard of DEVMODE structure in windows and the function EnumDisplaySettings? http://www.opengl.org/discussion_boards/ubb/confused.gif well, it can give you the info about the current display device and the info about driver version, as well as current or either registry settings http://www.opengl.org/discussion_boards/ubb/wink.gif

Just took a look. It effectively can. I pulled out the 'dmDeviceName' and 'dmDriverVersion' subfields. Now, the problem is that the documentation for EnumDisplaySettings says that "sets values for the following five DEVMODE members: dmBitsPerPel, dmPelsWidth, dmPelsHeight, dmDisplayFlags, dmDisplayFrequency". Looks that in fact it also update these two and there are the results I am getting:
---------------------------------------------
Device name = NV4_DISP
Driver version = 1025
---------------------------------------------
This looks even more misterious to me. BTW, it may be the version of the GDI acceleration driver (if any)... I don't know.



Originally posted by titan:
So... If you search 0000 it'll be wrong. If you somehow detected I had a ATI 9700 and search all of them for ATI and 9700 you'd come up with four entries. I guess you could just do that and choose the newest version...


This was exactly the kind of reply I hoped to get. I would like to investigate more but I don't have so much video adapters here so, can you tell us something more?
For example, my key "{4D36E968-E325-11CE-BFC1-08002BE10318}" contains a value called "Class" which is set on "Display".
Maybe the current/primary card has a something set so we can recognize it (maybe "MatchingDeviceId")?
The idea that you suggest (taking the highest number) looks promising and takes little time to implement. However, if correct it would mean that video driver informations are placed here in order of installation.
So you had intel integrated (and you said it's ok), then the 9700 primary and secondary... then a GeForce2? another 9700? Looks strange. Is that really what you installed on your PC in that order?

kansler
06-12-2003, 12:04 AM
The 'official' way of finding the driver dll is the following:

The key:
HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\VIDEO

contains a string:
\Device\Video0

The value points to another key, in my case:
\REGISTRY\Machine\System\ControlSet001\Services\nv \Device0

This key always contains this string:
InstalledDisplayDrivers

In my case, the value is:
nv4_disp

The just do a GetFileVersionInfo() with .dll appended and there's your version.

Source: http://support.microsoft.com/?kbid=200435

Tom Nuydens
06-12-2003, 12:41 AM
For my Radeon 9000, the version number of ati2dvag.dll (found using kansler's method) is different from that of atioglxx.dll (the file we're actually interested in).

-- Tom

kansler
06-12-2003, 01:12 AM
But the version of ati2dvag.dll is the version which ATI uses for it's driver packages. So it's usable as a test for current driver version. As stated in the first article of this post, the OpenGL version can be found by using glGetString().

V-man
06-12-2003, 04:47 AM
Originally posted by kansler:
But the version of ati2dvag.dll is the version which ATI uses for it's driver packages. So it's usable as a test for current driver version. As stated in the first article of this post, the OpenGL version can be found by using glGetString().

Yes but in the case of ATI, they return the driver version in glGetString after the GL version as ehart said. I find this to be the most simple solution.
A few other vendors do this but NVidia hasn't.

Are you sure that solution will work on all Windows versions? We know how MS likes to move things around to keep us busy http://www.opengl.org/discussion_boards/ubb/smile.gif.

kansler
06-12-2003, 06:00 AM
According to the source it works with NT, 2000 and XP. I guess, but don't know for sure, that it will work on 98. It won't on 3.1 however http://www.opengl.org/discussion_boards/ubb/rolleyes.gif

*Aaron*
06-12-2003, 07:02 AM
According to the source it works with NT, 2000 and XP. I guess, but don't know for sure, that it will work on 98. Nope, sorry. I'm running WinME, and I don't have HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\VIDEO in the registry.

As for the EnumDisplaySettings method, according to my documentation, the dmDeviceName and dmDriverVersion fields are for printer drivers. And besides, if EnumDisplaySettings isn't even supposed to fill these fields, then its not really a reliable method. Back to square one...

Andrew Jameson
06-12-2003, 07:44 AM
Thanks for everyone's efforts ... I thought that this was going to be easy - well OpenGL finds it without any hassle !

I've also found that the last suggestion does not work on 98 ... and Tom's solution can get pretty messy and invoves recursively scanning the registry ...

Thanks again ...

Andrew

titan
06-12-2003, 08:35 AM
Originally posted by Tom Nuydens:
For my Radeon 9000, the version number of ati2dvag.dll (found using kansler's method) is different from that of atioglxx.dll (the file we're actually interested in).
-- Tom

Is this a problem? I guess it would be a bit nicer to know the ogl version incase a newer driver decided to roll back to a previous ogl driver .dll, but I don't expect that to happen.

Couldn't you just use the check the video driver version instead of the ogl driver version since all a user really needs to know is they have an old driver that should be updated. And you still need to do this on a per vendor basis. The only thing is the registry way is "future proof" in the sense that you don't have to specifically look for nvoglnt.dll, atioglxx.dll, mtxogl.dll, etc incase a vendor decides to rename their file.

titan
06-12-2003, 08:41 AM
Originally posted by Obli:
So you had intel integrated (and you said it's ok), then the 9700 primary and secondary... then a GeForce2? another 9700? Looks strange. Is that really what you installed on your PC in that order?

Yep. I'm pretty sure that those were listed in the order I installed them.

matt_weird
06-12-2003, 09:38 AM
Originally posted by *Aaron*:
As for the EnumDisplaySettings method, according to my documentation, the dmDeviceName and dmDriverVersion fields are for printer drivers. And besides, if EnumDisplaySettings isn't even supposed to fill these fields, then its not really a reliable method. Back to square one...

i doubt nVidia uses printer driver/hardware for their graphic chips:


Originally posted by Obli:

Looks that in fact it also update these two and there are the results I am getting:
---------------------------------------------
Device name = NV4_DISP
Driver version = 1025
---------------------------------------------


[This message has been edited by matt_weird (edited 06-12-2003).]

matt_weird
06-12-2003, 09:45 AM
but... who knows? http://www.opengl.org/discussion_boards/ubb/confused.gif

http://www.opengl.org/discussion_boards/ubb/biggrin.gif

ehart
06-12-2003, 10:26 AM
There are three reasons you might want to get the OGL driver version rather than the 2D driver version. (None would likely exist in a perfect world, but ...)

1. You are developers. As such you may from time to time have access to special builds from an ihv. The build may have a 2D/3D combination that does not match up with real released drivers.

2. As I mentioned previously, the dll search path allows a user to over-ride the gl driver installed on the system.

3. In the past, fan sites have been known to produce their own custom "drivers". Such a beast is often an install kit that take pieces from multiple different releases.

Now, I don't think any of these is necessarily enough of a reason to not use the 2D driver version, but you need to be aware of how this mechanism can break.

-Evan

Obli
06-12-2003, 10:45 AM
Originally posted by titan:
Yep. I'm pretty sure that those were listed in the order I installed them.

So, they are added in installation order. Nice, we may effectively scan all the keys here and pull out information from the most recent. This is not difficult but it still won't work in some cases:
1- Titan had a 9700 primary and secondary for a while.
2- I have a Ti4400 but I want to have ViVo and I put in my old permedia2 PCI. This means the most recent driver install won't be the primary device.

Maybe I can do both the DX poll and the registry poll.
---------------------------------------------
DirectX poll results (default adapter): Driver: "nv4_disp.dll", description: "NVIDIA GeForce4 Ti 4400"
---------------------------------------------
Now, I can use those to parse the window registry so, starting from the most recent and going back I'll search for the description string, in my case "NVIDIA GeForce4 Ti 4400". Maybe this will work. Anyone has a way to make this fail?


Originally posted by titan:
Yes but in the case of ATI, they return the driver version in glGetString after the GL version as ehart said. I find this to be the most simple solution.
A few other vendors do this but NVidia hasn't.
I'm not so sure, but I think nVidia does it under linux. I feel being able to detect driver version from GL_VERSION string is bad. The GL spec does not forces vendors to do that and it's not a widely spread solution.
Everything would be easier if this were supported but unluckly for us, it is not.
We should make sure this feature will be present in GL2!

EDIT: fixed a small typo.

[This message has been edited by Obli (edited 06-12-2003).]

Tom Nuydens
06-12-2003, 11:15 AM
Originally posted by titan:
And you still need to do this on a per vendor basis. The only thing is the registry way is "future proof" in the sense that you don't have to specifically look for nvoglnt.dll, atioglxx.dll, mtxogl.dll, etc incase a vendor decides to rename their file.

The approaches posted by kansler and myself are both vendor-independent -- there's never any need to hardcode the names of the DLLs in your app. However, the difference between my method and kansler's is that kansler finds the name of the 2D driver, whereas I (try to) find the name of the OpenGL driver. As ehart pointed out, it is possible that these two have different version numbers.

For my particular application (the hardware database at Delphi3D), the distinction is an important one!

What I'd really like to see is a watertight mechanism for figuring out the name of the nvoglnt/atioglxx/... DLL. As pointed out earlier, the method I use at the moment may break down if the user has had multiple drivers installed on the same system, so we need a way to figure out which of the registry entries points to the current driver.

Obli, your suggestions seem like a little too much guesswork to me. Surely there has to be an unambiguous way to figure this out?

-- Tom

[This message has been edited by Tom Nuydens (edited 06-12-2003).]

matt_weird
06-12-2003, 12:57 PM
well, EnumDisplaySettings returns the name of 2D driver as well.

Interesting that the version of the particular DLL you're trying to find doesn't necessary correspond to a driver version, rather to a build version of that dll. For example, the driver of Radeon9000Pro i have has the version number 5.13.1.6143, meanwhile atioglxx.dll is of 6.13.10.3259 build version(the same is ati3duag.dll universal DirectDraw/D3D), but ati2dvag.dll (2D driver) is 5.13.1.6143 -- so THIS file supposed to be of the right version of the currently installed driver, i guess.

[This message has been edited by matt_weird (edited 06-12-2003).]

kansler
06-13-2003, 12:31 AM
Originally posted by Tom Nuydens:
What I'd really like to see is a watertight mechanism for figuring out the name of the nvoglnt/atioglxx/... DLL. As pointed out earlier, the method I use at the moment may break down if the user has had multiple drivers installed on the same system, so we need a way to figure out which of the registry entries points to the current driver.

A watertight solution would be to enumerate the currently loaded dlls for your program (CreateToolhelp32Snapshot, Module32First and Module32Next). You should check all the dlls for an opengl export function(LoadLibrary and GetProcAddress), for intstance glBegin(). If you find multiple dlls with an opengl export you should discard opengl32.dll. This way, you should end up with the currently rendering opengl dll. GetFileVersionInfo should take care of the rest.

Obli
06-13-2003, 12:41 AM
Originally posted by Tom Nuydens:
...Obli, your suggestions seem like a little too much guesswork to me. Surely there has to be an unambiguous way to figure this out?...
I don't know exactly how I got this registry key. However, titan has a lot of video cards around here and I am quite sure I can pull out the correct one by doing the directX poll as stated above.
Yes, I am trying without too much control over it, however, it does not hurt since looks like we are not figuring out a bulletproof way...
Anyway, the query results are definetly encouraging to me. It also works on matrox, nVidia and ATi.
Query results on my system:
Video card is a "NVIDIA GeForce4 Ti 4400" running driver release "4.4.0.3" by "NVIDIA".
So, I cannot get the exact version of the GL driver but I am still quite happy with the number I get since I am using 44.03. This makes everything easier to me.

I just got some very interesting feedback by email. The algo is getting refined.
Now, I am going to pull out info from HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\{nx} where {nx} is the most recent key (in form 0000, 0001...) which has the "driverDesc" field set to the value returned by the DirectX poll. All the most interesting values are still there but now there's another nice field called "DriverDate" (REG_SZ) set to "2-28-2003". This is on ATi.

I don't know how the win registry is structured, but right now, this makes sense to me. The subkey {4D36E968-E325-11CE-BFC1-08002BE10318} is actually hardcoded since it appears to be always the same but you can always parse all the keys here and figure out what it is by looking at the "Class" subfield. I have not found any other subkey with that name.

Thank you everyone for what this is turning out to be! I was having the same problem a week ago or so and this looks very constructive.

EDIT: small thing in the key path.


[This message has been edited by Obli (edited 06-13-2003).]

kansler
06-13-2003, 01:07 AM
Obli is right. ClassGuid {4d36e968-e325-11ce-bfc1-08002be10318} always contains the display adapters for every version of windows.

Source: http://msdn.microsoft.com/library/defaul...up-cls_2i1z.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/install/hh/install/setup-cls_2i1z.asp)

matt_weird
06-13-2003, 07:01 AM
ok, guys, but maybe i should note this again: EnumDisplaySettings returns the 2D-driver DLL name in the dmDeviceName member, which has the same build version as a driver version. Then next you could retrieve the file version info using GetFileVersionInfo passing only the name string with the extension. But.. er.. i have some problem to get it to work http://www.opengl.org/discussion_boards/ubb/redface.gif .Here's what i ended up with:




DEVMODE dmSettings;
DWORD dwInfoSize;
EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&dm Settings);

DWORD var;
void* lpInfoBuff;
dwInfoSize = GetFileVersionInfoSize((LPTSTR)&dmSettings.dmDevic eName, &var);
BOOL bRetval = GetFileVersionInfo((LPTSTR)&dmSettings.dmDeviceNam e, NULL, dwInfoSize, &lpInfoBuff);

VS_FIXEDFILEINFO fxdFileInfo;
UINT uiLen;
bRetval = VerQueryValue(&lpInfoBuff,TEXT("\\"),(LPVOID*)&fxdFileInfo, &uiLen);


so this doesn't fill out the VS_FIXEDFILEINFO structure, can't get what's wrong: both GetFileVersionInfo and VerQueryValue do return non-zero, which means all is OK. Maybe there's something tricky with lpSubBlock parameter of VerQueryValue. Also tried to specify the filename directly, such as this:

BOOL bRetval = GetFileVersionInfo(TEXT("ATI2DVAG.dll"), NULL, dwInfoSize, &lpInfoBuff);

the same result http://www.opengl.org/discussion_boards/ubb/rolleyes.gif http://www.opengl.org/discussion_boards/ubb/confused.gif

roffe
06-13-2003, 10:49 AM
DEVMODE dmSettings;
DWORD dwInfoSize;
EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&dm Settings);

DWORD var;
void* lpInfoBuff;
dwInfoSize = GetFileVersionInfoSize((LPTSTR)&dmSettings.dmDevic eName, &var);
BOOL bRetval = GetFileVersionInfo((LPTSTR)&dmSettings.dmDeviceNam e, NULL, dwInfoSize, &lpInfoBuff);

VS_FIXEDFILEINFO fxdFileInfo;
UINT uiLen;
bRetval = VerQueryValue(&lpInfoBuff,TEXT("\\"),(LPVOID*)&fxdFileInfo, &uiLen);

[/B]<HR></BLOCKQUOTE>

I'm surprised that code doesn't crash. Obviously you haven't taken the time to read the manual or even bother to look at warning messages from your compiler. First of all, there is a reason why you get the size of the structure needed, in GetFileVersionInfoSize. Second, in GetFileVersionInfo you pass a pointer to a pointer which is pointing to what?

[This message has been edited by roffe (edited 06-13-2003).]

matt_weird
06-14-2003, 12:08 AM
OK, i got your drift -- i must confess that i didn't read the info about dwLen to the end. Moreover,assuming previous, i thought that lpData recieves the pointer to a buffer already allocated somewhere else -- ok, my bad. And that ampersand sign in GetFileVersionInfo -- i just forgot to remove it when pasting the code to post it here; i just was trying everything there since the return from that function was non-zero in any case and it still didn't work as i expected.

So, if now i understand it correctly, it needs you to allocate the memory for the buffer and pass the pointer to it, something like this:




unsigned char* lpInfoBuff;
dwInfoSize = GetFileVersionInfoSize((LPTSTR)&amp;dmSettings.dmDevic eName, &amp;var);
lpInfoBuff = new unsigned char[dwInfoSize];
BOOL bRetval = GetFileVersionInfo((LPTSTR)&amp;dmSettings.dmDeviceNam e, NULL, dwInfoSize, lpInfoBuff);


is this correct? http://www.opengl.org/discussion_boards/ubb/confused.gif

V-man
06-14-2003, 06:24 AM
I guess it's been a pretty slow week.

Yick-yacking about the Windows registry and how to do some Windows programming is sure sign of it. I wonder why C++ doesn't jump in and yell switch to DirectX.

matt_weird
06-14-2003, 08:35 AM
OH NO! http://www.opengl.org/discussion_boards/ubb/eek.gif Now when you said THAT -- throw OpenGL outta the window and get under the desk! http://www.opengl.org/discussion_boards/ubb/eek.gif 'Coz that dude is already rushing with a light speed to your door!..

...oooops http://www.opengl.org/discussion_boards/ubb/rolleyes.gif ... he was right under your window when you threw OpenGL out http://www.opengl.org/discussion_boards/ubb/smile.gif Go pick up that unbeatable one -- you'll need it. And.. oh yeah, don't forget to tear that guy off the sidewalk http://www.opengl.org/discussion_boards/ubb/wink.gif

http://www.opengl.org/discussion_boards/ubb/biggrin.gif

[This message has been edited by matt_weird (edited 06-14-2003).]

Obli
06-15-2003, 02:25 AM
Is there something wrong with this?

matt_weird
06-15-2003, 05:00 AM
with what?