forked from bartvdbraak/blender
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
This commit is contained in:
parent
532d3a103a
commit
76ab0381d1
@ -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);
|
||||
}
|
||||
|
@ -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<Node *> 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<float3> 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);
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user