Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/cycles/blender/blender_session.cpp')
-rw-r--r--intern/cycles/blender/blender_session.cpp47
1 files changed, 21 insertions, 26 deletions
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index 650d3d387ee..951f7022a10 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -111,9 +111,9 @@ void BlenderSession::create_session()
b_engine.use_highlight_tiles(session_params.progressive_refine == false);
/* setup callbacks for builtin image support */
- scene->image_manager->builtin_image_info_cb = function_bind(&BlenderSession::builtin_image_info, this, _1, _2, _3, _4, _5);
- scene->image_manager->builtin_image_pixels_cb = function_bind(&BlenderSession::builtin_image_pixels, this, _1, _2);
- scene->image_manager->builtin_image_float_pixels_cb = function_bind(&BlenderSession::builtin_image_float_pixels, this, _1, _2);
+ scene->image_manager->builtin_image_info_cb = function_bind(&BlenderSession::builtin_image_info, this, _1, _2, _3, _4, _5, _6);
+ scene->image_manager->builtin_image_pixels_cb = function_bind(&BlenderSession::builtin_image_pixels, this, _1, _2, _3);
+ scene->image_manager->builtin_image_float_pixels_cb = function_bind(&BlenderSession::builtin_image_float_pixels, this, _1, _2, _3);
}
void BlenderSession::reset_session(BL::BlendData b_data_, BL::Scene b_scene_)
@@ -493,11 +493,10 @@ bool BlenderSession::draw(int w, int h)
}
else {
/* update camera from 3d view */
- bool need_update = scene->camera->need_update;
sync->sync_view(b_v3d, b_rv3d, w, h);
- if(scene->camera->need_update && !need_update)
+ if(scene->camera->need_update)
reset = true;
session->scene->mutex.unlock();
@@ -622,23 +621,19 @@ void BlenderSession::test_cancel()
/* builtin image file name is actually an image datablock name with
* absolute sequence frame number concatenated via '@' character
*
- * this function splits image id name and frame number from a
- * builtin image name
+ * this function splits frame from builtin name
*/
-void BlenderSession::builtin_name_split(const string &builtin_name, string &name, int &frame)
+int BlenderSession::builtin_image_frame(const string &builtin_name)
{
int last = builtin_name.find_last_of('@');
- name = builtin_name.substr(0, last);
- frame = atoi(builtin_name.substr(last + 1, builtin_name.size() - last - 1).c_str());
+ return atoi(builtin_name.substr(last + 1, builtin_name.size() - last - 1).c_str());
}
-void BlenderSession::builtin_image_info(const string &builtin_name, bool &is_float, int &width, int &height, int &channels)
+void BlenderSession::builtin_image_info(const string &builtin_name, void *builtin_data, bool &is_float, int &width, int &height, int &channels)
{
- string name;
- int frame;
- builtin_name_split(builtin_name, name, frame);
-
- BL::Image b_image = b_data.images[name];
+ PointerRNA ptr;
+ RNA_id_pointer_create((ID*)builtin_data, &ptr);
+ BL::Image b_image(ptr);
if(b_image) {
is_float = b_image.is_float();
@@ -654,13 +649,13 @@ void BlenderSession::builtin_image_info(const string &builtin_name, bool &is_flo
}
}
-bool BlenderSession::builtin_image_pixels(const string &builtin_name, unsigned char *pixels)
+bool BlenderSession::builtin_image_pixels(const string &builtin_name, void *builtin_data, unsigned char *pixels)
{
- string name;
- int frame;
- builtin_name_split(builtin_name, name, frame);
+ int frame = builtin_image_frame(builtin_name);
- BL::Image b_image = b_data.images[name];
+ PointerRNA ptr;
+ RNA_id_pointer_create((ID*)builtin_data, &ptr);
+ BL::Image b_image(ptr);
if(b_image) {
int width = b_image.size()[0];
@@ -696,13 +691,13 @@ bool BlenderSession::builtin_image_pixels(const string &builtin_name, unsigned c
return false;
}
-bool BlenderSession::builtin_image_float_pixels(const string &builtin_name, float *pixels)
+bool BlenderSession::builtin_image_float_pixels(const string &builtin_name, void *builtin_data, float *pixels)
{
- string name;
- int frame;
- builtin_name_split(builtin_name, name, frame);
+ int frame = builtin_image_frame(builtin_name);
- BL::Image b_image = b_data.images[name];
+ PointerRNA ptr;
+ RNA_id_pointer_create((ID*)builtin_data, &ptr);
+ BL::Image b_image(ptr);
if(b_image) {
int width = b_image.size()[0];