diff options
| author | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2026-09-03 18:42:56 +0200 |
|---|---|---|
| committer | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2026-09-04 11:11:40 +0200 |
| commit | 9ba0c9f66c9d3b8dc9a241991d1759c08a908f17 (patch) | |
| tree | 4ceb96922835b27a39fbffbd4af8e8fc7ba7521c | |
| parent | 0c8efc4b204508571761a86853399ec40c4ce136 (diff) | |
compilation/headers improvments, savedStencils bug wip
| -rw-r--r-- | CMakeLists.txt | 32 | ||||
| -rw-r--r-- | gunit_tests/matrices.cpp | 2 | ||||
| -rw-r--r-- | gunit_tests/patternDraw.cpp | 31 | ||||
| -rw-r--r-- | gunit_tests/unitTest.h | 2 | ||||
| -rw-r--r-- | include/vkvg.h | 16 | ||||
| -rw-r--r-- | samples/CMakeLists.txt | 13 | ||||
| -rw-r--r-- | samples/SampleApp.cpp | 11 | ||||
| -rw-r--r-- | samples/SampleApp.hpp | 4 | ||||
| -rw-r--r-- | src/vkvg_context.c | 4 | ||||
| -rw-r--r-- | src/vkvg_device.c | 1 | ||||
| -rw-r--r-- | src/vkvg_fonts.h | 8 | ||||
| -rw-r--r-- | src/vkvg_internal.h | 27 | ||||
| -rw-r--r-- | src/vkvg_surface.c | 4 | ||||
| -rw-r--r-- | tests/common/vkengine.c | 2 | ||||
| m--------- | vkh | 0 |
15 files changed, 114 insertions, 43 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index dc68ae0..9e92cb1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,12 +4,14 @@ SET(LANG "C") SET(CMAKE_${LANG}_STANDARD 11) SET(CMAKE_${LANG}_EXTENSIONS on) -SET(CMAKE_CXX_STANDARD 11) +set(CMAKE_C_VISIBILITY_PRESET hidden) +set(CMAKE_CXX_VISIBILITY_PRESET hidden) +set(CMAKE_VISIBILITY_INLINES_HIDDEN ON) #OPTION (VKVG_BUILD_SHARED_LIB "Build using shared libraries" OFF) #SET(BUILD_SHARED_LIBS ${VKVG_BUILD_SHARED_LIB}) -PROJECT(vkvg VERSION 0.3.0 DESCRIPTION "Vulkan Vector Graphic") +PROJECT(vkvg VERSION 0.3.0 DESCRIPTION "Vulkan Vector Graphic" LANGUAGES C CXX) ADD_COMPILE_DEFINITIONS( "VKVG_VERSION_MAJOR=${vkvg_VERSION_MAJOR}" @@ -37,6 +39,16 @@ IF (UNIX) ENDIF() ENDIF() +OPTION(ENABLE_PROFILING "compile with the -pg options..." OFF) +IF (ENABLE_PROFILING) + ADD_COMPILE_OPTIONS( + -pg -fno-reorder-functions -fno-inline + -O1 + -fthread-jumps + -falign-functions -falign-jumps + -falign-loops -falign-labels) +ENDIF() + if (CMAKE_BUILD_TYPE STREQUAL "Debug") ADD_DEFINITIONS (-DDEBUG) OPTION(ENABLE_VALIDATION "enable vulkan validation layer" ON) @@ -72,21 +84,13 @@ ELSE() ENDIF() ENDIF() -OPTION(ENABLE_PROFILING "compile with the -pg options..." OFF) OPTION(ENABLE_GTESTS "enable google unit tests" ON) IF(ENABLE_GTESTS) ADD_SUBDIRECTORY (gunit_tests) ENDIF() -IF (ENABLE_PROFILING) - ADD_COMPILE_OPTIONS( - -pg -fno-reorder-functions -fno-inline - -O1 - -fthread-jumps - -falign-functions -falign-jumps - -falign-loops -falign-labels) -ENDIF() + OPTION(VKVG_RECORDING "enable experimental recording functions" OFF) @@ -275,6 +279,8 @@ SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES VERSION ${vkvg_VERSION_MAJOR}.${vkvg_VERSION_MINOR} SOVERSION ${vkvg_VERSION_MAJOR} C_STANDARD 11 + C_STANDARD_REQUIRED ON + C_EXTENSIONS OFF LINKER_LANGUAGE C PUBLIC_HEADER "${VKVG_PUBLIC_HEADERS}" ) @@ -287,10 +293,10 @@ TARGET_INCLUDE_DIRECTORIES("${PROJECT_NAME}" $<$<BOOL:${VKVG_USE_HARFBUZZ}>:${HarfBuzz_INCLUDE_DIRS}> $<$<BOOL:${VKVG_USE_FONTCONFIG}>:${Fontconfig_INCLUDE_DIRS}> $<$<NOT:$<BOOL:${VKVG_SVG}>>:${CMAKE_CURRENT_SOURCE_DIR}/src/nsvg> - PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/vkh/include + PUBLIC ${Vulkan_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/include - ${CMAKE_CURRENT_SOURCE_DIR}/vkh/include ) IF (UNIX AND BUILD_SHARED_LIBS) diff --git a/gunit_tests/matrices.cpp b/gunit_tests/matrices.cpp index 679346e..43bbfb8 100644 --- a/gunit_tests/matrices.cpp +++ b/gunit_tests/matrices.cpp @@ -1,5 +1,5 @@ -#include <gtest/gtest.h> #include "vkvg.h" +#include <gtest/gtest.h> #include "unitTest.h" TEST(MatrixTest, MatixInit) { diff --git a/gunit_tests/patternDraw.cpp b/gunit_tests/patternDraw.cpp index 131a488..101869c 100644 --- a/gunit_tests/patternDraw.cpp +++ b/gunit_tests/patternDraw.cpp @@ -36,6 +36,37 @@ TEST_F(PatternDrawTest, References) { // EXPECT_EQ(NULL, pat); } +TEST_F(PatternDrawTest, CreateSetGet) { + VkvgContext ctx = vkvg_create(surf); + vkvg_paint(ctx); + VkvgPattern src = vkvg_get_source (ctx);//get default pattern + + VkvgPattern pat = vkvg_pattern_create_for_surface(NULL); + vkvg_set_source(ctx, pat); + EXPECT_EQ(2, vkvg_pattern_get_reference_count(pat)); + src = vkvg_get_source (ctx); + EXPECT_EQ(3, vkvg_pattern_get_reference_count(pat)); + vkvg_pattern_destroy(pat); + EXPECT_EQ(2, vkvg_pattern_get_reference_count(pat)); + vkvg_pattern_destroy(pat); + EXPECT_EQ(1, vkvg_pattern_get_reference_count(pat)); + vkvg_pattern_destroy(pat); + EXPECT_EQ(0, vkvg_pattern_get_reference_count(pat)); + EXPECT_EQ(0, vkvg_pattern_get_reference_count(src)); + EXPECT_EQ(VKVG_STATUS_NULL_POINTER, vkvg_pattern_status(pat)); + EXPECT_EQ(VKVG_STATUS_NULL_POINTER, vkvg_pattern_status(src)); + + src = vkvg_get_source (ctx); + + /*pat = vkvg_pattern_create_linear(0, 0, 0, 0); + src = vkvg_get_source (ctx); + EXPECT_EQ(3, vkvg_pattern_get_reference_count(pat));*/ + + + + vkvg_destroy(ctx); +} + TEST_F(PatternDrawTest, PaintPattern) { VkvgContext ctx = vkvg_create(surf); diff --git a/gunit_tests/unitTest.h b/gunit_tests/unitTest.h index 9cd05d2..9c0c4db 100644 --- a/gunit_tests/unitTest.h +++ b/gunit_tests/unitTest.h @@ -1,5 +1,7 @@ #pragma once +#include <math.h> + #define CHECK_MAT(_xx, _yx, _xy, _yy, _x0, _y0) \ EXPECT_FLOAT_EQ(mat.xx, _xx); \ EXPECT_FLOAT_EQ(mat.yx, _yx); \ diff --git a/include/vkvg.h b/include/vkvg.h index c4f23b4..fd2226b 100644 --- a/include/vkvg.h +++ b/include/vkvg.h @@ -22,8 +22,15 @@ #ifndef VKVG_H #define VKVG_H +#include <stdint.h> +#include <stddef.h> + +#include <vulkan/vulkan.h> + #ifdef __cplusplus extern "C" { +#else +#include <stdbool.h> #endif /** @mainpage Documentation @@ -66,18 +73,14 @@ extern "C" { * @brief Functions and types related to path edition. */ -#include <vulkan/vulkan.h> -#include <math.h> -#include <stdbool.h> - #ifndef vkvg_public #ifdef VKVG_SHARED_BUILD -#if (defined(_WIN32) || defined(_WIN64)) +#if (defined(_WIN32) || defined(__CYGWIN__)) #define vkvg_public __declspec(dllexport) #else #define vkvg_public __attribute__((visibility("default"))) #endif -#elif (defined(VKVG_SHARED_LINKING) && (defined(_WIN32) || defined(_WIN64))) +#elif (defined(VKVG_SHARED_LINKING) && (defined(_WIN32) || defined(__CYGWIN__))) #define vkvg_public __declspec(dllimport) #else #define vkvg_public @@ -99,6 +102,7 @@ extern "C" { #define VKVG_LOG_FULL 0xffffffff #define VKVG_LOG_INFO 0x00008000 //(VKVG_LOG_INFO_PTS|VKVG_LOG_INFO_PATH|VKVG_LOG_INFO_CMD|VKVG_LOG_INFO_VAO) + #ifdef DEBUG extern uint32_t vkvg_log_level; #ifdef VKVG_WIRED_DEBUG diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 1e31316..ab4f883 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -1,9 +1,6 @@ cmake_minimum_required(VERSION 3.14) -project(samples) -# GoogleTest requires at least C++14 -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) +project(samples C CXX) include(FetchContent) @@ -21,10 +18,14 @@ file(GLOB SAMPLES_SRC "*.cpp" "tests/*.cpp") add_executable("${PROJECT_NAME}" ${SAMPLES_SRC}) +set_target_properties("${PROJECT_NAME}" PROPERTIES + CXX_STANDARD 17 + CXX_STANDARD_REQUIRED ON +) target_compile_definitions("${PROJECT_NAME}" PUBLIC SAMPLES_DATA_ROOT="${GTEST_DATA_ROOT}" ) -target_include_directories("${PROJECT_NAME}" PUBLIC +target_include_directories("${PROJECT_NAME}" PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_SOURCE_DIR}/include" ${GLFW3_INCLUDE_DIR} @@ -32,7 +33,7 @@ target_include_directories("${PROJECT_NAME}" PUBLIC "${CMAKE_SOURCE_DIR}/vkh/include" "${CMAKE_SOURCE_DIR}/vkh/src" ) -target_link_libraries("${PROJECT_NAME}" +target_link_libraries("${PROJECT_NAME}" PRIVATE vkvg ${Vulkan_LIBRARIES} ${GLFW3_LIBRARY} diff --git a/samples/SampleApp.cpp b/samples/SampleApp.cpp index 16bf11b..bec9a97 100644 --- a/samples/SampleApp.cpp +++ b/samples/SampleApp.cpp @@ -1,16 +1,15 @@ -#include <iostream> -#include <stdio.h> -#include <chrono> -#include "vkvg.h" -#include "vkh.h" +#include "SampleApp.hpp" #include "vkh_phyinfo.h" #include <GLFW/glfw3.h> -#include "SampleApp.hpp" #include "VkvgTest.hpp" +#include <iostream> +#include <stdio.h> +#include <chrono> + bool SampleApp::try_get_phyinfo(VkhPhyInfo* phys, uint32_t phyCount, VkPhysicalDeviceType gpuType, VkhPhyInfo* phy) { for (uint32_t i = 0; i < phyCount; i++) { if (phys[i]->properties.deviceType == gpuType) { diff --git a/samples/SampleApp.hpp b/samples/SampleApp.hpp index 959d2be..362db5c 100644 --- a/samples/SampleApp.hpp +++ b/samples/SampleApp.hpp @@ -1,9 +1,11 @@ #pragma once #include <stdio.h> #include <vector> +#include <math.h> +#include <assert.h> -#include "vkvg.h" #include "vkh.h" +#include "vkvg.h" #include <GLFW/glfw3.h> diff --git a/src/vkvg_context.c b/src/vkvg_context.c index 0abe993..27979e1 100644 --- a/src/vkvg_context.c +++ b/src/vkvg_context.c @@ -1257,6 +1257,7 @@ void vkvg_save(VkvgContext ctx) { vkvg_context_save_t* sav = (vkvg_context_save_t*)calloc(1, sizeof(vkvg_context_save_t)); _flush_cmd_buff(ctx); + if (!_wait_ctx_flush_end(ctx)) { free(sav); return; @@ -1268,7 +1269,7 @@ void vkvg_save(VkvgContext ctx) { uint8_t curSaveStencil = ctx->curSavBit / 6; if (ctx->curSavBit > 0 && ctx->curSavBit % 6 == 0) { // new save/restore stencil image have to be created - VkhImage* savedStencilsPtr = NULL; + VkhImage* savedStencilsPtr = ctx->savedStencils; if (savedStencilsPtr) savedStencilsPtr = (VkhImage*)realloc(ctx->savedStencils, curSaveStencil * sizeof(VkhImage)); else @@ -1401,6 +1402,7 @@ void vkvg_restore(VkvgContext ctx) { uint8_t curSaveBit = 1 << ((ctx->curSavBit - 1) % 6 + 2); + //ctx->renderPassBeginInfo.renderPass = ctx->dev->renderPass_ClearStencil; _start_cmd_for_render_pass(ctx); #if defined(DEBUG) && defined(VKVG_DBG_UTILS) diff --git a/src/vkvg_device.c b/src/vkvg_device.c index 97e31e5..1784951 100644 --- a/src/vkvg_device.c +++ b/src/vkvg_device.c @@ -236,6 +236,7 @@ vkvg_status_t vkvg_get_required_device_extensions(VkPhysicalDevice phy, const ch } _CHECK_DEV_EXT(VK_KHR_timeline_semaphore) #endif + _CHECK_DEV_EXT(VK_EXT_extended_dynamic_state) return VKVG_STATUS_SUCCESS; } diff --git a/src/vkvg_fonts.h b/src/vkvg_fonts.h index b8ac311..db9c546 100644 --- a/src/vkvg_fonts.h +++ b/src/vkvg_fonts.h @@ -25,6 +25,9 @@ // disable warning on iostream functions on windows #define _CRT_SECURE_NO_WARNINGS +#include "vkvg_internal.h" +#include "vkh_buffer.h" + #ifdef VKVG_USE_FREETYPE #include <ft2build.h> #include FT_FREETYPE_H @@ -45,7 +48,9 @@ #ifdef VKVG_USE_HARFBUZZ #include <harfbuzz/hb.h> +#if VKVG_USE_FREETYPE #include <harfbuzz/hb-ft.h> +#endif #else #endif @@ -58,9 +63,6 @@ #define FONT_FILE_NAME_MAX_SIZE 1024 #define FONT_NAME_MAX_SIZE 128 -#include "vkvg_internal.h" -#include "vkh_buffer.h" - // texture coordinates of one character in font cache array texture. typedef struct { vec4 bounds; /* normalized float bounds of character bitmap in font cache texture. */ diff --git a/src/vkvg_internal.h b/src/vkvg_internal.h index b302a09..41761d0 100644 --- a/src/vkvg_internal.h +++ b/src/vkvg_internal.h @@ -22,15 +22,23 @@ #pragma once // disable warning on iostream functions on windows -#define _CRT_SECURE_NO_WARNINGS + +#if defined(_WIN32) +# define _CRT_SECURE_NO_WARNINGS +# define WIN32_LEAN_AND_MEAN +# define NOMINMAX +#endif #include <assert.h> + +#include "vkh.h" +#include "vkvg.h" + #include <float.h> #include <stdbool.h> #include <stdint.h> #include <stdio.h> // needed before stdarg.h on Windows #include <stdarg.h> -#include <string.h> // should be supported by c11 // #include <threads.h> @@ -49,7 +57,7 @@ #define M_2_PI 0.63661977236758134308 // 2/pi #endif*/ -#ifdef DEBUG +/*#ifdef DEBUG #define LOG(level, ...) \ { \ if ((vkvg_log_level) & (level)) \ @@ -57,7 +65,16 @@ } #else #define LOG -#endif +#endif*/ + +#define VK_CHECK_RESULT(f) \ +{ \ + VkResult res = (f); \ + if (res != VK_SUCCESS) { \ + LOG(VKH_LOG_ERR, "Fatal : VkResult is %d in %s at line %d\n", res, __FILE__, __LINE__); \ + assert(res == VK_SUCCESS); \ + } \ +} #define PATH_CLOSED_BIT 0x80000000 /* most significant bit of path elmts is closed/open path state */ #define PATH_HAS_CURVES_BIT \ @@ -93,8 +110,6 @@ #define VKVG_FENCE_TIMEOUT 30000000000 // #define VKVG_FENCE_TIMEOUT 10000 -#include "vkvg.h" -#include "vkh.h" #include "vectors.h" /*typedef struct { diff --git a/src/vkvg_surface.c b/src/vkvg_surface.c index 2abbe0a..f99a061 100644 --- a/src/vkvg_surface.c +++ b/src/vkvg_surface.c @@ -23,8 +23,12 @@ #include "vkvg_surface_internal.h" #include "vkvg_device_internal.h" #include "vkvg_context_internal.h" + +#define STBI_ASSERT(x) ((void)0) +#define STBIW_ASSERT(x) ((void)0) #define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" + #define STB_IMAGE_WRITE_IMPLEMENTATION #include "stb_image_write.h" #include "vkh_image.h" diff --git a/tests/common/vkengine.c b/tests/common/vkengine.c index 1e4d1cd..1dbef2c 100644 --- a/tests/common/vkengine.c +++ b/tests/common/vkengine.c @@ -30,6 +30,8 @@ #include "vkvg.h" +#include <string.h> + #define TRY_LOAD_DEVICE_EXT(ext) \ { \ if (vkh_phyinfo_try_get_extension_properties(pi, #ext, NULL)) \ diff --git a/vkh b/vkh -Subproject 283f7f9ec74ed2cd583d243c6bdd46fa5bc487d +Subproject 01fa911d6a07c3048ac6e10b199b6c67156d841 |