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:
authorCampbell Barton <ideasman42@gmail.com>2017-04-26 19:04:56 +0300
committerCampbell Barton <ideasman42@gmail.com>2017-04-26 19:04:56 +0300
commitedd1512741f9a8fd9c3d93f47ccf367932cff32a (patch)
treebf06f51326bc58ff94994c262d79d89c90b1c47a
parent7631f4bf6dc848c9df28dda60d0aff9bdf26b53e (diff)
Draw Manager: cleanup, use doxy categories
Also add DRW_state for accessing current draw state.
-rw-r--r--source/blender/draw/engines/clay/clay_engine.c6
-rw-r--r--source/blender/draw/engines/select/select_engine.c4
-rw-r--r--source/blender/draw/intern/DRW_render.h9
-rw-r--r--source/blender/draw/intern/draw_armature.c4
-rw-r--r--source/blender/draw/intern/draw_manager.c169
-rw-r--r--source/blender/draw/modes/object_mode.c6
-rw-r--r--source/blender/editors/space_view3d/view3d_view.c12
7 files changed, 153 insertions, 57 deletions
diff --git a/source/blender/draw/engines/clay/clay_engine.c b/source/blender/draw/engines/clay/clay_engine.c
index a5dc855089e..d387adb9054 100644
--- a/source/blender/draw/engines/clay/clay_engine.c
+++ b/source/blender/draw/engines/clay/clay_engine.c
@@ -335,7 +335,7 @@ static void CLAY_engine_init(void *vedata)
}
}
- if (DRW_viewport_is_fbo()) {
+ if (DRW_state_is_fbo()) {
const float *viewport_size = DRW_viewport_size_get();
DRWFboTexture tex = {&txl->depth_dup, DRW_BUF_DEPTH_24, 0};
DRW_framebuffer_init(&fbl->dupli_depth,
@@ -358,7 +358,7 @@ static void CLAY_engine_init(void *vedata)
int i;
const float *size = DRW_viewport_size_get();
- DRW_get_dfdy_factors(dfdyfacs);
+ DRW_state_dfdy_factors_get(dfdyfacs);
e_data.ssao_params[0] = ssao_samples;
e_data.ssao_params[1] = size[0] / 64.0;
@@ -607,7 +607,7 @@ static void CLAY_draw_scene(void *vedata)
/* Pass 2 : Duplicate depth */
/* Unless we go for deferred shading we need this to avoid manual depth test and artifacts */
- if (DRW_viewport_is_fbo()) {
+ if (DRW_state_is_fbo()) {
DRW_framebuffer_blit(dfbl->default_fb, fbl->dupli_depth, true);
}
diff --git a/source/blender/draw/engines/select/select_engine.c b/source/blender/draw/engines/select/select_engine.c
index e5bce1ad65a..6687a7be927 100644
--- a/source/blender/draw/engines/select/select_engine.c
+++ b/source/blender/draw/engines/select/select_engine.c
@@ -128,7 +128,7 @@ static void SELECT_engine_init(void *vedata)
}
#ifdef USE_DEPTH
- if (DRW_viewport_is_fbo()) {
+ if (DRW_state_is_fbo()) {
const float *viewport_size = DRW_viewport_size_get();
DRWFboTexture tex = {&txl->depth_dup, DRW_BUF_DEPTH_24, 0};
DRW_framebuffer_init(&fbl->dupli_depth,
@@ -208,7 +208,7 @@ static void SELECT_draw_scene(void *vedata)
/* Pass 2 : Duplicate depth */
/* Unless we go for deferred shading we need this to avoid manual depth test and artifacts */
- if (DRW_viewport_is_fbo()) {
+ if (DRW_state_is_fbo()) {
DRW_framebuffer_blit(dfbl->default_fb, fbl->dupli_depth, true);
}
#endif
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 8b61caf545c..a5b193483ce 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -295,9 +295,6 @@ const float *DRW_viewport_size_get(void);
const float *DRW_viewport_screenvecs_get(void);
const float *DRW_viewport_pixelsize_get(void);
bool DRW_viewport_is_persp_get(void);
-bool DRW_viewport_is_fbo(void);
-bool DRW_viewport_is_select(void);
-bool DRW_viewport_cache_is_dirty(void);
struct DefaultFramebufferList *DRW_viewport_framebuffer_list_get(void);
struct DefaultTextureList *DRW_viewport_texture_list_get(void);
@@ -321,8 +318,10 @@ void DRW_state_reset(void);
/* Selection */
void DRW_select_load_id(unsigned int id);
-/* Other */
-void DRW_get_dfdy_factors(float dfdyfac[2]);
+/* Draw State */
+void DRW_state_dfdy_factors_get(float dfdyfac[2]);
+bool DRW_state_is_fbo(void);
+bool DRW_state_is_select(void);
/* Avoid too many lookups while drawing */
typedef struct DRWContextState {
diff --git a/source/blender/draw/intern/draw_armature.c b/source/blender/draw/intern/draw_armature.c
index 017528d1990..8e5a6dafb21 100644
--- a/source/blender/draw/intern/draw_armature.c
+++ b/source/blender/draw/intern/draw_armature.c
@@ -359,7 +359,7 @@ static void draw_armature_edit(Object *ob)
EditBone *eBone;
bArmature *arm = ob->data;
int index;
- const bool is_select = DRW_viewport_is_select();
+ const bool is_select = DRW_state_is_select();
update_color(NULL);
@@ -421,7 +421,7 @@ static void draw_armature_pose(Object *ob, const float const_color[4])
}
}
- bool is_pose_select = (arm->flag & ARM_POSEMODE) && DRW_viewport_is_select();
+ bool is_pose_select = (arm->flag & ARM_POSEMODE) && DRW_state_is_select();
/* being set below */
arm->layer_used = 0;
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 0ee69e92375..c3c08779178 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -245,7 +245,12 @@ void DRW_select_load_id(unsigned int id)
}
#endif
-/* ***************************************** TEXTURES ******************************************/
+
+/* -------------------------------------------------------------------- */
+
+/** \name Textures (DRW_texture)
+ * \{ */
+
static void drw_texture_get_format(DRWTextureFormat format, GPUTextureFormat *data_type, int *channels)
{
switch (format) {
@@ -372,8 +377,13 @@ void DRW_texture_free(GPUTexture *tex)
GPU_texture_free(tex);
}
+/** \} */
-/* ************************************ UNIFORM BUFFER OBJECT **********************************/
+
+/* -------------------------------------------------------------------- */
+
+/** \name Uniform Buffer Object (DRW_uniformbuffer)
+ * \{ */
GPUUniformBuffer *DRW_uniformbuffer_create(int size, const void *data)
{
@@ -390,7 +400,13 @@ void DRW_uniformbuffer_free(GPUUniformBuffer *ubo)
GPU_uniformbuffer_free(ubo);
}
-/* ****************************************** SHADERS ******************************************/
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Shaders (DRW_shader)
+ * \{ */
GPUShader *DRW_shader_create(const char *vert, const char *geom, const char *frag, const char *defines)
{
@@ -461,7 +477,13 @@ void DRW_shader_free(GPUShader *shader)
GPU_shader_free(shader);
}
-/* ***************************************** INTERFACE ******************************************/
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Interface (DRW_interface)
+ * \{ */
static DRWInterface *DRW_interface_create(GPUShader *shader)
{
@@ -553,12 +575,13 @@ static void DRW_interface_attrib(DRWShadingGroup *shgroup, const char *name, DRW
BLI_addtail(&shgroup->interface->attribs, attrib);
}
-void DRW_get_dfdy_factors(float dfdyfac[2])
-{
- GPU_get_dfdy_factors(dfdyfac);
-}
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
-/* ***************************************** SHADING GROUP ******************************************/
+/** \name Shading Group (DRW_shgroup)
+ * \{ */
DRWShadingGroup *DRW_shgroup_create(struct GPUShader *shader, DRWPass *pass)
{
@@ -874,7 +897,13 @@ static void shgroup_dynamic_batch_from_calls(DRWShadingGroup *shgroup)
}
#endif /* WITH_CLAY_ENGINE */
-/* ***************************************** PASSES ******************************************/
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Passes (DRW_pass)
+ * \{ */
DRWPass *DRW_pass_create(const char *name, DRWState state)
{
@@ -897,7 +926,13 @@ void DRW_pass_free(DRWPass *pass)
BLI_freelistN(&pass->shgroups);
}
-/* ****************************************** DRAW ******************************************/
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Draw (DRW_draw)
+ * \{ */
#ifdef WITH_CLAY_ENGINE
static void set_state(DRWState flag, const bool reset)
@@ -1164,7 +1199,7 @@ static void draw_shgroup(DRWShadingGroup *shgroup)
GPU_shader_uniform_texture(shgroup->shader, uni->location, tex);
break;
case DRW_UNIFORM_BUFFER:
- if (!DRW_viewport_is_fbo()) {
+ if (!DRW_state_is_fbo()) {
break;
}
tex = *((GPUTexture **)uni->value);
@@ -1313,8 +1348,13 @@ void DRW_state_reset(void) {}
#endif /* WITH_CLAY_ENGINE */
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
-/* ****************************************** Settings ******************************************/
+/** \name Settings
+ * \{ */
bool DRW_is_object_renderable(Object *ob)
{
@@ -1334,7 +1374,13 @@ bool DRW_is_object_renderable(Object *ob)
return true;
}
-/* ****************************************** Framebuffers ******************************************/
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Framebuffers (DRW_framebuffer)
+ * \{ */
static GPUTextureFormat convert_tex_format(int fbo_format, int *channels, bool *is_depth)
{
@@ -1448,7 +1494,13 @@ void DRW_framebuffer_viewport_size(struct GPUFrameBuffer *UNUSED(fb_read), int w
glViewport(0, 0, w, h);
}
-/* ****************************************** Viewport ******************************************/
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Viewport (DRW_viewport)
+ * \{ */
static void *DRW_viewport_engine_data_get(void *engine_type)
{
@@ -1549,23 +1601,6 @@ bool DRW_viewport_is_persp_get(void)
return rv3d->is_persp;
}
-/**
- * When false, drawing doesn't output to a pixel buffer
- * eg: Occlusion queries, or when we have setup a context to draw in already.
- */
-bool DRW_viewport_is_fbo(void)
-{
- return (DST.default_framebuffer != NULL);
-}
-
-/**
- * For when engines need to know if this is drawing for selection or not.
- */
-bool DRW_viewport_is_select(void)
-{
- return (G.f & G_PICKSEL) != 0;
-}
-
DefaultFramebufferList *DRW_viewport_framebuffer_list_get(void)
{
return GPU_viewport_framebuffer_list_get(DST.viewport);
@@ -1576,7 +1611,13 @@ DefaultTextureList *DRW_viewport_texture_list_get(void)
return GPU_viewport_texture_list_get(DST.viewport);
}
-/* **************************************** OBJECTS *************************************** */
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Objects (DRW_object)
+ * \{ */
typedef struct ObjectEngineData {
struct ObjectEngineData *next, *prev;
@@ -1627,7 +1668,13 @@ void DRW_lamp_engine_data_free(LampEngineData *led)
GPU_lamp_engine_data_free(led);
}
-/* **************************************** RENDERING ************************************** */
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Rendering (DRW_engines)
+ * \{ */
#define TIMER_FALLOFF 0.1f
@@ -1971,6 +2018,12 @@ static void DRW_debug_gpu_stats(void)
draw_stat(&rect, 0, v, pass_name, sizeof(pass_name));
}
+
+/* -------------------------------------------------------------------- */
+
+/** \name Main Draw Loops (DRW_draw)
+ * \{ */
+
/* Everything starts here.
* This function takes care of calling all cache and rendering functions
* for each relevant engine / mode engine. */
@@ -2225,7 +2278,43 @@ void DRW_draw_depth_loop(
rv3d->viewport = backup_viewport;
}
-/* ****************************************** OTHER ***************************************** */
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Draw Manager State (DRW_state)
+ * \{ */
+
+void DRW_state_dfdy_factors_get(float dfdyfac[2])
+{
+ GPU_get_dfdy_factors(dfdyfac);
+}
+
+/**
+ * When false, drawing doesn't output to a pixel buffer
+ * eg: Occlusion queries, or when we have setup a context to draw in already.
+ */
+bool DRW_state_is_fbo(void)
+{
+ return (DST.default_framebuffer != NULL);
+}
+
+/**
+ * For when engines need to know if this is drawing for selection or not.
+ */
+bool DRW_state_is_select(void)
+{
+ return (G.f & G_PICKSEL) != 0;
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Context State (DRW_context_state)
+ * \{ */
void DRW_context_state_init(const bContext *C, DRWContextState *r_draw_ctx)
{
@@ -2245,7 +2334,13 @@ const DRWContextState *DRW_context_state_get(void)
return &DST.draw_ctx;
}
-/* ****************************************** INIT ***************************************** */
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Init/Exit (DRW_engines)
+ * \{ */
void DRW_engine_register(DrawEngineType *draw_engine_type)
{
@@ -2319,3 +2414,5 @@ void DRW_engines_free(void)
BLI_remlink(&R_engines, &DRW_engine_viewport_clay_type);
#endif
}
+
+/** \} */
diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index 7ef188d70a3..771b9d583b7 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -220,7 +220,7 @@ static void OBJECT_engine_init(void *vedata)
{&txl->outlines_color_tx, DRW_BUF_RGBA_8, DRW_TEX_FILTER},
};
- if (DRW_viewport_is_fbo()) {
+ if (DRW_state_is_fbo()) {
DRW_framebuffer_init(
&fbl->outlines,
(int)viewport_size[0], (int)viewport_size[1],
@@ -1271,7 +1271,7 @@ static void OBJECT_draw_scene(void *vedata)
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
float clearcol[4] = {0.0f, 0.0f, 0.0f, 0.0f};
- if (DRW_viewport_is_fbo()) {
+ if (DRW_state_is_fbo()) {
/* Render filled polygon on a separate framebuffer */
DRW_framebuffer_bind(fbl->outlines);
DRW_framebuffer_clear(true, true, false, clearcol, 1.0f);
@@ -1314,7 +1314,7 @@ static void OBJECT_draw_scene(void *vedata)
DRW_draw_pass(psl->non_meshes);
DRW_draw_pass(psl->ob_center);
- if (!DRW_viewport_is_select()) {
+ if (!DRW_state_is_select()) {
DRW_draw_pass(psl->grid);
/* Combine with scene buffer last */
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index d7eeb6fd1b3..b92431e6370 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -1189,11 +1189,11 @@ int view3d_opengl_select(
if (IS_VIEWPORT_LEGACY(vc->v3d)) {
ED_view3d_draw_select_loop(vc, scene, sl, v3d, ar, use_obedit_skip, use_nearest);
}
- else {
+ else
+#else
+ {
DRW_draw_select_loop(vc, graph, scene, sl, v3d, ar, use_obedit_skip, use_nearest, &rect);
}
-#else
- DRW_draw_select_loop(vc, graph, scene, sl, v3d, ar, use_obedit_skip, use_nearest, &rect);
#endif /* WITH_OPENGL_LEGACY */
hits = GPU_select_end();
@@ -1206,11 +1206,11 @@ int view3d_opengl_select(
if (IS_VIEWPORT_LEGACY(vc->v3d)) {
ED_view3d_draw_select_loop(vc, scene, sl, v3d, ar, use_obedit_skip, use_nearest);
}
- else {
+ else
+#else
+ {
DRW_draw_select_loop(vc, graph, scene, sl, v3d, ar, use_obedit_skip, use_nearest, &rect);
}
-#else
- DRW_draw_select_loop(vc, graph, scene, sl, v3d, ar, use_obedit_skip, use_nearest, &rect);
#endif /* WITH_OPENGL_LEGACY */
GPU_select_end();