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:
Diffstat (limited to 'source/blender/render/intern/source/rayshade.c')
-rw-r--r--source/blender/render/intern/source/rayshade.c102
1 files changed, 68 insertions, 34 deletions
diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c
index bb08911a1eb..0c735c18c57 100644
--- a/source/blender/render/intern/source/rayshade.c
+++ b/source/blender/render/intern/source/rayshade.c
@@ -87,7 +87,8 @@ static int test_break(void *data)
static void RE_rayobject_config_control(RayObject *r, Render *re)
{
- if (RE_rayobject_isRayAPI(r)) {
+ if (RE_rayobject_isRayAPI(r))
+ {
r = RE_rayobject_align( r );
r->control.data = re;
r->control.test_break = test_break;
@@ -98,7 +99,8 @@ static RayObject* RE_rayobject_create(Render *re, int type, int size)
{
RayObject * res = NULL;
- if (type == R_RAYSTRUCTURE_AUTO) {
+ if (type == R_RAYSTRUCTURE_AUTO)
+ {
//TODO
//if (detect_simd())
#ifdef __SSE__
@@ -109,7 +111,8 @@ static RayObject* RE_rayobject_create(Render *re, int type, int size)
}
#ifndef __SSE__
- if (type == R_RAYSTRUCTURE_SIMD_SVBVH || type == R_RAYSTRUCTURE_SIMD_QBVH) {
+ if (type == R_RAYSTRUCTURE_SIMD_SVBVH || type == R_RAYSTRUCTURE_SIMD_QBVH)
+ {
puts("Warning: Using VBVH (SSE was disabled at compile time)");
type = R_RAYSTRUCTURE_VBVH;
}
@@ -145,30 +148,37 @@ void freeraytree(Render *re)
{
ObjectInstanceRen *obi;
- if (re->raytree) {
+ if (re->raytree)
+ {
RE_rayobject_free(re->raytree);
re->raytree = NULL;
}
- if (re->rayfaces) {
+ if (re->rayfaces)
+ {
MEM_freeN(re->rayfaces);
re->rayfaces = NULL;
}
- if (re->rayprimitives) {
+ if (re->rayprimitives)
+ {
MEM_freeN(re->rayprimitives);
re->rayprimitives = NULL;
}
- for (obi=re->instancetable.first; obi; obi=obi->next) {
+ for (obi=re->instancetable.first; obi; obi=obi->next)
+ {
ObjectRen *obr = obi->obr;
- if (obr->raytree) {
+ if (obr->raytree)
+ {
RE_rayobject_free(obr->raytree);
obr->raytree = NULL;
}
- if (obr->rayfaces) {
+ if (obr->rayfaces)
+ {
MEM_freeN(obr->rayfaces);
obr->rayfaces = NULL;
}
- if (obi->raytree) {
+ if (obi->raytree)
+ {
RE_rayobject_free(obi->raytree);
obi->raytree = NULL;
}
@@ -222,7 +232,8 @@ RayObject* makeraytree_object(Render *re, ObjectInstanceRen *obi)
// update render stats
ObjectRen *obr = obi->obr;
- if (obr->raytree == NULL) {
+ if (obr->raytree == NULL)
+ {
RayObject *raytree;
RayFace *face = NULL;
VlakPrimitive *vlakprimitive = NULL;
@@ -230,7 +241,8 @@ RayObject* makeraytree_object(Render *re, ObjectInstanceRen *obi)
//Count faces
int faces = 0;
- for (v=0;v<obr->totvlak;v++) {
+ for (v=0;v<obr->totvlak;v++)
+ {
VlakRen *vlr = obr->vlaknodes[v>>8].vlak + (v&255);
if (is_raytraceable_vlr(re, vlr))
faces++;
@@ -248,9 +260,11 @@ RayObject* makeraytree_object(Render *re, ObjectInstanceRen *obi)
obr->rayobi = obi;
- for (v=0;v<obr->totvlak;v++) {
+ for (v=0;v<obr->totvlak;v++)
+ {
VlakRen *vlr = obr->vlaknodes[v>>8].vlak + (v&255);
- if (is_raytraceable_vlr(re, vlr)) {
+ if (is_raytraceable_vlr(re, vlr))
+ {
if ((re->r.raytrace_options & R_RAYTRACE_USE_LOCAL_COORDS)) {
RE_rayobject_add( raytree, RE_vlakprimitive_from_vlak( vlakprimitive, obi, vlr ) );
vlakprimitive++;
@@ -272,7 +286,8 @@ RayObject* makeraytree_object(Render *re, ObjectInstanceRen *obi)
}
if (obr->raytree) {
- if ((obi->flag & R_TRANSFORMED) && obi->raytree == NULL) {
+ if ((obi->flag & R_TRANSFORMED) && obi->raytree == NULL)
+ {
obi->transform_primitives = 0;
obi->raytree = RE_rayobject_instance_create( obr->raytree, obi->mat, obi, obi->obr->rayobi );
}
@@ -284,13 +299,16 @@ RayObject* makeraytree_object(Render *re, ObjectInstanceRen *obi)
static int has_special_rayobject(Render *re, ObjectInstanceRen *obi)
{
- if ( (obi->flag & R_TRANSFORMED) && (re->r.raytrace_options & R_RAYTRACE_USE_INSTANCES) ) {
+ if ( (obi->flag & R_TRANSFORMED) && (re->r.raytrace_options & R_RAYTRACE_USE_INSTANCES) )
+ {
ObjectRen *obr = obi->obr;
int v, faces = 0;
- for (v=0;v<obr->totvlak;v++) {
+ for (v=0;v<obr->totvlak;v++)
+ {
VlakRen *vlr = obr->vlaknodes[v>>8].vlak + (v&255);
- if (is_raytraceable_vlr(re, vlr)) {
+ if (is_raytraceable_vlr(re, vlr))
+ {
faces++;
if (faces > 4)
return 1;
@@ -311,7 +329,8 @@ static void makeraytree_single(Render *re)
int faces = 0, obs = 0, special = 0;
for (obi=re->instancetable.first; obi; obi=obi->next)
- if (is_raytraceable(re, obi)) {
+ if (is_raytraceable(re, obi))
+ {
ObjectRen *obr = obi->obr;
obs++;
@@ -320,7 +339,8 @@ static void makeraytree_single(Render *re)
}
else {
int v;
- for (v=0;v<obr->totvlak;v++) {
+ for (v=0;v<obr->totvlak;v++)
+ {
VlakRen *vlr = obr->vlaknodes[v>>8].vlak + (v&255);
if (is_raytraceable_vlr(re, vlr))
faces++;
@@ -328,7 +348,8 @@ static void makeraytree_single(Render *re)
}
}
- if (faces + special == 0) {
+ if (faces + special == 0)
+ {
re->raytree = RE_rayobject_empty_create();
return;
}
@@ -336,7 +357,8 @@ static void makeraytree_single(Render *re)
//Create raytree
raytree = re->raytree = RE_rayobject_create( re, re->r.raytrace_structure, faces+special );
- if ( (re->r.raytrace_options & R_RAYTRACE_USE_LOCAL_COORDS) ) {
+ if ( (re->r.raytrace_options & R_RAYTRACE_USE_LOCAL_COORDS) )
+ {
vlakprimitive = re->rayprimitives = (VlakPrimitive*)MEM_callocN(faces*sizeof(VlakPrimitive), "Raytrace vlak-primitives");
}
else {
@@ -344,7 +366,8 @@ static void makeraytree_single(Render *re)
}
for (obi=re->instancetable.first; obi; obi=obi->next)
- if (is_raytraceable(re, obi)) {
+ if (is_raytraceable(re, obi))
+ {
if (test_break(re))
break;
@@ -361,11 +384,13 @@ static void makeraytree_single(Render *re)
int v;
ObjectRen *obr = obi->obr;
- if (obi->flag & R_TRANSFORMED) {
+ if (obi->flag & R_TRANSFORMED)
+ {
obi->transform_primitives = 1;
}
- for (v=0;v<obr->totvlak;v++) {
+ for (v=0;v<obr->totvlak;v++)
+ {
VlakRen *vlr = obr->vlaknodes[v>>8].vlak + (v&255);
if (is_raytraceable_vlr(re, vlr)) {
if ((re->r.raytrace_options & R_RAYTRACE_USE_LOCAL_COORDS)) {
@@ -375,7 +400,8 @@ static void makeraytree_single(Render *re)
}
else {
RE_rayface_from_vlak(face, obi, vlr);
- if ((obi->flag & R_TRANSFORMED)) {
+ if ((obi->flag & R_TRANSFORMED))
+ {
mul_m4_v3(obi->mat, face->v1);
mul_m4_v3(obi->mat, face->v2);
mul_m4_v3(obi->mat, face->v3);
@@ -391,7 +417,8 @@ static void makeraytree_single(Render *re)
}
}
- if (!test_break(re)) {
+ if (!test_break(re))
+ {
re->i.infostr= "Raytree.. building";
re->stats_draw(re->sdh, &re->i);
@@ -425,7 +452,8 @@ void makeraytree(Render *re)
//This is ONLY needed to kept a bogus behavior of SUN and HEMI lights
INIT_MINMAX(min, max);
RE_rayobject_merge_bb( re->raytree, min, max );
- for (i=0; i<3; i++) {
+ for (i=0; i<3; i++)
+ {
min[i] += 0.01f;
max[i] += 0.01f;
sub[i] = max[i]-min[i];
@@ -978,10 +1006,12 @@ static void halton_sample(double *ht_invprimes, double *ht_nums, double *v)
// "Instant Radiosity", Keller A.
unsigned int i;
- for (i = 0; i < 2; i++) {
+ for (i = 0; i < 2; i++)
+ {
double r = fabs((1.0 - ht_nums[i]) - 1e-10);
- if (ht_invprimes[i] >= r) {
+ if (ht_invprimes[i] >= r)
+ {
double lasth;
double h = ht_invprimes[i];
@@ -1035,7 +1065,8 @@ static struct QMCSampler *QMC_initSampler(int type, int tot)
static void QMC_initPixel(QMCSampler *qsa, int thread)
{
- if (qsa->type==SAMP_TYPE_HAMMERSLEY) {
+ if (qsa->type==SAMP_TYPE_HAMMERSLEY)
+ {
/* hammersley sequence is fixed, already created in QMCSampler init.
* per pixel, gets a random offset. We create separate offsets per thread, for write-safety */
qsa->offs[thread][0] = 0.5f * BLI_thread_frand(thread);
@@ -1346,7 +1377,8 @@ static void trace_refract(float col[4], ShadeInput *shi, ShadeResult *shr)
samples++;
/* adaptive sampling */
- if (adapt_thresh < 1.0f && samples > max_samples/2) {
+ if (adapt_thresh < 1.0f && samples > max_samples/2)
+ {
if (adaptive_sample_variance(samples, col, colsq, adapt_thresh))
break;
@@ -1447,7 +1479,8 @@ static void trace_reflect(float col[3], ShadeInput *shi, ShadeResult *shr, float
samples++;
/* adaptive sampling */
- if (adapt_thresh > 0.0f && samples > max_samples/3) {
+ if (adapt_thresh > 0.0f && samples > max_samples/3)
+ {
if (adaptive_sample_variance(samples, col, colsq, adapt_thresh))
break;
@@ -2234,7 +2267,8 @@ static void ray_shadow_qmc(ShadeInput *shi, LampRen *lar, const float lampco[3],
QMC_initPixel(qsa, shi->thread);
INIT_MINMAX(min, max);
- for (i=0; i<totjitco; i++) {
+ for (i=0; i<totjitco; i++)
+ {
DO_MINMAX(jitco[i], min, max);
}
RE_rayobject_hint_bb( R.raytree, &bb_hint, min, max);