[Bf-committers] help with readfile.c::do_version

2010-05-10 Thread Dalai Felinto
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

2010-05-10 Thread joe
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

2010-05-10 Thread Dalai Felinto
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