[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Symboler i OpenGL



Hej Sslug'ere,

I forbindelse med brugen af OpenGL under linux er jeg stødt på et problem 
som jeg ikke umiddelbart kan se en let (eller elegant) løsning til.

Det drejer sig om OpenGL extensions, det vil sige funktioner som det 
forventes man tester for eksistensen af og derefter indlæser pointere til 
dem dynamisk. Jeg har f.eks.:

typedef void (APIENTRY * glVertexWeightfvEXTPROC) (const GLfloat *weight);

glVertexWeightfvEXTPROC glVertexWeightfvEXT;

som i programmet initialiseres med (hvis udvidelsen findes):


glVertexWeightfvEXT = 
(glVertexWeightfvEXTPROC)glXGetProcAddressARB("glVertexWeightfvEXT");


hvilket er helt i overensstemmelse med beskrivelsen for 
glXGetProcAddressARB. Mit problem kommer nu af, at symbolet 
glVertexWeightfvEXT som jeg definerer som en funktionspointer også findes i 
libGL.so, fordi det åbenbart er tilladt at linke statisk til 
udvidelsesfunktioner ud over muligheden for at hente dem dynamisk. Det 
giver i sidste ende en segmenteringsfejl ved kald af funktionen. Kaldte jeg 
mit symbol noget andet, feks my_glVertexWeightfvEXT giver det ingen 
problemer.

Mit problem er nu at jeg ønsker at beholde nanvgivningen uden at lave et 
prefix således at jeg bare kan kalde alle gl funktioner fra mit 
hovedprogram. Men hvordan gør man det uden at der kommer symbolsammenfald 
og dermed fejl idet jeg skriver til et symbol som libGL.so også definerer? 
Jeg kom på nogle metoder, men er ikke sikker på de er korrekte eller de 
bedste:

1. Brug C++ (gør jeg i forvejen) og smid alle gl symboler ind i et 
namespace. Det er den letteste metode men IMHO også den grimmeste.
2. Brug udelukkende dynamisk loading af libGL.so med dlopen, da de statiske 
symboler derved ikke eksporteres og blandes sammen med mine egne. Den 
metode har det problem at jeg så skal lave alle funktioner dynamiske, ikke 
bare udvidelsesfunktioner. Derudover kan GLU funktioner ikke hentes 
dynamisk, men er der et trick så ved dynamisk dlopen af libGLU kan libGLU's 
gl funktionsreferencer sættes til at bruge de statiske fra en dlopen af 
libGL.so?


Men hvordan gør andre det? det må være et kendt problem med opengl, eller 
hvad? Jeg ved f.eks. at quake loader gl dynamisk, men det bruger sikkert 
heller ikke GLU.

 - elias


 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 20:09 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *