PDA

View Full Version : linking problem with certain OpenGL extensions



Ralph Gauges
10-08-2009, 01:43 AM
Hello,

I am currently trying to write a program that makes use of the GL_EXT_framebuffer_multisample extension in order to render antialiased bitmaps offscreen.

Besides the fact that I so far was not able to get any image data using this extension, I also have a strange linker problem on my linux box when I use this extension.

My linux box is running ubuntu 9.04 (AMD64) with the propriatary fglrx driver from AMD/ATI that comes with the distribution.

My program compiles just fine, which should mean that there are definitions for the glRenderbufferStorageMultisampleEXT and glBlitFramebufferEXT in the header files, but upon linking, the compiler complains that the symbols for those functions are undefined.

The linker does not complain about other extensions like e.g. GL_EXT_framebuffer_object which are also used in the program.

According to glxinfo, the GL_EXT_framebuffer_multisample extension is supported:

OpenGL extensions:
....
GL_EXT_framebuffer_blit, GL_EXT_framebuffer_multisample,
GL_EXT_framebuffer_object, GL_EXT_framebuffer_sRGB,


Since the library files do not seem to contain debug information, I have not been able to determine if those symbols are really not present in any of the libraries in my system or if I am just doing something stupid.

On the Mac, the program links just fine and it also links on another laptop which uses propriatory driver from nvidia.

So far I have not been able to find any up-to-date information regarding OpenGL extensions in the ATI linux driver on the AMD website. There was one PDF, which seemed totally outdated.

So my question would be whether anybody else has encountered the same or a similar problem and knows a solution?

Is there any trick one has to be aware of when developing on a system that uses the propriatary ATI driver?

Thanks a lot

Ralph

ZbuffeR
10-08-2009, 03:27 AM
You have to understand that the ABI is GL 1.2 on linux, so to get more modern functions you have to use :
http://www.opengl.org/registry/specs/ARB/get_proc_address.txt

If that sounds too complex for you, simply use GLEW or GLEE.
http://glew.sourceforge.net/
http://elf-stone.com/glee.php

However, it is surprising that you can use GL_EXT_framebuffer_object directly.

Ralph Gauges
10-08-2009, 10:41 AM
Ah thanks, you are a livesaver. I have never heard of this function or of this method to get extensions.

I think using it should be straight forward so I won't have to use GLEW.

Just some short follow up questions so that I can read up on this.

Is this a GLX thing or does this apply to all/several platforms or is this a platform dependent thing and I have to do this differently on each platforms.

Where can I find more information about which ABI provides what and how I can find out what ABI I am using.

The OpenGL books don't seem to mention this much?! Is there a good place where I could find information about the different ABIs and the differences between platforms etc.?

Thanks again

Ralph

ZbuffeR
10-08-2009, 01:41 PM
Each GL platform must allow a way to dynamically retrieve extensions, through glx for linux, wgl for windows, agl for apple. The Application Binary Interface only exposes lowest common denominator for all video cards.

There are reasons why GLEW and GLEE were created. It allow developpers to use extensions with ease and in a cross-platform way.

Old but still relevant for the extensions architecture and usage :
http://www.opengl.org/resources/faq/technical/extensions.htm
http://www.opengl.org/resources/features/OGLextensions/

linux ABI :
http://www.opengl.org/registry/ABI/

Some info on the wiki too :
http://www.opengl.org/wiki/Getting_started#OpenGL_2.0.2B_and_extensions

Ralph Gauges
10-09-2009, 01:19 AM
Thanks again so many times, this should get me going.

I also have to admit that I looked into the appendix of my Redbook copy last night and found that there is some information on this as well, I have just never looked into the appendices before.

I always assumed that important stuff would not be hidden in the appendix. My fault.

The concepts seem to be pretty similar in Linux and Windows, but the Mac doesn't seem to do it that way. All I could find there so far is that you just check if the extension is there and then use it. Since I am mostly developing on the Mac, this is probably the reason why I never even got the idea that it might be different on other platforms. Maybe I am wrong again, but looking through Apples documentation again and checking the AGL function, I could not find the corresponding functionality.

Cheers

Ralph

ZbuffeR
10-09-2009, 02:44 AM
Well I have no hands-on Mac dev experience, so either my information about agl is outdated, either plain wrong :-)