From 4a8aaab0b2ab84455450fcdd1e39e190862b0bb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Mon, 3 Apr 2017 19:32:05 +0200 Subject: Draw Manager: Use engine type pointer instead of engine name. Faster search --- source/blender/draw/engines/clay/clay.c | 2 +- source/blender/draw/engines/eevee/eevee_private.h | 2 +- source/blender/draw/intern/DRW_render.h | 1 - source/blender/draw/intern/draw_manager.c | 22 +++++++++++----------- source/blender/draw/modes/edit_armature_mode.c | 2 +- source/blender/draw/modes/edit_curve_mode.c | 2 +- source/blender/draw/modes/edit_lattice_mode.c | 2 +- source/blender/draw/modes/edit_mesh_mode.c | 2 +- source/blender/draw/modes/edit_metaball_mode.c | 2 +- source/blender/draw/modes/edit_surface_mode.c | 2 +- source/blender/draw/modes/edit_text_mode.c | 2 +- source/blender/draw/modes/object_mode.c | 2 +- source/blender/draw/modes/paint_texture_mode.c | 2 +- source/blender/draw/modes/paint_vertex_mode.c | 2 +- source/blender/draw/modes/paint_weight_mode.c | 2 +- source/blender/draw/modes/particle_mode.c | 2 +- source/blender/draw/modes/pose_mode.c | 2 +- source/blender/draw/modes/sculpt_mode.c | 2 +- source/blender/gpu/GPU_viewport.h | 6 +++--- source/blender/gpu/intern/gpu_viewport.c | 8 ++++---- 20 files changed, 34 insertions(+), 35 deletions(-) diff --git a/source/blender/draw/engines/clay/clay.c b/source/blender/draw/engines/clay/clay.c index 6294715e01c..23cfe82276f 100644 --- a/source/blender/draw/engines/clay/clay.c +++ b/source/blender/draw/engines/clay/clay.c @@ -106,7 +106,7 @@ typedef struct CLAY_PassList { } CLAY_PassList; typedef struct CLAY_Data { - char engine_name[32]; + void *engine_type; CLAY_FramebufferList *fbl; CLAY_TextureList *txl; CLAY_PassList *psl; diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h index b81731a9188..401b39fbd3e 100644 --- a/source/blender/draw/engines/eevee/eevee_private.h +++ b/source/blender/draw/engines/eevee/eevee_private.h @@ -58,7 +58,7 @@ typedef struct EEVEE_LightsInfo { } EEVEE_LightsInfo; typedef struct EEVEE_Data { - char engine_name[32]; + void *engine_type; EEVEE_FramebufferList *fbl; EEVEE_TextureList *txl; EEVEE_PassList *psl; diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h index dcef328e4ce..8a6f0b4511a 100644 --- a/source/blender/draw/intern/DRW_render.h +++ b/source/blender/draw/intern/DRW_render.h @@ -237,7 +237,6 @@ typedef enum { void DRW_viewport_init(const bContext *C); void DRW_viewport_matrix_get(float mat[4][4], DRWViewportMatrixType type); -void *DRW_viewport_engine_data_get(const char *engine_name); float *DRW_viewport_size_get(void); float *DRW_viewport_screenvecs_get(void); float *DRW_viewport_pixelsize_get(void); diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index a674c532310..c8828fad745 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -1292,12 +1292,12 @@ void DRW_framebuffer_blit(struct GPUFrameBuffer *fb_read, struct GPUFrameBuffer } /* ****************************************** Viewport ******************************************/ -void *DRW_viewport_engine_data_get(const char *engine_name) +static void *DRW_viewport_engine_data_get(void *engine_type) { - void *data = GPU_viewport_engine_data_get(DST.viewport, engine_name); + void *data = GPU_viewport_engine_data_get(DST.viewport, engine_type); if (data == NULL) { - data = GPU_viewport_engine_data_create(DST.viewport, engine_name); + data = GPU_viewport_engine_data_create(DST.viewport, engine_type); } return data; } @@ -1421,7 +1421,7 @@ static void DRW_engines_init(void) { for (LinkData *link = DST.enabled_engines.first; link; link = link->next) { DrawEngineType *engine = link->data; - ViewportEngineData *data = DRW_viewport_engine_data_get(engine->idname); + ViewportEngineData *data = DRW_viewport_engine_data_get(engine); double stime = PIL_check_seconds_timer(); if (engine->engine_init) { @@ -1437,7 +1437,7 @@ static void DRW_engines_cache_init(void) { for (LinkData *link = DST.enabled_engines.first; link; link = link->next) { DrawEngineType *engine = link->data; - ViewportEngineData *data = DRW_viewport_engine_data_get(engine->idname); + ViewportEngineData *data = DRW_viewport_engine_data_get(engine); double stime = PIL_check_seconds_timer(); data->cache_time = 0.0; @@ -1453,7 +1453,7 @@ static void DRW_engines_cache_populate(Object *ob) { for (LinkData *link = DST.enabled_engines.first; link; link = link->next) { DrawEngineType *engine = link->data; - ViewportEngineData *data = DRW_viewport_engine_data_get(engine->idname); + ViewportEngineData *data = DRW_viewport_engine_data_get(engine); double stime = PIL_check_seconds_timer(); if (engine->cache_populate) { @@ -1468,7 +1468,7 @@ static void DRW_engines_cache_finish(void) { for (LinkData *link = DST.enabled_engines.first; link; link = link->next) { DrawEngineType *engine = link->data; - ViewportEngineData *data = DRW_viewport_engine_data_get(engine->idname); + ViewportEngineData *data = DRW_viewport_engine_data_get(engine); double stime = PIL_check_seconds_timer(); if (engine->cache_finish) { @@ -1483,7 +1483,7 @@ static void DRW_engines_draw_background(void) { for (LinkData *link = DST.enabled_engines.first; link; link = link->next) { DrawEngineType *engine = link->data; - ViewportEngineData *data = DRW_viewport_engine_data_get(engine->idname); + ViewportEngineData *data = DRW_viewport_engine_data_get(engine); double stime = PIL_check_seconds_timer(); if (engine->draw_background) { @@ -1503,7 +1503,7 @@ static void DRW_engines_draw_scene(void) { for (LinkData *link = DST.enabled_engines.first; link; link = link->next) { DrawEngineType *engine = link->data; - ViewportEngineData *data = DRW_viewport_engine_data_get(engine->idname); + ViewportEngineData *data = DRW_viewport_engine_data_get(engine); double stime = PIL_check_seconds_timer(); if (engine->draw_scene) { @@ -1642,7 +1642,7 @@ static void DRW_debug_cpu_stats(void) for (LinkData *link = DST.enabled_engines.first; link; link = link->next) { u = 0; DrawEngineType *engine = link->data; - ViewportEngineData *data = DRW_viewport_engine_data_get(engine->idname); + ViewportEngineData *data = DRW_viewport_engine_data_get(engine); draw_stat(&rect, u++, v, engine->idname, sizeof(engine->idname)); @@ -1702,7 +1702,7 @@ static void DRW_debug_gpu_stats(void) for (LinkData *link = DST.enabled_engines.first; link; link = link->next) { GLuint64 engine_time = 0; DrawEngineType *engine = link->data; - ViewportEngineData *data = DRW_viewport_engine_data_get(engine->idname); + ViewportEngineData *data = DRW_viewport_engine_data_get(engine); int vsta = v; draw_stat(&rect, 0, v, engine->idname, sizeof(engine->idname)); diff --git a/source/blender/draw/modes/edit_armature_mode.c b/source/blender/draw/modes/edit_armature_mode.c index 5361bd1c89f..6111b9b160b 100644 --- a/source/blender/draw/modes/edit_armature_mode.c +++ b/source/blender/draw/modes/edit_armature_mode.c @@ -48,7 +48,7 @@ typedef struct EDIT_ARMATURE_StorageList { } EDIT_ARMATURE_StorageList; typedef struct EDIT_ARMATURE_Data { - char engine_name[32]; + void *engine_type; void *fbl; void *txl; EDIT_ARMATURE_PassList *psl; diff --git a/source/blender/draw/modes/edit_curve_mode.c b/source/blender/draw/modes/edit_curve_mode.c index f8010fbd570..d70db64d946 100644 --- a/source/blender/draw/modes/edit_curve_mode.c +++ b/source/blender/draw/modes/edit_curve_mode.c @@ -83,7 +83,7 @@ typedef struct EDIT_CURVE_Data { /* Struct returned by DRW_viewport_engine_data_get. * If you don't use one of these, just make it a (void *) */ // void *fbl; - char engine_name[32]; /* Required */ + void *engine_type; /* Required */ EDIT_CURVE_FramebufferList *fbl; EDIT_CURVE_TextureList *txl; EDIT_CURVE_PassList *psl; diff --git a/source/blender/draw/modes/edit_lattice_mode.c b/source/blender/draw/modes/edit_lattice_mode.c index 27ea05650cb..79d43c73378 100644 --- a/source/blender/draw/modes/edit_lattice_mode.c +++ b/source/blender/draw/modes/edit_lattice_mode.c @@ -83,7 +83,7 @@ typedef struct EDIT_LATTICE_Data { /* Struct returned by DRW_viewport_engine_data_get. * If you don't use one of these, just make it a (void *) */ // void *fbl; - char engine_name[32]; /* Required */ + void *engine_type; /* Required */ EDIT_LATTICE_FramebufferList *fbl; EDIT_LATTICE_TextureList *txl; EDIT_LATTICE_PassList *psl; diff --git a/source/blender/draw/modes/edit_mesh_mode.c b/source/blender/draw/modes/edit_mesh_mode.c index 713ae607ef4..2991d212efa 100644 --- a/source/blender/draw/modes/edit_mesh_mode.c +++ b/source/blender/draw/modes/edit_mesh_mode.c @@ -81,7 +81,7 @@ typedef struct EDIT_MESH_StorageList { } EDIT_MESH_StorageList; typedef struct EDIT_MESH_Data { - char engine_name[32]; + void *engine_type; EDIT_MESH_FramebufferList *fbl; EDIT_MESH_TextureList *txl; EDIT_MESH_PassList *psl; diff --git a/source/blender/draw/modes/edit_metaball_mode.c b/source/blender/draw/modes/edit_metaball_mode.c index f993537369f..098dca7ac38 100644 --- a/source/blender/draw/modes/edit_metaball_mode.c +++ b/source/blender/draw/modes/edit_metaball_mode.c @@ -83,7 +83,7 @@ typedef struct EDIT_METABALL_Data { /* Struct returned by DRW_viewport_engine_data_get. * If you don't use one of these, just make it a (void *) */ // void *fbl; - char engine_name[32]; /* Required */ + void *engine_type; /* Required */ EDIT_METABALL_FramebufferList *fbl; EDIT_METABALL_TextureList *txl; EDIT_METABALL_PassList *psl; diff --git a/source/blender/draw/modes/edit_surface_mode.c b/source/blender/draw/modes/edit_surface_mode.c index 6cfe0f1344b..fcae505a673 100644 --- a/source/blender/draw/modes/edit_surface_mode.c +++ b/source/blender/draw/modes/edit_surface_mode.c @@ -83,7 +83,7 @@ typedef struct EDIT_SURFACE_Data { /* Struct returned by DRW_viewport_engine_data_get. * If you don't use one of these, just make it a (void *) */ // void *fbl; - char engine_name[32]; /* Required */ + void *engine_type; /* Required */ EDIT_SURFACE_FramebufferList *fbl; EDIT_SURFACE_TextureList *txl; EDIT_SURFACE_PassList *psl; diff --git a/source/blender/draw/modes/edit_text_mode.c b/source/blender/draw/modes/edit_text_mode.c index 4f48448f108..2a1b0d4e4ae 100644 --- a/source/blender/draw/modes/edit_text_mode.c +++ b/source/blender/draw/modes/edit_text_mode.c @@ -83,7 +83,7 @@ typedef struct EDIT_TEXT_Data { /* Struct returned by DRW_viewport_engine_data_get. * If you don't use one of these, just make it a (void *) */ // void *fbl; - char engine_name[32]; /* Required */ + void *engine_type; /* Required */ EDIT_TEXT_FramebufferList *fbl; EDIT_TEXT_TextureList *txl; EDIT_TEXT_PassList *psl; diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c index 5920889a453..0656485f792 100644 --- a/source/blender/draw/modes/object_mode.c +++ b/source/blender/draw/modes/object_mode.c @@ -93,7 +93,7 @@ typedef struct OBJECT_StorageList { } OBJECT_StorageList; typedef struct OBJECT_Data { - char engine_name[32]; + void *engine_type; void *fbl; void *txl; OBJECT_PassList *psl; diff --git a/source/blender/draw/modes/paint_texture_mode.c b/source/blender/draw/modes/paint_texture_mode.c index e6221c4efc3..9d620e0ce25 100644 --- a/source/blender/draw/modes/paint_texture_mode.c +++ b/source/blender/draw/modes/paint_texture_mode.c @@ -83,7 +83,7 @@ typedef struct PAINT_TEXTURE_Data { /* Struct returned by DRW_viewport_engine_data_get. * If you don't use one of these, just make it a (void *) */ // void *fbl; - char engine_name[32]; /* Required */ + void *engine_type; /* Required */ PAINT_TEXTURE_FramebufferList *fbl; PAINT_TEXTURE_TextureList *txl; PAINT_TEXTURE_PassList *psl; diff --git a/source/blender/draw/modes/paint_vertex_mode.c b/source/blender/draw/modes/paint_vertex_mode.c index 15c08a7d415..b3b32a4d6e9 100644 --- a/source/blender/draw/modes/paint_vertex_mode.c +++ b/source/blender/draw/modes/paint_vertex_mode.c @@ -83,7 +83,7 @@ typedef struct PAINT_VERTEX_Data { /* Struct returned by DRW_viewport_engine_data_get. * If you don't use one of these, just make it a (void *) */ // void *fbl; - char engine_name[32]; /* Required */ + void *engine_type; /* Required */ PAINT_VERTEX_FramebufferList *fbl; PAINT_VERTEX_TextureList *txl; PAINT_VERTEX_PassList *psl; diff --git a/source/blender/draw/modes/paint_weight_mode.c b/source/blender/draw/modes/paint_weight_mode.c index 3063e685149..2d189e07fd2 100644 --- a/source/blender/draw/modes/paint_weight_mode.c +++ b/source/blender/draw/modes/paint_weight_mode.c @@ -83,7 +83,7 @@ typedef struct PAINT_WEIGHT_Data { /* Struct returned by DRW_viewport_engine_data_get. * If you don't use one of these, just make it a (void *) */ // void *fbl; - char engine_name[32]; /* Required */ + void *engine_type; /* Required */ PAINT_WEIGHT_FramebufferList *fbl; PAINT_WEIGHT_TextureList *txl; PAINT_WEIGHT_PassList *psl; diff --git a/source/blender/draw/modes/particle_mode.c b/source/blender/draw/modes/particle_mode.c index 84426b28752..aab9c41a233 100644 --- a/source/blender/draw/modes/particle_mode.c +++ b/source/blender/draw/modes/particle_mode.c @@ -77,7 +77,7 @@ typedef struct PARTICLE_Data { /* Struct returned by DRW_viewport_engine_data_get. * If you don't use one of these, just make it a (void *) */ // void *fbl; - char engine_name[32]; /* Required */ + void *engine_type; /* Required */ PARTICLE_FramebufferList *fbl; PARTICLE_TextureList *txl; PARTICLE_PassList *psl; diff --git a/source/blender/draw/modes/pose_mode.c b/source/blender/draw/modes/pose_mode.c index 0c880130cfc..93514701010 100644 --- a/source/blender/draw/modes/pose_mode.c +++ b/source/blender/draw/modes/pose_mode.c @@ -77,7 +77,7 @@ typedef struct POSE_Data { /* Struct returned by DRW_viewport_engine_data_get. * If you don't use one of these, just make it a (void *) */ // void *fbl; - char engine_name[32]; /* Required */ + void *engine_type; /* Required */ POSE_FramebufferList *fbl; POSE_TextureList *txl; POSE_PassList *psl; diff --git a/source/blender/draw/modes/sculpt_mode.c b/source/blender/draw/modes/sculpt_mode.c index 4ed03668796..4b500c4d6fd 100644 --- a/source/blender/draw/modes/sculpt_mode.c +++ b/source/blender/draw/modes/sculpt_mode.c @@ -77,7 +77,7 @@ typedef struct SCULPT_Data { /* Struct returned by DRW_viewport_engine_data_get. * If you don't use one of these, just make it a (void *) */ // void *fbl; - char engine_name[32]; /* Required */ + void *engine_type; /* Required */ SCULPT_FramebufferList *fbl; SCULPT_TextureList *txl; SCULPT_PassList *psl; diff --git a/source/blender/gpu/GPU_viewport.h b/source/blender/gpu/GPU_viewport.h index 06102a5c07e..2411fe755af 100644 --- a/source/blender/gpu/GPU_viewport.h +++ b/source/blender/gpu/GPU_viewport.h @@ -64,7 +64,7 @@ typedef struct StorageList { } StorageList; typedef struct ViewportEngineData { - char engine_name[32]; + void *engine_type; FramebufferList *fbl; TextureList *txl; @@ -83,8 +83,8 @@ void GPU_viewport_bind(GPUViewport *viewport, const rcti *rect); void GPU_viewport_unbind(GPUViewport *viewport); void GPU_viewport_free(GPUViewport *viewport); -void *GPU_viewport_engine_data_create(GPUViewport *viewport, const char *engine_name); -void *GPU_viewport_engine_data_get(GPUViewport *viewport, const char *engine_name); +void *GPU_viewport_engine_data_create(GPUViewport *viewport, void *engine_type); +void *GPU_viewport_engine_data_get(GPUViewport *viewport, void *engine_type); void *GPU_viewport_framebuffer_list_get(GPUViewport *viewport); void *GPU_viewport_texture_list_get(GPUViewport *viewport); void GPU_viewport_size_get(GPUViewport *viewport, int *size); diff --git a/source/blender/gpu/intern/gpu_viewport.c b/source/blender/gpu/intern/gpu_viewport.c index 659a9cea825..7c2cb8cd4bb 100644 --- a/source/blender/gpu/intern/gpu_viewport.c +++ b/source/blender/gpu/intern/gpu_viewport.c @@ -79,11 +79,11 @@ GPUViewport *GPU_viewport_create(void) return viewport; } -void *GPU_viewport_engine_data_create(GPUViewport *viewport, const char *engine_name) +void *GPU_viewport_engine_data_create(GPUViewport *viewport, void *engine_type) { LinkData *ld = MEM_callocN(sizeof(LinkData), "LinkData"); ViewportEngineData *data = MEM_callocN(sizeof(ViewportEngineData), "ViewportEngineData"); - BLI_strncpy(data->engine_name, engine_name, 32); + data->engine_type = engine_type; data->fbl = MEM_callocN(sizeof(FramebufferList), "FramebufferList"); data->txl = MEM_callocN(sizeof(TextureList), "TextureList"); @@ -119,11 +119,11 @@ static void GPU_viewport_engines_data_free(GPUViewport *viewport) } } -void *GPU_viewport_engine_data_get(GPUViewport *viewport, const char *engine_name) +void *GPU_viewport_engine_data_get(GPUViewport *viewport, void *engine_type) { for (LinkData *link = viewport->data.first; link; link = link->next) { ViewportEngineData *vdata = link->data; - if (STREQ(engine_name, vdata->engine_name)) { + if (vdata->engine_type == engine_type) { return vdata; } } -- cgit v1.2.3