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:
authorTon Roosendaal <ton@blender.org>2011-04-27 15:58:34 +0400
committerTon Roosendaal <ton@blender.org>2011-04-27 15:58:34 +0400
commitda376e0237517543aa21740ee2363234ee1c20ae (patch)
tree014a513ed8d0eccc5e54fef42347781e85bae56a /intern/cycles/device/device.h
parent693780074388111e7b9ef1c3825e462f398dc6c4 (diff)
Cycles render engine, initial commit. This is the engine itself, blender modifications and build instructions will follow later.
Cycles uses code from some great open source projects, many thanks them: * BVH building and traversal code from NVidia's "Understanding the Efficiency of Ray Traversal on GPUs": http://code.google.com/p/understanding-the-efficiency-of-ray-traversal-on-gpus/ * Open Shading Language for a large part of the shading system: http://code.google.com/p/openshadinglanguage/ * Blender for procedural textures and a few other nodes. * Approximate Catmull Clark subdivision from NVidia Mesh tools: http://code.google.com/p/nvidia-mesh-tools/ * Sobol direction vectors from: http://web.maths.unsw.edu.au/~fkuo/sobol/ * Film response functions from: http://www.cs.columbia.edu/CAVE/software/softlib/dorf.php
Diffstat (limited to 'intern/cycles/device/device.h')
-rw-r--r--intern/cycles/device/device.h136
1 files changed, 136 insertions, 0 deletions
diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h
new file mode 100644
index 00000000000..aba077fc2f3
--- /dev/null
+++ b/intern/cycles/device/device.h
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2011, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __DEVICE_H__
+#define __DEVICE_H__
+
+#include <stdlib.h>
+
+#include "device_memory.h"
+
+#include "util_string.h"
+#include "util_thread.h"
+#include "util_types.h"
+#include "util_vector.h"
+
+CCL_NAMESPACE_BEGIN
+
+class Progress;
+
+enum DeviceType {
+ DEVICE_NONE,
+ DEVICE_CPU,
+ DEVICE_OPENCL,
+ DEVICE_CUDA,
+ DEVICE_NETWORK,
+ DEVICE_MULTI
+};
+
+enum MemoryType {
+ MEM_READ_ONLY,
+ MEM_WRITE_ONLY,
+ MEM_READ_WRITE
+};
+
+/* Device Task */
+
+class DeviceTask {
+public:
+ typedef enum { PATH_TRACE, TONEMAP, DISPLACE } Type;
+ Type type;
+
+ int x, y, w, h;
+ device_ptr rng_state;
+ device_ptr rgba;
+ device_ptr buffer;
+ int pass;
+ int resolution;
+
+ device_ptr displace_input;
+ device_ptr displace_offset;
+ int displace_x, displace_w;
+
+ DeviceTask(Type type = PATH_TRACE);
+ void split(ThreadQueue<DeviceTask>& tasks, int num);
+};
+
+/* Device */
+
+class Device {
+protected:
+ Device() {}
+
+ DeviceType type;
+ bool background;
+
+public:
+ virtual ~Device() {}
+
+ /* info */
+ virtual string description() = 0;
+
+ /* regular memory */
+ virtual void mem_alloc(device_memory& mem, MemoryType type) = 0;
+ virtual void mem_copy_to(device_memory& mem) = 0;
+ virtual void mem_copy_from(device_memory& mem,
+ size_t offset, size_t size) = 0;
+ virtual void mem_zero(device_memory& mem) = 0;
+ virtual void mem_free(device_memory& mem) = 0;
+
+ /* constant memory */
+ virtual void const_copy_to(const char *name, void *host, size_t size) = 0;
+
+ /* texture memory */
+ virtual void tex_alloc(const char *name, device_memory& mem,
+ bool interpolation = false, bool periodic = false) {};
+ virtual void tex_free(device_memory& mem) {};
+
+ /* pixel memory */
+ virtual void pixels_alloc(device_memory& mem);
+ virtual void pixels_copy_from(device_memory& mem, int y, int w, int h);
+ virtual void pixels_free(device_memory& mem);
+
+ /* open shading language, only for CPU device */
+ virtual void *osl_memory() { return NULL; }
+
+ /* tasks */
+ virtual void task_add(DeviceTask& task) = 0;
+ virtual void task_wait() = 0;
+ virtual void task_cancel() = 0;
+
+ /* opengl drawing */
+ virtual void draw_pixels(device_memory& mem, int y, int w, int h,
+ int width, int height);
+
+#ifdef WITH_NETWORK
+ /* networking */
+ void server_run();
+#endif
+
+ /* static */
+ static Device *create(DeviceType type, bool background = true);
+
+ static DeviceType type_from_string(const char *name);
+ static string string_from_type(DeviceType type);
+ static vector<DeviceType> available_types();
+};
+
+CCL_NAMESPACE_END
+
+#endif /* __DEVICE_H__ */
+