From 01d1848b113742164968dea214b0b412b5b2cbfb Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Fri, 24 Jun 2022 13:06:57 -0700 Subject: [PATCH] cmake config + optional SDL2 dependency --- CMakeLists.txt | 89 ++++++++++++++++++++ README.md | 4 + src/Silkworm2.c | 170 +++++++++++++++++++++------------------ visualc/Silkworm.vcxproj | 8 ++ 4 files changed, 193 insertions(+), 78 deletions(-) create mode 100644 CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..cbf3310 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,89 @@ +cmake_minimum_required(VERSION 2.8.12) +project(Silkworm2 C) + +option(BUILD_SHARED_LIBS "Build shared library" ON) +option(USE_SDL2 "Use SDL2" ON) + +SET(LIB_MAJOR_VERSION "0") +SET(LIB_MINOR_VERSION "1") +SET(LIB_REVISION "0") +SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_REVISION}") + +# Build Type +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + # By default, we use Release + message(STATUS "Setting build type to 'Release' as none was specified.") + set(CMAKE_BUILD_TYPE "Release" CACHE + STRING "Choose the type of build." FORCE + ) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY + STRINGS "Debug" "Release" "RelWithDebInfo" + ) +endif() + +# Platform Flags +if(APPLE) + set(CMAKE_MACOSX_RPATH ON) + set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9) + set(LOBJC "objc") +elseif(WIN32) + # "Silkworm2.dll", not "libSilkworm2.dll" + set(CMAKE_SHARED_LIBRARY_PREFIX "") +endif() +if(UNIX) + set(CMAKE_SKIP_BUILD_RPATH TRUE) + set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) + set(CMAKE_INSTALL_RPATH ${BIN_RPATH}) + set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE) +endif() + +if(USE_SDL2) + add_definitions(-DUSE_SDL2) +endif() + +add_library(Silkworm2 + #Public header + src/Silkworm2.h + #Source + src/Silkworm2.c +) + +# Build flags +if(NOT MSVC) + set_property(TARGET Silkworm2 PROPERTY COMPILE_FLAGS "-std=gnu99 -Wall -Wno-strict-aliasing -pedantic") +endif() + +# includes +target_include_directories(Silkworm2 PUBLIC + $ +) + +# Soname +set_target_properties(Silkworm2 PROPERTIES OUTPUT_NAME "Silkworm2" + VERSION ${LIB_VERSION} + SOVERSION ${LIB_MAJOR_VERSION} +) + +# SDL2 Dependency +if(USE_SDL2) + if (DEFINED SDL2_INCLUDE_DIRS AND DEFINED SDL2_LIBRARIES) + message(STATUS "using pre-defined SDL2 variables SDL2_INCLUDE_DIRS and SDL2_LIBRARIES") + target_include_directories(Silkworm2 PUBLIC "$") + target_link_libraries(Silkworm2 PUBLIC ${SDL2_LIBRARIES}) + else() + # Only try to autodetect if both SDL2 variables aren't explicitly set + find_package(SDL2 CONFIG) + if (TARGET SDL2::SDL2) + message(STATUS "using TARGET SDL2::SDL2") + target_link_libraries(Silkworm2 PUBLIC SDL2::SDL2) + elseif (TARGET SDL2) + message(STATUS "using TARGET SDL2") + target_link_libraries(Silkworm2 PUBLIC SDL2) + else() + message(STATUS "no TARGET SDL2::SDL2, or SDL2, using variables") + target_include_directories(Silkworm2 PUBLIC "$") + target_link_libraries(Silkworm2 PUBLIC ${SDL2_LIBRARIES}) + endif() + endif() +endif() diff --git a/README.md b/README.md index 6160b9e..0f2d701 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,10 @@ Silkworm2 is a cloth physics simulation system that was designed for the game Sa What if we weren't constrained by the absolute garbage FFI system of Game Maker Studio 2? This library answers that question. +## Dependencies + +Silkworm2 optionally depends on SDL2, but you can use the standard library if you so choose by disabling USE_SDL2. + ## License This library is licensed under the zlib license. See LICENSE file for details. diff --git a/src/Silkworm2.c b/src/Silkworm2.c index d7d84cc..e0636e3 100644 --- a/src/Silkworm2.c +++ b/src/Silkworm2.c @@ -26,9 +26,31 @@ #include "Silkworm2.h" +/* Function defines */ + +#ifdef USE_SDL2 + +#include + +#define Silkworm_malloc SDL_malloc +#define Silkworm_realloc SDL_realloc +#define Silkworm_free SDL_free +#define Silkworm_sin SDL_sin +#define Silkworm_fabs SDL_fabs + +#else + #include #include +#define Silkworm_malloc malloc +#define Silkworm_realloc realloc +#define Silkworm_free free +#define Silkworm_sin sinf +#define Silkworm_fabs fabs + +#endif + #define PI 3.14159265358979323846 typedef struct Silkworm_Vector2 @@ -37,14 +59,6 @@ typedef struct Silkworm_Vector2 float y; } Silkworm_Vector2; -static inline Silkworm_Vector2 Vector2_Rotate(Silkworm_Vector2 vector, float angle) -{ - Silkworm_Vector2 rotated; - rotated.x = vector.x * cosf(angle) - vector.y * sinf(angle); - rotated.y = vector.x * sinf(angle) + vector.y * cosf(angle); - return rotated; -} - static inline Silkworm_Vector2 Vector2_Normalize(Silkworm_Vector2 vector) { float length = sqrtf(vector.x * vector.x + vector.y * vector.y); @@ -184,7 +198,7 @@ static inline void NodeTriangleHashTable_Insert( { if (arr->elements[i].key == key) { - arr->elements[i].indexArray = realloc(arr->elements[i].indexArray, sizeof(uint32_t) * (arr->elements[i].indexArrayCount + 1)); + arr->elements[i].indexArray = Silkworm_realloc(arr->elements[i].indexArray, sizeof(uint32_t) * (arr->elements[i].indexArrayCount + 1)); arr->elements[i].indexArray[arr->elements[i].indexArrayCount] = index; arr->elements[i].indexArrayCount += 1; foundKey = true; @@ -194,10 +208,10 @@ static inline void NodeTriangleHashTable_Insert( if (!foundKey) { - arr->elements = realloc(arr->elements, sizeof(NodeTriangleHashMap) * (arr->count + 1)); + arr->elements = Silkworm_realloc(arr->elements, sizeof(NodeTriangleHashMap) * (arr->count + 1)); arr->elements[arr->count].key = key; - arr->elements[arr->count].indexArray = malloc(sizeof(uint32_t)); + arr->elements[arr->count].indexArray = Silkworm_malloc(sizeof(uint32_t)); arr->elements[arr->count].indexArray[0] = index; arr->elements[arr->count].indexArrayCount = 1; @@ -266,7 +280,7 @@ static inline void LinkTriangleHashTable_Insert( { if (arr->elements[i].key == key) { - arr->elements[i].indexArray = realloc(arr->elements[i].indexArray, sizeof(uint32_t) * (arr->elements[i].indexArrayCount + 1)); + arr->elements[i].indexArray = Silkworm_realloc(arr->elements[i].indexArray, sizeof(uint32_t) * (arr->elements[i].indexArrayCount + 1)); arr->elements[i].indexArray[arr->elements[i].indexArrayCount] = index; arr->elements[i].indexArrayCount += 1; foundKey = true; @@ -276,10 +290,10 @@ static inline void LinkTriangleHashTable_Insert( if (!foundKey) { - arr->elements = realloc(arr->elements, sizeof(LinkTriangleHashMap) * (arr->count + 1)); + arr->elements = Silkworm_realloc(arr->elements, sizeof(LinkTriangleHashMap) * (arr->count + 1)); arr->elements[arr->count].key = key; - arr->elements[arr->count].indexArray = malloc(sizeof(uint32_t)); + arr->elements[arr->count].indexArray = Silkworm_malloc(sizeof(uint32_t)); arr->elements[arr->count].indexArray[0] = index; arr->elements[arr->count].indexArrayCount = 1; @@ -368,7 +382,7 @@ static Silkworm_Context *context = NULL; void Silkworm_Init() { - context = malloc(sizeof(Silkworm_Context)); + context = Silkworm_malloc(sizeof(Silkworm_Context)); context->nodes = NULL; context->nodeCount = 0; @@ -380,15 +394,15 @@ void Silkworm_Init() context->clothCount = 0; context->nodeIndexStackCapacity = 16; - context->nodeIndexStack = malloc(sizeof(uint64_t) * context->nodeIndexStackCapacity); + context->nodeIndexStack = Silkworm_malloc(sizeof(uint64_t) * context->nodeIndexStackCapacity); context->nodeIndexStackCount = 0; context->linkIndexStackCapacity = 16; - context->linkIndexStack = malloc(sizeof(uint64_t) * context->linkIndexStackCapacity); + context->linkIndexStack = Silkworm_malloc(sizeof(uint64_t) * context->linkIndexStackCapacity); context->linkIndexStackCount = 0; context->clothIndexStackCapacity = 16; - context->clothIndexStack = malloc(sizeof(uint64_t) * context->clothIndexStackCapacity); + context->clothIndexStack = Silkworm_malloc(sizeof(uint64_t) * context->clothIndexStackCapacity); context->clothIndexStackCount = 0; context->gravity = 200; @@ -398,15 +412,15 @@ void Silkworm_Init() context->timeElapsed = 0; context->nodeDestructionDataCapacity = 16; - context->nodeDestructionData = malloc(sizeof(Silkworm_Vector2) * context->nodeDestructionDataCapacity); + context->nodeDestructionData = Silkworm_malloc(sizeof(Silkworm_Vector2) * context->nodeDestructionDataCapacity); context->nodeDestructionDataCount = 0; context->linkDestructionDataCapacity = 16; - context->linkDestructionData = malloc(sizeof(Silkworm_Vector2) * context->nodeDestructionDataCapacity); + context->linkDestructionData = Silkworm_malloc(sizeof(Silkworm_Vector2) * context->nodeDestructionDataCapacity); context->linkDestructionDataCount = 0; context->vertexCapacity = 1024; - context->vertexBuffer = malloc(sizeof(Silkworm_Vertex) * context->vertexCapacity); + context->vertexBuffer = Silkworm_malloc(sizeof(Silkworm_Vertex) * context->vertexCapacity); } static inline Silkworm_Node* LookupNode(uint64_t nodeId) @@ -452,7 +466,7 @@ void Silkworm_DestroyLink(Silkworm_Link* link) if (context->linkDestructionDataCount >= context->linkDestructionDataCapacity) { context->linkDestructionDataCapacity *= 2; - context->linkDestructionData = realloc(context->linkDestructionData, sizeof(Silkworm_Vector2) * context->linkDestructionDataCapacity); + context->linkDestructionData = Silkworm_realloc(context->linkDestructionData, sizeof(Silkworm_Vector2) * context->linkDestructionDataCapacity); } Silkworm_Vector2 position; @@ -476,11 +490,11 @@ void Silkworm_ClothDestroy(void* clothPtr) { for (j = 0; j < cloth->nodeHash.buckets[i].count; j += 1) { - free(cloth->nodeHash.buckets[i].elements[j].indexArray); + Silkworm_free(cloth->nodeHash.buckets[i].elements[j].indexArray); } if (cloth->nodeHash.buckets[i].elements != NULL) { - free(cloth->nodeHash.buckets[i].elements); + Silkworm_free(cloth->nodeHash.buckets[i].elements); } } @@ -488,11 +502,11 @@ void Silkworm_ClothDestroy(void* clothPtr) { for (j = 0; j < cloth->linkHash.buckets[i].count; j += 1) { - free(cloth->linkHash.buckets[i].elements[j].indexArray); + Silkworm_free(cloth->linkHash.buckets[i].elements[j].indexArray); } if (cloth->linkHash.buckets[i].elements != NULL) { - free(cloth->linkHash.buckets[i].elements); + Silkworm_free(cloth->linkHash.buckets[i].elements); } } @@ -507,29 +521,29 @@ void Silkworm_ClothDestroy(void* clothPtr) Silkworm_DestroyNode(node); } } - free(cloth->nodes[i]); + Silkworm_free(cloth->nodes[i]); } - free(cloth->nodes); + Silkworm_free(cloth->nodes); for (i = 0; i < cloth->triangleCount; i += 1) { if (cloth->triangles[i] != NULL) { - free(cloth->triangles[i]); + Silkworm_free(cloth->triangles[i]); } } - free(cloth->triangles); + Silkworm_free(cloth->triangles); if (context->clothIndexStackCount >= context->clothIndexStackCapacity) { context->clothIndexStackCapacity *= 2; - context->nodeIndexStack = realloc(context->nodeIndexStack, sizeof(uint64_t) * context->nodeIndexStackCapacity); + context->nodeIndexStack = Silkworm_realloc(context->nodeIndexStack, sizeof(uint64_t) * context->nodeIndexStackCapacity); } context->clothIndexStack[context->clothIndexStackCount] = cloth->id; context->clothIndexStackCount += 1; - free(cloth); + Silkworm_free(cloth); } } @@ -559,7 +573,7 @@ void Silkworm_PerformDestroys() if (cloth->triangles[triangleIndex] != NULL) { - free(cloth->triangles[triangleIndex]); + Silkworm_free(cloth->triangles[triangleIndex]); cloth->triangles[triangleIndex] = NULL; } } @@ -582,13 +596,13 @@ void Silkworm_PerformDestroys() } } - free(context->links[i]); + Silkworm_free(context->links[i]); context->links[i] = NULL; if (context->linkIndexStackCount >= context->linkIndexStackCapacity) { context->linkIndexStackCapacity *= 2; - context->linkIndexStack = realloc(context->linkIndexStack, sizeof(uint64_t) * context->linkIndexStackCapacity); + context->linkIndexStack = Silkworm_realloc(context->linkIndexStack, sizeof(uint64_t) * context->linkIndexStackCapacity); } context->linkIndexStack[context->linkIndexStackCount] = i; @@ -615,7 +629,7 @@ void Silkworm_PerformDestroys() if (cloth->triangles[triangleIndex] != NULL) { - free(cloth->triangles[triangleIndex]); + Silkworm_free(cloth->triangles[triangleIndex]); cloth->triangles[triangleIndex] = NULL; } } @@ -623,14 +637,14 @@ void Silkworm_PerformDestroys() cloth->nodes[node->clothReference.horizontalIndex][node->clothReference.verticalIndex] = NULL; } - free(context->nodes[i]->links); - free(context->nodes[i]); + Silkworm_free(context->nodes[i]->links); + Silkworm_free(context->nodes[i]); context->nodes[i] = NULL; if (context->nodeIndexStackCount >= context->nodeIndexStackCapacity) { context->nodeIndexStackCapacity *= 2; - context->nodeIndexStack = realloc(context->nodeIndexStack, sizeof(uint64_t) * context->nodeIndexStackCapacity); + context->nodeIndexStack = Silkworm_realloc(context->nodeIndexStack, sizeof(uint64_t) * context->nodeIndexStackCapacity); } context->nodeIndexStack[context->nodeIndexStackCount] = i; @@ -657,8 +671,8 @@ void Silkworm_Update(float delta, float windSpeedX, float windSpeedY) { if (!node->pinned) { - float windFactorX = 0.5f * sinf(context->timeElapsed * 4 + node->position.y / 2) + 0.5f; - float windFactorY = 0.5f * sinf(context->timeElapsed * 4 + node->position.x / 3) + 0.5f; + float windFactorX = 0.5f * Silkworm_sin(context->timeElapsed * 4 + node->position.y / 2) + 0.5f; + float windFactorY = 0.5f * Silkworm_sin(context->timeElapsed * 4 + node->position.x / 3) + 0.5f; node->position.x += windFactorX * windSpeedX * delta * 0.05f * node->windFactor; node->position.y += windFactorY * windSpeedY * delta * 0.05f * node->windFactor; } @@ -731,7 +745,7 @@ void Silkworm_Update(float delta, float windSpeedX, float windSpeedY) node->velocity.x = velocityX * delta; node->velocity.y = velocityY * delta; - if (fabs(node->position.x) > context->xBound || fabs(node->position.x) > context->yBound) + if (Silkworm_fabs(node->position.x) > context->xBound || Silkworm_fabs(node->position.x) > context->yBound) { Silkworm_DestroyNode(node); } @@ -746,7 +760,7 @@ void Silkworm_Update(float delta, float windSpeedX, float windSpeedY) void* Silkworm_CreateNode(Silkworm_NodeCreateInfo* nodeCreateInfo) { - Silkworm_Node* node = malloc(sizeof(Silkworm_Node)); + Silkworm_Node* node = Silkworm_malloc(sizeof(Silkworm_Node)); uint64_t id; if (context->nodeIndexStackCount > 0) @@ -758,7 +772,7 @@ void* Silkworm_CreateNode(Silkworm_NodeCreateInfo* nodeCreateInfo) { id = context->nodeCount; - context->nodes = realloc(context->nodes, sizeof(Silkworm_Node*) * (context->nodeCount + 1)); + context->nodes = Silkworm_realloc(context->nodes, sizeof(Silkworm_Node*) * (context->nodeCount + 1)); context->nodeCount += 1; } @@ -824,7 +838,7 @@ void* Silkworm_CreateLink(void* nodeAPtr, void* nodeBPtr, float distance, float uint64_t id; - Silkworm_Link* link = malloc(sizeof(Silkworm_Link)); + Silkworm_Link* link = Silkworm_malloc(sizeof(Silkworm_Link)); if (context->linkIndexStackCount > 0) { @@ -835,7 +849,7 @@ void* Silkworm_CreateLink(void* nodeAPtr, void* nodeBPtr, float distance, float { id = context->linkCount; - context->links = realloc(context->links, sizeof(Silkworm_Link*) * (context->linkCount + 1)); + context->links = Silkworm_realloc(context->links, sizeof(Silkworm_Link*) * (context->linkCount + 1)); context->linkCount += 1; } @@ -848,11 +862,11 @@ void* Silkworm_CreateLink(void* nodeAPtr, void* nodeBPtr, float distance, float link->tearThreshold = (float)tearThreshold; link->markedForDestroy = false; - link->a->links = realloc(link->a->links, sizeof(Silkworm_Link*) * (link->a->linkCount + 1)); + link->a->links = Silkworm_realloc(link->a->links, sizeof(Silkworm_Link*) * (link->a->linkCount + 1)); link->a->links[link->a->linkCount] = link; link->a->linkCount += 1; - link->b->links = realloc(link->b->links, sizeof(Silkworm_Link*) * (link->b->linkCount + 1)); + link->b->links = Silkworm_realloc(link->b->links, sizeof(Silkworm_Link*) * (link->b->linkCount + 1)); link->b->links[link->b->linkCount] = link; link->b->linkCount += 1; @@ -864,12 +878,12 @@ void* Silkworm_ClothCreate(Silkworm_ClothCreateInfo* clothCreateInfo) int32_t i, j, k, m; Silkworm_NodeCreateInfo nodeCreateInfo; - Silkworm_Cloth* cloth = malloc(sizeof(Silkworm_Cloth)); + Silkworm_Cloth* cloth = Silkworm_malloc(sizeof(Silkworm_Cloth)); cloth->horizontalNodeCount = (uint32_t)clothCreateInfo->horizontalNodeCount; cloth->verticalNodeCount = (uint32_t)clothCreateInfo->verticalNodeCount; - cloth->nodes = malloc(sizeof(Silkworm_Node**) * cloth->horizontalNodeCount); + cloth->nodes = Silkworm_malloc(sizeof(Silkworm_Node**) * cloth->horizontalNodeCount); uint64_t id; @@ -884,7 +898,7 @@ void* Silkworm_ClothCreate(Silkworm_ClothCreateInfo* clothCreateInfo) { id = context->clothCount; - context->cloths = realloc(context->cloths, sizeof(Silkworm_Cloth*) * (context->clothCount + 1)); + context->cloths = Silkworm_realloc(context->cloths, sizeof(Silkworm_Cloth*) * (context->clothCount + 1)); context->cloths[id] = cloth; context->clothCount += 1; } @@ -905,7 +919,7 @@ void* Silkworm_ClothCreate(Silkworm_ClothCreateInfo* clothCreateInfo) for (i = 0; i < cloth->horizontalNodeCount; i += 1) { - cloth->nodes[i] = malloc(sizeof(Silkworm_Node*) * cloth->verticalNodeCount); + cloth->nodes[i] = Silkworm_malloc(sizeof(Silkworm_Node*) * cloth->verticalNodeCount); for (j = 0; j < cloth->verticalNodeCount; j += 1) { @@ -931,7 +945,7 @@ void* Silkworm_ClothCreate(Silkworm_ClothCreateInfo* clothCreateInfo) } } - cloth->triangles = malloc(sizeof(Silkworm_Triangle*) * cloth->horizontalNodeCount * cloth->verticalNodeCount * 2); + cloth->triangles = Silkworm_malloc(sizeof(Silkworm_Triangle*) * cloth->horizontalNodeCount * cloth->verticalNodeCount * 2); uint32_t triangleIndex = 0; for (i = 0; i < cloth->horizontalNodeCount; i += 1) @@ -940,7 +954,7 @@ void* Silkworm_ClothCreate(Silkworm_ClothCreateInfo* clothCreateInfo) { if (i + 1 < cloth->horizontalNodeCount && j + 1 < cloth->verticalNodeCount) { - cloth->triangles[triangleIndex] = malloc(sizeof(Silkworm_Triangle)); + cloth->triangles[triangleIndex] = Silkworm_malloc(sizeof(Silkworm_Triangle)); cloth->triangles[triangleIndex]->a = cloth->nodes[i][j]; cloth->triangles[triangleIndex]->b = cloth->nodes[i + 1][j]; @@ -965,7 +979,7 @@ void* Silkworm_ClothCreate(Silkworm_ClothCreateInfo* clothCreateInfo) if (i - 1 >= 0 && j - 1 >= 0) { - cloth->triangles[triangleIndex] = malloc(sizeof(Silkworm_Triangle)); + cloth->triangles[triangleIndex] = Silkworm_malloc(sizeof(Silkworm_Triangle)); cloth->triangles[triangleIndex]->a = cloth->nodes[i][j]; cloth->triangles[triangleIndex]->b = cloth->nodes[i - 1][j]; @@ -1069,7 +1083,7 @@ uint32_t Silkworm_ClothRender(void **pVertexBuffer, uint32_t *pVertexBufferLengt if (vertexCount + (cloth->triangleCount * 3) > context->vertexCapacity) { context->vertexCapacity *= 2; - context->vertexBuffer = realloc(context->vertexBuffer, sizeof(Silkworm_Vertex) * context->vertexCapacity); + context->vertexBuffer = Silkworm_realloc(context->vertexBuffer, sizeof(Silkworm_Vertex) * context->vertexCapacity); } for (i = 0; i < cloth->triangleCount; i += 1) @@ -1155,8 +1169,8 @@ void Silkworm_PushNodesInRadius(float x, float y, float radius, float xDirection if (node != NULL && !node->pinned) { - float xDistance = (float)fabs(x - node->position.x); - float yDistance = (float)fabs(y - node->position.y); + float xDistance = (float)Silkworm_fabs(x - node->position.x); + float yDistance = (float)Silkworm_fabs(y - node->position.y); float squareDistance = xDistance * xDistance + yDistance * yDistance; @@ -1181,8 +1195,8 @@ void Silkworm_PinNodesInRadius(float x, float y, float radius) if (node != NULL) { - float xDistance = (float)fabs((float)x - node->position.x); - float yDistance = (float)fabs((float)y - node->position.y); + float xDistance = (float)Silkworm_fabs((float)x - node->position.x); + float yDistance = (float)Silkworm_fabs((float)y - node->position.y); float squareDistance = xDistance * xDistance + yDistance * yDistance; @@ -1206,8 +1220,8 @@ void Silkworm_UnpinNodesInRadius(float x, float y, float radius) if (node != NULL) { - float xDistance = (float)fabs((float)x - node->position.x); - float yDistance = (float)fabs((float)y - node->position.y); + float xDistance = (float)Silkworm_fabs((float)x - node->position.x); + float yDistance = (float)Silkworm_fabs((float)y - node->position.y); float squareDistance = xDistance * xDistance + yDistance * yDistance; @@ -1231,8 +1245,8 @@ void Silkworm_DestroyNodesInRadius(float x, float y, float radius) if (node != NULL && node->destroyable) { - float xDistance = (float)fabs(x - node->position.x); - float yDistance = (float)fabs(y - node->position.y); + float xDistance = (float)Silkworm_fabs(x - node->position.x); + float yDistance = (float)Silkworm_fabs(y - node->position.y); float squareDistance = xDistance * xDistance + yDistance * yDistance; @@ -1243,7 +1257,7 @@ void Silkworm_DestroyNodesInRadius(float x, float y, float radius) if (context->nodeDestructionDataCount >= context->nodeDestructionDataCapacity) { context->nodeDestructionDataCapacity *= 2; - context->nodeDestructionData = realloc(context->nodeDestructionData, sizeof(Silkworm_Vector2) * context->nodeDestructionDataCapacity); + context->nodeDestructionData = Silkworm_realloc(context->nodeDestructionData, sizeof(Silkworm_Vector2) * context->nodeDestructionDataCapacity); } @@ -1279,7 +1293,7 @@ void Silkworm_DestroyNodesInRectangle(Silkworm_Rectangle* rectangle) if (context->nodeDestructionDataCount >= context->nodeDestructionDataCapacity) { context->nodeDestructionDataCapacity *= 2; - context->nodeDestructionData = realloc(context->nodeDestructionData, sizeof(Silkworm_Vector2) * context->nodeDestructionDataCapacity); + context->nodeDestructionData = Silkworm_realloc(context->nodeDestructionData, sizeof(Silkworm_Vector2) * context->nodeDestructionDataCapacity); } @@ -1302,8 +1316,8 @@ void* Silkworm_FindClothInRadius(float x, float y, float radius) if (node != NULL) { - float xDistance = (float)fabs(x - node->position.x); - float yDistance = (float)fabs(y - node->position.y); + float xDistance = (float)Silkworm_fabs(x - node->position.x); + float yDistance = (float)Silkworm_fabs(y - node->position.y); float squareDistance = xDistance * xDistance + yDistance * yDistance; @@ -1343,19 +1357,19 @@ void Silkworm_Finish() { Silkworm_ClearAll(); - free(context->nodes); - free(context->links); - free(context->cloths); + Silkworm_free(context->nodes); + Silkworm_free(context->links); + Silkworm_free(context->cloths); - free(context->nodeIndexStack); - free(context->linkIndexStack); - free(context->clothIndexStack); + Silkworm_free(context->nodeIndexStack); + Silkworm_free(context->linkIndexStack); + Silkworm_free(context->clothIndexStack); - free(context->nodeDestructionData); - free(context->linkDestructionData); + Silkworm_free(context->nodeDestructionData); + Silkworm_free(context->linkDestructionData); - free(context->vertexBuffer); + Silkworm_free(context->vertexBuffer); - free(context); + Silkworm_free(context); context = NULL; } diff --git a/visualc/Silkworm.vcxproj b/visualc/Silkworm.vcxproj index 9839c60..08b447a 100644 --- a/visualc/Silkworm.vcxproj +++ b/visualc/Silkworm.vcxproj @@ -59,9 +59,13 @@ Level3 Disabled + ..\..\SDL2\include; + _WINDLL;USE_SDL2;%(PreprocessorDefinitions) DebugFull + SDL2.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + ..\..\SDL2\lib\$(PlatformShortName); @@ -70,10 +74,14 @@ MaxSpeed true true + _WINDLL;USE_SDL2;%(PreprocessorDefinitions) + ..\..\SDL2\include; true true + SDL2.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + ..\..\SDL2\lib\$(PlatformShortName);