Implemented multisampling for texture nodes.
This commit is contained in:
@@ -35,6 +35,48 @@ static bNodeSocketType inputs[]= {
|
||||
{ -1, 0, "" }
|
||||
};
|
||||
|
||||
static void osa(
|
||||
void (*input_fn)(float *, bNodeStack *, TexParams *, short),
|
||||
float *out,
|
||||
bNodeStack *in,
|
||||
TexParams *p,
|
||||
short thread
|
||||
){
|
||||
if(!p->dxt) {
|
||||
input_fn(out, in, p, thread);
|
||||
} else {
|
||||
float sample[4] = {0};
|
||||
float coord[3];
|
||||
TexParams sp = *p;
|
||||
int i;
|
||||
|
||||
sp.coord = coord;
|
||||
sp.dxt = sp.dyt = 0;
|
||||
|
||||
QUATCOPY(out, sample);
|
||||
|
||||
for(i=0; i<5; i++) {
|
||||
VECCOPY(coord, p->coord);
|
||||
|
||||
if(i < 4)
|
||||
{
|
||||
if(i % 2) VECADD(coord, coord, p->dxt);
|
||||
if(i > 1) VECADD(coord, coord, p->dyt);
|
||||
}
|
||||
else
|
||||
{
|
||||
VECADDFAC(coord, coord, p->dxt, 0.5);
|
||||
VECADDFAC(coord, coord, p->dyt, 0.5);
|
||||
}
|
||||
|
||||
input_fn(sample, in, &sp, thread);
|
||||
|
||||
QUATADDFAC(out, out, sample, 0.2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* applies to render pipeline */
|
||||
static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
|
||||
{
|
||||
@@ -52,14 +94,14 @@ static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
|
||||
TexParams params;
|
||||
params_from_cdata(¶ms, cdata);
|
||||
|
||||
tex_input_rgba(&target->tr, in[0], ¶ms, cdata->thread);
|
||||
osa(tex_input_rgba, &target->tr, in[0], ¶ms, cdata->thread);
|
||||
|
||||
target->tin = (target->tr + target->tg + target->tb) / 3.0f;
|
||||
target->talpha = 1.0f;
|
||||
|
||||
if(target->nor) {
|
||||
if(in[1]->hasinput)
|
||||
tex_input_vec(target->nor, in[1], ¶ms, cdata->thread);
|
||||
osa(tex_input_vec, target->nor, in[1], ¶ms, cdata->thread);
|
||||
else
|
||||
target->nor = 0;
|
||||
}
|
||||
|
||||
@@ -149,7 +149,7 @@ void tex_do_preview(bNode *node, bNodeStack *ns, TexCallData *cdata)
|
||||
|
||||
params.dxt = 0;
|
||||
params.dyt = 0;
|
||||
params.cfra = 0; /* XXX Use current? */
|
||||
params.cfra = cdata->cfra;
|
||||
params.coord = coord;
|
||||
|
||||
for(x=0; x<preview->xsize; x++)
|
||||
|
||||
Reference in New Issue
Block a user