[MacRuby-devel] Some OpenGL sample code

Julien Jassaud julien at collectapply.jp
Thu Dec 24 02:32:44 PST 2009


Laurent,


>>> Could you enter "thread apply all bt" into the debugger shell and paste us the result?
>> 
>> Here it is. I don't understand much. The only information I can add is that thread 4 do not systematically appear. Besides that, the backtraces are consistent.
> [...]
> 
> I looked at your project and I was able to reproduce the crashes, which smelled like memory smashers. Then, looking at the code, I saw bad usage of the Pointer class.
> 
> An example:
> 
> 		@light_position		= Pointer.new_with_type('f')
> 		@light_position[0]	= -2.0
> 		@light_position[1]	=  2.0
> 		@light_position[2]	=  1.0
> 		@light_position[3]	=  0.0
> 
> This is not good, because this creates a pointer to a float of 1 element (exactly like malloc(sizeof(float)) in C) but then you set objects to indexes (1, 2, 3) out of the pointer's bounds.
> 
> The correct code should be:
> 
> 		@light_position		= Pointer.new_with_type('f', 4)
> 		@light_position[0]	= -2.0
> 		@light_position[1]	=  2.0
> 		@light_position[2]	=  1.0
> 		@light_position[3]	=  0.0
> 
> The second argument allows you to specify the number of elements the Pointer will hold (by default, it's 1).
> 
> As in C, it's very easy to corrupt memory or crash the program. Sometimes we get pointers from C or Objective-C, we wrap them inside Pointer objects and we do not know the number of elements, but in this case, when the Pointer is constructed by Ruby itself, I believe MacRuby should not let you do this and appropriately raise an exception. I will fix that ASAP.
> 
> The random crashes may perhaps disappear after you fix the code.

Sorry. I should have read the source for the Pointer class. The crashes are gone.


>>> I'm not familiar with OpenGL but it might be a BridgeSupport problem... What other functions using the CGLRendererInfoObj are failing?
>> 
>> Sorry, when I said all other functions, I really meant all other calls to CGLDescribeRenderer. After a series of call to CGLDescribeRenderer, the CGLRendererInfoObj is destroyed by CGLDestroyRendererInfo.
>> 
>> If I bypass this whole section of code, I get more problems with blablablaObj and sameblablablaObject pointer confusion. The documentation for those types mentions only CGLRendererInfoObj, CGLPixelFormatObj or CGLContextObj, though
> 
> Thanks, I reproduce the problem here too. Could you file a ticket on Trac, this way we won't forget to fix it?

Done. Thanks.


Bonnes fêtes également !

Julien




More information about the MacRuby-devel mailing list