[vtk-developers] Re: Recent patch broke OpenGL 2.0 on OS X
David Gobbi
dgobbi at atamai.com
Wed Nov 1 13:25:04 EST 2006
Okay, the vtkVolumeTextureMapper3D works on the Mac again, I just needed
to add some code to this class that loads GL_VERSION_1_2 on the Mac.
I'm kind of embarrassed about the wild goose chase that I went on before
finding the real problem.
David Gobbi wrote:
> Silly me, I looked at vtkOpenGLTextureMapper3D.cxx and it is already
> 100% extensions based, it doesn't require GL_VERSION_2_0 at all. I
> should have remembered that from when I did the first Mac fix to this
> class a few weeks ago.
>
> The problem is that Apple's OpenGL does not report the 3D texture
> mapping extension, even though 3D texture mapping is supported. My
> previous solution was to use vtkgl::TexImage3D, which is only
> available if at least GL_VERSION_1_2 is loaded. Nothing to do with
> OpenGL 2.0 at all.
>
> - David
>
>
>
> David Gobbi wrote:
>> Hi Ken,
>>
>> Thanks for the feedback. Perhaps the best fix for
>> vtkOpenGLTextureMapper3D is to specifically disable only the shader
>> programming when GL_VERSION_2_0 is not present, but I'll have to look
>> deeper into the code to see if this would work. Otherwise I'll
>> either have to bite the bullet and go with your OpenGL 1.3 extension
>> suggestion, or load GL_VERSION_2_0 inside an #ifdef __APPLE__.
>>
>> I'm CC'ing Lisa Avila in case she might know whether it would be
>> possible (and desirable) to convert this class to use OpenGL <= 1.3.
>>
>> - David
>>
>>
>>
>> kmorel wrote:
>>> Sorry, but no. That is not an acceptable change. The problem is
>>> that the
>>> code you have suggested will cause the GLSL test to crash on Mesa
>>> platforms.
>>> The problem here is that I found out, the hard way, that successfully
>>> loading functions of an extension does not necessarily indicate that
>>> the
>>> extension is supported (or even that the function actually has an
>>> implementation).
>>>
>>> I had the same problem you are having on the Mac concerning the
>>> support of
>>> GLSL. It worked on my Mac before the change but did not work
>>> afterwards.
>>> After looking online, it appears that the Mac drivers do not actually
>>> support all of OpenGL 2.0. Although much (most?) of OpenGL 2.0 is
>>> supported
>>> and if you load those functions they will work, there is apparently
>>> parts
>>> that will not. Thus, it is dangerous to use OpenGL 2.0 on a Mac as
>>> you may
>>> run into something that does not work as it should. (That may be why
>>> you are
>>> finding your OpenGL 2.0 extensions do not work if you do not also load
>>> OpenGL 1.3.)
>>>
>>> My solution for GLSL was to use OpenGL 1.3 extensions rather than
>>> OpenGL 2.0
>>> directly. There is a set of registered extensions that allow access
>>> to the
>>> shading language made available in OpenGL 2.0. If you look at
>>> vtkGLSLShader.cxx and vtkGLSLShaderProgram.cxx, you can see the
>>> changes I
>>> made to make GLSL work both on machines that support OpenGL 2.0 and
>>> machines
>>> that do not support OpenGL 2.0 but support an appropriate set of
>>> extensions
>>> instead (i.e. the Mac). I am willing to bet that you can find a set of
>>> extensions as an alternative to using OpenGL 2.0 that will allow
>>> vtkOpenGLTextureMapper3D to work on the Mac.
>>>
>>> -Ken
>>>
>>>
>>> On 11/1/06 10:32 AM, "David Gobbi" <dgobbi at atamai.com> wrote:
>>>
>>>
>>>> Hi Ken,
>>>>
>>>> Your recent change to vtkOpenGLExtensionManager.cxx has broken the
>>>> vtkOpenGLTextureMapper3D on the Mac.
>>>>
>>>> The OpenGL driver on my Mac returns "1.5 ATI-1.4.18" as the version
>>>> but
>>>> has GL_VERSION_2_0 as an extension, so the new extension reporting
>>>> method that you added doesn't recognize that my Mac supports 2.0. The
>>>> situation gets even more complicated: from my experimentation, I
>>>> found
>>>> that I have to load "GL_VERSION_1_3" as an extension before
>>>> "GL_VERSION_2_0" can be loaded.
>>>>
>>>> The following code (at around line 248) works on the Mac by attempting
>>>> loading each version extension, and then doing your additional checks:
>>>>
>>>>
>>>> int tryMajor, tryMinor;
>>>> sscanf(ve.c_str(), "GL_VERSION_%d_%d", &tryMajor, &tryMinor);
>>>> if ( (vtkgl::LoadExtension(ve.c_str(), this) != 0)
>>>> || (driverMajor > tryMajor)
>>>> || ((driverMajor == tryMajor) && (driverMinor >= tryMinor)) )
>>>> {
>>>> // OpenGL version supported.
>>>> extensions_string += " ";
>>>> extensions_string += ve;
>>>> }
>>>>
>>>>
>>>> Do you see any problems if the above code is committed?
>>>>
>>>> Thanks,
>>>>
>>>> - David
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>>
>>
>> _______________________________________________
>> vtk-developers mailing list
>> vtk-developers at vtk.org
>> http://www.vtk.org/mailman/listinfo/vtk-developers
>>
>
> _______________________________________________
> vtk-developers mailing list
> vtk-developers at vtk.org
> http://www.vtk.org/mailman/listinfo/vtk-developers
>
More information about the vtk-developers
mailing list