Changeset View
Changeset View
Standalone View
Standalone View
source/blender/render/intern/source/rendercore.c
| Show First 20 Lines • Show All 240 Lines • ▼ Show 20 Lines | static void halo_tile(RenderPart *pa, RenderLayer *rl) | ||||
| RenderLayer *rlpp[RE_MAX_OSA]; | RenderLayer *rlpp[RE_MAX_OSA]; | ||||
| HaloRen *har; | HaloRen *har; | ||||
| rcti disprect= pa->disprect, testrect= pa->disprect; | rcti disprect= pa->disprect, testrect= pa->disprect; | ||||
| float dist, xsq, ysq, xn, yn; | float dist, xsq, ysq, xn, yn; | ||||
| float col[4]; | float col[4]; | ||||
| intptr_t *rd= NULL; | intptr_t *rd= NULL; | ||||
| int a, *rz, zz, y, sample, totsample, od; | int a, *rz, zz, y, sample, totsample, od; | ||||
| short minx, maxx, miny, maxy, x; | short minx, maxx, miny, maxy, x; | ||||
| unsigned int lay= rl->lay; | unsigned int lay= (1 << 20) - 1; | ||||
| /* we don't render halos in the cropped area, gives errors in flare counter */ | /* we don't render halos in the cropped area, gives errors in flare counter */ | ||||
| if (pa->crop) { | if (pa->crop) { | ||||
| testrect.xmin+= pa->crop; | testrect.xmin+= pa->crop; | ||||
| testrect.xmax-= pa->crop; | testrect.xmax-= pa->crop; | ||||
| testrect.ymin+= pa->crop; | testrect.ymin+= pa->crop; | ||||
| testrect.ymax-= pa->crop; | testrect.ymax-= pa->crop; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 1,388 Lines • ▼ Show 20 Lines | |||||
| #endif | #endif | ||||
| /* setup shade sample with correct passes */ | /* setup shade sample with correct passes */ | ||||
| memset(&ssamp, 0, sizeof(ssamp)); | memset(&ssamp, 0, sizeof(ssamp)); | ||||
| shade_sample_initialize(&ssamp, pa, rr->layers.first); | shade_sample_initialize(&ssamp, pa, rr->layers.first); | ||||
| ssamp.tot= 1; | ssamp.tot= 1; | ||||
| for (rl=rr->layers.first; rl; rl=rl->next) { | for (rl=rr->layers.first; rl; rl=rl->next) { | ||||
| ssamp.shi[0].lay |= rl->lay; | ssamp.shi[0].lay |= (1 << 20) - 1; | ||||
| ssamp.shi[0].layflag |= rl->layflag; | ssamp.shi[0].layflag |= rl->layflag; | ||||
| ssamp.shi[0].passflag |= rl->passflag; | ssamp.shi[0].passflag |= rl->passflag; | ||||
| ssamp.shi[0].combinedflag |= ~rl->pass_xor; | ssamp.shi[0].combinedflag |= ~rl->pass_xor; | ||||
| } | } | ||||
| rl= rr->layers.first; | rl= rr->layers.first; | ||||
| ssamp.shi[0].passflag |= SCE_PASS_RGBA|SCE_PASS_COMBINED; | ssamp.shi[0].passflag |= SCE_PASS_RGBA|SCE_PASS_COMBINED; | ||||
| ssamp.shi[0].combinedflag &= ~(SCE_PASS_SPEC); | ssamp.shi[0].combinedflag &= ~(SCE_PASS_SPEC); | ||||
| ssamp.shi[0].mat_override= NULL; | |||||
| ssamp.shi[0].light_override= NULL; | |||||
| lay= ssamp.shi[0].lay; | lay= ssamp.shi[0].lay; | ||||
| /* create the pixelstrs to be used later */ | /* create the pixelstrs to be used later */ | ||||
| zbuffer_sss(pa, lay, &handle, addps_sss); | zbuffer_sss(pa, lay, &handle, addps_sss); | ||||
| if (handle.totps==0) { | if (handle.totps==0) { | ||||
| zbufshade_sss_free(pa); | zbufshade_sss_free(pa); | ||||
| return; | return; | ||||
| ▲ Show 20 Lines • Show All 300 Lines • ▼ Show 20 Lines | for (rl= rr->layers.first; rl; rl= rl->next) { | ||||
| mode= R.r.mode; | mode= R.r.mode; | ||||
| R.r.mode &= ~R_PANORAMA; | R.r.mode &= ~R_PANORAMA; | ||||
| project_renderdata(&R, projectverto, 0, 0, 0); | project_renderdata(&R, projectverto, 0, 0, 0); | ||||
| for (a=0; a<R.tothalo; a++) { | for (a=0; a<R.tothalo; a++) { | ||||
| har= R.sortedhalos[a]; | har= R.sortedhalos[a]; | ||||
| if (har->flarec && (har->lay & rl->lay)) { | if (har->flarec && (har->lay & ((1 << 20) - 1))) { | ||||
| do_draw = true; | do_draw = true; | ||||
| renderflare(rr, rect, har); | renderflare(rr, rect, har); | ||||
| } | } | ||||
| } | } | ||||
| if (do_draw) { | if (do_draw) { | ||||
| /* weak... the display callback wants an active renderlayer pointer... */ | /* weak... the display callback wants an active renderlayer pointer... */ | ||||
| rr->renlay= rl; | rr->renlay= rl; | ||||
| re->display_update(re->duh, rr, NULL); | re->display_update(re->duh, rr, NULL); | ||||
| } | } | ||||
| R.r.mode= mode; | R.r.mode= mode; | ||||
| } | } | ||||
| } | } | ||||
| void render_internal_update_passes(RenderEngine *engine, Scene *scene, SceneRenderLayer *srl) | void render_internal_update_passes(RenderEngine *engine, Scene *scene, SceneLayer *scene_layer) | ||||
| { | { | ||||
| int type; | int type; | ||||
| RE_engine_register_pass(engine, scene, srl, RE_PASSNAME_COMBINED, 4, "RGBA", SOCK_RGBA); | RE_engine_register_pass(engine, scene, scene_layer, RE_PASSNAME_COMBINED, 4, "RGBA", SOCK_RGBA); | ||||
| #define CHECK_PASS(name, channels, chanid) \ | #define CHECK_PASS(name, channels, chanid) \ | ||||
| if (srl->passflag & (SCE_PASS_ ## name)) { \ | if (scene_layer->passflag & (SCE_PASS_ ## name)) { \ | ||||
| if (channels == 4) type = SOCK_RGBA; \ | if (channels == 4) type = SOCK_RGBA; \ | ||||
| else if (channels == 3) type = SOCK_VECTOR; \ | else if (channels == 3) type = SOCK_VECTOR; \ | ||||
| else type = SOCK_FLOAT; \ | else type = SOCK_FLOAT; \ | ||||
| RE_engine_register_pass(engine, scene, srl, RE_PASSNAME_ ## name, channels, chanid, type); \ | RE_engine_register_pass(engine, scene, scene_layer, RE_PASSNAME_ ## name, channels, chanid, type); \ | ||||
| } | } | ||||
| CHECK_PASS(Z, 1, "Z"); | CHECK_PASS(Z, 1, "Z"); | ||||
| CHECK_PASS(VECTOR, 4, "XYZW"); | CHECK_PASS(VECTOR, 4, "XYZW"); | ||||
| CHECK_PASS(NORMAL, 3, "XYZ"); | CHECK_PASS(NORMAL, 3, "XYZ"); | ||||
| CHECK_PASS(UV, 3, "UVA"); | CHECK_PASS(UV, 3, "UVA"); | ||||
| CHECK_PASS(RGBA, 4, "RGBA"); | CHECK_PASS(RGBA, 4, "RGBA"); | ||||
| CHECK_PASS(EMIT, 3, "RGB"); | CHECK_PASS(EMIT, 3, "RGB"); | ||||
| Show All 14 Lines | |||||