Commit: de8711aeb380a4ed95d5b74d13a48ff5a641ccd3 Author: Lukas Stockner Date: Tue Mar 28 16:40:13 2017 +0200 Branches: experimental-build https://developer.blender.org/rBde8711aeb380a4ed95d5b74d13a48ff5a641ccd3
Revert "Cycles experimental build v5, fixed version" This reverts commit 82bcfb9b342ae261c1331fd4658229bc00f8531b. =================================================================== M build_files/cmake/macros.cmake M intern/cycles/CMakeLists.txt M intern/cycles/app/CMakeLists.txt D intern/cycles/app/cycles_dithering.cpp M intern/cycles/blender/CMakeLists.txt M intern/cycles/blender/addon/__init__.py M intern/cycles/blender/addon/engine.py M intern/cycles/blender/addon/properties.py M intern/cycles/blender/addon/ui.py M intern/cycles/blender/blender_curves.cpp M intern/cycles/blender/blender_mesh.cpp M intern/cycles/blender/blender_object.cpp M intern/cycles/blender/blender_python.cpp M intern/cycles/blender/blender_session.cpp M intern/cycles/blender/blender_session.h M intern/cycles/blender/blender_shader.cpp M intern/cycles/blender/blender_sync.cpp M intern/cycles/blender/blender_sync.h M intern/cycles/blender/blender_util.h M intern/cycles/device/CMakeLists.txt M intern/cycles/device/device.h M intern/cycles/device/device_cpu.cpp M intern/cycles/device/device_cuda.cpp D intern/cycles/device/device_denoising.cpp D intern/cycles/device/device_denoising.h M intern/cycles/device/device_memory.h M intern/cycles/device/device_multi.cpp M intern/cycles/device/device_split_kernel.cpp M intern/cycles/device/device_split_kernel.h M intern/cycles/device/device_task.cpp M intern/cycles/device/device_task.h M intern/cycles/device/opencl/opencl.h M intern/cycles/device/opencl/opencl_base.cpp M intern/cycles/device/opencl/opencl_mega.cpp M intern/cycles/device/opencl/opencl_split.cpp M intern/cycles/device/opencl/opencl_util.cpp D intern/cycles/filter/CMakeLists.txt D intern/cycles/filter/filter.h D intern/cycles/filter/filter_compat_cpu.h D intern/cycles/filter/filter_compat_cuda.h D intern/cycles/filter/filter_compat_opencl.h D intern/cycles/filter/filter_defines.h D intern/cycles/filter/filter_features.h D intern/cycles/filter/filter_features_sse.h D intern/cycles/filter/filter_kernel.h D intern/cycles/filter/filter_nlm_cpu.h D intern/cycles/filter/filter_nlm_gpu.h D intern/cycles/filter/filter_prefilter.h D intern/cycles/filter/filter_reconstruction.h D intern/cycles/filter/filter_transform.h D intern/cycles/filter/filter_transform_gpu.h D intern/cycles/filter/filter_transform_sse.h D intern/cycles/filter/kernels/cpu/filter.cpp D intern/cycles/filter/kernels/cpu/filter_avx.cpp D intern/cycles/filter/kernels/cpu/filter_avx2.cpp D intern/cycles/filter/kernels/cpu/filter_cpu.h D intern/cycles/filter/kernels/cpu/filter_cpu_impl.h D intern/cycles/filter/kernels/cpu/filter_sse2.cpp D intern/cycles/filter/kernels/cpu/filter_sse3.cpp D intern/cycles/filter/kernels/cpu/filter_sse41.cpp D intern/cycles/filter/kernels/cuda/filter.cu D intern/cycles/filter/kernels/cuda/kernel_config.h D intern/cycles/filter/kernels/opencl/filter.cl M intern/cycles/kernel/CMakeLists.txt M intern/cycles/kernel/closure/bsdf.h M intern/cycles/kernel/closure/bsdf_ashikhmin_velvet.h M intern/cycles/kernel/closure/bsdf_diffuse.h M intern/cycles/kernel/closure/bsdf_diffuse_ramp.h M intern/cycles/kernel/closure/bsdf_microfacet.h M intern/cycles/kernel/closure/bsdf_microfacet_multi.h M intern/cycles/kernel/closure/bsdf_microfacet_multi_impl.h M intern/cycles/kernel/closure/bsdf_oren_nayar.h M intern/cycles/kernel/closure/bsdf_phong_ramp.h D intern/cycles/kernel/closure/bsdf_principled_diffuse.h D intern/cycles/kernel/closure/bsdf_principled_sheen.h M intern/cycles/kernel/closure/bsdf_toon.h M intern/cycles/kernel/closure/bsdf_util.h M intern/cycles/kernel/closure/bssrdf.h M intern/cycles/kernel/geom/geom_triangle.h M intern/cycles/kernel/kernel.h M intern/cycles/kernel/kernel_accumulate.h M intern/cycles/kernel/kernel_bake.h D intern/cycles/kernel/kernel_color.h M intern/cycles/kernel/kernel_compat_cpu.h M intern/cycles/kernel/kernel_emission.h M intern/cycles/kernel/kernel_film.h M intern/cycles/kernel/kernel_light.h M intern/cycles/kernel/kernel_montecarlo.h M intern/cycles/kernel/kernel_passes.h D intern/cycles/kernel/kernel_passes_write.h M intern/cycles/kernel/kernel_path.h M intern/cycles/kernel/kernel_path_branched.h M intern/cycles/kernel/kernel_path_state.h M intern/cycles/kernel/kernel_path_surface.h M intern/cycles/kernel/kernel_path_volume.h M intern/cycles/kernel/kernel_projection.h M intern/cycles/kernel/kernel_random.h M intern/cycles/kernel/kernel_shader.h M intern/cycles/kernel/kernel_shadow.h M intern/cycles/kernel/kernel_subsurface.h M intern/cycles/kernel/kernel_textures.h M intern/cycles/kernel/kernel_types.h M intern/cycles/kernel/kernels/cpu/kernel_avx.cpp M intern/cycles/kernel/kernels/cpu/kernel_avx2.cpp M intern/cycles/kernel/kernels/cpu/kernel_cpu.h M intern/cycles/kernel/kernels/cpu/kernel_cpu_impl.h M intern/cycles/kernel/kernels/cpu/kernel_split_avx.cpp M intern/cycles/kernel/kernels/cpu/kernel_split_avx2.cpp M intern/cycles/kernel/kernels/cpu/kernel_split_sse2.cpp M intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp M intern/cycles/kernel/kernels/cpu/kernel_split_sse41.cpp M intern/cycles/kernel/kernels/cpu/kernel_sse2.cpp M intern/cycles/kernel/kernels/cpu/kernel_sse3.cpp M intern/cycles/kernel/kernels/cpu/kernel_sse41.cpp M intern/cycles/kernel/osl/osl_bssrdf.cpp M intern/cycles/kernel/osl/osl_closures.cpp M intern/cycles/kernel/osl/osl_closures.h M intern/cycles/kernel/osl/osl_services.cpp M intern/cycles/kernel/shaders/CMakeLists.txt D intern/cycles/kernel/shaders/node_ies_light.osl D intern/cycles/kernel/shaders/node_principled_bsdf.osl D intern/cycles/kernel/shaders/node_udim_texture.osl M intern/cycles/kernel/shaders/stdosl.h M intern/cycles/kernel/split/kernel_buffer_update.h M intern/cycles/kernel/split/kernel_holdout_emission_blurring_pathtermination_ao.h M intern/cycles/kernel/split/kernel_indirect_background.h M intern/cycles/kernel/split/kernel_next_iteration_setup.h M intern/cycles/kernel/split/kernel_shader_eval.h M intern/cycles/kernel/split/kernel_split_common.h M intern/cycles/kernel/svm/svm.h D intern/cycles/kernel/svm/svm_aov.h M intern/cycles/kernel/svm/svm_blackbody.h M intern/cycles/kernel/svm/svm_closure.h M intern/cycles/kernel/svm/svm_convert.h M intern/cycles/kernel/svm/svm_displace.h M intern/cycles/kernel/svm/svm_geometry.h D intern/cycles/kernel/svm/svm_ies.h M intern/cycles/kernel/svm/svm_image.h M intern/cycles/kernel/svm/svm_sky.h M intern/cycles/kernel/svm/svm_tex_coord.h M intern/cycles/kernel/svm/svm_types.h M intern/cycles/kernel/svm/svm_wavelength.h M intern/cycles/render/buffers.cpp M intern/cycles/render/buffers.h M intern/cycles/render/constant_fold.cpp M intern/cycles/render/constant_fold.h M intern/cycles/render/film.cpp M intern/cycles/render/film.h M intern/cycles/render/graph.cpp M intern/cycles/render/graph.h M intern/cycles/render/image.cpp M intern/cycles/render/image.h M intern/cycles/render/integrator.cpp M intern/cycles/render/integrator.h M intern/cycles/render/light.cpp M intern/cycles/render/mesh.cpp M intern/cycles/render/mesh.h M intern/cycles/render/nodes.cpp M intern/cycles/render/nodes.h M intern/cycles/render/osl.cpp M intern/cycles/render/osl.h M intern/cycles/render/scene.cpp M intern/cycles/render/scene.h M intern/cycles/render/session.cpp M intern/cycles/render/session.h M intern/cycles/render/shader.cpp M intern/cycles/render/shader.h M intern/cycles/render/sobol.cpp M intern/cycles/render/sobol.h M intern/cycles/render/svm.cpp M intern/cycles/render/svm.h M intern/cycles/render/tile.cpp M intern/cycles/render/tile.h M intern/cycles/test/CMakeLists.txt M intern/cycles/util/CMakeLists.txt M intern/cycles/util/util_color.h D intern/cycles/util/util_cuda.h M intern/cycles/util/util_guarded_allocator.h M intern/cycles/util/util_math.h D intern/cycles/util/util_math_matrix.h M intern/cycles/util/util_simd.h M intern/cycles/util/util_texture.h M intern/cycles/util/util_transform.h M intern/cycles/util/util_types.h M intern/opencolorio/fallback_impl.cc M intern/opencolorio/gpu_shader_display_transform.glsl M intern/opencolorio/ocio_capi.cc M intern/opencolorio/ocio_capi.h M intern/opencolorio/ocio_impl.h M intern/opencolorio/ocio_impl_glsl.cc M release/datafiles/colormanagement/config.ocio D release/datafiles/colormanagement/luts/rgb_to_bgr.spimtx M release/scripts/startup/nodeitems_builtins.py M source/blender/blenkernel/BKE_blender_version.h M source/blender/blenkernel/BKE_node.h M source/blender/blenkernel/BKE_scene.h M source/blender/blenkernel/intern/colortools.c M source/blender/blenkernel/intern/image.c M source/blender/blenkernel/intern/node.c M source/blender/blenkernel/intern/scene.c M source/blender/blenloader/intern/readfile.c M source/blender/blenloader/intern/versioning_270.c M source/blender/blenloader/intern/writefile.c M source/blender/compositor/CMakeLists.txt M source/blender/compositor/intern/COM_NodeGraph.cpp M source/blender/compositor/nodes/COM_ImageNode.cpp M source/blender/compositor/nodes/COM_RenderLayersNode.cpp M source/blender/compositor/nodes/COM_RenderLayersNode.h M source/blender/compositor/operations/COM_RenderLayersProg.cpp M source/blender/compositor/operations/COM_RenderLayersProg.h M source/blender/editors/interface/interface_templates.c M source/blender/editors/render/render_intern.h M source/blender/editors/render/render_internal.c M source/blender/editors/render/render_opengl.c M source/blender/editors/render/render_ops.c M source/blender/editors/render/render_preview.c M source/blender/editors/render/render_view.c M source/blender/editors/space_image/image_buttons.c M source/blender/editors/space_node/drawnode.c M source/blender/editors/space_node/node_edit.c M source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp M source/blender/gpu/shaders/gpu_shader_material.glsl M source/blender/imbuf/IMB_colormanagement.h M source/blender/imbuf/intern/colormanagement.c M source/blender/makesdna/DNA_color_types.h M source/blender/makesdna/DNA_node_types.h M source/blender/makesdna/DNA_scene_types.h M source/blender/makesrna/RNA_access.h M source/blender/makesrna/intern/CMakeLists.txt M source/blender/makesrna/intern/rna_color.c M source/blender/makesrna/intern/rna_context.c M source/blender/makesrna/intern/rna_nodetree.c M source/blender/makesrna/intern/rna_render.c M source/blender/makesrna/intern/rna_scene.c M source/blender/nodes/CMakeLists.txt M source/blender/nodes/NOD_composite.h M source/blender/nodes/NOD_shader.h M source/blender/nodes/NOD_static_types.h M source/blender/nodes/composite/node_composite_tree.c M source/blender/nodes/composite/nodes/node_composite_image.c D source/blender/nodes/shader/nodes/node_shader_aov_output.c D source/blender/nodes/shader/nodes/node_shader_bsdf_principled.c D source/blender/nodes/shader/nodes/node_shader_ies_light.c M source/blender/nodes/shader/nodes/node_shader_tex_image.c M source/blender/render/CMakeLists.txt M source/blender/render/extern/include/RE_engine.h M source/blender/render/extern/include/RE_pipeline.h M source/blender/render/intern/include/render_result.h M source/blender/render/intern/source/envmap.c M source/blender/render/intern/source/external_engine.c M source/blender/render/intern/source/pipeline.c M source/blender/render/intern/source/render_result.c M source/blender/render/intern/source/rendercore.c M source/blender/render/intern/source/zbuf.c M source/blenderplayer/bad_level_call_stubs/stubs.c =================================================================== diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index e70f155668c..f9992ee92b9 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -536,7 +536,6 @@ function(SETUP_BLENDER_SORTED_LIBS) cycles_bvh cycles_device cycles_kernel - cycles_filter cycles_util cycles_subd) if(WITH_CYCLES_OSL) @@ -652,7 +651,6 @@ function(SETUP_BLENDER_SORTED_LIBS) cycles_bvh cycles_device cycles_kernel - cycles_filter cycles_util cycles_subd bf_intern_opencolorio diff --git a/intern/cycles/CMakeLists.txt b/intern/cycles/CMakeLists.txt index 9d9c86f383d..31fa15a2042 100644 --- a/intern/cycles/CMakeLists.txt +++ b/intern/cycles/CMakeLists.txt @@ -245,7 +245,6 @@ endif() add_subdirectory(bvh) add_subdirectory(device) add_subdirectory(doc) -add_subdirectory(filter) add_subdirectory(graph) add_subdirectory(kernel) add_subdirectory(render) diff --git a/intern/cycles/app/CMakeLists.txt b/intern/cycles/app/CMakeLists.txt index 88b46038eb2..8cd499b7ca6 100644 --- a/intern/cycles/app/CMakeLists.txt +++ b/intern/cycles/app/CMakeLists.txt @@ -18,7 +18,6 @@ set(INC_SYS set(LIBRARIES cycles_device cycles_kernel - cycles_filter cycles_render cycles_bvh cycles_subd diff --git a/intern/cycles/app/cycles_dithering.cpp b/intern/cycles/app/cycles_dithering.cpp deleted file mode 100644 index e1ccef55410..00000000000 --- a/intern/cycles/app/cycles_dithering.cpp +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright 2016 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. - */ - -/* This code implements a matrix optimization based on simulated annealing - * that minimizes the energy function described in the paper "Blue-noise Dithered Sampling". - * - * Dimensionality and Size of the matrix are hardcoded as #defines below. - * It includes both a easily readable scalar implementation as well as a SSE4.1-optimized code path (which only supports DIM=2 currently). - * - * For full speed, compile with: g++ -o cycles_dithering cycles_dithering.cpp -O3 -march=native --std=c++11 - */ - -#include <stdlib.h> -#include <stdio.h> -#include <time.h> -#include <math.h> -#include <random> - -std::mt19937 rng(time(0)); - -float *mat; -float starting_temp; -uint64_t num_iter; - -/* Note: SSE code paths are hardcoded for DIM = 2. */ -#define DIM 2 - -/* Note: The random swapping code is only designed for SIZE=2048 or less. */ -#define SIZE 128 -#define SIZEMASK 0x7f -#define SIZEBITS 7 - -#define MAT(x, y, d) mat[(((y)<<SIZEBITS)+(x)) + ((d)<<(SIZEBITS*2))] - -#if (DIM == 2) && __SSE4_1__ -#define USE_SSE_CODE -#endif - -/* To speed up the process, only nearby pixels are considered. - * For pixels that are further away, the weight is nearly zero anyways. */ -#define WINDOW 10 - - -#define WRAP(x) ((x) & SIZEMASK) - -/* Fairly rough approximation of the exponential function. */ -inline float approx_exp(float x) -{ - x = (1.0f + x * (1.0f / 256.0f)); - x *= x; - x *= x; - x *= x; - x *= x; - x *= x; - x *= x; - x *= x; - x *= x; - return x; -} - -/* Decent approximation of the square root function. */ -inline float approx_sqrt(float x) -{ -#ifdef __SSE__ - return _mm_cvtss_f32(_mm_mul_ss(_mm_rsqrt_ss(_mm_set_ss(x)), _mm_set_ss(x))); -#else - return sqrtf(x); -#endif -} - - -inline float energy_pq(int px, int py, int qx, int qy) -{ - if(px == qx && py == qy) return 0.0f; - int dx = px-qx; - int dy = py-qy; - qx = WRAP(qx); - qy = WRAP(qy); - float dist = -(dx*dx+dy*dy)*(1.0f/4.41f); - float d_p = 0.0f; - for(int d = 0; d < DIM; d++) { - float d_c = MAT(px, py, d) - MAT(qx, qy, d); - d_p += d_c*d_c; - } - if(DIM == 2) - d_p = approx_sqrt(d_p); - else - d_p = powf(d_p, DIM * 0.25f); - return approx_exp(dist - d_p); -} - -/* Returns all the energy in that specific pixel, by looping over the window around the pixel. */ -float pixel_energy_scalar(int x, int y) -{ - float energy = 0.0f; - for(int dy = -WINDOW; dy <= WINDOW; dy++) { - for(int dx = -WINDOW; dx <= WINDOW; dx++) { - energy += energy_pq(x, y, x+dx, y+dy); - } - } - return energy; -} - -#ifdef USE_SSE_CODE -inline __m128 approx_exp_sse(__m128 x) -{ - x = _mm_add_ps(_mm_set1_ps(1.0f), _mm_mul_ps(x, _mm_set1_ps(1.0f / 256.0f))); - x = _mm_mul_ps(x, x); - x = _mm_mul_ps(x, x); - x = _mm_mul_ps(x, x); - x = _mm_mul_ps(x, x); - x = _mm_mul_ps(x, x); - x = _mm_mul_ps(x, x); - x = _mm_mul_ps(x, x); - x = _mm_mul_ps(x, x); - return x; -} - -inline __m128 approx_sqrt_sse(__m128 x) -{ - return _mm_mul_ps(_mm_rsqrt_ps(x), x); -} - -inline __m128 energy_pq_sse(__m128 *center, float *row, __m128 dx4, __m128 dy4) -{ - __m128 dist = _mm_mul_ps(_mm_add_ps(_mm_mul_ps(dx4, dx4), _mm_mul_ps(dy4, dy4)), _mm_set1_ps(-1.0f / 4.41f)); - __m128 d1 = _mm_sub_ps(center[0], _mm_loadu_ps(row)), d2 = _mm_sub_ps(center[1], _mm_loadu_ps(row + SIZE*SIZE)); - __m128 dist2 = _mm_add_ps(_mm_mul_ps(d1, d1), _mm_mul_ps(d2, d2)); - return approx_exp_sse(_mm_sub_ps(dist, approx_sqrt_sse(dist2))); -} - -/* Same as above, but processes 4 pixels at a time. */ -float pixel_energy_sse(int x, int y) -{ - __m128 energy = _mm_setzero_ps(); - __m128 center_pixel[2] = {_mm_set1_ps(MAT(x, y, 0)), _mm_set1_ps(MAT(x, y, 1))}; - for(int dy = -WINDOW; dy <= WINDOW; dy++) { - int wy = WRAP(y+dy); - __m128 dy4 = _mm_set1_ps(dy); - for(int dx = -WINDOW; dx <= WINDOW; dx += 4) { - __m128 dx4 = _mm_add_ps(_mm_set1_ps(dx), _mm_set_ps(3.0f, 2.0f, 1.0f, 0.0f)); - __m128 active = _mm_cmple_ps(dx4, _mm_set1_ps(WINDOW)); - if(dy == 0) active = _mm_and_ps(active, _mm_cmpneq_ps(dx4, _mm_setzero_ps())); - energy = _mm_add_ps(energy, _mm_blendv_ps(_mm_setzero_ps(), energy_pq_sse(center_pixel, &MAT(x+dx, wy, 0), dx4, dy4), active)); - } - } - energy = _mm_hadd_ps(energy, energy); - return _mm_cvtss_f32(_mm_hadd_ps(energy, energy)); -} - -inline float pixel_energy(int x, int y) -{ - /* The SSE code doesn't account for wrapping around the x axis. */ - if(x < WINDOW || (x + WINDOW) >= SIZE) - return pixel_energy_scalar(x, y); - else - return pixel_energy_sse(x, y); -} - -#else -#define pixel_energy(x, y) pixel_energy_scalar(x, y) -#endif - -int main(int argc, char** argv) -{ - if(argc < 4) { - fprintf(stderr, "Usage: %s <starting_temp> <num_iterations> <output_name> [initial_matrix.dat]\n", argv[0]); - fprintf(stderr, "<starting_temp>: Temperature parameter for the simulated annealing process. Values around 0.01 seem to give the best results.\n"); - fprintf(stderr, " Note that this implementation uses the following temperature profile: <starting_temp> * (1 - progress)^2\n"); - fprintf(stderr, "<num_iterations>: Number of iterations to run.\n"); - fprintf(stderr, "<output_name>: Name without file ending of the output files - the tool will save <output_name>.dat and <output_name>.c\n"); - fprintf(stderr, "[initial_matrix.mat]: Optional existing matrix that will be used to initialize the process - if not given, a random matrix will be used.\n"); - return -1; - } - starting_temp = atof(argv[1]); - num_iter = atoll(argv[2]); - - mat = new float[SIZE*SIZE*DIM]; - - bool matrix_initialized = false; - if(argc == 5) { - FILE *f = fopen(argv[4], "rb"); - if(f) { - int floats = fread(mat, sizeof(float), SIZE*SIZE*DIM, f); - if(floats == SIZE*SIZE*DIM) - matrix_initialized = true; - fclose(f); - } - } - if(!matrix_initialized) { - /* Initialize matrix with random values. */ - for(int i = 0; i < SIZE*SIZE*DIM; i++) - mat[i] = rng() / ((float) 0xffffffff); - } - - float total_energy = 0.0f; - for(int y = 0; y < SIZE; y++) { - for(int x = 0; x < SIZE; x++) { - total_energy += pixel_energy(x, y); - } - } - printf("Total Energy: %f\n", total_energy); - fflush(stdout); - - float energy = 0.0; - for(uint64_t i = 0; i < num_iter; i++) { - int32_t randval = rng(); - /* Pick pixel pair to swap. */ - int sx = randval & SIZEMASK; - int sy = (randval >> 12) & SIZEMASK; - int ox = WRAP(sx + ((randval >> 24) % 5) - 2); - int oy = WRAP(sy + ((randval >> 28) % 5) - 2); - - /* Subtract energy contributed by the two pixels to be swapped. */ - float d_energy = -pixel_energy(sx, sy) - pixel_energy(ox, oy); - /* Swap the pixels. */ - for(int d = 0; d < DIM; d++) { - float temp = MAT(sx, sy, d); - MAT(sx, sy, d) = MAT(ox, oy, d); - MAT(ox, oy, d) = temp; - } - /* Add energy contributed by the two pixels that were swapped. */ - d_energy += pixel_energy(sx, sy) + pixel_energy(ox, oy); - - /* Accept the swap or not? */ - float i_f = (1.0f - i/((float) num_iter)); - float temperature = i_f*i_f*starting_temp; - if(d_energy >= 0.0 && (rng() / ((float) 0xffffffff)) >= expf(-d_energy / temperature)) { - /* Not accepted => Undo swap. */ - for(int d = 0; d < DIM; d++) { - float temp = MAT(sx, sy, d); - MAT(sx, sy, d) = MAT(ox, oy, d); - MAT(ox, oy, d) = temp; - } - } - else energy += 2.0*d_energy; - - if((i % 1000) == 0) { - printf("%f %lu\n", energy, i); - fflush(stdout); - } - } - - /* Calculate final energy */ - total_energy = 0.0f; - for(int y = 0; y < SIZE; y++) { - for(int x = 0; x < SIZE; x++) { - total_energy += pixel_energy(x, y); - } - } - printf("Total Energy: %f\n", total_energy); - fflush(stdout); - - /* Debug output. - * These files can be visualized in Octave/Matlab with "imshow(fftshift(abs(fft2(dlmread("<file>.dat")))) .* 0.01)". */ -#if 0 - for(int d = 0; d < DIM; d++) { - char filename[1024]; - sprintf(filename, "%s_%d**2_dim%d.dat", argv[3], SIZE, d); - FILE* f = fopen(filename, "w"); - for(int y = 0; y < SIZE; y++) { - for(int x = 0; x < SIZE; x++) { - fprintf(f, "%f ", MAT(x, y, d)); - } - fprintf(f, "\n"); - } - fclose(f); - } -#endif - char filename[1024]; - sprintf(filename, "%s.mat" @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs