Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/draw/engines/basic/basic_engine.c')
-rw-r--r--source/blender/draw/engines/basic/basic_engine.c69
1 files changed, 5 insertions, 64 deletions
diff --git a/source/blender/draw/engines/basic/basic_engine.c b/source/blender/draw/engines/basic/basic_engine.c
index 5a315cde2b5..57553d98d5d 100644
--- a/source/blender/draw/engines/basic/basic_engine.c
+++ b/source/blender/draw/engines/basic/basic_engine.c
@@ -42,9 +42,6 @@
#define BASIC_ENGINE "BLENDER_BASIC"
-/* we may want this later? */
-#define USE_DEPTH
-
/* *********** LISTS *********** */
/* GPUViewport.storage
@@ -54,11 +51,8 @@ typedef struct BASIC_StorageList {
} BASIC_StorageList;
typedef struct BASIC_PassList {
-#ifdef USE_DEPTH
struct DRWPass *depth_pass;
struct DRWPass *depth_pass_cull;
-#endif
- struct DRWPass *color_pass;
} BASIC_PassList;
typedef struct BASIC_Data {
@@ -72,38 +66,24 @@ typedef struct BASIC_Data {
/* *********** STATIC *********** */
static struct {
-#ifdef USE_DEPTH
/* Depth Pre Pass */
struct GPUShader *depth_sh;
-#endif
- /* Shading Pass */
- struct GPUShader *color_sh;
} e_data = {NULL}; /* Engine data */
typedef struct BASIC_PrivateData {
-#ifdef USE_DEPTH
DRWShadingGroup *depth_shgrp;
DRWShadingGroup *depth_shgrp_cull;
DRWShadingGroup *depth_shgrp_hair;
-#endif
- DRWShadingGroup *color_shgrp;
} BASIC_PrivateData; /* Transient data */
/* Functions */
static void basic_engine_init(void *UNUSED(vedata))
{
-#ifdef USE_DEPTH
/* Depth prepass */
if (!e_data.depth_sh) {
e_data.depth_sh = DRW_shader_create_3D_depth_only();
}
-#endif
-
- /* Shading pass */
- if (!e_data.color_sh) {
- e_data.color_sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
- }
}
static void basic_cache_init(void *vedata)
@@ -116,8 +96,6 @@ static void basic_cache_init(void *vedata)
stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
}
-#ifdef USE_DEPTH
- /* Depth Pass */
{
psl->depth_pass = DRW_pass_create(
"Depth Pass", DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_WIRE);
@@ -128,13 +106,6 @@ static void basic_cache_init(void *vedata)
DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_CULL_BACK);
stl->g_data->depth_shgrp_cull = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass_cull);
}
-#endif
-
- /* Color Pass */
- {
- psl->color_pass = DRW_pass_create("Color Pass", DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL);
- stl->g_data->color_shgrp = DRW_shgroup_create(e_data.color_sh, psl->color_pass);
- }
}
static void basic_cache_populate(void *vedata, Object *ob)
@@ -160,21 +131,17 @@ static void basic_cache_populate(void *vedata, Object *ob)
ParticleSettings *part = psys->part;
const int draw_as = (part->draw_as == PART_DRAW_REND) ? part->ren_as : part->draw_as;
if (draw_as == PART_DRAW_PATH) {
- struct Gwn_Batch *hairs = DRW_cache_particles_get_hair(ob, psys, NULL);
+ struct GPUBatch *hairs = DRW_cache_particles_get_hair(ob, psys, NULL);
DRW_shgroup_call_add(stl->g_data->depth_shgrp, hairs, NULL);
}
}
}
- struct Gwn_Batch *geom = DRW_cache_object_surface_get(ob);
+ struct GPUBatch *geom = DRW_cache_object_surface_get(ob);
if (geom) {
- bool do_cull = false; /* TODO (we probably wan't to take this from the viewport?) */
-#ifdef USE_DEPTH
+ const bool do_cull = (draw_ctx->v3d && (draw_ctx->v3d->flag2 & V3D_BACKFACE_CULLING));
/* Depth Prepass */
DRW_shgroup_call_add((do_cull) ? stl->g_data->depth_shgrp_cull : stl->g_data->depth_shgrp, geom, ob->obmat);
-#endif
- /* Shading */
- DRW_shgroup_call_add(stl->g_data->color_shgrp, geom, ob->obmat);
}
}
@@ -187,36 +154,10 @@ static void basic_cache_finish(void *vedata)
static void basic_draw_scene(void *vedata)
{
-
BASIC_PassList *psl = ((BASIC_Data *)vedata)->psl;
- const bool is_select = DRW_state_is_select();
-
- bool use_color = true;
- bool use_depth = true;
- bool use_depth_cull = true;
- if (is_select) {
- /* Needed for depth-picking,
- * for other selection types there are no need for extra passes either. */
- use_color = false;
- use_depth_cull = false;
- }
-
-#ifdef USE_DEPTH
- /* Pass 1 : Depth pre-pass */
- if (use_depth) {
- DRW_draw_pass(psl->depth_pass);
- }
-
- if (use_depth_cull) {
- DRW_draw_pass(psl->depth_pass_cull);
- }
-#endif
-
- /* Pass 3 : Shading */
- if (use_color) {
- DRW_draw_pass(psl->color_pass);
- }
+ DRW_draw_pass(psl->depth_pass);
+ DRW_draw_pass(psl->depth_pass_cull);
}
static void basic_engine_free(void)