rollback nanovg changes

This commit is contained in:
lixianjing 2025-04-29 16:40:00 +08:00
parent 604e21dc65
commit ff6bf8a660
3 changed files with 4 additions and 48 deletions

View File

@ -1089,7 +1089,6 @@ void nvgScissor(NVGcontext* ctx, float x, float y, float w, float h)
state->scissor.extent[0] = w*0.5f*scale_x;
state->scissor.extent[1] = h*0.5f*scale_y;
memcpy(state->scissor.state_xform, state->xform, sizeof(float)*6);
}
static void nvg__isectRects(float* dst,
@ -1129,7 +1128,7 @@ int nvgGetCurrScissor(NVGcontext* ctx, float* x, float* y, float* w, float* h)
memcpy(pxform, state->scissor.xform, sizeof(float)*6);
ex = state->scissor.extent[0] / scale_x;
ey = state->scissor.extent[1] / scale_y;
nvgTransformInverse(invxorm, state->scissor.state_xform);
nvgTransformInverse(invxorm, state->xform);
nvgTransformMultiply(pxform, invxorm);
tex = ex*nvg__absf(pxform[0]) + ey*nvg__absf(pxform[2]);
tey = ex*nvg__absf(pxform[1]) + ey*nvg__absf(pxform[3]);
@ -1141,30 +1140,6 @@ int nvgGetCurrScissor(NVGcontext* ctx, float* x, float* y, float* w, float* h)
return 1;
}
void nvgIntersectScissorForOtherRect(NVGcontext* ctx, float x, float y, float w, float h, float dx, float dy, float dw, float dh)
{
NVGstate* state = nvg__getState(ctx);
float rect[4];
float invxorm[6];
float ex = 0.0f, ey = 0.0f, tex = 0.0f, tey = 0.0f;
/* 因为脏矩形默认坐标系就是没有旋转没有缩放没有平移的状态 */
float pxform[6] = { 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f };
ex = dw * 0.5f;
ey = dh * 0.5f;
pxform[4] = dx + dw * 0.5f;
pxform[5] = dy + dh * 0.5f;
memset(invxorm, 0, sizeof(float) * 6);
nvgTransformInverse(invxorm, state->xform);
nvgTransformMultiply(pxform, invxorm);
tex = ex*nvg__absf(pxform[0]) + ey*nvg__absf(pxform[2]);
tey = ex*nvg__absf(pxform[1]) + ey*nvg__absf(pxform[3]);
// Intersect rects.
nvg__isectRects(rect, pxform[4] - tex, pxform[5] - tey, tex * 2, tey * 2, x, y, w, h);
nvgScissor(ctx, rect[0], rect[1], rect[2], rect[3]);
}
void nvgIntersectScissor_ex(NVGcontext* ctx, float* x, float* y, float* w, float* h)
{
NVGstate* state = nvg__getState(ctx);
@ -1188,7 +1163,7 @@ void nvgIntersectScissor_ex(NVGcontext* ctx, float* x, float* y, float* w, float
memcpy(pxform, state->scissor.xform, sizeof(float)*6);
ex = state->scissor.extent[0] / scale_x;
ey = state->scissor.extent[1] / scale_y;
nvgTransformInverse(invxorm, state->scissor.state_xform);
nvgTransformInverse(invxorm, state->xform);
nvgTransformMultiply(pxform, invxorm);
tex = ex*nvg__absf(pxform[0]) + ey*nvg__absf(pxform[2]);
tey = ex*nvg__absf(pxform[1]) + ey*nvg__absf(pxform[3]);
@ -1228,7 +1203,7 @@ void nvgIntersectScissor(NVGcontext* ctx, float x, float y, float w, float h)
memcpy(pxform, state->scissor.xform, sizeof(float)*6);
ex = state->scissor.extent[0] / scale_x;
ey = state->scissor.extent[1] / scale_y;
nvgTransformInverse(invxorm, state->scissor.state_xform);
nvgTransformInverse(invxorm, state->xform);
nvgTransformMultiply(pxform, invxorm);
tex = ex*nvg__absf(pxform[0]) + ey*nvg__absf(pxform[2]);
tey = ex*nvg__absf(pxform[1]) + ey*nvg__absf(pxform[3]);

View File

@ -488,25 +488,6 @@ void nvgResetScissor(NVGcontext* ctx);
*/
int nvgGetCurrScissor(NVGcontext* ctx, float* x, float* y, float* w, float* h);
/**
* @method nvgIntersectScissorForOtherRect
*
* nanovg
*
* @annotation ["scriptable"]
* @param {NVGcontext*} ctx nanovg的对象
* @param {float_t} x x坐标
* @param {float_t} y y坐标
* @param {float_t} w
* @param {float_t} h
* @param {float_t} dx x坐标
* @param {float_t} dy y坐标
* @param {float_t} dw
* @param {float_t} dh
*
*/
void nvgIntersectScissorForOtherRect(NVGcontext* ctx, float x, float y, float w, float h, float dx, float dy, float dw, float dh);
//
// Paths
//
@ -696,7 +677,6 @@ enum NVGtexture {
struct NVGscissor {
float xform[6];
float extent[2];
float state_xform[6];
};
typedef struct NVGscissor NVGscissor;

View File

@ -3,6 +3,7 @@
2025/04/29
* 优化nanovg_plus_gl (感谢智明提供补丁)
* 修复nanovg_plus没有清除字体缓存的问题和还原获取裁剪区反算变换矩阵的逻辑(感谢智明提供补丁)
* 修复nanovg还原获取裁剪区反算变换矩阵的逻辑(感谢智明提供补丁)
2025/04/28
* mem_allocator_fixed_block 隔离管理链表与用户内存 (感谢兆坤提供补丁)。