diff --git a/examples/sokol_examples/.gitignore b/examples/sokol_examples/.gitignore new file mode 100644 index 0000000000..286eadb91f --- /dev/null +++ b/examples/sokol_examples/.gitignore @@ -0,0 +1,3 @@ +fonts +fonts2 +drawing diff --git a/examples/sokol_examples/assets/DroidSerif-Regular.ttf b/examples/sokol_examples/assets/DroidSerif-Regular.ttf new file mode 100644 index 0000000000..239ba38253 Binary files /dev/null and b/examples/sokol_examples/assets/DroidSerif-Regular.ttf differ diff --git a/examples/sokol_examples/assets/ProggyTiny.ttf b/examples/sokol_examples/assets/ProggyTiny.ttf new file mode 100644 index 0000000000..1c4312c3db Binary files /dev/null and b/examples/sokol_examples/assets/ProggyTiny.ttf differ diff --git a/examples/sokol_examples/drawing.v b/examples/sokol_examples/drawing.v index b4f8bcc898..40388bcaba 100644 --- a/examples/sokol_examples/drawing.v +++ b/examples/sokol_examples/drawing.v @@ -2,28 +2,32 @@ import sokol import sokol.sapp import sokol.gfx import sokol.sgl -import fontstash struct AppState { pass_action sg_pass_action } +const ( + used_import = sokol.used_import +) + fn main() { state := &AppState{ pass_action: gfx.create_clear_pass(0.1, 0.1, 0.1, 1.0) } - + title := 'Sokol Drawing Template' desc := sapp_desc{ user_data: state init_userdata_cb: init frame_userdata_cb: frame - window_title: 'Sokal Drawing Template'.str + window_title: title.str + html5_canvas_name: title.str } sapp.run(&desc) } fn init(user_data voidptr) { - desc := sg_desc { + desc := sg_desc{ mtl_device: C.sapp_metal_get_device() mtl_renderpass_descriptor_cb: sapp_metal_get_renderpass_descriptor mtl_drawable_cb: sapp_metal_get_drawable @@ -33,17 +37,14 @@ fn init(user_data voidptr) { d3d11_depth_stencil_view_cb: sapp_d3d11_get_depth_stencil_view } gfx.setup(&desc) - sgl_desc := sgl_desc_t{} sgl.setup(&sgl_desc) } fn frame(user_data voidptr) { - //println('frame') + // println('frame') state := &AppState(user_data) - draw() - gfx.begin_default_pass(&state.pass_action, sapp.width(), sapp.height()) sgl.draw() gfx.end_pass() @@ -55,30 +56,28 @@ fn draw() { sgl.defaults() sgl.matrix_mode_projection() sgl.ortho(0.0, f32(sapp.width()), f32(sapp.height()), 0.0, -1.0, 1.0) - sgl.c4b(255, 0, 0, 128) draw_hollow_rect(10, 10, 100, 30) - sgl.c4b(25, 150, 0, 128) draw_filled_rect(10, 150, 80, 40) - //line(0, 0, 500, 500) + // line(0, 0, 500, 500) } fn draw_hollow_rect(x, y, w, h f32) { - sgl.begin_line_strip() - sgl.v2f(x, y) + sgl.begin_line_strip() + sgl.v2f(x, y) sgl.v2f(x + w, y) sgl.v2f(x + w, y + h) sgl.v2f(x, y + h) sgl.v2f(x, y) - sgl.end() + sgl.end() } fn draw_filled_rect(x, y, w, h f32) { - sgl.begin_quads() + sgl.begin_quads() sgl_v2f(x, y) - sgl_v2f(x + w, y) - sgl_v2f(x + w, y + h) - sgl_v2f(x, y + h) - sgl.end() + sgl_v2f(x + w, y) + sgl_v2f(x + w, y + h) + sgl_v2f(x, y + h) + sgl.end() } diff --git a/examples/sokol_examples/fonts.v b/examples/sokol_examples/fonts.v index c6ae4667b7..0f01c51d3d 100644 --- a/examples/sokol_examples/fonts.v +++ b/examples/sokol_examples/fonts.v @@ -3,48 +3,45 @@ import sokol.sapp import sokol.gfx import sokol.sgl import sokol.sfons -import fontstash import os import time struct AppState { mut: pass_action C.sg_pass_action - fons &C.FONScontext + fons &C.FONScontext font_normal int } fn main() { - mut color_action := sg_color_attachment_action { + mut color_action := sg_color_attachment_action{ action: C.SG_ACTION_CLEAR } color_action.val[0] = 0.3 color_action.val[1] = 0.3 color_action.val[2] = 0.32 color_action.val[3] = 1.0 - mut pass_action := sg_pass_action{} pass_action.colors[0] = color_action - state := &AppState{ pass_action: pass_action fons: &C.FONScontext(0) } - + title := 'V Metal/GL Text Rendering' desc := sapp_desc{ user_data: state init_userdata_cb: init frame_userdata_cb: frame - window_title: 'V Metal/GL Text Rendering'.str + window_title: title.str + html5_canvas_name: title.str } sapp.run(&desc) } fn init(user_data voidptr) { mut state := &AppState(user_data) - // dont actually alocate this on the heap in real life - gfx.setup(&sg_desc { + gfx.setup(&sg_desc{ mtl_device: C.sapp_metal_get_device() mtl_renderpass_descriptor_cb: sapp_metal_get_renderpass_descriptor mtl_drawable_cb: sapp_metal_get_drawable @@ -53,30 +50,25 @@ fn init(user_data voidptr) { d3d11_render_target_view_cb: sapp_d3d11_get_render_target_view d3d11_depth_stencil_view_cb: sapp_d3d11_get_depth_stencil_view }) - s := &C.sgl_desc_t{} C.sgl_setup(s) - - state.fons = C.sfons_create(512, 512, 1) - + state.fons = C.sfons_create(512, 512, 1) // or use DroidSerif-Regular.ttf - if bytes := os.read_bytes('assets/ProggyTiny.ttf') { + if bytes := os.read_bytes(os.resource_abs_path('assets/ProggyTiny.ttf')) { println('loaded font: $bytes.len') - state.font_normal = C.fonsAddFontMem(state.fons, "sans", bytes.data, bytes.len, false) + state.font_normal = C.fonsAddFontMem(state.fons, 'sans', bytes.data, bytes.len, false) } } fn frame(user_data voidptr) { - t:=time.ticks() + t := time.ticks() mut state := &AppState(user_data) - state.render_font() - gfx.begin_default_pass(&state.pass_action, sapp_width(), sapp_height()) sgl.draw() gfx.end_pass() gfx.commit() - //println(time.ticks()-t) + // println(time.ticks()-t) } fn (state &AppState) render_font() { @@ -85,21 +77,18 @@ fn (state &AppState) render_font() { mut dx := 0.0 mut dy := 0.0 lh := 0.0 - white := C.sfons_rgba(255, 255, 255, 255) - black := C.sfons_rgba(0, 0, 0, 255) - brown := C.sfons_rgba(192, 128, 0, 128) - blue := C.sfons_rgba(0, 192, 255, 255) - state.fons.clear_state() - + white := C.sfons_rgba(255, 255, 255, 255) + black := C.sfons_rgba(0, 0, 0, 255) + brown := C.sfons_rgba(192, 128, 0, 128) + blue := C.sfons_rgba(0, 192, 255, 255) + state.fons.clear_state() sgl.defaults() - sgl.matrix_mode_projection() - sgl.ortho(0.0, f32(C.sapp_width()), f32(C.sapp_height()), 0.0, -1.0, 1.0) - + sgl.matrix_mode_projection() + sgl.ortho(0.0, f32(C.sapp_width()), f32(C.sapp_height()), 0.0, -1.0, 1.0) sx = 0 sy = 50 - dx = sx + dx = sx dy = sy - state.fons.set_font(state.font_normal) state.fons.set_size(100.0) ascender := 0.0 @@ -109,24 +98,20 @@ fn (state &AppState) render_font() { dy += lh C.fonsSetColor(state.fons, white) dx = C.fonsDrawText(state.fons, dx, dy, c'The quick ', C.NULL) - fonsSetFont(state.fons, state.font_normal) fonsSetSize(state.fons, 48.0) fonsSetColor(state.fons, brown) - dx = fonsDrawText(state.fons, dx, dy, c"brown ", C.NULL) - + dx = fonsDrawText(state.fons, dx, dy, c'brown ', C.NULL) fonsSetFont(state.fons, state.font_normal) fonsSetSize(state.fons, 24.0) fonsSetColor(state.fons, white) - dx = fonsDrawText(state.fons, dx, dy, c"fox ", C.NULL) - + dx = fonsDrawText(state.fons, dx, dy, c'fox ', C.NULL) dx = sx dy += lh * 1.2 fonsSetSize(state.fons, 20.0) fonsSetFont(state.fons, state.font_normal) fonsSetColor(state.fons, blue) - fonsDrawText(state.fons, dx, dy, c"Now is the time for all good men to come to the aid of the party.", C.NULL) - + fonsDrawText(state.fons, dx, dy, c'Now is the time for all good men to come to the aid of the party.', C.NULL) dx = 300 dy = 350 fonsSetAlign(state.fons, C.FONS_ALIGN_LEFT | C.FONS_ALIGN_BASELINE) @@ -135,8 +120,7 @@ fn (state &AppState) render_font() { fonsSetColor(state.fons, white) fonsSetSpacing(state.fons, 5.0) fonsSetBlur(state.fons, 6.0) - fonsDrawText(state.fons, dx, dy, c"Blurry...", C.NULL) - + fonsDrawText(state.fons, dx, dy, c'Blurry...', C.NULL) dx = 300 dy += 50.0 fonsSetSize(state.fons, 28.0) @@ -144,47 +128,45 @@ fn (state &AppState) render_font() { fonsSetColor(state.fons, white) fonsSetSpacing(state.fons, 0.0) fonsSetBlur(state.fons, 3.0) - fonsDrawText(state.fons, dx,dy + 2, c"DROP SHADOW", C.NULL) + fonsDrawText(state.fons, dx, dy + 2, c'DROP SHADOW', C.NULL) fonsSetColor(state.fons, black) fonsSetBlur(state.fons, 0) - fonsDrawText(state.fons, dx,dy, c"DROP SHADOW", C.NULL) - + fonsDrawText(state.fons, dx, dy, c'DROP SHADOW', C.NULL) fonsSetSize(state.fons, 18.0) fonsSetFont(state.fons, state.font_normal) fonsSetColor(state.fons, white) dx = 50 dy = 350 - line(dx-10,dy,dx+250,dy) + line(dx - 10, dy, dx + 250, dy) C.fonsSetAlign(state.fons, C.FONS_ALIGN_LEFT | C.FONS_ALIGN_TOP) - dx = C.fonsDrawText(state.fons, dx,dy, c"Top",C.NULL) + dx = C.fonsDrawText(state.fons, dx, dy, c'Top', C.NULL) dx += 10 C.fonsSetAlign(state.fons, C.FONS_ALIGN_LEFT | C.FONS_ALIGN_MIDDLE) - dx = C.fonsDrawText(state.fons, dx,dy, c"Middle",C.NULL) + dx = C.fonsDrawText(state.fons, dx, dy, c'Middle', C.NULL) dx += 10 C.fonsSetAlign(state.fons, C.FONS_ALIGN_LEFT | C.FONS_ALIGN_BASELINE) - dx = C.fonsDrawText(state.fons, dx,dy, c"Baseline",C.NULL) + dx = C.fonsDrawText(state.fons, dx, dy, c'Baseline', C.NULL) dx += 10 C.fonsSetAlign(state.fons, C.FONS_ALIGN_LEFT | C.FONS_ALIGN_BOTTOM) - C.fonsDrawText(state.fons, dx,dy, c"Bottom",C.NULL) + C.fonsDrawText(state.fons, dx, dy, c'Bottom', C.NULL) dx = 150 dy = 400 - line(dx,dy-30,dx,dy+80.0) + line(dx, dy - 30, dx, dy + 80.0) C.fonsSetAlign(state.fons, C.FONS_ALIGN_LEFT | C.FONS_ALIGN_BASELINE) - C.fonsDrawText(state.fons, dx,dy, c"Left",C.NULL) + C.fonsDrawText(state.fons, dx, dy, c'Left', C.NULL) dy += 30 C.fonsSetAlign(state.fons, C.FONS_ALIGN_CENTER | C.FONS_ALIGN_BASELINE) - C.fonsDrawText(state.fons, dx,dy, c"Center",C.NULL) + C.fonsDrawText(state.fons, dx, dy, c'Center', C.NULL) dy += 30 C.fonsSetAlign(state.fons, C.FONS_ALIGN_RIGHT | C.FONS_ALIGN_BASELINE) - C.fonsDrawText(state.fons, dx,dy, c"Right",C.NULL) - + C.fonsDrawText(state.fons, dx, dy, c'Right', C.NULL) C.sfons_flush(state.fons) } fn line(sx f32, sy f32, ex f32, ey f32) { - sgl.begin_lines() - sgl.c4b(255, 255, 0, 128) - sgl.v2f(sx, sy) - sgl.v2f(ex, ey) - sgl.end() + sgl.begin_lines() + sgl.c4b(255, 255, 0, 128) + sgl.v2f(sx, sy) + sgl.v2f(ex, ey) + sgl.end() } diff --git a/examples/sokol_examples/fonts2.v b/examples/sokol_examples/fonts2.v index 127f13cca7..7bb063c886 100644 --- a/examples/sokol_examples/fonts2.v +++ b/examples/sokol_examples/fonts2.v @@ -3,51 +3,45 @@ import sokol.sapp import sokol.gfx import sokol.sgl import sokol.sfons -import fontstash import os -import time -import filepath - +// import time #define FONS_USE_FREETYPE 1 - struct AppState { mut: pass_action C.sg_pass_action - fons &C.FONScontext + fons &C.FONScontext font_normal int } fn main() { - mut color_action := sg_color_attachment_action { + mut color_action := sg_color_attachment_action{ action: C.SG_ACTION_CLEAR } color_action.val[0] = 0.3 color_action.val[1] = 0.3 color_action.val[2] = 0.32 color_action.val[3] = 1.0 - mut pass_action := sg_pass_action{} pass_action.colors[0] = color_action - state := &AppState{ pass_action: pass_action fons: &C.FONScontext(0) } - + title := 'V Metal/GL Text Rendering' desc := sapp_desc{ user_data: state init_userdata_cb: init frame_userdata_cb: frame - window_title: 'V Metal/GL Text Rendering'.str + window_title: title.str + html5_canvas_name: title.str } sapp.run(&desc) } fn init(user_data voidptr) { mut state := &AppState(user_data) - // dont actually alocate this on the heap in real life - gfx.setup(&sg_desc { + gfx.setup(&sg_desc{ mtl_device: C.sapp_metal_get_device() mtl_renderpass_descriptor_cb: sapp_metal_get_renderpass_descriptor mtl_drawable_cb: sapp_metal_get_drawable @@ -56,67 +50,53 @@ fn init(user_data voidptr) { d3d11_render_target_view_cb: sapp_d3d11_get_render_target_view d3d11_depth_stencil_view_cb: sapp_d3d11_get_depth_stencil_view }) - s := &C.sgl_desc_t{} C.sgl_setup(s) - - state.fons = C.sfons_create(512, 512, 1) - - //mut font_path := cfg.font_path - //if font_path == '' { - mut font_path := 'RobotoMono-Regular.ttf' - //} + state.fons = C.sfons_create(512, 512, 1) + mut font_path := os.resource_abs_path('assets/DroidSerif-Regular.ttf') if !os.exists(font_path) { - exe_path := os.executable() - exe_dir := filepath.basedir(exe_path) - font_path = filepath.basedir(exe_dir) + '/tetris/$font_path' + font_path = os.resource_abs_path('../tetris/RobotoMono-Regular.ttf') println(font_path) } if !os.exists(font_path) { println('failed to load $font_path') return } - if bytes := os.read_bytes(font_path) { println('loaded font: $bytes.len') - state.font_normal = C.fonsAddFontMem(state.fons, "sans", bytes.data, bytes.len, false) + state.font_normal = C.fonsAddFontMem(state.fons, 'sans', bytes.data, bytes.len, false) } } fn frame(user_data voidptr) { - t:=time.ticks() + // t:=time.ticks() mut state := &AppState(user_data) - state.render_font() - gfx.begin_default_pass(&state.pass_action, sapp_width(), sapp_height()) sgl.draw() gfx.end_pass() gfx.commit() - //println(time.ticks()-t) + // println(time.ticks()-t) } -fn (state &AppState) render_font() { +fn (state mut AppState) render_font() { mut sx := 0.0 mut sy := 0.0 mut dx := 0.0 mut dy := 0.0 lh := 0.0 - white := C.sfons_rgba(255, 255, 255, 255) - black := C.sfons_rgba(0, 0, 0, 255) - brown := C.sfons_rgba(192, 128, 0, 128) - blue := C.sfons_rgba(0, 192, 255, 255) - state.fons.clear_state() - + white := C.sfons_rgba(255, 255, 255, 255) + black := C.sfons_rgba(0, 0, 0, 255) + brown := C.sfons_rgba(192, 128, 0, 128) + blue := C.sfons_rgba(0, 192, 255, 255) + state.fons.clear_state() sgl.defaults() - sgl.matrix_mode_projection() - sgl.ortho(0.0, f32(C.sapp_width()), f32(C.sapp_height()), 0.0, -1.0, 1.0) - + sgl.matrix_mode_projection() + sgl.ortho(0.0, f32(C.sapp_width()), f32(C.sapp_height()), 0.0, -1.0, 1.0) sx = 0 sy = 50 - dx = sx + dx = sx dy = sy - state.fons.set_font(state.font_normal) state.fons.set_size(100.0) ascender := 0.0 @@ -126,24 +106,20 @@ fn (state &AppState) render_font() { dy += lh C.fonsSetColor(state.fons, white) dx = C.fonsDrawText(state.fons, dx, dy, c'The 新 quick ', C.NULL) - fonsSetFont(state.fons, state.font_normal) fonsSetSize(state.fons, 48.0) fonsSetColor(state.fons, brown) - dx = fonsDrawText(state.fons, dx, dy, c"brown ", C.NULL) - + dx = fonsDrawText(state.fons, dx, dy, c'brown ', C.NULL) fonsSetFont(state.fons, state.font_normal) fonsSetSize(state.fons, 24.0) fonsSetColor(state.fons, white) - dx = fonsDrawText(state.fons, dx, dy, c"fox ", C.NULL) - + dx = fonsDrawText(state.fons, dx, dy, c'fox ', C.NULL) dx = sx dy += lh * 1.2 fonsSetSize(state.fons, 20.0) fonsSetFont(state.fons, state.font_normal) fonsSetColor(state.fons, blue) - fonsDrawText(state.fons, dx, dy, c"Now is the time for all good men to come to the aid of the party.", C.NULL) - + fonsDrawText(state.fons, dx, dy, c'Now is the time for all good men to come to the aid of the party.', C.NULL) dx = 300 dy = 350 fonsSetAlign(state.fons, C.FONS_ALIGN_LEFT | C.FONS_ALIGN_BASELINE) @@ -152,8 +128,7 @@ fn (state &AppState) render_font() { fonsSetColor(state.fons, white) fonsSetSpacing(state.fons, 5.0) fonsSetBlur(state.fons, 6.0) - fonsDrawText(state.fons, dx, dy, c"Blurry...", C.NULL) - + fonsDrawText(state.fons, dx, dy, c'Blurry...', C.NULL) dx = 300 dy += 50.0 fonsSetSize(state.fons, 28.0) @@ -161,47 +136,45 @@ fn (state &AppState) render_font() { fonsSetColor(state.fons, white) fonsSetSpacing(state.fons, 0.0) fonsSetBlur(state.fons, 3.0) - fonsDrawText(state.fons, dx,dy + 2, c"DROP SHADOW", C.NULL) + fonsDrawText(state.fons, dx, dy + 2, c'DROP SHADOW', C.NULL) fonsSetColor(state.fons, black) fonsSetBlur(state.fons, 0) - fonsDrawText(state.fons, dx,dy, c"DROP SHADOW", C.NULL) - + fonsDrawText(state.fons, dx, dy, c'DROP SHADOW', C.NULL) fonsSetSize(state.fons, 18.0) fonsSetFont(state.fons, state.font_normal) fonsSetColor(state.fons, white) dx = 50 dy = 350 - line(dx-10,dy,dx+250,dy) + line(dx - 10, dy, dx + 250, dy) C.fonsSetAlign(state.fons, C.FONS_ALIGN_LEFT | C.FONS_ALIGN_TOP) - dx = C.fonsDrawText(state.fons, dx,dy, c"Top",C.NULL) + dx = C.fonsDrawText(state.fons, dx, dy, c'Top', C.NULL) dx += 10 C.fonsSetAlign(state.fons, C.FONS_ALIGN_LEFT | C.FONS_ALIGN_MIDDLE) - dx = C.fonsDrawText(state.fons, dx,dy, c"Middle",C.NULL) + dx = C.fonsDrawText(state.fons, dx, dy, c'Middle', C.NULL) dx += 10 C.fonsSetAlign(state.fons, C.FONS_ALIGN_LEFT | C.FONS_ALIGN_BASELINE) - dx = C.fonsDrawText(state.fons, dx,dy, c"Baseline",C.NULL) + dx = C.fonsDrawText(state.fons, dx, dy, c'Baseline', C.NULL) dx += 10 C.fonsSetAlign(state.fons, C.FONS_ALIGN_LEFT | C.FONS_ALIGN_BOTTOM) - C.fonsDrawText(state.fons, dx,dy, c"Bottom",C.NULL) + C.fonsDrawText(state.fons, dx, dy, c'Bottom', C.NULL) dx = 150 dy = 400 - line(dx,dy-30,dx,dy+80.0) + line(dx, dy - 30, dx, dy + 80.0) C.fonsSetAlign(state.fons, C.FONS_ALIGN_LEFT | C.FONS_ALIGN_BASELINE) - C.fonsDrawText(state.fons, dx,dy, c"Left",C.NULL) + C.fonsDrawText(state.fons, dx, dy, c'Left', C.NULL) dy += 30 C.fonsSetAlign(state.fons, C.FONS_ALIGN_CENTER | C.FONS_ALIGN_BASELINE) - C.fonsDrawText(state.fons, dx,dy, c"Center",C.NULL) + C.fonsDrawText(state.fons, dx, dy, c'Center', C.NULL) dy += 30 C.fonsSetAlign(state.fons, C.FONS_ALIGN_RIGHT | C.FONS_ALIGN_BASELINE) - C.fonsDrawText(state.fons, dx,dy, c"Right",C.NULL) - + C.fonsDrawText(state.fons, dx, dy, c'Right', C.NULL) C.sfons_flush(state.fons) } fn line(sx f32, sy f32, ex f32, ey f32) { - sgl.begin_lines() - sgl.c4b(255, 255, 0, 128) - sgl.v2f(sx, sy) - sgl.v2f(ex, ey) - sgl.end() + sgl.begin_lines() + sgl.c4b(255, 255, 0, 128) + sgl.v2f(sx, sy) + sgl.v2f(ex, ey) + sgl.end() } diff --git a/vlib/fontstash/fontstash.v b/vlib/fontstash/fontstash.v index c3eb9b6431..8413afb4e0 100644 --- a/vlib/fontstash/fontstash.v +++ b/vlib/fontstash/fontstash.v @@ -2,6 +2,13 @@ module fontstash #flag -I @VROOT/thirdparty/fontstash +#define FONTSTASH_IMPLEMENTATION +#include "fontstash.h" + +pub const ( + // TODO: fontstash.used_import is used to keep v from warning about unused imports + used_import = 1 +) // Contructor and destructor. [inline] diff --git a/vlib/sokol/c/c.v b/vlib/sokol/c/c.v new file mode 100644 index 0000000000..77e12f9afe --- /dev/null +++ b/vlib/sokol/c/c.v @@ -0,0 +1,33 @@ +module c + +pub const ( + used_import = 1 +) + +#flag -I @VROOT/thirdparty/sokol +#flag -I @VROOT/thirdparty/sokol/util + +#flag darwin -fobjc-arc +#flag linux -lX11 -lGL + +// METAL +// #flag -DSOKOL_METAL +// #flag darwin -framework Metal -framework Cocoa -framework MetalKit -framework QuartzCore + +// OPENGL +#flag -DSOKOL_GLCORE33 +#flag darwin -framework OpenGL -framework Cocoa -framework QuartzCore + + +// for simplicity, all header includes are here because import order matters and we dont have any way +// to ensure import order with V yet +#define SOKOL_IMPL +#define SOKOL_NO_ENTRY +#include "sokol_app.h" + +#define SOKOL_IMPL +#define SOKOL_NO_DEPRECATED +#include "sokol_gfx.h" + +#define SOKOL_GL_IMPL +#include "util/sokol_gl.h" diff --git a/vlib/sokol/f/f.v b/vlib/sokol/f/f.v new file mode 100644 index 0000000000..2751aa8efa --- /dev/null +++ b/vlib/sokol/f/f.v @@ -0,0 +1,28 @@ +module f + +import fontstash + +pub const ( + used_import = 1 + fontstash.used_import +) + +#flag windows -I @VROOT/thirdparty/freetype/include +#flag windows -L @VROOT/thirdparty/freetype/win64 + +#flag linux -I/usr/include/freetype2 +#flag darwin -I/usr/local/include/freetype2 +#flag darwin -I/opt/local/include/freetype2 +#flag darwin -I/usr/local/Cellar/freetype/2.10.0/include/freetype2/ +#flag freebsd -I/usr/local/include/freetype2 +#flag freebsd -Wl -L/usr/local/lib + +#flag -lfreetype +#flag darwin -lpng -lbz2 -lz + +#flag linux -I. + +#include "ft2build.h" + +#define FONS_USE_FREETYPE +#define SOKOL_FONTSTASH_IMPL +#include "util/sokol_fontstash.h" diff --git a/vlib/sokol/sapp/sapp_structs.v b/vlib/sokol/sapp/sapp_structs.v index c8a688650e..e6ed0882da 100644 --- a/vlib/sokol/sapp/sapp_structs.v +++ b/vlib/sokol/sapp/sapp_structs.v @@ -27,7 +27,7 @@ pub: enable_clipboard bool /* enable clipboard access, default is false */ clipboard_size int /* max size of clipboard content in bytes */ - html5_canvas_name byteptr /* the name (id) of the HTML5 canvas element, default is "canvas" */ + html5_canvas_name byteptr /* the name (id) of the HTML5 canvas element, default is "canvas" */ html5_canvas_resize bool /* if true, the HTML5 canvas size is set to sapp_desc.width/height, otherwise canvas size is tracked */ html5_preserve_drawing_buffer bool /* HTML5 only: whether to preserve default framebuffer content between frames */ html5_premultiplied_alpha bool /* HTML5 only: whether the rendered pixels use premultiplied alpha convention */ diff --git a/vlib/sokol/sfons/sfons.v b/vlib/sokol/sfons/sfons.v index 3736c441b1..33ffe6b9dc 100644 --- a/vlib/sokol/sfons/sfons.v +++ b/vlib/sokol/sfons/sfons.v @@ -1,7 +1,11 @@ module sfons + import fontstash -#flag -I fontstash/thirdparty +const ( + // keep v from warning about unused imports + used_import = fontstash.used_import + 1 +) [inline] pub fn sfons_create(width int, height int, flags int) &C.FONScontext { diff --git a/vlib/sokol/sokol.v b/vlib/sokol/sokol.v index 313aad3ec6..2e80d9aa5d 100644 --- a/vlib/sokol/sokol.v +++ b/vlib/sokol/sokol.v @@ -1,39 +1,8 @@ module sokol -#flag -I @VROOT/thirdparty/sokol -#flag -I @VROOT/thirdparty/sokol/util +import sokol.c +import sokol.f -#flag darwin -fobjc-arc -#flag linux -lX11 -lGL - -#flag darwin -I/usr/local/Cellar/freetype/2.10.0/include/freetype2/ -#flag -lfreetype - - -// METAL -// #flag -DSOKOL_METAL -// #flag darwin -framework Metal -framework Cocoa -framework MetalKit -framework QuartzCore - -// OPENGL -#flag -DSOKOL_GLCORE33 -#flag darwin -framework OpenGL -framework Cocoa -framework QuartzCore - - -// for simplicity, all header includes are here because import order matters and we dont have any way -// to ensure import order with V yet -#define SOKOL_IMPL -#define SOKOL_NO_ENTRY -#include "sokol_app.h" - -#define SOKOL_IMPL -#define SOKOL_NO_DEPRECATED -#include "sokol_gfx.h" - -#define SOKOL_GL_IMPL -#include "util/sokol_gl.h" - -#define FONS_USE_FREETYPE -#define FONTSTASH_IMPLEMENTATION -#include "fontstash.h" -#define SOKOL_FONTSTASH_IMPL -#include "util/sokol_fontstash.h" +pub const ( + used_import = c.used_import + f.used_import +)