Skip to content

Commit e0c81d3

Browse files
authored
Merge branch 'master' into add-texture-npatch-binding
2 parents 8ff3b8c + 7e8ffbb commit e0c81d3

File tree

8 files changed

+131
-11
lines changed

8 files changed

+131
-11
lines changed

api.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@
295295

296296
// Basic geometric 3D shapes drawing functions
297297
[x] void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color)
298+
[x] void DrawPoint3D(Vector3 position, Color color)
298299
[x] void DrawCircle3D(Vector3 center, float radius, Vector3 rotationAxis, float rotationAngle, Color color)
299300
[x] void DrawTriangle3D(Vector3 v1, Vector3 v2, Vector3 v3, Color color)
300301
[x] void DrawTriangleStrip3D(Vector3 *points, int pointCount, Color color)

project.janet

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,12 @@
3030

3131
:cflags [;default-cflags ;cflags]
3232

33-
:defines {"PLATFORM_DESKTOP" true "_POSIX_C_SOURCE" "200809L" "_DARWIN_C_SOURCE" (if (= o :macos) "1" nil) "_GNU_SOURCE" true}
33+
:defines {"PLATFORM_DESKTOP" true
34+
"_POSIX_C_SOURCE" "200809L"
35+
"_DARWIN_C_SOURCE" (if (= o :macos) "1" nil)
36+
"_GNU_SOURCE" true
37+
"SUPPORT_FILEFORMAT_BMP" true
38+
"STB_IMAGE_IMPLEMENTATION" true}
3439

3540
:source ["src/main.c"
3641
# raylib sources

src/3d.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@ static Janet cfun_DrawLine3D(int32_t argc, Janet *argv) {
77
return janet_wrap_nil();
88
}
99

10+
static Janet cfun_DrawPoint3D(int32_t argc, Janet *argv) {
11+
janet_fixarity(argc, 2);
12+
Vector3 pos = jaylib_getvec3(argv, 0);
13+
Color color = jaylib_getcolor(argv, 1);
14+
DrawPoint3D(pos, color);
15+
return janet_wrap_nil();
16+
}
17+
1018
static Janet cfun_DrawCircle3D(int32_t argc, Janet *argv) {
1119
janet_fixarity(argc, 5);
1220
Vector3 center = jaylib_getvec3(argv, 0);
@@ -701,6 +709,10 @@ static JanetReg threed_cfuns[] = {
701709
"(draw-line-3d [start-x start-y start-z] [end-x end-y end-z] color)\n\n"
702710
"Draw a line in 3D world space"
703711
},
712+
{"draw-point-3d", cfun_DrawPoint3D,
713+
"(draw-point-3d [center-x center-y center-z] color)\n\n"
714+
"Draw a point in 3D space, actually a small line"
715+
},
704716
{"draw-circle-3d", cfun_DrawCircle3D,
705717
"(draw-circle-3d [center-x center-y center-z] radius [rot-x rot-y rot-z] rotation-angle color)\n\n"
706718
"Draw a circle in 3D world space"

src/image.h

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,39 @@ static Janet cfun_LoadImage(int32_t argc, Janet *argv) {
77
return janet_wrap_abstract(image);
88
}
99

10+
static Janet cfun_LoadImageFromBuffer(int32_t argc, Janet *argv) {
11+
janet_fixarity(argc, 2);
12+
const char *fileType = janet_getcstring(argv, 0);
13+
JanetBuffer* data = janet_getbuffer(argv, 1);
14+
Image *image = janet_abstract(&AT_Image, sizeof(Image));
15+
*image = LoadImageFromMemory(fileType, data->data, data->count);
16+
return janet_wrap_abstract(image);
17+
}
18+
19+
static Janet cfun_GetBitmapHeaderBuffer(int32_t argc, Janet *argv) {
20+
janet_fixarity(argc, 2);
21+
int16_t sizeX = (int16_t)janet_getnumber(argv, 0);
22+
int16_t sizeY = (int16_t)janet_getnumber(argv, 1);
23+
const int32_t headerlength = 26;
24+
const int32_t magicheadersize = 12;
25+
const int16_t planes = 1;
26+
const int16_t bpp = 24;
27+
const int32_t filesize = headerlength + (sizeX * sizeY);
28+
29+
JanetBuffer* data = janet_buffer(filesize);
30+
janet_buffer_push_cstring(data, "BM");
31+
janet_buffer_push_u32(data, filesize);
32+
janet_buffer_push_u32(data, 0); // should be two int16, reserved.
33+
janet_buffer_push_u32(data, headerlength);
34+
janet_buffer_push_u32(data, magicheadersize); // if 12 we can skip alot of complicated(?) stuff in the header
35+
janet_buffer_push_u16(data, sizeX);
36+
janet_buffer_push_u16(data, sizeY);
37+
janet_buffer_push_u16(data, planes);
38+
janet_buffer_push_u16(data, bpp);
39+
40+
return janet_wrap_buffer(data);
41+
}
42+
1043
static Janet cfun_IsImageReady(int32_t argc, Janet *argv) {
1144
janet_fixarity(argc, 1);
1245
Image image = *jaylib_getimage(argv, 0);
@@ -651,6 +684,17 @@ static Janet cfun_GetImageDimensions(int32_t argc, Janet *argv) {
651684
return jaylib_wrap_vec2(dim);
652685
}
653686

687+
static Janet cfun_LoadImageFromMemory(int32_t argc, Janet *argv) {
688+
janet_fixarity(argc, 3);
689+
const char *fileType = janet_getcstring(argv, 0);
690+
const unsigned char *fileData = janet_getbytes(argv, 1).bytes;
691+
int dataSize = janet_getinteger(argv, 2);
692+
693+
Image *image = janet_abstract(&AT_Image, sizeof(Image));
694+
*image = LoadImageFromMemory(fileType, fileData, dataSize);
695+
return janet_wrap_abstract(image);
696+
}
697+
654698
/*
655699
// Image/Texture2D data loading/unloading/saving functions
656700
RLAPI Image LoadImagePro(void *data, int width, int height, int format); // Load image from raw data with parameters
@@ -670,6 +714,14 @@ static const JanetReg image_cfuns[] = {
670714
"(load-image-1 file-name)\n\n"
671715
"Load image from file into CPU memory (RAM)"
672716
}, // load-image is janet core function, don't want to overwrite if we use (use jaylib)
717+
{"load-image-from-buffer", cfun_LoadImageFromBuffer,
718+
"(load-image-from-buffer file-type buffer)\n\n"
719+
"Load buffer as image object"
720+
},
721+
{"get-bitmap-header-buffer", cfun_GetBitmapHeaderBuffer,
722+
"(get-bitmap-header-buffer dimx dimy)\n\n"
723+
"returns a header for a 24bpp bitmap with dimensions dimx*dimy"
724+
},
673725
{"image-ready?", cfun_IsImageReady,
674726
"(image-ready? image)\n\n"
675727
"Check if an image is ready"
@@ -930,5 +982,9 @@ static const JanetReg image_cfuns[] = {
930982
"(set-texture-wrap texture wrap)\n\n"
931983
"Set texture wrapping mode"
932984
},
985+
{"load-image-from-memory", cfun_LoadImageFromMemory,
986+
"(load-image-from-memory filetype data size)\n\n"
987+
"Load image from memory buffer, fileType refers to extension: i.e. '.png'"
988+
},
933989
{NULL, NULL, NULL}
934990
};

src/text.h

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,21 @@ static Janet cfun_IsFontReady(int32_t argc, Janet *argv) {
4242
}
4343

4444
static Janet cfun_LoadFontEx(int32_t argc, Janet *argv) {
45-
janet_fixarity(argc, 3);
45+
janet_arity(argc, 2, 3);
4646
const char *fileName = janet_getcstring(argv, 0);
4747
int fontSize = janet_getinteger(argv, 1);
48-
JanetView ints = janet_getindexed(argv, 2);
49-
int *raw_ints = janet_smalloc(sizeof(int) * ints.len);
50-
for (int32_t i = 0; i < ints.len; i++) {
51-
raw_ints[i] = janet_getinteger(ints.items, i);
52-
}
5348
Font *font = janet_abstract(&AT_Font, sizeof(Font));
54-
*font = LoadFontEx(fileName, fontSize, raw_ints, ints.len);
55-
janet_sfree(raw_ints);
49+
if (argc == 2) {
50+
*font = LoadFontEx(fileName, fontSize, NULL, 0);
51+
} else {
52+
JanetView ints = janet_getindexed(argv, 2);
53+
int *raw_ints = janet_smalloc(sizeof(int) * ints.len);
54+
for (int32_t i = 0; i < ints.len; i++) {
55+
raw_ints[i] = janet_getinteger(ints.items, i);
56+
}
57+
*font = LoadFontEx(fileName, fontSize, raw_ints, ints.len);
58+
janet_sfree(raw_ints);
59+
}
5660
return janet_wrap_abstract(font);
5761
}
5862

@@ -200,7 +204,7 @@ static JanetReg text_cfuns[] = {
200204
"Check if a font is ready"
201205
},
202206
{"load-font-ex", cfun_LoadFontEx,
203-
"(load-font-ex file-name font-size font-chars)\n\n"
207+
"(load-font-ex file-name font-size &opt font-chars)\n\n"
204208
"Load font from file with extended parameters"
205209
},
206210
{"load-font-from-memory", cfun_LoadFontFromMemory,

src/types.h

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,15 +497,42 @@ static Shader *jaylib_getshader(const Janet *argv, int32_t n) {
497497
return ((Shader *)janet_getabstract(argv, n, &AT_Shader));
498498
};
499499

500+
int texture2d_get(void* p, Janet key, Janet *out);
501+
500502
static const JanetAbstractType AT_Texture2D = {
501503
"jaylib/texture2d",
502-
JANET_ATEND_NAME
504+
NULL,
505+
NULL,
506+
texture2d_get,
507+
JANET_ATEND_GET
503508
};
504509

505510
static Texture2D *jaylib_gettexture2d(const Janet *argv, int32_t n) {
506511
return ((Texture2D *)janet_getabstract(argv, n, &AT_Texture2D));
507512
}
508513

514+
int texture2d_get(void* p, Janet key, Janet *out) {
515+
Texture2D *texture = (Texture2D *) p;
516+
517+
if (!janet_checktype(key, JANET_KEYWORD)) {
518+
janet_panic("expected keyword");
519+
}
520+
521+
const uint8_t *kw = janet_unwrap_keyword(key);
522+
523+
if (!janet_cstrcmp(kw, "width")) {
524+
*out = janet_wrap_integer(texture->width);
525+
return 1;
526+
}
527+
528+
if (!janet_cstrcmp(kw, "height")) {
529+
*out = janet_wrap_integer(texture->height);
530+
return 1;
531+
}
532+
533+
return 0;
534+
}
535+
509536
static const JanetAbstractType AT_Image = {
510537
"jaylib/image",
511538
JANET_ATEND_NAME

test/lenna.bmp

768 KB
Binary file not shown.

test/test2.janet

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,20 @@
99
(image-dither lenna 4 4 4 4)
1010
(def lenna-t (load-texture-from-image lenna))
1111

12+
(def lenna-bmp (slurp "test/lenna.bmp"))
13+
(def lenna-b (load-image-from-buffer ".bmp" lenna-bmp))
14+
(image-dither lenna-b 4 4 4 4)
15+
(def lenna-bt (load-texture-from-image lenna-b))
16+
17+
(def gen-bmp (get-bitmap-header-buffer 100 100))
18+
(each byte (range 0 (* 100 100))
19+
(buffer/push-byte gen-bmp 0) #b
20+
(buffer/push-byte gen-bmp 0) #g
21+
(buffer/push-byte gen-bmp 0xff) #r
22+
)
23+
(def gen-i (load-image-from-buffer ".bmp" gen-bmp))
24+
(def gen-t (load-texture-from-image gen-i))
25+
1226
(def cells (gen-image-cellular 100 100 10))
1327
(def cells-t (load-texture-from-image cells))
1428

@@ -20,6 +34,7 @@
2034
(clear-background :green)
2135

2236
(draw-texture lenna-t 100 100 :white)
37+
(draw-texture lenna-bt 200 200 :white)
2338
(draw-texture cells-t 600 0 :white)
2439
(draw-texture-n-patch nine-patch-t [[0 0 96 96] 32 32 32 32 :npatch-nine-patch] [0 0 96 138] [0 0] 0 :white)
2540

0 commit comments

Comments
 (0)