Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_view3d/view3d_draw.c
| Context not available. | |||||
| #include "GPU_draw.h" | #include "GPU_draw.h" | ||||
| #include "GPU_framebuffer.h" | #include "GPU_framebuffer.h" | ||||
| #include "GPU_shader.h" | |||||
| #include "GPU_material.h" | #include "GPU_material.h" | ||||
| #include "GPU_compositing.h" | #include "GPU_compositing.h" | ||||
| #include "GPU_extensions.h" | #include "GPU_extensions.h" | ||||
| Context not available. | |||||
| } | } | ||||
| if (!rv3d->gpuoffscreen) { | if (!rv3d->gpuoffscreen) { | ||||
| rv3d->gpuoffscreen = GPU_offscreen_create(w, h, 0, error); | rv3d->gpuoffscreen = GPU_offscreen_create(w, h, 0, GPU_HDR_NONE, GPU_OFFSCREEN_DEPTH_COMPARE, error); | ||||
| if (!rv3d->gpuoffscreen) | if (!rv3d->gpuoffscreen) | ||||
| fprintf(stderr, "Failed to create offscreen selection buffer for multisample: %s\n", error); | fprintf(stderr, "Failed to create offscreen selection buffer for multisample: %s\n", error); | ||||
| Context not available. | |||||
| int drawtype, lay, winsize, flag2 = v3d->flag2; | int drawtype, lay, winsize, flag2 = v3d->flag2; | ||||
| ARegion ar = {NULL}; | ARegion ar = {NULL}; | ||||
| RegionView3D rv3d = {{{0}}}; | RegionView3D rv3d = {{{0}}}; | ||||
| bool vsm = GPU_lamp_shadow_buffer_type(shadow->lamp) == LA_SHADMAP_VARIANCE; | |||||
| drawtype = v3d->drawtype; | drawtype = v3d->drawtype; | ||||
| lay = v3d->lay; | lay = v3d->lay; | ||||
| Context not available. | |||||
| v3d->lay &= GPU_lamp_shadow_layer(shadow->lamp); | v3d->lay &= GPU_lamp_shadow_layer(shadow->lamp); | ||||
| v3d->flag2 &= ~(V3D_SOLID_TEX | V3D_SHOW_SOLID_MATCAP); | v3d->flag2 &= ~(V3D_SOLID_TEX | V3D_SHOW_SOLID_MATCAP); | ||||
| v3d->flag2 |= V3D_RENDER_OVERRIDE | V3D_RENDER_SHADOW; | v3d->flag2 |= V3D_RENDER_OVERRIDE | V3D_RENDER_SHADOW; | ||||
| if (vsm) { | |||||
| GPU_shader_bind(GPU_shader_get_builtin_shader(GPU_SHADER_VSM_STORE)); | |||||
| } | |||||
| GPU_lamp_shadow_buffer_bind(shadow->lamp, viewmat, &winsize, winmat); | GPU_lamp_shadow_buffer_bind(shadow->lamp, viewmat, &winsize, winmat); | ||||
| ar.regiondata = &rv3d; | ar.regiondata = &rv3d; | ||||
| Context not available. | |||||
| scene, v3d, &ar, winsize, winsize, viewmat, winmat, | scene, v3d, &ar, winsize, winsize, viewmat, winmat, | ||||
| false, false, true, | false, false, true, | ||||
| NULL, NULL, NULL, NULL); | NULL, NULL, NULL, NULL); | ||||
| if (vsm) { | |||||
| GPU_shader_unbind(); | |||||
| } | |||||
| GPU_lamp_shadow_buffer_unbind(shadow->lamp); | GPU_lamp_shadow_buffer_unbind(shadow->lamp); | ||||
| v3d->drawtype = drawtype; | v3d->drawtype = drawtype; | ||||
| Context not available. | |||||
| GPU_horizon_update_color(&world->horr); | GPU_horizon_update_color(&world->horr); | ||||
| GPU_ambient_update_color(&world->ambr); | GPU_ambient_update_color(&world->ambr); | ||||
| GPU_zenith_update_color(&world->zenr); | GPU_zenith_update_color(&world->zenr); | ||||
| GPU_update_exposure_range(world->exp, world->range); | |||||
| } | } | ||||
| } | } | ||||
| Context not available. | |||||
| mask |= CD_MASK_ORCO; | mask |= CD_MASK_ORCO; | ||||
| } | } | ||||
| else { | else { | ||||
| if ((scene->gm.matmode == GAME_MAT_GLSL && drawtype == OB_TEXTURE) || | if ((drawtype == OB_TEXTURE) || | ||||
| (drawtype == OB_MATERIAL)) | (drawtype == OB_MATERIAL)) | ||||
| { | { | ||||
| mask |= CD_MASK_ORCO; | mask |= CD_MASK_ORCO; | ||||
| Context not available. | |||||
| RegionView3D *rv3d = ar->regiondata; | RegionView3D *rv3d = ar->regiondata; | ||||
| GPUMaterial *gpumat = GPU_material_world(scene, scene->world); | GPUMaterial *gpumat = GPU_material_world(scene, scene->world); | ||||
| /* calculate full shader for background */ | /* calculate full shader for background */ | ||||
| GPU_material_bind(gpumat, 1, 1, 1.0, false, rv3d->viewmat, rv3d->viewinv, rv3d->viewcamtexcofac, (v3d->scenelock != 0)); | GPU_material_bind(gpumat, 1, 1, 1.0, true, rv3d->viewmat, rv3d->viewinv, rv3d->viewcamtexcofac, (v3d->scenelock != 0)); | ||||
| bool material_not_bound = !GPU_material_bound(gpumat); | bool material_not_bound = !GPU_material_bound(gpumat); | ||||
| if (material_not_bound) { | if (material_not_bound) { | ||||
| Context not available. | |||||
| if (own_ofs) { | if (own_ofs) { | ||||
| /* bind */ | /* bind */ | ||||
| ofs = GPU_offscreen_create(sizex, sizey, full_samples ? 0 : samples, err_out); | ofs = GPU_offscreen_create(sizex, sizey, full_samples ? 0 : samples, GPU_HDR_NONE, GPU_OFFSCREEN_DEPTH_COMPARE, err_out); | ||||
| if (ofs == NULL) { | if (ofs == NULL) { | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| Context not available. | |||||