Blender V2.61 - r43446

bvh_sort.cpp

Go to the documentation of this file.
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