summaryrefslogtreecommitdiffstatsci
diff options
context:
space:
mode:
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>2026-09-03 18:42:56 +0200
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>2026-09-04 11:11:40 +0200
commit9ba0c9f66c9d3b8dc9a241991d1759c08a908f17 (patch)
tree4ceb96922835b27a39fbffbd4af8e8fc7ba7521c
parent0c8efc4b204508571761a86853399ec40c4ce136 (diff)
compilation/headers improvments, savedStencils bug wip
-rw-r--r--CMakeLists.txt32
-rw-r--r--gunit_tests/matrices.cpp2
-rw-r--r--gunit_tests/patternDraw.cpp31
-rw-r--r--gunit_tests/unitTest.h2
-rw-r--r--include/vkvg.h16
-rw-r--r--samples/CMakeLists.txt13
-rw-r--r--samples/SampleApp.cpp11
-rw-r--r--samples/SampleApp.hpp4
-rw-r--r--src/vkvg_context.c4
-rw-r--r--src/vkvg_device.c1
-rw-r--r--src/vkvg_fonts.h8
-rw-r--r--src/vkvg_internal.h27
-rw-r--r--src/vkvg_surface.c4
-rw-r--r--tests/common/vkengine.c2
m---------vkh0
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