PDA

View Full Version : GL says it is 1.2.1, but missing functions in dll



06-21-2002, 10:37 PM
The version of OpenGL I am using on my laptop is supposed to version 1.2 that ships with windows NT/2000 since I have Windows XP.

When I use glGetString(GL_VERSION) it returns "1.2.2"

The problem:
a) There is no glTexImage3D(...), even though it is a part of the specs for version 1.2

I import it as follows:

__declspec(dllimport) void _stdcall glTexImage3D(GLenum target,
GLint level,
GLenum internalformat,
GLsizei width,
GLsizei height,
GLsizei depth,
GLint border,
GLenum format,
GLenum type,
const GLvoid* pixels);

and the linker says it is an unresolved external.

When I use Depends to view all of the exports in the dll, I do not see glTexImage3D, glTextSubImage3D, or any such thing.

Any ideas on why? is the microsoft really ignoring the standards and calling the version 1.2.1 even though it is missing stuff?

06-21-2002, 10:52 PM
(I said 1.2.2 but meant 1.2.1)

QUOTE]Originally posted by WonderingAboutTexture3D:
The version of OpenGL I am using on my laptop is supposed to version 1.2 that ships with windows NT/2000 since I have Windows XP.

When I use glGetString(GL_VERSION) it
returns "1.2.2" <<----I mean "1.2.1"

The problem:
a) There is no glTexImage3D(...), even though it is a part of the specs for version 1.2

I import it as follows:

__declspec(dllimport) void _stdcall glTexImage3D(GLenum target,
GLint level,
GLenum internalformat,
GLsizei width,
GLsizei height,
GLsizei depth,
GLint border,
GLenum format,
GLenum type,
const GLvoid* pixels);

and the linker says it is an unresolved external.

When I use Depends to view all of the exports in the dll, I do not see glTexImage3D, glTextSubImage3D, or any such thing.

Any ideas on why? is the microsoft really ignoring the standards and calling the version 1.2.1 even though it is missing stuff?

[/QUOTE]

Citizen Thomas
06-21-2002, 11:25 PM
You might want to try something like this:

typedef void (APIENTRY * PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);

PFNGLTEXIMAGE3DPROC glTexImage3D;
glTexImage3D = (PFNGLTEXIMAGE3DPROC)wglGetProcAddress("glTexImage3D");

That should help you avoid the unresolved external issue. Your glext.h file might already define "PFNGLTEXIMAGE3DPROC," if you got the file from your video card manufacturer. The one I have from NVidia defines function pointer typedefs like that for all the extensions available on the card.

Bob
06-22-2002, 03:45 AM
The problem is not that the driver is missing your function. It's the import library you're likning to that's missing the function.

The import library you link to, Microsofts software implementation, is stuck at OpenGL 1.1. To access functions in OpenGL 1.2 and later, aswell as extensions, you must load the functions manually from the driver, instead of letting the import library do it for you. To load the functions yourself, do as Citizen Thomas said.

zed
06-22-2002, 12:30 PM
>>The version of OpenGL I am using on my laptop is supposed to version 1.2 that ships with windows NT/2000 since I have Windows XP.<<

first get new drivers

second it should be there
(i only know about nvidia cards)
(3dtextures were the odd man out btw)
anyways the extension mightnt be in the extension string but if the glstring version saiz 1.2+ u should be able to 'get it' nonetheless (itll be done in software though)

06-25-2002, 09:49 PM
The method is not returned in glGetString(GL_EXTENSION), using wglGetProcAddress returns NULL, using GetProcAddress with the HMODULE returns NULL, and yet glGetString(GL_VERSION) returns 1.2.1

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

Mazy
06-25-2002, 10:38 PM
the extentionstring dont have to return the texture3d extention because it's maybe supported.. nVidia uses that sematic for most new things in the 1.2 and 1.3 versions of gl, that is if it's not reported as an Extention, but its there anyway (required core features) then it's not HW accelerated.

And you cant get functions for newer versions than 1.1 through the getProcAdress, but you can get them trough wglGetProcAdress

06-25-2002, 11:34 PM
Yeah, I used wglGetProcAddress, I only tried the other version when that failed.

Here is some of my code as it is right now:

char* ext = (char*)glGetString(GL_EXTENSIONS);
char* vnd = (char*)glGetString(GL_VENDOR);

char* ver = (char*)glGetString(GL_VERSION);

PFNGLTEXIMAGE3DPRC glTexImage3D = (PFNGLTEXIMAGE3DPRC)wglGetProcAddress("glTexImage3D");

When its done,
glTexImage3D == NULL,
ext == "...."
vnd == "Trident"
ver == "1.2.1"