Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/intern/draw_cache_impl_curve.c
| Show First 20 Lines • Show All 340 Lines • ▼ Show 20 Lines | |||||
| } | } | ||||
| /* ---------------------------------------------------------------------- */ | /* ---------------------------------------------------------------------- */ | ||||
| /* Curve GPUBatch Cache */ | /* Curve GPUBatch Cache */ | ||||
| typedef struct CurveBatchCache { | typedef struct CurveBatchCache { | ||||
| struct { | struct { | ||||
| GPUVertBuf *pos_nor; | GPUVertBuf *pos_nor; | ||||
| GPUVertBuf *edge_fac; | |||||
| GPUVertBuf *curves_pos; | GPUVertBuf *curves_pos; | ||||
| GPUVertBuf *loop_pos_nor; | GPUVertBuf *loop_pos_nor; | ||||
| GPUVertBuf *loop_uv; | GPUVertBuf *loop_uv; | ||||
| } ordered; | } ordered; | ||||
| struct { | struct { | ||||
| /* Curve points. Aligned with ordered.pos_nor */ | /* Curve points. Aligned with ordered.pos_nor */ | ||||
| ▲ Show 20 Lines • Show All 553 Lines • ▼ Show 20 Lines | void DRW_curve_batch_cache_create_requested(Object *ob) | ||||
| /* Init batches and request VBOs & IBOs */ | /* Init batches and request VBOs & IBOs */ | ||||
| if (DRW_batch_requested(cache->batch.surfaces, GPU_PRIM_TRIS)) { | if (DRW_batch_requested(cache->batch.surfaces, GPU_PRIM_TRIS)) { | ||||
| DRW_ibo_request(cache->batch.surfaces, &cache->ibo.surfaces_tris); | DRW_ibo_request(cache->batch.surfaces, &cache->ibo.surfaces_tris); | ||||
| DRW_vbo_request(cache->batch.surfaces, &cache->ordered.pos_nor); | DRW_vbo_request(cache->batch.surfaces, &cache->ordered.pos_nor); | ||||
| } | } | ||||
| if (DRW_batch_requested(cache->batch.surfaces_edges, GPU_PRIM_LINES)) { | if (DRW_batch_requested(cache->batch.surfaces_edges, GPU_PRIM_LINES)) { | ||||
| DRW_ibo_request(cache->batch.surfaces_edges, &cache->ibo.surfaces_lines); | DRW_ibo_request(cache->batch.surfaces_edges, &cache->ibo.surfaces_lines); | ||||
| DRW_vbo_request(cache->batch.surfaces_edges, &cache->ordered.pos_nor); | DRW_vbo_request(cache->batch.surfaces_edges, &cache->ordered.pos_nor); | ||||
| DRW_vbo_request(cache->batch.surfaces_edges, &cache->ordered.edge_fac); | |||||
| } | } | ||||
| if (DRW_batch_requested(cache->batch.curves, GPU_PRIM_LINE_STRIP)) { | if (DRW_batch_requested(cache->batch.curves, GPU_PRIM_LINE_STRIP)) { | ||||
| DRW_ibo_request(cache->batch.curves, &cache->ibo.curves_lines); | DRW_ibo_request(cache->batch.curves, &cache->ibo.curves_lines); | ||||
| DRW_vbo_request(cache->batch.curves, &cache->ordered.curves_pos); | DRW_vbo_request(cache->batch.curves, &cache->ordered.curves_pos); | ||||
| } | } | ||||
| /* Edit mode */ | /* Edit mode */ | ||||
| if (DRW_batch_requested(cache->batch.edit_edges, GPU_PRIM_LINES)) { | if (DRW_batch_requested(cache->batch.edit_edges, GPU_PRIM_LINES)) { | ||||
| Show All 23 Lines | if (DRW_batch_requested(cache->surf_per_mat[i], GPU_PRIM_TRIS)) { | ||||
| } | } | ||||
| DRW_vbo_request(cache->surf_per_mat[i], &cache->ordered.loop_pos_nor); | DRW_vbo_request(cache->surf_per_mat[i], &cache->ordered.loop_pos_nor); | ||||
| } | } | ||||
| } | } | ||||
| /* Generate MeshRenderData flags */ | /* Generate MeshRenderData flags */ | ||||
| int mr_flag = 0; | int mr_flag = 0; | ||||
| DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_flag, cache->ordered.pos_nor, CU_DATATYPE_SURFACE); | DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_flag, cache->ordered.pos_nor, CU_DATATYPE_SURFACE); | ||||
| DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_flag, cache->ordered.edge_fac, CU_DATATYPE_SURFACE); | |||||
| DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_flag, cache->ordered.curves_pos, CU_DATATYPE_WIRE); | DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_flag, cache->ordered.curves_pos, CU_DATATYPE_WIRE); | ||||
| DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_flag, cache->ordered.loop_pos_nor, CU_DATATYPE_SURFACE); | DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_flag, cache->ordered.loop_pos_nor, CU_DATATYPE_SURFACE); | ||||
| DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_flag, cache->ordered.loop_uv, CU_DATATYPE_SURFACE); | DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_flag, cache->ordered.loop_uv, CU_DATATYPE_SURFACE); | ||||
| DRW_ADD_FLAG_FROM_IBO_REQUEST(mr_flag, cache->ibo.surfaces_tris, CU_DATATYPE_SURFACE); | DRW_ADD_FLAG_FROM_IBO_REQUEST(mr_flag, cache->ibo.surfaces_tris, CU_DATATYPE_SURFACE); | ||||
| DRW_ADD_FLAG_FROM_IBO_REQUEST(mr_flag, cache->ibo.surfaces_lines, CU_DATATYPE_SURFACE); | DRW_ADD_FLAG_FROM_IBO_REQUEST(mr_flag, cache->ibo.surfaces_lines, CU_DATATYPE_SURFACE); | ||||
| DRW_ADD_FLAG_FROM_IBO_REQUEST(mr_flag, cache->ibo.curves_lines, CU_DATATYPE_WIRE); | DRW_ADD_FLAG_FROM_IBO_REQUEST(mr_flag, cache->ibo.curves_lines, CU_DATATYPE_WIRE); | ||||
| DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_flag, cache->edit.pos, CU_DATATYPE_OVERLAY); | DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_flag, cache->edit.pos, CU_DATATYPE_OVERLAY); | ||||
| Show All 9 Lines | void DRW_curve_batch_cache_create_requested(Object *ob) | ||||
| CurveRenderData *rdata = curve_render_data_create(cu, ob->runtime.curve_cache, mr_flag); | CurveRenderData *rdata = curve_render_data_create(cu, ob->runtime.curve_cache, mr_flag); | ||||
| /* DispLists */ | /* DispLists */ | ||||
| ListBase *lb = &rdata->ob_curve_cache->disp; | ListBase *lb = &rdata->ob_curve_cache->disp; | ||||
| /* Generate VBOs */ | /* Generate VBOs */ | ||||
| if (DRW_vbo_requested(cache->ordered.pos_nor)) { | if (DRW_vbo_requested(cache->ordered.pos_nor)) { | ||||
| DRW_displist_vertbuf_create_pos_and_nor_and_wiredata(lb, cache->ordered.pos_nor); | DRW_displist_vertbuf_create_pos_and_nor(lb, cache->ordered.pos_nor); | ||||
| } | |||||
| if (DRW_vbo_requested(cache->ordered.edge_fac)) { | |||||
| DRW_displist_vertbuf_create_wiredata(lb, cache->ordered.edge_fac); | |||||
| } | } | ||||
| if (DRW_vbo_requested(cache->ordered.curves_pos)) { | if (DRW_vbo_requested(cache->ordered.curves_pos)) { | ||||
| curve_create_curves_pos(rdata, cache->ordered.curves_pos); | curve_create_curves_pos(rdata, cache->ordered.curves_pos); | ||||
| } | } | ||||
| if (DRW_vbo_requested(cache->ordered.loop_pos_nor) || | if (DRW_vbo_requested(cache->ordered.loop_pos_nor) || | ||||
| DRW_vbo_requested(cache->ordered.loop_uv)) | DRW_vbo_requested(cache->ordered.loop_uv)) | ||||
| { | { | ||||
| Show All 40 Lines | |||||