From: Jean-Philippe Bruyère Date: Thu, 16 Dec 2021 08:55:38 +0000 (+0100) Subject: use std430 for gradient buffer X-Git-Tag: v0.2.0~18 X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=9a55e94c27fd7e77bb7c9d2d9f97969ec4268762;p=jp%2Fvkvg.git use std430 for gradient buffer --- diff --git a/README.md b/README.md index f0cf684..4f2b3f4 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,7 @@ Join us on [gitter](https://gitter.im/CSharpRapidOpenWidgets) for any question. - [x] Use Scissor where possible. - [x] Improve stroke algorithms. -- [ ] Radial gradients. +- [x] Radial gradients. - [x] Dashed lines. - [ ] Operators. - [x] Optimize vulkan memory allocations by sub-allocating from a single shared memory chunk per type. @@ -111,6 +111,6 @@ Join us on [gitter](https://gitter.im/CSharpRapidOpenWidgets) for any question. - [x] Test SDF font rendering. - [x] Avoid line joins inside curves and arc. - [ ] Structured unit testing. -- [ ] Perf and memory checks. +- [x] Perf and memory checks. - [ ] Code clean and comment. - [ ] Documentations. diff --git a/shaders/vkvg_main.frag b/shaders/vkvg_main.frag index bd54f8e..bdf1fc1 100644 --- a/shaders/vkvg_main.frag +++ b/shaders/vkvg_main.frag @@ -23,13 +23,14 @@ #extension GL_ARB_separate_shader_objects : enable #extension GL_ARB_shading_language_420pack : enable +#extension GL_EXT_scalar_block_layout : enable layout (set=0, binding = 0) uniform sampler2DArray fontMap; layout (set=1, binding = 0) uniform sampler2D source; -layout (set=2, binding = 0) uniform _uboGrad { - vec4 cp[3]; +layout (std430, set=2, binding = 0) uniform _uboGrad { + vec4 cp[2]; vec4 colors[16]; - vec4 stops[16]; + float stops[16]; uint count; }uboGrad; @@ -77,16 +78,17 @@ void main() float x = gl_FragCoord.x; float xLocRotated = x*cos( alpha ) - y*sin( alpha ); - c = mix(uboGrad.colors[0], uboGrad.colors[1], smoothstep( gradientStartPosRotatedX + uboGrad.stops[0].r*d, gradientStartPosRotatedX + uboGrad.stops[1].r*d, xLocRotated ) ); + c = mix(uboGrad.colors[0], uboGrad.colors[1], smoothstep( gradientStartPosRotatedX + uboGrad.stops[0]*d, gradientStartPosRotatedX + uboGrad.stops[1]*d, xLocRotated ) ); for ( int i=1; iextend = VKVG_EXTEND_PAD; vkvg_gradient_t* grad = (vkvg_gradient_t*)calloc(1,sizeof(vkvg_gradient_t)); - vec4 cp0 = {x0, y0}, cp1 = {x1, y1}; - grad->cp[0] = cp0; - grad->cp[1] = cp1; + grad->cp[0] = (vec4){{x0}, {y0}, {x1}, {y1}}; pat->data = grad; @@ -60,10 +58,8 @@ VkvgPattern vkvg_pattern_create_radial (float cx0, float cy0, float radius0, vkvg_gradient_t* grad = (vkvg_gradient_t*)calloc(1,sizeof(vkvg_gradient_t)); - vec4 cp0 = {cx0, cy0}, cp1 = {cx1, cy1}, rads = {radius0, radius1}; - grad->cp[0] = cp0; - grad->cp[1] = cp1; - grad->cp[2] = rads; + grad->cp[0] = (vec4){{cx0}, {cy0},{radius0},{0}}; + grad->cp[1] = (vec4){{cx1}, {cy1},{radius1},{0}}; pat->data = grad; @@ -85,7 +81,7 @@ void vkvg_pattern_add_color_stop (VkvgPattern pat, float offset, float r, float vkvg_gradient_t* grad = (vkvg_gradient_t*)pat->data; vkvg_color_t c = {r,g,b,a}; grad->colors[grad->count] = c; - grad->stops[grad->count].r = offset; + grad->stops[grad->count] = offset; grad->count++; } void vkvg_pattern_set_extend (VkvgPattern pat, vkvg_extend_t extend){ diff --git a/src/vkvg_pattern.h b/src/vkvg_pattern.h index 76c5006..56b4439 100644 --- a/src/vkvg_pattern.h +++ b/src/vkvg_pattern.h @@ -35,9 +35,9 @@ typedef struct _vkvg_pattern_t { }vkvg_pattern_t; typedef struct _vkvg_gradient_t { - vec4 cp[3];//two first are normal cp, third are radiuses for radial + vec4 cp[2]; vkvg_color_t colors[16]; - vec4 stops[16]; + float stops[16]; uint32_t count; }vkvg_gradient_t;