[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59548] trunk/blender: Cycles / Standalone :
Thomas Dinges
blender at dingto.org
Tue Aug 27 04:37:51 CEST 2013
Revision: 59548
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59548
Author: dingto
Date: 2013-08-27 02:37:48 +0000 (Tue, 27 Aug 2013)
Log Message:
-----------
Cycles / Standalone:
* Rename test to standalone.
Note: New CMAKE flag is WITH_CYCLES_STANDALONE.
Modified Paths:
--------------
trunk/blender/CMakeLists.txt
trunk/blender/intern/cycles/CMakeLists.txt
trunk/blender/intern/cycles/app/CMakeLists.txt
trunk/blender/intern/cycles/cmake/external_libs.cmake
trunk/blender/intern/cycles/util/CMakeLists.txt
Added Paths:
-----------
trunk/blender/intern/cycles/app/cycles_standalone.cpp
Removed Paths:
-------------
trunk/blender/intern/cycles/app/cycles_test.cpp
Modified: trunk/blender/CMakeLists.txt
===================================================================
--- trunk/blender/CMakeLists.txt 2013-08-27 02:25:15 UTC (rev 59547)
+++ trunk/blender/CMakeLists.txt 2013-08-27 02:37:48 UTC (rev 59548)
@@ -261,7 +261,7 @@
# Cycles
option(WITH_CYCLES "Enable cycles Render Engine" ON)
-option(WITH_CYCLES_TEST "Build cycles test application" OFF)
+option(WITH_CYCLES_STANDALONE "Build cycles standalone application" OFF)
option(WITH_CYCLES_OSL "Build Cycles with OSL support" OFF)
option(WITH_CYCLES_CUDA_BINARIES "Build cycles CUDA binaries" OFF)
set(CYCLES_CUDA_BINARIES_ARCH sm_20 sm_21 sm_30 sm_35 CACHE STRING "CUDA architectures to build binaries for")
@@ -373,7 +373,7 @@
#-----------------------------------------------------------------------------
# Check for conflicting/unsupported configurations
-if(NOT WITH_BLENDER AND NOT WITH_PLAYER AND NOT WITH_CYCLES_TEST)
+if(NOT WITH_BLENDER AND NOT WITH_PLAYER AND NOT WITH_CYCLES_STANDALONE)
message(FATAL_ERROR "At least one of WITH_BLENDER or WITH_PLAYER must be enabled, nothing to do!")
endif()
Modified: trunk/blender/intern/cycles/CMakeLists.txt
===================================================================
--- trunk/blender/intern/cycles/CMakeLists.txt 2013-08-27 02:25:15 UTC (rev 59547)
+++ trunk/blender/intern/cycles/CMakeLists.txt 2013-08-27 02:37:48 UTC (rev 59548)
@@ -76,7 +76,7 @@
add_subdirectory(blender)
endif()
-if(WITH_CYCLES_TEST OR WITH_CYCLES_NETWORK)
+if(WITH_CYCLES_STANDALONE OR WITH_CYCLES_NETWORK)
add_subdirectory(app)
endif()
Modified: trunk/blender/intern/cycles/app/CMakeLists.txt
===================================================================
--- trunk/blender/intern/cycles/app/CMakeLists.txt 2013-08-27 02:25:15 UTC (rev 59547)
+++ trunk/blender/intern/cycles/app/CMakeLists.txt 2013-08-27 02:37:48 UTC (rev 59548)
@@ -27,7 +27,7 @@
link_directories(${OPENIMAGEIO_LIBPATH} ${BOOST_LIBPATH})
-if(WITH_CYCLES_TEST)
+if(WITH_CYCLES_STANDALONE)
list(APPEND LIBRARIES ${GLUT_LIBRARIES})
endif()
@@ -38,17 +38,17 @@
include_directories(${INC})
include_directories(SYSTEM ${INC_SYS})
-if(WITH_CYCLES_TEST)
+if(WITH_CYCLES_STANDALONE)
set(SRC
- cycles_test.cpp
+ cycles_standalone.cpp
cycles_xml.cpp
cycles_xml.h
)
- add_executable(cycles_test ${SRC})
- target_link_libraries(cycles_test ${LIBRARIES})
+ add_executable(cycles ${SRC})
+ target_link_libraries(cycles ${LIBRARIES})
if(UNIX AND NOT APPLE)
- set_target_properties(cycles_test PROPERTIES INSTALL_RPATH $ORIGIN/lib)
+ set_target_properties(cycles PROPERTIES INSTALL_RPATH $ORIGIN/lib)
endif()
unset(SRC)
endif()
Copied: trunk/blender/intern/cycles/app/cycles_standalone.cpp (from rev 59546, trunk/blender/intern/cycles/app/cycles_test.cpp)
===================================================================
--- trunk/blender/intern/cycles/app/cycles_standalone.cpp (rev 0)
+++ trunk/blender/intern/cycles/app/cycles_standalone.cpp 2013-08-27 02:37:48 UTC (rev 59548)
@@ -0,0 +1,346 @@
+/*
+ * Copyright 2011-2013 Blender Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+#include <stdio.h>
+
+#include "buffers.h"
+#include "camera.h"
+#include "device.h"
+#include "scene.h"
+#include "session.h"
+
+#include "util_args.h"
+#include "util_foreach.h"
+#include "util_function.h"
+#include "util_path.h"
+#include "util_progress.h"
+#include "util_string.h"
+#include "util_time.h"
+#include "util_view.h"
+
+#include "cycles_xml.h"
+
+CCL_NAMESPACE_BEGIN
+
+struct Options {
+ Session *session;
+ Scene *scene;
+ string filepath;
+ int width, height;
+ SceneParams scene_params;
+ SessionParams session_params;
+ bool quiet;
+} options;
+
+static void session_print(const string& str)
+{
+ /* print with carriage return to overwrite previous */
+ printf("\r%s", str.c_str());
+
+ /* add spaces to overwrite longer previous print */
+ static int maxlen = 0;
+ int len = str.size();
+ maxlen = max(len, maxlen);
+
+ for(int i = len; i < maxlen; i++)
+ printf(" ");
+
+ /* flush because we don't write an end of line */
+ fflush(stdout);
+}
+
+static void session_print_status()
+{
+ int sample, tile;
+ double total_time, sample_time;
+ string status, substatus;
+
+ /* get status */
+ sample = options.session->progress.get_sample();
+ options.session->progress.get_tile(tile, total_time, sample_time);
+ options.session->progress.get_status(status, substatus);
+
+ if(substatus != "")
+ status += ": " + substatus;
+
+ /* print status */
+ status = string_printf("Sample %d %s", sample, status.c_str());
+ session_print(status);
+}
+
+static BufferParams& session_buffer_params()
+{
+ static BufferParams buffer_params;
+ buffer_params.width = options.width;
+ buffer_params.height = options.height;
+ buffer_params.full_width = options.width;
+ buffer_params.full_height = options.height;
+
+ return buffer_params;
+}
+
+static void session_init()
+{
+ options.session = new Session(options.session_params);
+ options.session->reset(session_buffer_params(), options.session_params.samples);
+ options.session->scene = options.scene;
+
+ if(options.session_params.background && !options.quiet)
+ options.session->progress.set_update_callback(function_bind(&session_print_status));
+ else
+ options.session->progress.set_update_callback(function_bind(&view_redraw));
+
+ options.session->start();
+
+ options.scene = NULL;
+}
+
+static void scene_init(int width, int height)
+{
+ options.scene = new Scene(options.scene_params, options.session_params.device);
+ xml_read_file(options.scene, options.filepath.c_str());
+
+ if (width == 0 || height == 0) {
+ options.width = options.scene->camera->width;
+ options.height = options.scene->camera->height;
+ }
+}
+
+static void session_exit()
+{
+ if(options.session) {
+ delete options.session;
+ options.session = NULL;
+ }
+ if(options.scene) {
+ delete options.scene;
+ options.scene = NULL;
+ }
+
+ if(options.session_params.background && !options.quiet) {
+ session_print("Finished Rendering.");
+ printf("\n");
+ }
+}
+
+static void display_info(Progress& progress)
+{
+ static double latency = 0.0;
+ static double last = 0;
+ double elapsed = time_dt();
+ string str;
+
+ latency = (elapsed - last);
+ last = elapsed;
+
+ int sample, tile;
+ double total_time, sample_time;
+ string status, substatus;
+
+ sample = progress.get_sample();
+ progress.get_tile(tile, total_time, sample_time);
+ progress.get_status(status, substatus);
+
+ if(substatus != "")
+ status += ": " + substatus;
+
+ str = string_printf("latency: %.4f sample: %d total: %.4f average: %.4f %s",
+ latency, sample, total_time, sample_time, status.c_str());
+
+ view_display_info(str.c_str());
+}
+
+static void display()
+{
+ options.session->draw(session_buffer_params());
+
+ display_info(options.session->progress);
+}
+
+static void resize(int width, int height)
+{
+ options.width = width;
+ options.height = height;
+
+ if(options.session)
+ options.session->reset(session_buffer_params(), options.session_params.samples);
+}
+
+static void keyboard(unsigned char key)
+{
+ if(key == 'r')
+ options.session->reset(session_buffer_params(), options.session_params.samples);
+ else if(key == 27) // escape
+ options.session->progress.set_cancel("Cancelled");
+}
+
+static int files_parse(int argc, const char *argv[])
+{
+ if(argc > 0)
+ options.filepath = argv[0];
+
+ return 0;
+}
+
+static void options_parse(int argc, const char **argv)
+{
+ options.width = 0;
+ options.height = 0;
+ options.filepath = "";
+ options.session = NULL;
+ options.quiet = false;
+
+ /* device names */
+ string device_names = "";
+ string devicename = "cpu";
+ bool list = false;
+
+ vector<DeviceType>& types = Device::available_types();
+
+ foreach(DeviceType type, types) {
+ if(device_names != "")
+ device_names += ", ";
+
+ device_names += Device::string_from_type(type);
+ }
+
+ /* shading system */
+ string ssname = "svm";
+ string shadingsystems = "Shading system to use: svm";
+
+#ifdef WITH_OSL
+ shadingsystems += ", osl";
+#endif
+
+ /* parse options */
+ ArgParse ap;
+ bool help = false;
+
+ ap.options ("Usage: cycles [options] file.xml",
+ "%*", files_parse, "",
+ "--device %s", &devicename, ("Devices to use: " + device_names).c_str(),
+ "--shadingsys %s", &ssname, "Shading system to use: svm, osl",
+ "--background", &options.session_params.background, "Render in background, without user interface",
+ "--quiet", &options.quiet, "In background mode, don't print progress messages",
+ "--samples %d", &options.session_params.samples, "Number of samples to render",
+ "--output %s", &options.session_params.output_path, "File path to write output image",
+ "--threads %d", &options.session_params.threads, "CPU Rendering Threads",
+ "--width %d", &options.width, "Window width in pixel",
+ "--height %d", &options.height, "Window height in pixel",
+ "--list-devices", &list, "List information about all available devices",
+ "--help", &help, "Print help message",
+ NULL);
+
+ if(ap.parse(argc, argv) < 0) {
+ fprintf(stderr, "%s\n", ap.geterror().c_str());
+ ap.usage();
+ exit(EXIT_FAILURE);
+ }
+ else if(list) {
+ vector<DeviceInfo>& devices = Device::available_devices();
+ printf("Devices:\n");
+
+ foreach(DeviceInfo& info, devices) {
+ printf(" %s%s\n",
+ info.description.c_str(),
+ (info.display_device)? " (display)": "");
+ }
+
+ exit(EXIT_SUCCESS);
+ }
+ else if(help || options.filepath == "") {
+ ap.usage();
+ exit(EXIT_SUCCESS);
+ }
+
+ if(ssname == "osl")
+ options.scene_params.shadingsystem = SceneParams::OSL;
+ else if(ssname == "svm")
+ options.scene_params.shadingsystem = SceneParams::SVM;
+
+ /* Progressive rendering */
+ options.session_params.progressive = true;
+
+ /* find matching device */
+ DeviceType device_type = Device::type_from_string(devicename.c_str());
+ vector<DeviceInfo>& devices = Device::available_devices();
+ DeviceInfo device_info;
+ bool device_available = false;
+
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list