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:
@@ -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 */
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user