V_sokol_gp
a V wrapper for the sokol_gp library
Sokol_gp
Sokol_gp is a 2d rendering library for Sokol that has many optimations to it like batch rendering plus it is super easy to use and setup
install
v install mohamedLT.sokolgp
supported platforms
basically, it runs where Sokol runs for android you can use vab
Example :
import gg
import sokol
import sokol.sapp
import mohamedlt.sokolgp
import sokol.gfx
import math
fn frame(s voidptr) {
width := sapp.width()
height := sapp.height()
ratio := width/f32(height)
sokolgp.begin(width, height)
sokolgp.viewport(0, 0, width, height)
sokolgp.project(-ratio, ratio, 1.0, -1.0)
sokolgp.set_color(0.1, 0.1, 0.1, 1.0)
sokolgp.clear()
time := f32(sapp.frame_count() * sapp.frame_duration())
r := math.sinf(time)*0.5+0.5
g := math.cosf(time)*0.5+0.5
sokolgp.set_color(r, g, 0.3, 1.0)
sokolgp.rotate_at(time, 0.0, 0.0)
sokolgp.draw_filled_rect(-0.5, -0.5, 1.0, 1.0)
pass_action := gfx.PassAction{}
gfx.begin_default_pass(&pass_action, width, height)
sokolgp.flush()
sokolgp.end()
gfx.end_pass()
gfx.commit()
}
fn init(s voidptr) {
sgdesc := sapp.create_desc()
gfx.setup(&sgdesc)
if !gfx.is_valid() {
println("Failed to create Sokol GFX context!\n")
exit(-1)
}
sgpdesc := sokolgp.Desc{}
sokolgp.setup(&sgpdesc)
if !sokolgp.is_valid() {
println("Failed to create Sokol GP context: ${sokolgp.get_error_message(sokolgp.get_last_error())}\n")
exit(-1)
}
}
struct App {
mut:
gg &gg.Context = unsafe { nil }
}
[console]
fn main() {
mut app := &App{
gg: 0
}
app.gg = gg.new_context(
width: 600
height: 600
user_data: app
create_window: true
window_title: '3D Cube Demo'
frame_fn: frame
init_fn: init
)
app.gg.run()
}