Commit: 7ba07b7e64c884bf69aa3c31d771e0275d39c1c3 Author: Campbell Barton Date: Tue Jan 16 00:06:39 2018 +1100 Branches: blender2.8 https://developer.blender.org/rB7ba07b7e64c884bf69aa3c31d771e0275d39c1c3
GPU_batch_from_poly_2d_encoded: optional rctf arg Also use compiler attributes =================================================================== M source/blender/editors/manipulator_library/manipulator_types/button2d_manipulator.c M source/blender/gpu/GPU_batch.h M source/blender/gpu/intern/gpu_batch.c =================================================================== diff --git a/source/blender/editors/manipulator_library/manipulator_types/button2d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/button2d_manipulator.c index 6d5b6332ec5..a60204b5f0a 100644 --- a/source/blender/editors/manipulator_library/manipulator_types/button2d_manipulator.c +++ b/source/blender/editors/manipulator_library/manipulator_types/button2d_manipulator.c @@ -114,7 +114,7 @@ static void button2d_draw_intern( /* We shouldn't need the +1, but a NULL char is set. */ char *polys = MEM_mallocN(polys_len + 1, __func__); RNA_property_string_get(mpr->ptr, prop, polys); - button->shape_batch = GPU_batch_from_poly_2d_encoded((uchar *)polys, polys_len, -1.0f, 1.0f); + button->shape_batch = GPU_batch_from_poly_2d_encoded((uchar *)polys, polys_len, NULL); MEM_freeN(polys); } } diff --git a/source/blender/gpu/GPU_batch.h b/source/blender/gpu/GPU_batch.h index 8b2dc2af355..4eaf90b486e 100644 --- a/source/blender/gpu/GPU_batch.h +++ b/source/blender/gpu/GPU_batch.h @@ -33,26 +33,31 @@ #include "../../../intern/gawain/gawain/gwn_batch.h" +struct rctf; + // TODO: CMake magic to do this: // #include "gawain/batch.h" +#include "BLI_compiler_attrs.h" + #include "GPU_shader.h" /* Extend GWN_batch_program_set to use Blender’s library of built-in shader programs. */ /* gpu_batch.c */ -void GWN_batch_program_set_builtin(Gwn_Batch *, GPUBuiltinShader); +void GWN_batch_program_set_builtin(Gwn_Batch *batch, GPUBuiltinShader shader_id) ATTR_NONNULL(1); Gwn_Batch *GPU_batch_from_poly_2d_encoded( - const uchar *polys_flat, uint polys_flat_len, float min, float max); + const uchar *polys_flat, uint polys_flat_len, const struct rctf *rect + ) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1); void gpu_batch_init(void); void gpu_batch_exit(void); /* gpu_batch_presets.c */ /* Replacement for gluSphere */ -Gwn_Batch *GPU_batch_preset_sphere(int lod); -Gwn_Batch *GPU_batch_preset_sphere_wire(int lod); +Gwn_Batch *GPU_batch_preset_sphere(int lod) ATTR_WARN_UNUSED_RESULT; +Gwn_Batch *GPU_batch_preset_sphere_wire(int lod) ATTR_WARN_UNUSED_RESULT; void gpu_batch_presets_init(void); void gpu_batch_presets_exit(void); diff --git a/source/blender/gpu/intern/gpu_batch.c b/source/blender/gpu/intern/gpu_batch.c index deee84e92cb..67a2fc5ab24 100644 --- a/source/blender/gpu/intern/gpu_batch.c +++ b/source/blender/gpu/intern/gpu_batch.c @@ -32,6 +32,7 @@ #include "MEM_guardedalloc.h" #include "BLI_utildefines.h" +#include "BLI_rect.h" #include "BLI_math.h" #include "BLI_polyfill2d.h" @@ -61,25 +62,38 @@ void GWN_batch_program_set_builtin(Gwn_Batch *batch, GPUBuiltinShader shader_id) * Creates triangles from a byte-array of polygons. * * See 'make_shape_2d_from_blend.py' utility to create data to pass to this function. + * + * \param polys_flat: Pairs of X, Y coordinates (repeating to signify closing the polygon). + * \param polys_flat_len: Length of the array (must be an even number). + * \param rect: Optional region to map the byte 0..255 coords to. When not set use -1..1. */ Gwn_Batch *GPU_batch_from_poly_2d_encoded( - const uchar *polys_flat, uint polys_flat_len, float min, float max) + const uchar *polys_flat, uint polys_flat_len, const rctf *rect) { uchar (*polys)[2] = (void *)polys_flat; uint polys_len = polys_flat_len / 2; + BLI_assert(polys_flat_len == polys_len * 2); /* Over alloc in both cases */ float (*verts)[2] = MEM_mallocN(sizeof(*verts) * polys_len, __func__); float (*verts_step)[2] = verts; uint (*tris)[3] = MEM_mallocN(sizeof(*tris) * polys_len, __func__); uint (*tris_step)[3] = tris; - const float range_uchar = (max - min) / 255.0f; + + const float range_uchar[2] = { + (rect ? (rect->xmax - rect->xmin) : 2.0f) / 255.0f, + (rect ? (rect->ymax - rect->ymin) : 2.0f) / 255.0f, + }; + const float min_uchar[2] = { + (rect ? rect->xmin : -1.0f), + (rect ? rect->ymin : -1.0f), + }; uint i_poly = 0; uint i_vert = 0; while (i_poly != polys_len) { for (uint j = 0; j < 2; j++) { - verts[i_vert][j] = min + ((float)polys[i_poly][j] * range_uchar); + verts[i_vert][j] = min_uchar[j] + ((float)polys[i_poly][j] * range_uchar[j]); } i_vert++; i_poly++; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs