[Bf-blender-cvs] [0df21e2504e] blender2.8: DRW: Refactor & Split draw_manager.c into multiple files.
Clément Foucault
noreply at git.blender.org
Wed Feb 28 01:39:20 CET 2018
Commit: 0df21e2504eeba504c201b4842415885ad5e8c91
Author: Clément Foucault
Date: Wed Feb 28 01:16:23 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB0df21e2504eeba504c201b4842415885ad5e8c91
DRW: Refactor & Split draw_manager.c into multiple files.
Refactor include:
- Removal of DRWInterface. (was useless)
- Split DRWCallHeader into a new struct DRWCallState that will be reused in the future.
- Use BLI_link_utils for APPEND/PREPEND.
- Creation of the new DRWManager struct type. This will enable us to create more than one manager in the future.
- Removal of some dead code.
===================================================================
M source/blender/draw/CMakeLists.txt
M source/blender/draw/intern/DRW_render.h
M source/blender/draw/intern/draw_manager.c
A source/blender/draw/intern/draw_manager.h
A source/blender/draw/intern/draw_manager_data.c
A source/blender/draw/intern/draw_manager_exec.c
A source/blender/draw/intern/draw_manager_framebuffer.c
M source/blender/draw/intern/draw_manager_profiling.c
A source/blender/draw/intern/draw_manager_shader.c
A source/blender/draw/intern/draw_manager_texture.c
===================================================================
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 51b3db695c2..ba2aa0448fd 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -64,7 +64,12 @@ set(SRC
intern/draw_common.c
intern/draw_instance_data.c
intern/draw_manager.c
+ intern/draw_manager_data.c
+ intern/draw_manager_exec.c
+ intern/draw_manager_framebuffer.c
+ intern/draw_manager_shader.c
intern/draw_manager_text.c
+ intern/draw_manager_texture.c
intern/draw_manager_profiling.c
intern/draw_view.c
modes/edit_armature_mode.c
@@ -108,6 +113,7 @@ set(SRC
intern/draw_cache_impl.h
intern/draw_common.h
intern/draw_instance_data.h
+ intern/draw_manager.h
intern/draw_manager_text.h
intern/draw_manager_profiling.h
intern/draw_view.h
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 203fb80c0a0..2a119651ffd 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -288,7 +288,7 @@ typedef enum {
DRW_STATE_CULL_BACK = (1 << 6),
DRW_STATE_CULL_FRONT = (1 << 7),
DRW_STATE_WIRE = (1 << 8),
- DRW_STATE_WIRE_LARGE = (1 << 9),
+// DRW_STATE_WIRE_LARGE = (1 << 9), /* Removed from ogl in 3.0 */
DRW_STATE_POINT = (1 << 10),
DRW_STATE_STIPPLE_2 = (1 << 11),
DRW_STATE_STIPPLE_3 = (1 << 12),
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index baa76518270..7e0536c0d25 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -29,2140 +29,68 @@
#include "BLI_mempool.h"
#include "BLI_rect.h"
#include "BLI_string.h"
-#include "BLI_string_utils.h"
#include "BLI_threads.h"
-#include "BIF_glutil.h"
-
-#include "BKE_curve.h"
-#include "BKE_global.h"
-#include "BKE_mesh.h"
-#include "BKE_object.h"
-#include "BKE_pbvh.h"
-#include "BKE_paint.h"
-#include "BKE_workspace.h"
-
-#include "BLT_translation.h"
-#include "BLF_api.h"
-
-#include "DRW_engine.h"
-#include "DRW_render.h"
-
-#include "DNA_camera_types.h"
-#include "DNA_curve_types.h"
-#include "DNA_view3d_types.h"
-#include "DNA_screen_types.h"
-#include "DNA_mesh_types.h"
-#include "DNA_meshdata_types.h"
-#include "DNA_meta_types.h"
-
-#include "ED_space_api.h"
-#include "ED_screen.h"
-
-#include "intern/gpu_codegen.h"
-#include "GPU_batch.h"
-#include "GPU_draw.h"
-#include "GPU_extensions.h"
-#include "GPU_framebuffer.h"
-#include "GPU_immediate.h"
-#include "GPU_lamp.h"
-#include "GPU_material.h"
-#include "GPU_shader.h"
-#include "GPU_texture.h"
-#include "GPU_uniformbuffer.h"
-#include "GPU_viewport.h"
-#include "GPU_matrix.h"
-
-#include "IMB_colormanagement.h"
-
-#include "RE_engine.h"
-#include "RE_pipeline.h"
-
-#include "UI_interface.h"
-#include "UI_resources.h"
-
-#include "WM_api.h"
-#include "WM_types.h"
-#include "wm_window.h"
-
-#include "draw_manager_text.h"
-#include "draw_manager_profiling.h"
-
-/* only for callbacks */
-#include "draw_cache_impl.h"
-
-#include "draw_instance_data.h"
-
-#include "draw_mode_engines.h"
-#include "engines/clay/clay_engine.h"
-#include "engines/eevee/eevee_engine.h"
-#include "engines/basic/basic_engine.h"
-#include "engines/external/external_engine.h"
-
-#include "../../../intern/gawain/gawain/gwn_context.h"
-
-#include "DEG_depsgraph.h"
-#include "DEG_depsgraph_query.h"
-
-/* -------------------------------------------------------------------- */
-/** \name Local Features
- * \{ */
-
-#define USE_PROFILE
-
-#ifdef USE_PROFILE
-# include "PIL_time.h"
-
-# define PROFILE_TIMER_FALLOFF 0.1
-
-# define PROFILE_START(time_start) \
- double time_start = PIL_check_seconds_timer();
-
-# define PROFILE_END_ACCUM(time_accum, time_start) { \
- time_accum += (PIL_check_seconds_timer() - time_start) * 1e3; \
-} ((void)0)
-
-/* exp average */
-# define PROFILE_END_UPDATE(time_update, time_start) { \
- double _time_delta = (PIL_check_seconds_timer() - time_start) * 1e3; \
- time_update = (time_update * (1.0 - PROFILE_TIMER_FALLOFF)) + \
- (_time_delta * PROFILE_TIMER_FALLOFF); \
-} ((void)0)
-
-#else /* USE_PROFILE */
-
-# define PROFILE_START(time_start) ((void)0)
-# define PROFILE_END_ACCUM(time_accum, time_start) ((void)0)
-# define PROFILE_END_UPDATE(time_update, time_start) ((void)0)
-
-#endif /* USE_PROFILE */
-
-
-/* Use draw manager to call GPU_select, see: DRW_draw_select_loop */
-#define USE_GPU_SELECT
-
-#ifdef USE_GPU_SELECT
-# include "ED_view3d.h"
-# include "ED_armature.h"
-# include "GPU_select.h"
-#endif
-
-/** \} */
-
-
-#define MAX_ATTRIB_NAME 32
-#define MAX_ATTRIB_COUNT 6 /* Can be adjusted for more */
-#define MAX_PASS_NAME 32
-#define MAX_CLIP_PLANES 6 /* GL_MAX_CLIP_PLANES is at least 6 */
-
-extern char datatoc_gpu_shader_2D_vert_glsl[];
-extern char datatoc_gpu_shader_3D_vert_glsl[];
-extern char datatoc_gpu_shader_fullscreen_vert_glsl[];
-
-/* Prototypes. */
-static void drw_engines_enable_external(void);
-
-/* Structures */
-typedef enum {
- DRW_UNIFORM_BOOL,
- DRW_UNIFORM_SHORT_TO_INT,
- DRW_UNIFORM_SHORT_TO_FLOAT,
- DRW_UNIFORM_INT,
- DRW_UNIFORM_FLOAT,
- DRW_UNIFORM_TEXTURE,
- DRW_UNIFORM_BUFFER,
- DRW_UNIFORM_BLOCK
-} DRWUniformType;
-
-#define MAX_UNIFORM_DATA_SIZE 16
-
-struct DRWUniform {
- struct DRWUniform *next;
- const void *value;
- int location;
- char type; /* DRWUniformType */
- char length; /* cannot be more than 16 */
- char arraysize; /* cannot be more than 16 too */
-};
-
-struct DRWInterface {
- DRWUniform *uniforms; /* DRWUniform, single-linked list */
- /* Dynamic batch */
-#ifdef USE_GPU_SELECT
- struct DRWInstanceData *inst_selectid;
- /* Override for single object instances. */
- int override_selectid;
-#endif
- Gwn_VertBuf *instance_vbo;
- unsigned int instance_count;
-#ifndef NDEBUG
- char attribs_count;
-#endif
- /* matrices locations */
- int model;
- int modelinverse;
- int modelview;
- int modelviewinverse;
- int modelviewprojection;
- int normalview;
- int normalworld;
- int orcotexfac;
- int eye;
- /* Matrices needed */
- uint16_t matflag;
-};
-
-struct DRWPass {
- /* Single linked list with last member to append */
- DRWShadingGroup *shgroups;
- DRWShadingGroup *shgroups_last;
-
- DRWState state;
- char name[MAX_PASS_NAME];
-};
-
-typedef struct DRWCallHeader {
- void *prev;
-#ifdef USE_GPU_SELECT
- int select_id;
-#endif
- unsigned char type, state;
- uint16_t matflag;
- /* Culling: Using Bounding Sphere for now for faster culling.
- * Not ideal for planes. */
- struct {
- float loc[3], rad; /* Bypassed if radius is < 0.0. */
- } bsphere;
- /* Matrices */
- float model[4][4];
- float modelinverse[4][4];
- float modelview[4][4];
- float modelviewinverse[4][4];
- float modelviewprojection[4][4];
- float normalview[3][3];
- float normalworld[3][3]; /* Not view dependant */
- float orcotexfac[2][3]; /* Not view dependant */
- float eyevec[3];
-} DRWCallHeader;
-
-typedef struct DRWCall {
- DRWCallHeader head;
-
- Gwn_Batch *geometry;
-} DRWCall;
-
-typedef struct DRWCallGenerate {
- DRWCallHeader head;
-
- DRWCallGenerateFn *geometry_fn;
- void *user_data;
-} DRWCallGenerate;
-
-/* Used by DRWCall.flag */
-enum {
- DRW_CALL_SINGLE, /* A single batch */
- DRW_CALL_GENERATE, /* Uses a callback to draw with any number of batches. */
-};
-
-/* Used by DRWCall.state */
-enum {
- DRW_CALL_CULLED = (1 << 0),
- DRW_CALL_NEGSCALE = (1 << 1),
-};
-
-/* Used by DRWCall.flag */
-enum {
- DRW_CALL_MODELINVERSE = (1 << 0),
- DRW_CALL_MODELVIEW = (1 << 1),
- DRW_CALL_MODELVIEWINVERSE = (1 << 2),
- DRW_CALL_MODELVIEWPROJECTION = (1 << 3),
- DRW_CALL_NORMALVIEW = (1 << 4),
- DRW_CALL_NORMALWORLD = (1 << 5),
- DRW_CALL_ORCOTEXFAC = (1 << 6),
- DRW_CALL_EYEVEC = (1 << 7),
- /* 8 bit flag! */
-};
-
-struct DRWShadingGroup {
- struct DRWShadingGroup *next;
-#ifdef USE_GPU_SELECT
- /* backlink to pass we're in */
- DRWPass *pass_parent;
-#endif
- GPUShader *shader; /* Shader to bind */
- DRWInterface interface; /* Uniforms pointers */
- DRWState state_extra; /* State changes for this batch only (or'd with the pass's state) */
- DRWState state_extra_disable; /* State changes for this batch only (and'd with the pass's state) */
- unsigned int stencil_mask; /* Stencil mask to use for stencil test / write operations */
- int type;
-
- /* Watch this! Can be nasty for debugging. */
- union {
- struct { /* DRW_SHG_NORMAL */
- void *calls; /* DRWCall or DRWCallDynamic depending of type */
- void *calls_first; /* To be able to traverse the list in the order of addition */
- };
- struct { /* DRW_SHG_***_BATCH */
- Gwn_Batch *batch_geom; /* Result of call batching */
- };
- struct { /* DRW_SHG_INSTANCE[_EXTERNAL] */
- Gwn_Batch *instance_geom; /* Geometry to instance */
- Gwn_Batch *instancing_geom;/* Instances attributes */
- float instance_orcofac[2][3]; /* TODO find a better place. */
- };
- };
-};
-
-/* Used by DRWShadingGroup.type */
-enum {
- DRW_SHG_NORMAL,
- DRW_SHG_POINT_BATCH,
- DRW_SHG_LINE_BATCH,
- DRW_SHG_TRIANGLE_BATCH,
- DRW_SHG_INSTANCE,
- DRW_SHG_INSTANCE_EXTERNAL,
-};
-
-/** Render State: No persistent data between draw calls. */
-static struct DRWGlobalState {
- /* Cache generation */
- ViewportMemoryPool *vmempool;
- DRWUniform *last_uniform;
- DRWCall *last_call;
- DRWCallGenerate *last_callgenerate;
- DRWShadingGroup *last_shgroup;
- DRWInstanceDataList *idatalist;
- DRWInstanceData *common_instance_data[MAX_INSTANCE_DATA_SIZE];
-
- /* Rendering state */
- GPUShader *shader;
-
- /* Managed by `DRW_state_set`, `DRW_state_reset` */
- DRWState state;
- unsigned int stencil_mask;
-
- /* Per viewport */
- GPUViewport *viewport;
- struct GPUFrameBuffer *default_framebuffer;
- float size[2];
- float screenvecs[2][3];
- float pixsize;
-
- GLenum backface, frontface;
-
- /* Clip planes */
- int num_clip_planes;
- float clip_planes_eq[MAX_CLIP_PLANES][4];
-
- struct {
- unsigned int is_select : 1;
- unsigned int is_depth : 1;
- unsigned int is_image_render : 1;
- unsigned int i
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list