/
vTech
/
FcApps
Обзор
Документация
Войти
/
vTech
/
FcApps
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/FcTest_pixelField.h
101 строка
3 KB
vTech
alpha_00
03 дек 2025, 17:45
03 дек 2025, 17:45
ab8382d
Код
Авторство
О чём код?
#ifndef _FCTEST_FONT_PIXEL_FIELD_H_ #define _FCTEST_FONT_PIXEL_FIELD_H_ #define STEP 16 #define FSTEP (1 / (STEP)) #include "FcUI_Raster_Primitive.h" FCDEF float FcStep(float step, float x) { return x < step ? 0 : 1; } FCDEF float FcFract(float x) { return x - (size_t)x; } FCDEF float FcClamp(float x, float minVal, float maxVal) { return min(max(x, minVal), maxVal); } FCDEF float FcSmoothstep(float edge0, float edge1, float x) { float t = FcClamp((x - edge0) / (edge1 - edge0), 0.0, 1.0); return t * t * (3.0 - 2.0 * t); } FCDEF float FcMod(float x, float y) { return x - y * floor(x / y); } FCDEF FcVec2f_t FcFloor_v2f(FcVec2f_t a) { return FcVec2f(floor(a.m[0]), floor(a.m[1])); } FCDEF FcVec2f_t FcCeil_v2f(FcVec2f_t a) { return FcVec2f(ceil(a.m[0]), ceil(a.m[1])); } FCDEF FcVec2i64_t FcCeil_v2i64(FcVec2i64_t a) { return FcVec2i64(ceil(a.m[0]), ceil(a.m[1])); } FCDEF FcVec2f_t FcMod_v2f(FcVec2f_t x, FcVec2f_t y) { return FcVec2f_sub(x, FcVec2f_mul(y, FcFloor_v2f(FcVec2f_div(x, y)))); } FCDEF FcVec2f_t FcAbs_v2f(FcVec2f_t x) { return FcVec2f(abs(x.m[0]), abs(x.m[1])); } FCDEF float FcGrid(FcVec2f_t xy, float space, float gridWidth) { FcVec2f_t p = FcVec2f_sub(xy, FcVec2f(.5, .5)); FcVec2f_t size = FcVec2f(gridWidth, gridWidth); float a0 = FcMod(FcVec2f_sub(p, size).m[0], space); float a1 = FcMod(FcVec2f_sub(p, size).m[1], space); float a2 = FcMod(FcVec2f_add(p, size).m[0], space); float a3 = FcMod(FcVec2f_add(p, size).m[1], space); float b0 = a3 - a1; float b1 = a2 - a0; float g = min(b0, b1); return FcClamp(g, 0., 1.0); } FCDEF void FcTest_Font_pixelField_init(FcUI_Raster_Primitive_pixelPoints_t* pPixelPoints); FCDEF void FcTest_Font_pixelField_pointOnCurve(FcUI_Raster_Primitive_pixelPoints_t* pVectorField, FcImage_RGBA_t* pImage, size_t mMouseX, size_t mMouseY); FCDEF void FcTest_Font_pixelField_pointOffCurve(FcUI_Raster_Primitive_pixelPoints_t* pVectorField, FcImage_RGBA_t* pImage, size_t mMouseX, size_t mMouseY); FCDEF void FcTest_Font_pixelField_init(FcUI_Raster_Primitive_pixelPoints_t* pPixelPoints) { FcUI_Raster_Primitive_pixelPoints(pPixelPoints); } FCDEF void FcTest_Font_pixelField_pointOnCurve(FcUI_Raster_Primitive_pixelPoints_t* pVectorField, FcImage_RGBA_t* pImage, size_t mMouseX, size_t mMouseY) { FcVec2i64_t mData = FcVec2i64((mMouseX % STEP) > 1 ? 1 : 0, (mMouseY % STEP) > 1 ? 1 : 0); mData = FcVec2i64_add(FcVec2i64(mMouseX / STEP, mMouseY / STEP), mData); mData = FcVec2i64_mul(mData, FcVec2i64(STEP, STEP)); mData = FcVec2i64_sub(mData, FcVec2i64(STEP / 2, STEP / 2)); FcUI_Raster_Primitive_addOnPoint_lc2(pVectorField, mData); } FCDEF void FcTest_Font_pixelField_pointOffCurve(FcUI_Raster_Primitive_pixelPoints_t* pVectorField, FcImage_RGBA_t* pImage, size_t mMouseX, size_t mMouseY) { FcVec2i64_t mData = FcVec2i64((mMouseX % STEP) > 1 ? 1 : 0, (mMouseY % STEP) > 1 ? 1 : 0); mData = FcVec2i64_add(FcVec2i64(mMouseX / STEP, mMouseY / STEP), mData); mData = FcVec2i64_mul(mData, FcVec2i64(STEP, STEP)); mData = FcVec2i64_sub(mData, FcVec2i64(STEP / 2, STEP / 2)); FcUI_Raster_Primitive_addOffPoint_lc2(pVectorField, mData); } FCDEF void FcTest_Font_pixelField_draw(FcUI_Raster_Primitive_pixelPoints_t* pVectorField, FcImage_RGBA_t* pImage) { FcImage_RGBA_setColor(pImage, 0, 0, 0, 255); FcUI_Raster_Primitive_lc2(pImage, pVectorField); FcUI_Raster_Primitive_filling_lc2(pImage, pVectorField); FcUI_Raster_Primitive_drawPoints_lc2(pImage, pVectorField); } #endif //_FCTEST_FONT_PIXEL_FIELD_H_