Thread: [PyOpenGL-Users] glGetUniformfv
Brought to you by:
mcfletch
From: Ian M. <geo...@gm...> - 2010-06-06 05:30:59
|
Hi, In trying to debug something, I'm trying to use glGetUniformfv, which I've never used before. It demands three arguments, and in the documentation a pointer is supposed to be passed. In Python, such code is typically replaced with a "___ =": value=glGetUniformfv(programlocation) This does not work. What to do? Ian |
From: Gijs <in...@bs...> - 2010-06-06 08:31:45
|
Hi Ian, I don't think I've ever had to use it before, but you usually give the program location and the variable location. So it would be something like this: value = glGetUniformfv(programloc, varloc) Hope this helps. Regards, Gijs On 6/6/10 7:30 , Ian Mallett wrote: > Hi, > > In trying to debug something, I'm trying to use glGetUniformfv, which > I've never used before. It demands three arguments, and in the > documentation a pointer is supposed to be passed. In Python, such > code is typically replaced with a "___ =": > > value=glGetUniformfv(programlocation) > > This does not work. What to do? > > Ian > > > ------------------------------------------------------------------------------ > ThinkGeek and WIRED's GeekDad team up for the Ultimate > GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the > lucky parental unit. See the prize list and enter to win: > http://p.sf.net/sfu/thinkgeek-promo > > > _______________________________________________ > PyOpenGL Homepage > http://pyopengl.sourceforge.net > _______________________________________________ > PyOpenGL-Users mailing list > PyO...@li... > https://lists.sourceforge.net/lists/listinfo/pyopengl-users > |
From: Ian M. <geo...@gm...> - 2010-06-06 14:07:00
|
On Sun, Jun 6, 2010 at 1:31 AM, Gijs <in...@bs...> wrote: > I don't think I've ever had to use it before, but you usually give the > program location and the variable location. So it would be something like > this: > value = glGetUniformfv(programloc, varloc) > Oops! I actually tried that. Typo. value=glGetUniformfv(programlocation) Should have been: value=glGetUniformfv(program,location) Ian |
From: Gijs <in...@bs...> - 2010-06-06 16:26:50
|
Glad we cleared that up :) Anyway, I tried it out, but I couldn't get it to work either. glGetUniformfv seemed to be defined as glGetUniformfv(programloc, varloc, returnvalues) in PyOpenGL, same as the default C spec. Normal PyOpenGL functions aren't defined this way. As you said, the return values are normally returned instead of passed along with the function call. When I tried to call it with three parameters, it did not even touch the returnvariable. So I assume there is a bug somewhere. Also, the function requires an array to be passed as a returnvariable, but the return value is always one value, never an array. You simply cannot ask for the values of an entire shader-array. You'd need to call glGetUniformfv for each element of the array. It might work if you pass a ctypes float along with it, however I have no experience with ctypes stuff, so I'll leave that to the experts. Gijs On 6/6/10 16:06 , Ian Mallett wrote: > On Sun, Jun 6, 2010 at 1:31 AM, Gijs <in...@bs... > <mailto:in...@bs...>> wrote: > > I don't think I've ever had to use it before, but you usually give > the program location and the variable location. So it would be > something like this: > value = glGetUniformfv(programloc, varloc) > > Oops! I actually tried that. Typo. > value=glGetUniformfv(programlocation) > Should have been: > value=glGetUniformfv(program,location) > Ian |
From: Mike C. F. <mcf...@vr...> - 2010-06-07 15:27:17
|
On 10-06-06 12:26 PM, Gijs wrote: > Glad we cleared that up :) > > Anyway, I tried it out, but I couldn't get it to work either. > glGetUniformfv seemed to be defined as glGetUniformfv(programloc, > varloc, returnvalues) in PyOpenGL, same as the default C spec. Normal > PyOpenGL functions aren't defined this way. As you said, the return > values are normally returned instead of passed along with the function > call. > > When I tried to call it with three parameters, it did not even touch > the returnvariable. So I assume there is a bug somewhere. Also, the > function requires an array to be passed as a returnvariable, but the > return value is always one value, never an array. You simply cannot > ask for the values of an entire shader-array. You'd need to call > glGetUniformfv for each element of the array. > > It might work if you pass a ctypes float along with it, however I have > no experience with ctypes stuff, so I'll leave that to the experts. This function should get wrapped to create the array automatically. In the meantime, this is a sample that should work: glUniform4fv( self.uniform_locations['lights'], 12, self.LIGHTS ) test_lights = (GLfloat * 12)() glGetUniformfv( self.shader, self.uniform_locations['lights'], test_lights ) print 'Lights', list(test_lights) You should be able to pass any writable PyOpenGL array type (e.g. a numpy array) as params. HTH, Mike > On 6/6/10 16:06 , Ian Mallett wrote: >> On Sun, Jun 6, 2010 at 1:31 AM, Gijs <in...@bs... >> <mailto:in...@bs...>> wrote: >> >> I don't think I've ever had to use it before, but you usually >> give the program location and the variable location. So it would >> be something like this: >> value = glGetUniformfv(programloc, varloc) >> >> Oops! I actually tried that. Typo. >> value=glGetUniformfv(programlocation) >> Should have been: >> value=glGetUniformfv(program,location) >> Ian > -- ________________________________________________ Mike C. Fletcher Designer, VR Plumber, Coder http://www.vrplumber.com http://blog.vrplumber.com |
From: Ian M. <geo...@gm...> - 2010-06-08 20:55:39
|
Hi, I tried the sample and it works well as a workaround. Note that the *12 must be *16 for 4x4 matrices, and I imagine something else for other types (otherwise the application terminates "in an unusual way". Thanks, Ian |