From 76ab0381d1e5f8df6b23803b75b2013933484bcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Fl=C3=A8che?= Date: Mon, 18 Jan 2021 07:43:42 +0100 Subject: [PATCH] Fix Cycles standalone compilation following API changes The changes to the socket API were not applied to the standalone app. Also modify Camera.compute_auto_viewplane() to use Camera.full_width and Camera.full_height as it is not possible to publicly access Camera.width and Camera.height anymore, so the aspect ratio could be computed with stale data. Differential Revision: https://developer.blender.org/D9961 --- intern/cycles/app/cycles_standalone.cpp | 31 ++++++------- intern/cycles/app/cycles_xml.cpp | 62 ++++++++++++++----------- intern/cycles/render/camera.cpp | 4 +- 3 files changed, 50 insertions(+), 47 deletions(-) diff --git a/intern/cycles/app/cycles_standalone.cpp b/intern/cycles/app/cycles_standalone.cpp index f057ce7a2f0..6b3513b065a 100644 --- a/intern/cycles/app/cycles_standalone.cpp +++ b/intern/cycles/app/cycles_standalone.cpp @@ -133,12 +133,12 @@ static void scene_init() /* Camera width/height override? */ if (!(options.width == 0 || options.height == 0)) { - options.scene->camera->width = options.width; - options.scene->camera->height = options.height; + options.scene->camera->set_full_width(options.width); + options.scene->camera->set_full_height(options.height); } else { - options.width = options.scene->camera->width; - options.height = options.scene->camera->height; + options.width = options.scene->camera->get_full_width(); + options.height = options.scene->camera->get_full_height(); } /* Calculate Viewplane */ @@ -233,7 +233,7 @@ static void display() static void motion(int x, int y, int button) { if (options.interactive) { - Transform matrix = options.session->scene->camera->matrix; + Transform matrix = options.session->scene->camera->get_matrix(); /* Translate */ if (button == 0) { @@ -251,8 +251,8 @@ static void motion(int x, int y, int button) } /* Update and Reset */ - options.session->scene->camera->matrix = matrix; - options.session->scene->camera->need_update = true; + options.session->scene->camera->set_matrix(matrix); + options.session->scene->camera->need_flags_update = true; options.session->scene->camera->need_device_update = true; options.session->reset(session_buffer_params(), options.session_params.samples); @@ -266,10 +266,10 @@ static void resize(int width, int height) if (options.session) { /* Update camera */ - options.session->scene->camera->width = width; - options.session->scene->camera->height = height; + options.session->scene->camera->set_full_width(options.width); + options.session->scene->camera->set_full_height(options.height); options.session->scene->camera->compute_auto_viewplane(); - options.session->scene->camera->need_update = true; + options.session->scene->camera->need_flags_update = true; options.session->scene->camera->need_device_update = true; options.session->reset(session_buffer_params(), options.session_params.samples); @@ -302,7 +302,7 @@ static void keyboard(unsigned char key) /* Navigation */ else if (options.interactive && (key == 'w' || key == 'a' || key == 's' || key == 'd')) { - Transform matrix = options.session->scene->camera->matrix; + Transform matrix = options.session->scene->camera->get_matrix(); float3 translate; if (key == 'w') @@ -317,8 +317,8 @@ static void keyboard(unsigned char key) matrix = matrix * transform_translate(translate); /* Update and Reset */ - options.session->scene->camera->matrix = matrix; - options.session->scene->camera->need_update = true; + options.session->scene->camera->set_matrix(matrix); + options.session->scene->camera->need_flags_update = true; options.session->scene->camera->need_device_update = true; options.session->reset(session_buffer_params(), options.session_params.samples); @@ -345,10 +345,7 @@ static void keyboard(unsigned char key) break; } - options.session->scene->integrator->max_bounce = bounce; - - /* Update and Reset */ - options.session->scene->integrator->need_update = true; + options.session->scene->integrator->set_max_bounce(bounce); options.session->reset(session_buffer_params(), options.session_params.samples); } diff --git a/intern/cycles/app/cycles_xml.cpp b/intern/cycles/app/cycles_xml.cpp index a86e06f92d1..272d509585e 100644 --- a/intern/cycles/app/cycles_xml.cpp +++ b/intern/cycles/app/cycles_xml.cpp @@ -190,17 +190,18 @@ static void xml_read_camera(XMLReadState &state, xml_node node) { Camera *cam = state.scene->camera; - xml_read_int(&cam->width, node, "width"); - xml_read_int(&cam->height, node, "height"); + int width = -1, height = -1; + xml_read_int(&width, node, "width"); + xml_read_int(&height, node, "height"); - cam->full_width = cam->width; - cam->full_height = cam->height; + cam->set_full_width(width); + cam->set_full_height(height); xml_read_node(state, cam, node); - cam->matrix = state.tfm; + cam->set_matrix(state.tfm); - cam->need_update = true; + cam->need_flags_update = true; cam->update(state.scene); } @@ -338,11 +339,13 @@ static void xml_read_shader_graph(XMLReadState &state, Shader *shader, xml_node if (node_name == "image_texture") { ImageTextureNode *img = (ImageTextureNode *)snode; - img->filename = path_join(state.base, img->filename.string()); + ustring filename(path_join(state.base, img->get_filename().string())); + img->set_filename(filename); } else if (node_name == "environment_texture") { EnvironmentTextureNode *env = (EnvironmentTextureNode *)snode; - env->filename = path_join(state.base, env->filename.string()); + ustring filename(path_join(state.base, env->get_filename().string())); + env->set_filename(filename); } if (snode) { @@ -384,8 +387,8 @@ static Mesh *xml_add_mesh(Scene *scene, const Transform &tfm) /* create object*/ Object *object = new Object(); - object->geometry = mesh; - object->tfm = tfm; + object->set_geometry(mesh); + object->set_tfm(tfm); scene->objects.push_back(object); return mesh; @@ -395,7 +398,9 @@ static void xml_read_mesh(const XMLReadState &state, xml_node node) { /* add mesh */ Mesh *mesh = xml_add_mesh(state.scene, state.tfm); - mesh->used_shaders.push_back(state.shader); + array used_shaders = mesh->get_used_shaders(); + used_shaders.push_back_slow(state.shader); + mesh->set_used_shaders(used_shaders); /* read state */ int shader = 0; @@ -411,20 +416,24 @@ static void xml_read_mesh(const XMLReadState &state, xml_node node) xml_read_int_array(nverts, node, "nverts"); if (xml_equal_string(node, "subdivision", "catmull-clark")) { - mesh->subdivision_type = Mesh::SUBDIVISION_CATMULL_CLARK; + mesh->set_subdivision_type(Mesh::SUBDIVISION_CATMULL_CLARK); } else if (xml_equal_string(node, "subdivision", "linear")) { - mesh->subdivision_type = Mesh::SUBDIVISION_LINEAR; + mesh->set_subdivision_type(Mesh::SUBDIVISION_LINEAR); } - if (mesh->subdivision_type == Mesh::SUBDIVISION_NONE) { + array P_array; + P_array = P; + + if (mesh->get_subdivision_type() == Mesh::SUBDIVISION_NONE) { /* create vertices */ - mesh->verts = P; + + mesh->set_verts(P_array); size_t num_triangles = 0; for (size_t i = 0; i < nverts.size(); i++) num_triangles += nverts[i] - 2; - mesh->reserve_mesh(mesh->verts.size(), num_triangles); + mesh->reserve_mesh(mesh->get_verts().size(), num_triangles); /* create triangles */ int index_offset = 0; @@ -474,7 +483,7 @@ static void xml_read_mesh(const XMLReadState &state, xml_node node) } else { /* create vertices */ - mesh->verts = P; + mesh->set_verts(P_array); size_t num_ngons = 0; size_t num_corners = 0; @@ -513,23 +522,20 @@ static void xml_read_mesh(const XMLReadState &state, xml_node node) } /* setup subd params */ - if (!mesh->subd_params) { - mesh->subd_params = new SubdParams(mesh); - } - SubdParams &sdparams = *mesh->subd_params; + float dicing_rate = state.dicing_rate; + xml_read_float(&dicing_rate, node, "dicing_rate"); + dicing_rate = std::max(0.1f, dicing_rate); - sdparams.dicing_rate = state.dicing_rate; - xml_read_float(&sdparams.dicing_rate, node, "dicing_rate"); - sdparams.dicing_rate = std::max(0.1f, sdparams.dicing_rate); - - sdparams.objecttoworld = state.tfm; + mesh->set_subd_dicing_rate(dicing_rate); + mesh->set_subd_objecttoworld(state.tfm); } /* we don't yet support arbitrary attributes, for now add vertex * coordinates as generated coordinates if requested */ if (mesh->need_attribute(state.scene, ATTR_STD_GENERATED)) { Attribute *attr = mesh->attributes.add(ATTR_STD_GENERATED); - memcpy(attr->data_float3(), mesh->verts.data(), sizeof(float3) * mesh->verts.size()); + memcpy( + attr->data_float3(), mesh->get_verts().data(), sizeof(float3) * mesh->get_verts().size()); } } @@ -539,7 +545,7 @@ static void xml_read_light(XMLReadState &state, xml_node node) { Light *light = new Light(); - light->shader = state.shader; + light->set_shader(state.shader); xml_read_node(state, light, node); state.scene->lights.push_back(light); diff --git a/intern/cycles/render/camera.cpp b/intern/cycles/render/camera.cpp index 92cf712d32a..3beb3d1d4d3 100644 --- a/intern/cycles/render/camera.cpp +++ b/intern/cycles/render/camera.cpp @@ -212,8 +212,8 @@ void Camera::compute_auto_viewplane() viewplane.top = 1.0f; } else { - float aspect = (float)width / (float)height; - if (width >= height) { + float aspect = (float)full_width / (float)full_height; + if (full_width >= full_height) { viewplane.left = -aspect; viewplane.right = aspect; viewplane.bottom = -1.0f;