[Bf-committers] help with readfile.c::do_version
Hello there, as mentioned in last dev meeting I changed a few Game Sensors to use a datablock pointer instead of a string. e.g. the Collision Sensor struct used to have a string with the name of the material to trigger the collision, but now it will have a struct Material *ma; instead. Therefore I need a nice do_version to convert the char[] to *Material. In order to accomplish that I'm using BLI_findstring() . It works fine, however it gives me the new pointer for the image datablock, not the one stored in the file. That means that when we get in lib_link_object() the pointer will try to be converted into itself, what will not work since the new pointer will not be in the list of the old pointers. The workaround I found for it is totally hacky. I created a function called oldlibadr() that gives me the old pointer once I provide it with the new one. It's the opposite of newlibadr() used in lib_link_object(). You can see the patch for readfile.c here - http://www.pasteall.org/13020/diff Looking forward for directions on that. Thanks, Dalai ___ Bf-committers mailing list Bf-committers@blender.org http://lists.blender.org/mailman/listinfo/bf-committers
Re: [Bf-committers] help with readfile.c::do_version
Ah, iirc the correct way to do this would be to handle this in the appropriate lib_link_*** function (lib_link_sensors, or whatever it is). You could check if the old pointer is NULL, and if so check if there is a name in the name field, then look up the id block. Joe On Mon, May 10, 2010 at 10:03 AM, Dalai Felinto dfeli...@gmail.com wrote: Hello there, as mentioned in last dev meeting I changed a few Game Sensors to use a datablock pointer instead of a string. e.g. the Collision Sensor struct used to have a string with the name of the material to trigger the collision, but now it will have a struct Material *ma; instead. Therefore I need a nice do_version to convert the char[] to *Material. In order to accomplish that I'm using BLI_findstring() . It works fine, however it gives me the new pointer for the image datablock, not the one stored in the file. That means that when we get in lib_link_object() the pointer will try to be converted into itself, what will not work since the new pointer will not be in the list of the old pointers. The workaround I found for it is totally hacky. I created a function called oldlibadr() that gives me the old pointer once I provide it with the new one. It's the opposite of newlibadr() used in lib_link_object(). You can see the patch for readfile.c here - http://www.pasteall.org/13020/diff Looking forward for directions on that. Thanks, Dalai ___ Bf-committers mailing list Bf-committers@blender.org http://lists.blender.org/mailman/listinfo/bf-committers ___ Bf-committers mailing list Bf-committers@blender.org http://lists.blender.org/mailman/listinfo/bf-committers
Re: [Bf-committers] help with readfile.c::do_version
I thought that the ideal was to keep everything in do_version (since it's needed only once), but your solution makes sense as well and will work. Thanks Joe -- Dalai 2010/5/10 joe joe...@gmail.com: Ah, iirc the correct way to do this would be to handle this in the appropriate lib_link_*** function (lib_link_sensors, or whatever it is). You could check if the old pointer is NULL, and if so check if there is a name in the name field, then look up the id block. Joe On Mon, May 10, 2010 at 10:03 AM, Dalai Felinto dfeli...@gmail.com wrote: Hello there, as mentioned in last dev meeting I changed a few Game Sensors to use a datablock pointer instead of a string. e.g. the Collision Sensor struct used to have a string with the name of the material to trigger the collision, but now it will have a struct Material *ma; instead. Therefore I need a nice do_version to convert the char[] to *Material. In order to accomplish that I'm using BLI_findstring() . It works fine, however it gives me the new pointer for the image datablock, not the one stored in the file. That means that when we get in lib_link_object() the pointer will try to be converted into itself, what will not work since the new pointer will not be in the list of the old pointers. The workaround I found for it is totally hacky. I created a function called oldlibadr() that gives me the old pointer once I provide it with the new one. It's the opposite of newlibadr() used in lib_link_object(). You can see the patch for readfile.c here - http://www.pasteall.org/13020/diff Looking forward for directions on that. Thanks, Dalai ___ Bf-committers mailing list Bf-committers@blender.org http://lists.blender.org/mailman/listinfo/bf-committers ___ Bf-committers mailing list Bf-committers@blender.org http://lists.blender.org/mailman/listinfo/bf-committers ___ Bf-committers mailing list Bf-committers@blender.org http://lists.blender.org/mailman/listinfo/bf-committers