First commit
This commit is contained in:
@@ -0,0 +1 @@
|
||||
c505e04113e221188440051de27fad12c0670205
|
||||
@@ -0,0 +1,37 @@
|
||||
#ifndef SCUFENG_CAMERA_H_
|
||||
#define SCUFENG_CAMERA_H_
|
||||
|
||||
#include "cglm/types.h"
|
||||
|
||||
#include "scufeng/engine.h"
|
||||
|
||||
typedef struct {
|
||||
vec3 pos;
|
||||
float pitch_rad;
|
||||
float yaw_rad;
|
||||
float fov_rad;
|
||||
float near_clip;
|
||||
float far_clip;
|
||||
vec3 front;
|
||||
vec3 right;
|
||||
mat4 view;
|
||||
mat4 projection;
|
||||
} SECamera;
|
||||
|
||||
SECamera SECamera_new(
|
||||
vec3 pos,
|
||||
const float fov_rad,
|
||||
const float near_clip,
|
||||
const float far_clip
|
||||
);
|
||||
|
||||
void SECamera_set_perspective(SECamera *const camera);
|
||||
void SECamera_pos_set(SECamera *const camera, vec3 pos);
|
||||
void SECamera_move_to_direction(SECamera *const camera, SEDirection dir, const float mag);
|
||||
void SECamera_look_dir(SECamera *const camera, vec3 dir);
|
||||
void SECamera_look_at(SECamera *const camera, vec3 target);
|
||||
void SECamera_pitch_add(SECamera *const camera, const float pitch_rad);
|
||||
void SECamera_yaw_add(SECamera *const camera, const float yaw_rad);
|
||||
void SECamera_view_update(SECamera *const camera);
|
||||
|
||||
#endif // SCUFENG_CAMERA_H_
|
||||
@@ -0,0 +1,12 @@
|
||||
#ifndef SCUFENG_SCENE_H_
|
||||
#define SCUFENG_SCENE_H_
|
||||
|
||||
#include "scufeng/Shape.h"
|
||||
#include "engine.h"
|
||||
|
||||
void se_render_meshes_2d(SEMesh *const *const meshes, const size_t meshes_n);
|
||||
SEResult se_render_line_segment(const vec2 p1, const vec2 p2, const vec4 color);
|
||||
SEResult se_render_line_segment_norm_coord(const vec2 p1, const vec2 p2, const vec4 color);
|
||||
void se_text_render(const char* text, int x, int y, float scale, const vec3 color);
|
||||
|
||||
#endif // SCUFENG_SCENE_H_
|
||||
@@ -0,0 +1,90 @@
|
||||
#ifndef SCUFENG_SHAPE_H_
|
||||
#define SCUFENG_SHAPE_H_
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "cglm/types.h"
|
||||
|
||||
#include "scufeng/engine.h"
|
||||
|
||||
typedef enum {
|
||||
SE_TRIANGLES,
|
||||
SE_TRIANGLE_STRIP,
|
||||
SE_TRIANGLE_FAN,
|
||||
SE_LINES,
|
||||
SE_LINE_STRIP
|
||||
} SEDrawMode;
|
||||
|
||||
typedef struct {
|
||||
vec3 pos;
|
||||
vec3 scale;
|
||||
vec3 rotation;
|
||||
} SETransform;
|
||||
|
||||
typedef struct {
|
||||
float pos[3];
|
||||
float tex_coords[2];
|
||||
} SEVertex;
|
||||
|
||||
typedef enum {
|
||||
SE_MESH_COLOR,
|
||||
SE_MESH_TEXTURE
|
||||
} SEMeshType;
|
||||
|
||||
typedef struct {
|
||||
unsigned int id;
|
||||
float w;
|
||||
float h;
|
||||
} SEMeshTexture;
|
||||
|
||||
typedef struct {
|
||||
unsigned int vao;
|
||||
unsigned int vbo;
|
||||
size_t verts_n;
|
||||
int draw_mode;
|
||||
|
||||
SETransform transform;
|
||||
|
||||
SEMeshType type;
|
||||
union {
|
||||
SEMeshTexture texture;
|
||||
vec4 color;
|
||||
};
|
||||
} SEMesh;
|
||||
|
||||
SEResult SEShape_alloc(
|
||||
SETransform *const shape,
|
||||
const SEVertex *const vertices,
|
||||
const size_t vertices_n,
|
||||
const vec4 color,
|
||||
const SEDrawMode draw_mode
|
||||
);
|
||||
void SEMesh_free(SEMesh *const mesh);
|
||||
void SEMesh_set_draw_mode(SEMesh *mesh, const SEDrawMode mode);
|
||||
void SEMesh_render(const SEMesh *const mesh);
|
||||
void SEMesh_bbox_get_2d(
|
||||
const SEMesh *const mesh,
|
||||
float *left,
|
||||
float *right,
|
||||
float *top,
|
||||
float *bottom
|
||||
);
|
||||
bool SEMesh_rect_is_pos_inside(const SEMesh *const mesh, const float x, const float y);
|
||||
void SEShape_rotation_set(SETransform *shape, vec3 rotation);
|
||||
void SEShape_rotate_2d_center(SETransform *const shape, const float w, const float h, const float angle_rad);
|
||||
void SEShape_scale_set(SETransform *shape, vec3 scale);
|
||||
void SEShape_scale(SETransform *const shape, vec3 scale);
|
||||
void SEShape_pos_set(SETransform *const shape, vec3 pos);
|
||||
void SEShape_translate_2d_center(SETransform *const shape, const float w, const float h, const vec2 pos);
|
||||
void SEShape_transform_reset(SETransform *shape);
|
||||
|
||||
SEMesh SEMesh_rect_color_alloc(vec4 color);
|
||||
SEMesh SEMesh_string_alloc(
|
||||
const char *text,
|
||||
const float scale,
|
||||
const vec3 color
|
||||
);
|
||||
// void SEShape_transform_apply(SEShape *const shape);
|
||||
|
||||
#endif // SCUFENG_SHAPE_H_
|
||||
@@ -0,0 +1,74 @@
|
||||
#ifndef SCUFENG_H_
|
||||
#define SCUFENG_H_
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "keys.h" // IWYU pragma: export
|
||||
|
||||
#define SERESULT_X(X) \
|
||||
X(SE_SUCCESS) \
|
||||
X(SE_OUT_OF_MEMORY) \
|
||||
X(SE_FC_FAILURE) \
|
||||
X(SE_NOT_FOUND) \
|
||||
X(SE_FT_FAILURE)
|
||||
|
||||
#define X(val) val,
|
||||
|
||||
typedef enum {
|
||||
SERESULT_X(X)
|
||||
} SEResult;
|
||||
|
||||
#undef X
|
||||
|
||||
typedef enum {
|
||||
SE_FILL,
|
||||
SE_LINE,
|
||||
SE_POINT
|
||||
} SEPolygonMode;
|
||||
|
||||
typedef enum {
|
||||
SE_NONE,
|
||||
SE_FORWARD,
|
||||
SE_BACKWARD,
|
||||
SE_LEFT,
|
||||
SE_RIGHT,
|
||||
SE_UP,
|
||||
SE_DOWN
|
||||
} SEDirection;
|
||||
|
||||
typedef void (*SEKeyCb)(SEKey key, SEKeyAction action, SEKeyMod mods);
|
||||
|
||||
void se_init(const bool debug);
|
||||
void se_deinit(void);
|
||||
void se_window_create(
|
||||
const int w,
|
||||
const int h,
|
||||
const char* title,
|
||||
const int fullscreen_monitor_i
|
||||
);
|
||||
void se_window_close();
|
||||
void se_clear_color(
|
||||
const float r,
|
||||
const float g,
|
||||
const float b,
|
||||
const float a
|
||||
);
|
||||
void se_clear(void);
|
||||
void se_swap_buffers(void);
|
||||
bool se_window_should_close(void);
|
||||
void se_handle_events(void);
|
||||
double se_get_time(void);
|
||||
double se_delta_time(const double current_time);
|
||||
void se_set_polygon_mode(const SEPolygonMode mode);
|
||||
void se_set_key_callback(SEKeyCb cb);
|
||||
SEKeyAction se_get_key(const SEKey key);
|
||||
SEKeyAction se_get_mouse_button(const SEMouseButton btn);
|
||||
void se_get_mouse_pos(double *x, double *y);
|
||||
void se_swap_interval(const int interval);
|
||||
void se_fps_lock_set_fps(const unsigned int fps);
|
||||
void se_fps_lock_frame_start_s(const double frame_start_s);
|
||||
void se_fps_lock_wait(void);
|
||||
|
||||
const char* SEResult_to_str(const SEResult res);
|
||||
|
||||
#endif // SCUFENG_H_
|
||||
@@ -0,0 +1,164 @@
|
||||
#ifndef SCUFENG_KEYS_H_
|
||||
#define SCUFENG_KEYS_H_
|
||||
|
||||
#include "GLFW/glfw3.h"
|
||||
|
||||
typedef enum {
|
||||
SE_KEY_UNKNOWN = GLFW_KEY_UNKNOWN,
|
||||
|
||||
/* Printable keys */
|
||||
SE_KEY_SPACE = GLFW_KEY_SPACE,
|
||||
SE_KEY_APOSTROPHE = GLFW_KEY_APOSTROPHE,
|
||||
SE_KEY_COMMA = GLFW_KEY_COMMA,
|
||||
SE_KEY_MINUS = GLFW_KEY_MINUS,
|
||||
SE_KEY_PERIOD = GLFW_KEY_PERIOD,
|
||||
SE_KEY_SLASH = GLFW_KEY_SLASH,
|
||||
SE_KEY_0 = GLFW_KEY_0,
|
||||
SE_KEY_1 = GLFW_KEY_1,
|
||||
SE_KEY_2 = GLFW_KEY_2,
|
||||
SE_KEY_3 = GLFW_KEY_3,
|
||||
SE_KEY_4 = GLFW_KEY_4,
|
||||
SE_KEY_5 = GLFW_KEY_5,
|
||||
SE_KEY_6 = GLFW_KEY_6,
|
||||
SE_KEY_7 = GLFW_KEY_7,
|
||||
SE_KEY_8 = GLFW_KEY_8,
|
||||
SE_KEY_9 = GLFW_KEY_9,
|
||||
SE_KEY_SEMICOLON = GLFW_KEY_SEMICOLON,
|
||||
SE_KEY_EQUAL = GLFW_KEY_EQUAL,
|
||||
SE_KEY_A = GLFW_KEY_A,
|
||||
SE_KEY_B = GLFW_KEY_B,
|
||||
SE_KEY_C = GLFW_KEY_C,
|
||||
SE_KEY_D = GLFW_KEY_D,
|
||||
SE_KEY_E = GLFW_KEY_E,
|
||||
SE_KEY_F = GLFW_KEY_F,
|
||||
SE_KEY_G = GLFW_KEY_G,
|
||||
SE_KEY_H = GLFW_KEY_H,
|
||||
SE_KEY_I = GLFW_KEY_I,
|
||||
SE_KEY_J = GLFW_KEY_J,
|
||||
SE_KEY_K = GLFW_KEY_K,
|
||||
SE_KEY_L = GLFW_KEY_L,
|
||||
SE_KEY_M = GLFW_KEY_M,
|
||||
SE_KEY_N = GLFW_KEY_N,
|
||||
SE_KEY_O = GLFW_KEY_O,
|
||||
SE_KEY_P = GLFW_KEY_P,
|
||||
SE_KEY_Q = GLFW_KEY_Q,
|
||||
SE_KEY_R = GLFW_KEY_R,
|
||||
SE_KEY_S = GLFW_KEY_S,
|
||||
SE_KEY_T = GLFW_KEY_T,
|
||||
SE_KEY_U = GLFW_KEY_U,
|
||||
SE_KEY_V = GLFW_KEY_V,
|
||||
SE_KEY_W = GLFW_KEY_W,
|
||||
SE_KEY_X = GLFW_KEY_X,
|
||||
SE_KEY_Y = GLFW_KEY_Y,
|
||||
SE_KEY_Z = GLFW_KEY_Z,
|
||||
SE_KEY_LEFT_BRACKET = GLFW_KEY_LEFT_BRACKET,
|
||||
SE_KEY_BACKSLASH = GLFW_KEY_BACKSLASH,
|
||||
SE_KEY_RIGHT_BRACKET = GLFW_KEY_RIGHT_BRACKET,
|
||||
SE_KEY_GRAVE_ACCENT = GLFW_KEY_GRAVE_ACCENT,
|
||||
SE_KEY_WORLD_1 = GLFW_KEY_WORLD_1,
|
||||
SE_KEY_WORLD_2 = GLFW_KEY_WORLD_2,
|
||||
|
||||
/* Function keys */
|
||||
SE_KEY_ESCAPE = GLFW_KEY_ESCAPE,
|
||||
SE_KEY_ENTER = GLFW_KEY_ENTER,
|
||||
SE_KEY_TAB = GLFW_KEY_TAB,
|
||||
SE_KEY_BACKSPACE = GLFW_KEY_BACKSPACE,
|
||||
SE_KEY_INSERT = GLFW_KEY_INSERT,
|
||||
SE_KEY_DELETE = GLFW_KEY_DELETE,
|
||||
SE_KEY_RIGHT = GLFW_KEY_RIGHT,
|
||||
SE_KEY_LEFT = GLFW_KEY_LEFT,
|
||||
SE_KEY_DOWN = GLFW_KEY_DOWN,
|
||||
SE_KEY_UP = GLFW_KEY_UP,
|
||||
SE_KEY_PAGE_UP = GLFW_KEY_PAGE_UP,
|
||||
SE_KEY_PAGE_DOWN = GLFW_KEY_PAGE_DOWN,
|
||||
SE_KEY_HOME = GLFW_KEY_HOME,
|
||||
SE_KEY_END = GLFW_KEY_END,
|
||||
SE_KEY_CAPS_LOCK = GLFW_KEY_CAPS_LOCK,
|
||||
SE_KEY_SCROLL_LOCK = GLFW_KEY_SCROLL_LOCK,
|
||||
SE_KEY_NUM_LOCK = GLFW_KEY_NUM_LOCK,
|
||||
SE_KEY_PRINT_SCREEN = GLFW_KEY_PRINT_SCREEN,
|
||||
SE_KEY_PAUSE = GLFW_KEY_PAUSE,
|
||||
SE_KEY_F1 = GLFW_KEY_F1,
|
||||
SE_KEY_F2 = GLFW_KEY_F2,
|
||||
SE_KEY_F3 = GLFW_KEY_F3,
|
||||
SE_KEY_F4 = GLFW_KEY_F4,
|
||||
SE_KEY_F5 = GLFW_KEY_F5,
|
||||
SE_KEY_F6 = GLFW_KEY_F6,
|
||||
SE_KEY_F7 = GLFW_KEY_F7,
|
||||
SE_KEY_F8 = GLFW_KEY_F8,
|
||||
SE_KEY_F9 = GLFW_KEY_F9,
|
||||
SE_KEY_F10 = GLFW_KEY_F10,
|
||||
SE_KEY_F11 = GLFW_KEY_F11,
|
||||
SE_KEY_F12 = GLFW_KEY_F12,
|
||||
SE_KEY_F13 = GLFW_KEY_F13,
|
||||
SE_KEY_F14 = GLFW_KEY_F14,
|
||||
SE_KEY_F15 = GLFW_KEY_F15,
|
||||
SE_KEY_F16 = GLFW_KEY_F16,
|
||||
SE_KEY_F17 = GLFW_KEY_F17,
|
||||
SE_KEY_F18 = GLFW_KEY_F18,
|
||||
SE_KEY_F19 = GLFW_KEY_F19,
|
||||
SE_KEY_F20 = GLFW_KEY_F20,
|
||||
SE_KEY_F21 = GLFW_KEY_F21,
|
||||
SE_KEY_F22 = GLFW_KEY_F22,
|
||||
SE_KEY_F23 = GLFW_KEY_F23,
|
||||
SE_KEY_F24 = GLFW_KEY_F24,
|
||||
SE_KEY_F25 = GLFW_KEY_F25,
|
||||
SE_KEY_KP_0 = GLFW_KEY_KP_0,
|
||||
SE_KEY_KP_1 = GLFW_KEY_KP_1,
|
||||
SE_KEY_KP_2 = GLFW_KEY_KP_2,
|
||||
SE_KEY_KP_3 = GLFW_KEY_KP_3,
|
||||
SE_KEY_KP_4 = GLFW_KEY_KP_4,
|
||||
SE_KEY_KP_5 = GLFW_KEY_KP_5,
|
||||
SE_KEY_KP_6 = GLFW_KEY_KP_6,
|
||||
SE_KEY_KP_7 = GLFW_KEY_KP_7,
|
||||
SE_KEY_KP_8 = GLFW_KEY_KP_8,
|
||||
SE_KEY_KP_9 = GLFW_KEY_KP_9,
|
||||
SE_KEY_KP_DECIMAL = GLFW_KEY_KP_DECIMAL,
|
||||
SE_KEY_KP_DIVIDE = GLFW_KEY_KP_DIVIDE,
|
||||
SE_KEY_KP_MULTIPLY = GLFW_KEY_KP_MULTIPLY,
|
||||
SE_KEY_KP_SUBTRACT = GLFW_KEY_KP_SUBTRACT,
|
||||
SE_KEY_KP_ADD = GLFW_KEY_KP_ADD,
|
||||
SE_KEY_KP_ENTER = GLFW_KEY_KP_ENTER,
|
||||
SE_KEY_KP_EQUAL = GLFW_KEY_KP_EQUAL,
|
||||
SE_KEY_LEFT_SHIFT = GLFW_KEY_LEFT_SHIFT,
|
||||
SE_KEY_LEFT_CONTROL = GLFW_KEY_LEFT_CONTROL,
|
||||
SE_KEY_LEFT_ALT = GLFW_KEY_LEFT_ALT,
|
||||
SE_KEY_LEFT_SUPER = GLFW_KEY_LEFT_SUPER,
|
||||
SE_KEY_RIGHT_SHIFT = GLFW_KEY_RIGHT_SHIFT,
|
||||
SE_KEY_RIGHT_CONTROL = GLFW_KEY_RIGHT_CONTROL,
|
||||
SE_KEY_RIGHT_ALT = GLFW_KEY_RIGHT_ALT,
|
||||
SE_KEY_RIGHT_SUPER = GLFW_KEY_RIGHT_SUPER,
|
||||
SE_KEY_MENU = GLFW_KEY_MENU,
|
||||
} SEKey;
|
||||
|
||||
typedef enum {
|
||||
SE_KEY_ACTION_RELEASE = GLFW_RELEASE,
|
||||
SE_KEY_ACTION_PRESS = GLFW_PRESS,
|
||||
SE_KEY_ACTION_REPEAT = GLFW_REPEAT,
|
||||
} SEKeyAction;
|
||||
|
||||
typedef enum {
|
||||
SE_KEY_MOD_SHIFT = GLFW_MOD_SHIFT,
|
||||
SE_KEY_MOD_CONTROL = GLFW_MOD_CONTROL,
|
||||
SE_KEY_MOD_ALT = GLFW_MOD_ALT,
|
||||
SE_KEY_MOD_SUPER = GLFW_MOD_SUPER,
|
||||
SE_KEY_MOD_CAPS_LOCK = GLFW_MOD_CAPS_LOCK,
|
||||
SE_KEY_MOD_NUM_LOCK = GLFW_MOD_NUM_LOCK,
|
||||
} SEKeyMod;
|
||||
|
||||
typedef enum {
|
||||
SE_MOUSE_BUTTON_1 = 0,
|
||||
SE_MOUSE_BUTTON_2 = 1,
|
||||
SE_MOUSE_BUTTON_3 = 2,
|
||||
SE_MOUSE_BUTTON_4 = 3,
|
||||
SE_MOUSE_BUTTON_5 = 4,
|
||||
SE_MOUSE_BUTTON_6 = 5,
|
||||
SE_MOUSE_BUTTON_7 = 6,
|
||||
SE_MOUSE_BUTTON_8 = 7,
|
||||
SE_MOUSE_BUTTON_LAST = GLFW_MOUSE_BUTTON_8,
|
||||
SE_MOUSE_BUTTON_LEFT = GLFW_MOUSE_BUTTON_1,
|
||||
SE_MOUSE_BUTTON_RIGHT = GLFW_MOUSE_BUTTON_2,
|
||||
SE_MOUSE_BUTTON_MIDDLE = GLFW_MOUSE_BUTTON_3,
|
||||
} SEMouseButton;
|
||||
|
||||
#endif // SCUFENG_KEYS_H_
|
||||
@@ -0,0 +1,23 @@
|
||||
#ifndef LOG_H_
|
||||
#define LOG_H_
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#define LOG(str) log_with_tag(stdout, __FILE__, __LINE__, "LOG", (str))
|
||||
#define LOGF(fmt, ...) logf_with_tag(stdout, __FILE__, __LINE__, "LOG", (fmt), __VA_ARGS__)
|
||||
|
||||
#define LOG_ERROR(str) log_with_tag(stderr, __FILE__, __LINE__, "ERROR", (str))
|
||||
#define LOG_ERRORF(fmt, ...) logf_with_tag(stderr, __FILE__, __LINE__, "ERROR", (fmt), __VA_ARGS__)
|
||||
|
||||
#define LOG_FATAL(str) LOG_ERROR(str); exit(-1)
|
||||
#define LOG_FATALF(fmt, ...) LOG_ERRORF(fmt, __VA_ARGS__); exit(-1)
|
||||
|
||||
#define LOG_FATAL_TODO(str) log_with_tag(stderr, __FILE__, __LINE__, "FATAL TODO", (str)); exit(-1)
|
||||
#define LOG_FATAL_TODOF(fmt, ...) logf_with_tag(stderr, __FILE__, __LINE__, "FATAL TODO", (fmt), __VA_ARGS__); exit(-1)
|
||||
|
||||
void log_with_tag(FILE* out_file, char* file_name, size_t line, const char* tag, char* str);
|
||||
void logf_with_tag(FILE* out_file, char* file_name, size_t line, const char* tag, char* fmt, ...);
|
||||
|
||||
#endif // LOG_H_
|
||||
@@ -0,0 +1,18 @@
|
||||
#ifndef SCUFENG_MODEL_H_
|
||||
#define SCUFENG_MODEL_H_
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
typedef struct {
|
||||
float* vertices;
|
||||
size_t vertices_n;
|
||||
} Mesh;
|
||||
|
||||
typedef struct {
|
||||
Mesh* meshes;
|
||||
size_t meshes_n;
|
||||
} Model;
|
||||
|
||||
Model model_load_gltf(const char* path);
|
||||
|
||||
#endif // SCUFENG_MODEL_H_
|
||||
@@ -0,0 +1,9 @@
|
||||
#ifndef SE_SCUFCONT_IMPL_H_
|
||||
#define SE_SCUFCONT_IMPL_H_
|
||||
|
||||
#include "scufcont/DArray.h"
|
||||
#include "scufeng/Shape.h"
|
||||
|
||||
SCDARRAY_HEADER(SETransform*, SEShapep)
|
||||
|
||||
#endif // SE_SCUFCONT_IMPL_H_
|
||||
@@ -0,0 +1,12 @@
|
||||
#ifndef SCUFENG_TEXT_H_
|
||||
#define SCUFENG_TEXT_H_
|
||||
|
||||
#include "scufeng/engine.h"
|
||||
|
||||
SEResult se_font_load(
|
||||
const char *path,
|
||||
const unsigned int pixel_w,
|
||||
const unsigned int pixel_h
|
||||
);
|
||||
|
||||
#endif // SCUFENG_TEXT_H_
|
||||
@@ -0,0 +1,15 @@
|
||||
#ifndef SCUFENG_UTIL_H_
|
||||
#define SCUFENG_UTIL_H_
|
||||
|
||||
#include "cglm/types.h"
|
||||
|
||||
int se_rand_int();
|
||||
bool se_line_segments_intersect(
|
||||
const vec2 a1,
|
||||
const vec2 a2,
|
||||
const vec2 b1,
|
||||
const vec2 b2,
|
||||
vec2 ip
|
||||
);
|
||||
|
||||
#endif // SCUFENG_UTIL_H_
|
||||
Binary file not shown.
@@ -0,0 +1,15 @@
|
||||
project('scufeng', 'c')
|
||||
|
||||
cc = meson.get_compiler('c')
|
||||
|
||||
scufeng_lib_dep = cc.find_library(
|
||||
'scufeng',
|
||||
dirs: meson.current_source_dir()
|
||||
)
|
||||
|
||||
scufeng_dep = declare_dependency(
|
||||
dependencies: scufeng_lib_dep,
|
||||
include_directories: include_directories('include')
|
||||
)
|
||||
|
||||
meson.override_dependency('scufeng', scufeng_dep)
|
||||
Reference in New Issue
Block a user