CLI scripting
parent
6b6c8625a0
commit
b919917b21
|
@ -38,6 +38,10 @@ if(UNIX)
|
||||||
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
|
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (WIN32)
|
||||||
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
||||||
|
endif()
|
||||||
|
|
||||||
file(GLOB SOURCE_FILES
|
file(GLOB SOURCE_FILES
|
||||||
#Public header
|
#Public header
|
||||||
include/cram.h
|
include/cram.h
|
||||||
|
@ -54,8 +58,8 @@ endif()
|
||||||
|
|
||||||
if(BUILD_CLI)
|
if(BUILD_CLI)
|
||||||
add_executable(cramcli
|
add_executable(cramcli
|
||||||
tools/cli/dirent.h
|
tools/cli/lib/dirent.h
|
||||||
tools/cli/stb_image_write.h
|
tools/cli/lib/stb_image_write.h
|
||||||
tools/cli/main.c
|
tools/cli/main.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -82,6 +86,7 @@ target_include_directories(Cram PUBLIC
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/lib>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/lib>
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/tools/cli/lib>
|
||||||
)
|
)
|
||||||
|
|
||||||
# Soname
|
# Soname
|
||||||
|
|
|
@ -37,6 +37,28 @@
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <search.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#endif /* _MSC_VER */
|
||||||
|
|
||||||
|
/* TODO: ifndefs here? */
|
||||||
|
#define Cram_assert assert
|
||||||
|
#define Cram_qsort qsort
|
||||||
|
#define Cram_malloc malloc
|
||||||
|
#define Cram_realloc realloc
|
||||||
|
#define Cram_free free
|
||||||
|
#define Cram_memcpy memcpy
|
||||||
|
#define Cram_memset memset
|
||||||
|
#define Cram_strdup strdup
|
||||||
|
#define Cram_abs abs
|
||||||
|
#define Cram_min min
|
||||||
|
#define Cram_max max
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
|
@ -62,7 +84,7 @@ typedef struct Cram_ContextCreateInfo
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
uint32_t maxDimension;
|
uint32_t maxDimension;
|
||||||
uint32_t padding;
|
int32_t padding;
|
||||||
uint8_t trim;
|
uint8_t trim;
|
||||||
} Cram_ContextCreateInfo;
|
} Cram_ContextCreateInfo;
|
||||||
|
|
||||||
|
|
22
src/cram.c
22
src/cram.c
|
@ -26,28 +26,6 @@
|
||||||
|
|
||||||
#include "cram.h"
|
#include "cram.h"
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <search.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#endif /* _MSC_VER */
|
|
||||||
|
|
||||||
/* TODO: ifndefs here */
|
|
||||||
#define Cram_assert assert
|
|
||||||
#define Cram_qsort qsort
|
|
||||||
#define Cram_malloc malloc
|
|
||||||
#define Cram_realloc realloc
|
|
||||||
#define Cram_free free
|
|
||||||
#define Cram_memcpy memcpy
|
|
||||||
#define Cram_memset memset
|
|
||||||
#define Cram_strdup strdup
|
|
||||||
#define Cram_abs abs
|
|
||||||
#define Cram_min min
|
|
||||||
#define Cram_max max
|
|
||||||
|
|
||||||
#define STBI_ASSERT Cram_assert
|
#define STBI_ASSERT Cram_assert
|
||||||
#define STBI_MALLOC Cram_malloc
|
#define STBI_MALLOC Cram_malloc
|
||||||
#define STBI_REALLOC Cram_realloc
|
#define STBI_REALLOC Cram_realloc
|
||||||
|
|
107
tools/cli/main.c
107
tools/cli/main.c
|
@ -76,34 +76,128 @@ static void dirwalk(char *dir)
|
||||||
|
|
||||||
/* TODO: command line options */
|
/* TODO: command line options */
|
||||||
|
|
||||||
|
void print_help()
|
||||||
|
{
|
||||||
|
fprintf(stdout, "Usage: cram input_dir output_dir atlas_name [--padding padding_value] [--trim] [--dimension max_dimension]");
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t check_dir_exists(char *path)
|
||||||
|
{
|
||||||
|
DIR *dir = opendir(path);
|
||||||
|
if (dir) {
|
||||||
|
closedir(dir);
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
Cram_ContextCreateInfo createInfo;
|
Cram_ContextCreateInfo createInfo;
|
||||||
uint8_t *pixelData;
|
uint8_t *pixelData;
|
||||||
uint32_t width;
|
uint32_t width;
|
||||||
uint32_t height;
|
uint32_t height;
|
||||||
|
char *arg;
|
||||||
|
char *inputDirPath = NULL;
|
||||||
|
char *outputDirPath = NULL;
|
||||||
|
char *imageOutputFilename;
|
||||||
|
int32_t i;
|
||||||
|
|
||||||
|
/* Set defaults */
|
||||||
|
createInfo.padding = 0;
|
||||||
|
createInfo.trim = 1;
|
||||||
|
createInfo.maxDimension = 8192;
|
||||||
|
createInfo.name = NULL;
|
||||||
|
|
||||||
if (argc < 2)
|
if (argc < 2)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Must provide directory!\n");
|
print_help();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
createInfo.padding = 0;
|
for (i = 1; i < argc; i += 1)
|
||||||
|
{
|
||||||
|
arg = argv[i];
|
||||||
|
|
||||||
|
if (strcmp(arg, "--padding") == 0)
|
||||||
|
{
|
||||||
|
i += 1;
|
||||||
|
createInfo.padding = atoi(argv[argc]);
|
||||||
|
if (createInfo.padding < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Padding must be equal to or greater than 0!");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (strcmp(arg, "--trim") == 0)
|
||||||
|
{
|
||||||
createInfo.trim = 1;
|
createInfo.trim = 1;
|
||||||
createInfo.maxDimension = 2048;
|
}
|
||||||
createInfo.name = "test";
|
else if (strcmp(arg, "--dimension") == 0)
|
||||||
|
{
|
||||||
|
createInfo.maxDimension = atoi(argv[argc]);
|
||||||
|
if (createInfo.maxDimension < 0 || createInfo.maxDimension > 8192)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Padding must be between 0 and 8192!");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (strcmp(arg, "--help") == 0)
|
||||||
|
{
|
||||||
|
print_help();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (inputDirPath == NULL)
|
||||||
|
{
|
||||||
|
inputDirPath = arg;
|
||||||
|
}
|
||||||
|
else if (outputDirPath == NULL)
|
||||||
|
{
|
||||||
|
outputDirPath = arg;
|
||||||
|
}
|
||||||
|
else if (createInfo.name == NULL)
|
||||||
|
{
|
||||||
|
createInfo.name = arg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (inputDirPath == NULL || createInfo.name == NULL)
|
||||||
|
{
|
||||||
|
print_help();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* check that dirs exist */
|
||||||
|
if (!check_dir_exists(inputDirPath))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Input directory not found!");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!check_dir_exists(outputDirPath))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Output directory not found!");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
context = Cram_Init(&createInfo);
|
context = Cram_Init(&createInfo);
|
||||||
|
|
||||||
dirwalk(argv[1]);
|
dirwalk(inputDirPath);
|
||||||
|
|
||||||
Cram_Pack(context);
|
Cram_Pack(context);
|
||||||
|
|
||||||
Cram_GetPixelData(context, &pixelData, &width, &height);
|
Cram_GetPixelData(context, &pixelData, &width, &height);
|
||||||
|
|
||||||
|
imageOutputFilename = Cram_malloc(strlen(createInfo.name) + 5);
|
||||||
|
strcpy(imageOutputFilename, createInfo.name);
|
||||||
|
strcat(imageOutputFilename, ".png");
|
||||||
|
|
||||||
stbi_write_png(
|
stbi_write_png(
|
||||||
"output.png",
|
imageOutputFilename,
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
4,
|
4,
|
||||||
|
@ -111,6 +205,7 @@ int main(int argc, char *argv[])
|
||||||
width * 4
|
width * 4
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Cram_free(imageOutputFilename);
|
||||||
Cram_Destroy(context);
|
Cram_Destroy(context);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue