From e058110b700d556710509d20deac778a6b4d566f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 14 Nov 2011 06:11:40 +0000 Subject: fix uninitialized memory use when an object has modifiers but no ocean modifier. --- .../blender/render/intern/source/texture_ocean.c | 120 ++++++++++----------- 1 file changed, 60 insertions(+), 60 deletions(-) (limited to 'source/blender') diff --git a/source/blender/render/intern/source/texture_ocean.c b/source/blender/render/intern/source/texture_ocean.c index fe63b51b150..c13347dc162 100644 --- a/source/blender/render/intern/source/texture_ocean.c +++ b/source/blender/render/intern/source/texture_ocean.c @@ -56,27 +56,27 @@ extern struct Render R; /* ***** actual texture sampling ***** */ int ocean_texture(Tex *tex, float *texvec, TexResult *texres) { - int retval = TEX_INT; OceanTex *ot= tex->ot; - OceanResult ocr; - const float u = 0.5f+0.5f*texvec[0]; - const float v = 0.5f+0.5f*texvec[1]; - int cfra = R.r.cfra; - int normals= 0; ModifierData *md; + OceanModifierData *omd; texres->tin = 0.0f; - if (!ot || !ot->object || !ot->object->modifiers.first) + if ( !(ot) || + !(ot->object) || + !(md = (ModifierData *)modifiers_findByType(ot->object, eModifierType_Ocean)) || + !(omd= (OceanModifierData *)md)->ocean) + { return 0; + } + else { + const int do_normals = (omd->flag & MOD_OCEAN_GENERATE_NORMALS); + int cfra = R.r.cfra; + int retval = TEX_INT; - if ((md = (ModifierData *)modifiers_findByType(ot->object, eModifierType_Ocean))) { - OceanModifierData *omd = (OceanModifierData *)md; - - if (!omd->ocean) - return 0; - - normals = (omd->flag & MOD_OCEAN_GENERATE_NORMALS); + OceanResult ocr; + const float u = 0.5f+0.5f*texvec[0]; + const float v = 0.5f+0.5f*texvec[1]; if (omd->oceancache && omd->cached==TRUE) { @@ -85,7 +85,8 @@ int ocean_texture(Tex *tex, float *texvec, TexResult *texres) BKE_ocean_cache_eval_uv(omd->oceancache, &ocr, cfra, u, v); - } else { // non-cached + } + else { // non-cached if (G.rendering) BKE_ocean_eval_uv_catrom(omd->ocean, &ocr, u, v); @@ -94,64 +95,63 @@ int ocean_texture(Tex *tex, float *texvec, TexResult *texres) ocr.foam = BKE_ocean_jminus_to_foam(ocr.Jminus, omd->foam_coverage); } - } - - switch (ot->output) { - case TEX_OCN_DISPLACEMENT: - /* XYZ displacement */ - texres->tr = 0.5f + 0.5f * ocr.disp[0]; - texres->tg = 0.5f + 0.5f * ocr.disp[2]; - texres->tb = 0.5f + 0.5f * ocr.disp[1]; + switch (ot->output) { + case TEX_OCN_DISPLACEMENT: + /* XYZ displacement */ + texres->tr = 0.5f + 0.5f * ocr.disp[0]; + texres->tg = 0.5f + 0.5f * ocr.disp[2]; + texres->tb = 0.5f + 0.5f * ocr.disp[1]; - texres->tr = MAX2(0.0f, texres->tr); - texres->tg = MAX2(0.0f, texres->tg); - texres->tb = MAX2(0.0f, texres->tb); + texres->tr = MAX2(0.0f, texres->tr); + texres->tg = MAX2(0.0f, texres->tg); + texres->tb = MAX2(0.0f, texres->tb); - BRICONTRGB; + BRICONTRGB; - retval = TEX_RGB; - break; + retval = TEX_RGB; + break; - case TEX_OCN_EMINUS: - /* -ve eigenvectors ? */ - texres->tr = ocr.Eminus[0]; - texres->tg = ocr.Eminus[2]; - texres->tb = ocr.Eminus[1]; - retval = TEX_RGB; - break; + case TEX_OCN_EMINUS: + /* -ve eigenvectors ? */ + texres->tr = ocr.Eminus[0]; + texres->tg = ocr.Eminus[2]; + texres->tb = ocr.Eminus[1]; + retval = TEX_RGB; + break; - case TEX_OCN_EPLUS: - /* -ve eigenvectors ? */ - texres->tr = ocr.Eplus[0]; - texres->tg = ocr.Eplus[2]; - texres->tb = ocr.Eplus[1]; - retval = TEX_RGB; - break; + case TEX_OCN_EPLUS: + /* -ve eigenvectors ? */ + texres->tr = ocr.Eplus[0]; + texres->tg = ocr.Eplus[2]; + texres->tb = ocr.Eplus[1]; + retval = TEX_RGB; + break; - case TEX_OCN_JPLUS: - texres->tin = ocr.Jplus; - retval = TEX_INT; - break; + case TEX_OCN_JPLUS: + texres->tin = ocr.Jplus; + retval = TEX_INT; + break; - case TEX_OCN_FOAM: + case TEX_OCN_FOAM: - texres->tin = ocr.foam; + texres->tin = ocr.foam; - BRICONT; + BRICONT; - retval = TEX_INT; - break; - } + retval = TEX_INT; + break; + } - /* if normals needed */ + /* if normals needed */ - if (texres->nor && normals) { - normalize_v3_v3(texres->nor, ocr.normal); - retval |= TEX_NOR; - } + if (texres->nor && do_normals) { + normalize_v3_v3(texres->nor, ocr.normal); + retval |= TEX_NOR; + } - texres->ta = 1.0f; + texres->ta = 1.0f; - return retval; + return retval; + } } -- cgit v1.2.3