Fix #20452: motion blur buttons were missing. Motion blur samples

are now also decoupled from antialiasing samples. Implemented by
Matt, I'm just committing the patch.
This commit is contained in:
2010-02-06 20:25:17 +00:00
parent 3be3e84e48
commit de90619a46
8 changed files with 50 additions and 10 deletions

View File

@@ -161,6 +161,7 @@ struct Render
/* samples */
SampleTables *samples;
float jit[32][2];
float mblur_jit[32][2];
ListBase *qmcsamplers;
/* shadow counter, detect shadow-reuse for shaders */

View File

@@ -85,15 +85,23 @@
static void init_render_jit(Render *re)
{
static float jit[32][2]; /* simple caching */
static float mblur_jit[32][2]; /* simple caching */
static int lastjit= 0;
static int last_mblur_jit= 0;
if(lastjit!=re->r.osa) {
if(lastjit!=re->r.osa || last_mblur_jit != re->r.mblur_samples) {
memset(jit, 0, sizeof(jit));
BLI_initjit(jit[0], re->r.osa);
memset(mblur_jit, 0, sizeof(mblur_jit));
BLI_initjit(mblur_jit[0], re->r.mblur_samples);
}
lastjit= re->r.osa;
memcpy(re->jit, jit, sizeof(jit));
last_mblur_jit= re->r.mblur_samples;
memcpy(re->mblur_jit, mblur_jit, sizeof(mblur_jit));
}

View File

@@ -1929,20 +1929,20 @@ static void do_render_blur_3d(Render *re)
{
RenderResult *rres;
float blurfac;
int blur= re->r.osa;
int blur= re->r.mblur_samples;
/* create accumulation render result */
rres= new_render_result(re, &re->disprect, 0, RR_USEMEM);
/* do the blur steps */
while(blur--) {
set_mblur_offs( re->r.blurfac*((float)(re->r.osa-blur))/(float)re->r.osa );
set_mblur_offs( re->r.blurfac*((float)(re->r.mblur_samples-blur))/(float)re->r.mblur_samples );
re->i.curblur= re->r.osa-blur; /* stats */
re->i.curblur= re->r.mblur_samples-blur; /* stats */
do_render_3d(re);
blurfac= 1.0f/(float)(re->r.osa-blur);
blurfac= 1.0f/(float)(re->r.mblur_samples-blur);
merge_renderresult_blur(rres, re->result, blurfac, re->r.alphamode & R_ALPHAKEY);
if(re->test_break(re->tbh)) break;

View File

@@ -2070,8 +2070,8 @@ void zbuffer_solid(RenderPart *pa, RenderLayer *rl, void(*fillfunc)(RenderPart*,
zspan->zofsy= -pa->disprect.ymin - R.jit[pa->sample+zsample][1];
}
else if(R.i.curblur) {
zspan->zofsx= -pa->disprect.xmin - R.jit[R.i.curblur-1][0];
zspan->zofsy= -pa->disprect.ymin - R.jit[R.i.curblur-1][1];
zspan->zofsx= -pa->disprect.xmin - R.mblur_jit[R.i.curblur-1][0];
zspan->zofsy= -pa->disprect.ymin - R.mblur_jit[R.i.curblur-1][1];
}
else {
zspan->zofsx= -pa->disprect.xmin;
@@ -3414,7 +3414,7 @@ static int zbuffer_abuf_render(RenderPart *pa, APixstr *APixbuf, APixstrand *APi
if(R.osa)
jit= R.jit;
else if(R.i.curblur)
jit= &R.jit[R.i.curblur-1];
jit= &R.mblur_jit[R.i.curblur-1];
else
jit= NULL;