diff options
author | Campbell Barton <ideasman42@gmail.com> | 2017-05-11 14:21:59 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-05-11 14:27:33 +0300 |
commit | 5ae58f8ab889abfc8a1c8d9538ae0b4dea989408 (patch) | |
tree | 779b65eefad9749923cc8518802bd5d5a2dc2011 /source/blender/gpu/intern/gpu_buffers.c | |
parent | f1242ea93b1cdbd8a6125e1760146db187075c79 (diff) |
DWM: Use draw manager for sculpt PBVH drawing
Add a shader-group type to draw
generated geometry by running a callback.
Diffstat (limited to 'source/blender/gpu/intern/gpu_buffers.c')
-rw-r--r-- | source/blender/gpu/intern/gpu_buffers.c | 48 |
1 files changed, 21 insertions, 27 deletions
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c index 707bdf7d829..8a3c0c91b65 100644 --- a/source/blender/gpu/intern/gpu_buffers.c +++ b/source/blender/gpu/intern/gpu_buffers.c @@ -1015,10 +1015,6 @@ static void gpu_pbvh_vert_format_init__gwn(VertexFormat *format, VertexBufferAtt static void gpu_pbvh_batch_init(GPU_PBVH_Buffers *buffers) { - GPUBuiltinShader shader_id = - buffers->smooth ? GPU_SHADER_SIMPLE_LIGHTING_SMOOTH_COLOR : GPU_SHADER_SIMPLE_LIGHTING_FLAT_COLOR; - GPUShader *shader = GPU_shader_get_builtin_shader(shader_id); - /* force flushing to the GPU */ if (buffers->vert_buf->data) { VertexBuffer_use(buffers->vert_buf); @@ -1029,10 +1025,6 @@ static void gpu_pbvh_batch_init(GPU_PBVH_Buffers *buffers) PRIM_TRIANGLES, buffers->vert_buf, /* can be NULL */ buffers->index_buf); - Batch_set_program( - buffers->triangles, - GPU_shader_get_program(shader), GPU_shader_get_interface(shader)); - BATCH_DISCARD_SAFE(buffers->triangles_fast); if (buffers->index_buf_fast) { @@ -1040,10 +1032,6 @@ static void gpu_pbvh_batch_init(GPU_PBVH_Buffers *buffers) PRIM_TRIANGLES, buffers->vert_buf, /* can be NULL */ buffers->index_buf_fast); - - Batch_set_program( - buffers->triangles_fast, - GPU_shader_get_program(shader), GPU_shader_get_interface(shader)); } } @@ -1214,7 +1202,13 @@ GPU_PBVH_Buffers *GPU_build_mesh_pbvh_buffers( buffers = MEM_callocN(sizeof(GPU_PBVH_Buffers), "GPU_Buffers"); + /* smooth or flat for all */ +#if 0 buffers->smooth = mpoly[looptri[face_indices[0]].poly].flag & ME_SMOOTH; +#else + /* for DrawManager we dont support mixed smooth/flat */ + buffers->smooth = (mpoly[0].flag & ME_SMOOTH) != 0; +#endif buffers->show_diffuse_color = false; buffers->use_matcaps = false; @@ -1830,29 +1824,29 @@ void GPU_draw_pbvh_buffers( bool wireframe, bool fast) { UNUSED_VARS(wireframe, fast, setMaterial); - - { - GPUBuiltinShader shader_id = - buffers->smooth ? GPU_SHADER_SIMPLE_LIGHTING_SMOOTH_COLOR : GPU_SHADER_SIMPLE_LIGHTING_FLAT_COLOR; - GPUShader *shader = GPU_shader_get_builtin_shader(shader_id); - - static float light[3] = {-0.3f, 0.5f, 1.0f}; - static float alpha = 1.0f; - static float world_light = 1.0f; - - GPU_shader_uniform_vector(shader, GPU_shader_get_uniform(shader, "light"), 3, 1, light); - GPU_shader_uniform_vector(shader, GPU_shader_get_uniform(shader, "alpha"), 1, 1, &alpha); - GPU_shader_uniform_vector(shader, GPU_shader_get_uniform(shader, "global"), 1, 1, &world_light); - } - bool do_fast = fast && buffers->triangles_fast; Batch *triangles = do_fast ? buffers->triangles_fast : buffers->triangles; if (triangles) { + if (triangles->interface == NULL) { + GPUBuiltinShader shader_id = + buffers->smooth ? GPU_SHADER_SIMPLE_LIGHTING_SMOOTH_COLOR : GPU_SHADER_SIMPLE_LIGHTING_FLAT_COLOR; + GPUShader *shader = GPU_shader_get_builtin_shader(shader_id); + + Batch_set_program( + triangles, + GPU_shader_get_program(shader), GPU_shader_get_interface(shader)); + } Batch_draw(triangles); } } +Batch *GPU_draw_pbvh_buffers_get_batch(GPU_PBVH_Buffers *buffers, bool fast) +{ + return (fast && buffers->triangles_fast) ? + buffers->triangles_fast : buffers->triangles; +} + bool GPU_pbvh_buffers_diffuse_changed(GPU_PBVH_Buffers *buffers, GSet *bm_faces, bool show_diffuse_color) { float diffuse_color[4]; |