From 7ffff04e4900ca284519900d12bd1490e218c4f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Sun, 6 Sep 2020 16:40:07 +0200 Subject: GPUVertBuf: Make GPUVertBuf private to the GPU module This is just a cleanup to isolate the internals of the vertbuf. This adds some getters to avoid refactor of existing code. --- .../blender/draw/intern/draw_cache_extract_mesh.c | 50 +++++++++++----------- 1 file changed, 25 insertions(+), 25 deletions(-) (limited to 'source/blender/draw/intern/draw_cache_extract_mesh.c') diff --git a/source/blender/draw/intern/draw_cache_extract_mesh.c b/source/blender/draw/intern/draw_cache_extract_mesh.c index 528a6eec69e..9f4ae8fbfbf 100644 --- a/source/blender/draw/intern/draw_cache_extract_mesh.c +++ b/source/blender/draw/intern/draw_cache_extract_mesh.c @@ -1923,7 +1923,7 @@ static void *extract_pos_nor_init(const MeshRenderData *mr, /* Pack normals per vert, reduce amount of computation. */ size_t packed_nor_len = sizeof(GPUPackedNormal) * mr->vert_len; MeshExtract_PosNor_Data *data = MEM_mallocN(sizeof(*data) + packed_nor_len, __func__); - data->vbo_data = (PosNorLoop *)vbo->data; + data->vbo_data = (PosNorLoop *)GPU_vertbuf_get_data(vbo); /* Quicker than doing it for each loop. */ if (mr->extract_type == MR_EXTRACT_BMESH) { @@ -2096,7 +2096,7 @@ static void *extract_lnor_hq_init(const MeshRenderData *mr, GPU_vertbuf_init_with_format(vbo, &format); GPU_vertbuf_data_alloc(vbo, mr->loop_len); - return vbo->data; + return GPU_vertbuf_get_data(vbo); } static void extract_lnor_hq_iter_poly_bm(const MeshRenderData *mr, @@ -2184,7 +2184,7 @@ static void *extract_lnor_init(const MeshRenderData *mr, GPU_vertbuf_init_with_format(vbo, &format); GPU_vertbuf_data_alloc(vbo, mr->loop_len); - return vbo->data; + return GPU_vertbuf_get_data(vbo); } static void extract_lnor_iter_poly_bm(const MeshRenderData *mr, @@ -2319,7 +2319,7 @@ static void *extract_uv_init(const MeshRenderData *mr, struct MeshBatchCache *ca GPU_vertbuf_init_with_format(vbo, &format); GPU_vertbuf_data_alloc(vbo, v_len); - float(*uv_data)[2] = (float(*)[2])vbo->data; + float(*uv_data)[2] = (float(*)[2])GPU_vertbuf_get_data(vbo); for (int i = 0; i < MAX_MTFACE; i++) { if (uv_layers & (1 << i)) { if (mr->extract_type == MR_EXTRACT_BMESH) { @@ -2487,7 +2487,7 @@ static void extract_tan_ex(const MeshRenderData *mr, GPU_vertbuf_data_alloc(vbo, v_len); if (do_hq) { - short(*tan_data)[4] = (short(*)[4])vbo->data; + short(*tan_data)[4] = (short(*)[4])GPU_vertbuf_get_data(vbo); for (int i = 0; i < tan_len; i++) { const char *name = tangent_names[i]; float(*layer_data)[4] = (float(*)[4])CustomData_get_layer_named( @@ -2508,7 +2508,7 @@ static void extract_tan_ex(const MeshRenderData *mr, } } else { - GPUPackedNormal *tan_data = (GPUPackedNormal *)vbo->data; + GPUPackedNormal *tan_data = (GPUPackedNormal *)GPU_vertbuf_get_data(vbo); for (int i = 0; i < tan_len; i++) { const char *name = tangent_names[i]; float(*layer_data)[4] = (float(*)[4])CustomData_get_layer_named( @@ -2639,7 +2639,7 @@ static void *extract_vcol_init(const MeshRenderData *mr, struct MeshBatchCache * ushort r, g, b, a; } gpuMeshVcol; - gpuMeshVcol *vcol_data = (gpuMeshVcol *)vbo->data; + gpuMeshVcol *vcol_data = (gpuMeshVcol *)GPU_vertbuf_get_data(vbo); MLoop *loops = CustomData_get_layer(cd_ldata, CD_MLOOP); for (int i = 0; i < MAX_MCOL; i++) { @@ -2743,7 +2743,7 @@ static void *extract_orco_init(const MeshRenderData *mr, CustomData *cd_vdata = &mr->me->vdata; MeshExtract_Orco_Data *data = MEM_mallocN(sizeof(*data), __func__); - data->vbo_data = (float(*)[4])vbo->data; + data->vbo_data = (float(*)[4])GPU_vertbuf_get_data(vbo); data->orco = CustomData_get_layer(cd_vdata, CD_ORCO); /* Make sure `orco` layer was requested only if needed! */ BLI_assert(data->orco); @@ -2859,7 +2859,7 @@ static void *extract_edge_fac_init(const MeshRenderData *mr, data->use_edge_render = true; } - data->vbo_data = vbo->data; + data->vbo_data = GPU_vertbuf_get_data(vbo); return data; } @@ -2969,14 +2969,14 @@ static void extract_edge_fac_finish(const MeshRenderData *mr, GPU_vertformat_attr_add(&format, "wd", GPU_COMP_F32, 1, GPU_FETCH_FLOAT); } /* We keep the data reference in data->vbo_data. */ - vbo->data = NULL; + data->vbo_data = GPU_vertbuf_steal_data(vbo); GPU_vertbuf_clear(vbo); int buf_len = mr->loop_len + mr->loop_loose_len; GPU_vertbuf_init_with_format(vbo, &format); GPU_vertbuf_data_alloc(vbo, buf_len); - float *fdata = (float *)vbo->data; + float *fdata = (float *)GPU_vertbuf_get_data(vbo); for (int ml_index = 0; ml_index < buf_len; ml_index++, fdata++) { *fdata = data->vbo_data[ml_index] / 255.0f; } @@ -3075,7 +3075,7 @@ static void *extract_weights_init(const MeshRenderData *mr, GPU_vertbuf_data_alloc(vbo, mr->loop_len + mr->loop_loose_len); MeshExtract_Weight_Data *data = MEM_callocN(sizeof(*data), __func__); - data->vbo_data = (float *)vbo->data; + data->vbo_data = (float *)GPU_vertbuf_get_data(vbo); data->wstate = &cache->weight_state; if (data->wstate->defgroup_active == -1) { @@ -3313,7 +3313,7 @@ static void *extract_edit_data_init(const MeshRenderData *mr, GPUVertBuf *vbo = buf; GPU_vertbuf_init_with_format(vbo, &format); GPU_vertbuf_data_alloc(vbo, mr->loop_len + mr->loop_loose_len); - return vbo->data; + return GPU_vertbuf_get_data(vbo); } static void extract_edit_data_iter_poly_bm(const MeshRenderData *mr, @@ -3471,7 +3471,7 @@ static void *extract_edituv_data_init(const MeshRenderData *mr, CustomData *cd_ldata = (mr->extract_type == MR_EXTRACT_BMESH) ? &mr->bm->ldata : &mr->me->ldata; MeshExtract_EditUVData_Data *data = MEM_callocN(sizeof(*data), __func__); - data->vbo_data = (EditLoopData *)vbo->data; + data->vbo_data = (EditLoopData *)GPU_vertbuf_get_data(vbo); data->cd_ofs = CustomData_get_offset(cd_ldata, CD_MLOOPUV); return data; } @@ -3635,7 +3635,7 @@ static void mesh_stretch_area_finish(const MeshRenderData *mr, /* Copy face data for each loop. */ GPUVertBuf *vbo = buf; - uint16_t *loop_stretch = (uint16_t *)vbo->data; + uint16_t *loop_stretch = (uint16_t *)GPU_vertbuf_get_data(vbo); if (mr->extract_type == MR_EXTRACT_BMESH) { BMFace *efa; @@ -3746,7 +3746,7 @@ static void *extract_stretch_angle_init(const MeshRenderData *mr, GPU_vertbuf_data_alloc(vbo, mr->loop_len); MeshExtract_StretchAngle_Data *data = MEM_callocN(sizeof(*data), __func__); - data->vbo_data = (UVStretchAngle *)vbo->data; + data->vbo_data = (UVStretchAngle *)GPU_vertbuf_get_data(vbo); /* Special iterator needed to save about half of the computing cost. */ if (mr->extract_type == MR_EXTRACT_BMESH) { @@ -4446,7 +4446,7 @@ static void extract_mesh_analysis_finish(const MeshRenderData *mr, BLI_assert(mr->edit_bmesh); GPUVertBuf *vbo = buf; - float *l_weight = (float *)vbo->data; + float *l_weight = (float *)GPU_vertbuf_get_data(vbo); switch (mr->toolsettings->statvis.type) { case SCE_STATVIS_OVERHANG: @@ -4493,7 +4493,7 @@ static void *extract_fdots_pos_init(const MeshRenderData *mr, GPUVertBuf *vbo = buf; GPU_vertbuf_init_with_format(vbo, &format); GPU_vertbuf_data_alloc(vbo, mr->poly_len); - return vbo->data; + return GPU_vertbuf_get_data(vbo); } static void extract_fdots_pos_iter_poly_bm(const MeshRenderData *mr, @@ -4592,7 +4592,7 @@ static void extract_fdots_nor_finish(const MeshRenderData *mr, { static float invalid_normal[3] = {0.0f, 0.0f, 0.0f}; GPUVertBuf *vbo = buf; - GPUPackedNormal *nor = (GPUPackedNormal *)vbo->data; + GPUPackedNormal *nor = (GPUPackedNormal *)GPU_vertbuf_get_data(vbo); BMFace *efa; /* Quicker than doing it for each loop. */ @@ -4669,11 +4669,11 @@ static void *extract_fdots_uv_init(const MeshRenderData *mr, if (!mr->use_subsurf_fdots) { /* Clear so we can accumulate on it. */ - memset(vbo->data, 0x0, mr->poly_len * vbo->format.stride); + memset(GPU_vertbuf_get_data(vbo), 0x0, mr->poly_len * GPU_vertbuf_get_format(vbo)->stride); } MeshExtract_FdotUV_Data *data = MEM_callocN(sizeof(*data), __func__); - data->vbo_data = (float(*)[2])vbo->data; + data->vbo_data = (float(*)[2])GPU_vertbuf_get_data(vbo); if (mr->extract_type == MR_EXTRACT_BMESH) { data->cd_ofs = CustomData_get_offset(&mr->bm->ldata, CD_MLOOPUV); @@ -4763,7 +4763,7 @@ static void *extract_fdots_edituv_data_init(const MeshRenderData *mr, GPU_vertbuf_data_alloc(vbo, mr->poly_len); MeshExtract_EditUVFdotData_Data *data = MEM_callocN(sizeof(*data), __func__); - data->vbo_data = (EditLoopData *)vbo->data; + data->vbo_data = (EditLoopData *)GPU_vertbuf_get_data(vbo); data->cd_ofs = CustomData_get_offset(&mr->bm->ldata, CD_MLOOPUV); return data; } @@ -4842,7 +4842,7 @@ static void *extract_skin_roots_init(const MeshRenderData *mr, GPU_vertbuf_init_with_format(vbo, &format); GPU_vertbuf_data_alloc(vbo, mr->bm->totvert); - SkinRootData *vbo_data = (SkinRootData *)vbo->data; + SkinRootData *vbo_data = (SkinRootData *)GPU_vertbuf_get_data(vbo); int root_len = 0; int cd_ofs = CustomData_get_offset(&mr->bm->vdata, CD_MVERT_SKIN); @@ -4889,7 +4889,7 @@ static void *extract_select_idx_init(const MeshRenderData *mr, GPUVertBuf *vbo = buf; GPU_vertbuf_init_with_format(vbo, &format); GPU_vertbuf_data_alloc(vbo, mr->loop_len + mr->loop_loose_len); - return vbo->data; + return GPU_vertbuf_get_data(vbo); } /* TODO Use #glVertexID to get loop index and use the data structure on the CPU to retrieve the @@ -5083,7 +5083,7 @@ static void *extract_select_fdot_idx_init(const MeshRenderData *mr, GPUVertBuf *vbo = buf; GPU_vertbuf_init_with_format(vbo, &format); GPU_vertbuf_data_alloc(vbo, mr->poly_len); - return vbo->data; + return GPU_vertbuf_get_data(vbo); } static void extract_fdot_idx_iter_poly_bm(const MeshRenderData *mr, -- cgit v1.2.3