Blender V2.61 - r43446
|
00001 /* 00002 * Adapted from code copyright 2009-2010 NVIDIA Corporation 00003 * Modifications Copyright 2011, Blender Foundation. 00004 * 00005 * Licensed under the Apache License, Version 2.0 (the "License"); 00006 * you may not use this file except in compliance with the License. 00007 * You may obtain a copy of the License at 00008 * 00009 * http://www.apache.org/licenses/LICENSE-2.0 00010 * 00011 * Unless required by applicable law or agreed to in writing, software 00012 * distributed under the License is distributed on an "AS IS" BASIS, 00013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00014 * See the License for the specific language governing permissions and 00015 * limitations under the License. 00016 */ 00017 00018 #include "bvh_build.h" 00019 #include "bvh_sort.h" 00020 00021 #include "util_algorithm.h" 00022 #include "util_debug.h" 00023 00024 CCL_NAMESPACE_BEGIN 00025 00026 struct BVHReferenceCompare { 00027 public: 00028 int dim; 00029 00030 BVHReferenceCompare(int dim_) 00031 { 00032 dim = dim_; 00033 } 00034 00035 bool operator()(const BVHBuild::Reference& ra, const BVHBuild::Reference& rb) 00036 { 00037 float ca = ra.bounds.min[dim] + ra.bounds.max[dim]; 00038 float cb = rb.bounds.min[dim] + rb.bounds.max[dim]; 00039 00040 if(ca < cb) return true; 00041 else if(ca > cb) return false; 00042 else if(ra.prim_object < rb.prim_object) return true; 00043 else if(ra.prim_object > rb.prim_object) return false; 00044 else if(ra.prim_index < rb.prim_index) return true; 00045 else if(ra.prim_index > rb.prim_index) return false; 00046 00047 return false; 00048 } 00049 }; 00050 00051 void bvh_reference_sort(int start, int end, BVHBuild::Reference *data, int dim) 00052 { 00053 sort(data+start, data+end, BVHReferenceCompare(dim)); 00054 } 00055 00056 CCL_NAMESPACE_END 00057