cgen: do full struct initialisation for V structs, fixes invalid data from `map[string]Struct{}['unknown']` (#9878)
parent
787a63dab6
commit
aebb551e93
|
@ -140,10 +140,6 @@ pub fn new_test_session(_vargs string) TestSession {
|
||||||
skip_files << 'examples/sokol/05_instancing_glsl/rt_glsl.v'
|
skip_files << 'examples/sokol/05_instancing_glsl/rt_glsl.v'
|
||||||
// Skip obj_viewer code in the CI
|
// Skip obj_viewer code in the CI
|
||||||
skip_files << 'examples/sokol/06_obj_viewer/show_obj.v'
|
skip_files << 'examples/sokol/06_obj_viewer/show_obj.v'
|
||||||
skip_files << 'examples/sokol/06_obj_viewer/obj/obj.v'
|
|
||||||
skip_files << 'examples/sokol/06_obj_viewer/obj/rend.v'
|
|
||||||
skip_files << 'examples/sokol/06_obj_viewer/obj/struct.v'
|
|
||||||
skip_files << 'examples/sokol/06_obj_viewer/obj/util.v'
|
|
||||||
}
|
}
|
||||||
if testing.github_job != 'ubuntu-tcc' {
|
if testing.github_job != 'ubuntu-tcc' {
|
||||||
skip_files << 'examples/c_interop_wkhtmltopdf.v' // needs installation of wkhtmltopdf from https://github.com/wkhtmltopdf/packaging/releases
|
skip_files << 'examples/c_interop_wkhtmltopdf.v' // needs installation of wkhtmltopdf from https://github.com/wkhtmltopdf/packaging/releases
|
||||||
|
|
|
@ -293,7 +293,7 @@ fn init_cube_glsl(mut app App) {
|
||||||
Vertex_t{ 1.0, 1.0, -1.0, c, 0, d},
|
Vertex_t{ 1.0, 1.0, -1.0, c, 0, d},
|
||||||
]
|
]
|
||||||
|
|
||||||
mut vert_buffer_desc := C.sg_buffer_desc{}
|
mut vert_buffer_desc := C.sg_buffer_desc{label: c'cube-vertices'}
|
||||||
unsafe { C.memset(&vert_buffer_desc, 0, sizeof(vert_buffer_desc)) }
|
unsafe { C.memset(&vert_buffer_desc, 0, sizeof(vert_buffer_desc)) }
|
||||||
|
|
||||||
vert_buffer_desc.size = size_t(vertices.len * int(sizeof(Vertex_t)))
|
vert_buffer_desc.size = size_t(vertices.len * int(sizeof(Vertex_t)))
|
||||||
|
@ -304,7 +304,6 @@ fn init_cube_glsl(mut app App) {
|
||||||
|
|
||||||
vert_buffer_desc.@type = .vertexbuffer
|
vert_buffer_desc.@type = .vertexbuffer
|
||||||
// vert_buffer_desc.usage = .immutable
|
// vert_buffer_desc.usage = .immutable
|
||||||
vert_buffer_desc.label = 'cube-vertices'.str
|
|
||||||
vbuf := gfx.make_buffer(&vert_buffer_desc)
|
vbuf := gfx.make_buffer(&vert_buffer_desc)
|
||||||
|
|
||||||
/* create an index buffer for the cube */
|
/* create an index buffer for the cube */
|
||||||
|
@ -317,7 +316,7 @@ fn init_cube_glsl(mut app App) {
|
||||||
22, 21, 20, 23, 22, 20
|
22, 21, 20, 23, 22, 20
|
||||||
]
|
]
|
||||||
|
|
||||||
mut index_buffer_desc := C.sg_buffer_desc{}
|
mut index_buffer_desc := C.sg_buffer_desc{label: c'cube-indices'}
|
||||||
unsafe { C.memset(&index_buffer_desc, 0, sizeof(index_buffer_desc)) }
|
unsafe { C.memset(&index_buffer_desc, 0, sizeof(index_buffer_desc)) }
|
||||||
|
|
||||||
index_buffer_desc.size = size_t(indices.len * int(sizeof(u16)))
|
index_buffer_desc.size = size_t(indices.len * int(sizeof(u16)))
|
||||||
|
@ -327,7 +326,6 @@ fn init_cube_glsl(mut app App) {
|
||||||
}
|
}
|
||||||
|
|
||||||
index_buffer_desc.@type = .indexbuffer
|
index_buffer_desc.@type = .indexbuffer
|
||||||
index_buffer_desc.label = 'cube-indices'.str
|
|
||||||
ibuf := gfx.make_buffer(&index_buffer_desc)
|
ibuf := gfx.make_buffer(&index_buffer_desc)
|
||||||
|
|
||||||
// create shader
|
// create shader
|
||||||
|
|
|
@ -172,7 +172,7 @@ fn init_cube_glsl(mut app App) {
|
||||||
Vertex_t{ 1.0, 1.0, -1.0, c, 0, d},
|
Vertex_t{ 1.0, 1.0, -1.0, c, 0, d},
|
||||||
]
|
]
|
||||||
|
|
||||||
mut vert_buffer_desc := C.sg_buffer_desc{}
|
mut vert_buffer_desc := C.sg_buffer_desc{label: c'cube-vertices'}
|
||||||
unsafe { C.memset(&vert_buffer_desc, 0, sizeof(vert_buffer_desc)) }
|
unsafe { C.memset(&vert_buffer_desc, 0, sizeof(vert_buffer_desc)) }
|
||||||
|
|
||||||
vert_buffer_desc.size = size_t(vertices.len * int(sizeof(Vertex_t)))
|
vert_buffer_desc.size = size_t(vertices.len * int(sizeof(Vertex_t)))
|
||||||
|
@ -182,7 +182,6 @@ fn init_cube_glsl(mut app App) {
|
||||||
}
|
}
|
||||||
|
|
||||||
vert_buffer_desc.@type = .vertexbuffer
|
vert_buffer_desc.@type = .vertexbuffer
|
||||||
vert_buffer_desc.label = 'cube-vertices'.str
|
|
||||||
vbuf := gfx.make_buffer(&vert_buffer_desc)
|
vbuf := gfx.make_buffer(&vert_buffer_desc)
|
||||||
|
|
||||||
// create an index buffer for the cube
|
// create an index buffer for the cube
|
||||||
|
@ -195,7 +194,7 @@ fn init_cube_glsl(mut app App) {
|
||||||
22, 21, 20, 23, 22, 20,
|
22, 21, 20, 23, 22, 20,
|
||||||
]
|
]
|
||||||
|
|
||||||
mut index_buffer_desc := C.sg_buffer_desc{}
|
mut index_buffer_desc := C.sg_buffer_desc{label: c'cube-indices'}
|
||||||
unsafe {C.memset(&index_buffer_desc, 0, sizeof(index_buffer_desc))}
|
unsafe {C.memset(&index_buffer_desc, 0, sizeof(index_buffer_desc))}
|
||||||
|
|
||||||
index_buffer_desc.size = size_t(indices.len * int(sizeof(u16)))
|
index_buffer_desc.size = size_t(indices.len * int(sizeof(u16)))
|
||||||
|
@ -205,7 +204,6 @@ fn init_cube_glsl(mut app App) {
|
||||||
}
|
}
|
||||||
|
|
||||||
index_buffer_desc.@type = .indexbuffer
|
index_buffer_desc.@type = .indexbuffer
|
||||||
index_buffer_desc.label = "cube-indices".str
|
|
||||||
ibuf := gfx.make_buffer(&index_buffer_desc)
|
ibuf := gfx.make_buffer(&index_buffer_desc)
|
||||||
|
|
||||||
// create shader
|
// create shader
|
||||||
|
|
|
@ -176,7 +176,7 @@ fn init_cube_glsl_m(mut app App) {
|
||||||
Vertex_t{ 1.0, 1.0, -1.0, c, 0, d},
|
Vertex_t{ 1.0, 1.0, -1.0, c, 0, d},
|
||||||
]
|
]
|
||||||
|
|
||||||
mut vert_buffer_desc := C.sg_buffer_desc{}
|
mut vert_buffer_desc := C.sg_buffer_desc{label: c'cube-vertices'}
|
||||||
unsafe { C.memset(&vert_buffer_desc, 0, sizeof(vert_buffer_desc)) }
|
unsafe { C.memset(&vert_buffer_desc, 0, sizeof(vert_buffer_desc)) }
|
||||||
vert_buffer_desc.size = size_t(vertices.len * int(sizeof(Vertex_t)))
|
vert_buffer_desc.size = size_t(vertices.len * int(sizeof(Vertex_t)))
|
||||||
vert_buffer_desc.data = C.sg_range{
|
vert_buffer_desc.data = C.sg_range{
|
||||||
|
@ -184,7 +184,6 @@ fn init_cube_glsl_m(mut app App) {
|
||||||
size: size_t(vertices.len * int(sizeof(Vertex_t)))
|
size: size_t(vertices.len * int(sizeof(Vertex_t)))
|
||||||
}
|
}
|
||||||
vert_buffer_desc.@type = .vertexbuffer
|
vert_buffer_desc.@type = .vertexbuffer
|
||||||
vert_buffer_desc.label = 'cube-vertices'.str
|
|
||||||
vbuf := gfx.make_buffer(&vert_buffer_desc)
|
vbuf := gfx.make_buffer(&vert_buffer_desc)
|
||||||
|
|
||||||
/* create an index buffer for the cube */
|
/* create an index buffer for the cube */
|
||||||
|
@ -199,7 +198,7 @@ fn init_cube_glsl_m(mut app App) {
|
||||||
*/
|
*/
|
||||||
]
|
]
|
||||||
|
|
||||||
mut index_buffer_desc := C.sg_buffer_desc{}
|
mut index_buffer_desc := C.sg_buffer_desc{label: c'cube-indices'}
|
||||||
unsafe { C.memset(&index_buffer_desc, 0, sizeof(index_buffer_desc)) }
|
unsafe { C.memset(&index_buffer_desc, 0, sizeof(index_buffer_desc)) }
|
||||||
index_buffer_desc.size = size_t(indices.len * int(sizeof(u16)))
|
index_buffer_desc.size = size_t(indices.len * int(sizeof(u16)))
|
||||||
index_buffer_desc.data = C.sg_range{
|
index_buffer_desc.data = C.sg_range{
|
||||||
|
@ -207,7 +206,6 @@ fn init_cube_glsl_m(mut app App) {
|
||||||
size: size_t(indices.len * int(sizeof(u16)))
|
size: size_t(indices.len * int(sizeof(u16)))
|
||||||
}
|
}
|
||||||
index_buffer_desc.@type = .indexbuffer
|
index_buffer_desc.@type = .indexbuffer
|
||||||
index_buffer_desc.label = 'cube-indices'.str
|
|
||||||
ibuf := gfx.make_buffer(&index_buffer_desc)
|
ibuf := gfx.make_buffer(&index_buffer_desc)
|
||||||
|
|
||||||
// create shader
|
// create shader
|
||||||
|
@ -284,7 +282,7 @@ fn init_cube_glsl_p(mut app App) {
|
||||||
Vertex_t{ 1.0, 1.0, -1.0, c, 0, d},
|
Vertex_t{ 1.0, 1.0, -1.0, c, 0, d},
|
||||||
]
|
]
|
||||||
|
|
||||||
mut vert_buffer_desc := C.sg_buffer_desc{}
|
mut vert_buffer_desc := C.sg_buffer_desc{label: c'cube-vertices'}
|
||||||
unsafe { C.memset(&vert_buffer_desc, 0, sizeof(vert_buffer_desc)) }
|
unsafe { C.memset(&vert_buffer_desc, 0, sizeof(vert_buffer_desc)) }
|
||||||
vert_buffer_desc.size = size_t(vertices.len * int(sizeof(Vertex_t)))
|
vert_buffer_desc.size = size_t(vertices.len * int(sizeof(Vertex_t)))
|
||||||
vert_buffer_desc.data = C.sg_range{
|
vert_buffer_desc.data = C.sg_range{
|
||||||
|
@ -292,7 +290,6 @@ fn init_cube_glsl_p(mut app App) {
|
||||||
size: size_t(vertices.len * int(sizeof(Vertex_t)))
|
size: size_t(vertices.len * int(sizeof(Vertex_t)))
|
||||||
}
|
}
|
||||||
vert_buffer_desc.@type = .vertexbuffer
|
vert_buffer_desc.@type = .vertexbuffer
|
||||||
vert_buffer_desc.label = 'cube-vertices'.str
|
|
||||||
vbuf := gfx.make_buffer(&vert_buffer_desc)
|
vbuf := gfx.make_buffer(&vert_buffer_desc)
|
||||||
|
|
||||||
/* create an index buffer for the cube */
|
/* create an index buffer for the cube */
|
||||||
|
@ -308,7 +305,7 @@ fn init_cube_glsl_p(mut app App) {
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
mut index_buffer_desc := C.sg_buffer_desc{}
|
mut index_buffer_desc := C.sg_buffer_desc{label: c'cube-indices'}
|
||||||
unsafe { C.memset(&index_buffer_desc, 0, sizeof(index_buffer_desc)) }
|
unsafe { C.memset(&index_buffer_desc, 0, sizeof(index_buffer_desc)) }
|
||||||
index_buffer_desc.size = size_t(indices.len * int(sizeof(u16)))
|
index_buffer_desc.size = size_t(indices.len * int(sizeof(u16)))
|
||||||
index_buffer_desc.data = C.sg_range{
|
index_buffer_desc.data = C.sg_range{
|
||||||
|
@ -316,7 +313,6 @@ fn init_cube_glsl_p(mut app App) {
|
||||||
size: size_t(indices.len * int(sizeof(u16)))
|
size: size_t(indices.len * int(sizeof(u16)))
|
||||||
}
|
}
|
||||||
index_buffer_desc.@type = .indexbuffer
|
index_buffer_desc.@type = .indexbuffer
|
||||||
index_buffer_desc.label = 'cube-indices'.str
|
|
||||||
ibuf := gfx.make_buffer(&index_buffer_desc)
|
ibuf := gfx.make_buffer(&index_buffer_desc)
|
||||||
|
|
||||||
// create shader
|
// create shader
|
||||||
|
|
|
@ -189,7 +189,7 @@ fn init_cube_glsl_i(mut app App) {
|
||||||
Vertex_t{ 1.0, 1.0, -1.0, c, 0, d},
|
Vertex_t{ 1.0, 1.0, -1.0, c, 0, d},
|
||||||
]
|
]
|
||||||
|
|
||||||
mut vert_buffer_desc := C.sg_buffer_desc{}
|
mut vert_buffer_desc := C.sg_buffer_desc{label: c'cube-vertices'}
|
||||||
unsafe {C.memset(&vert_buffer_desc, 0, sizeof(vert_buffer_desc))}
|
unsafe {C.memset(&vert_buffer_desc, 0, sizeof(vert_buffer_desc))}
|
||||||
vert_buffer_desc.size = size_t(vertices.len * int(sizeof(Vertex_t)))
|
vert_buffer_desc.size = size_t(vertices.len * int(sizeof(Vertex_t)))
|
||||||
vert_buffer_desc.data = C.sg_range{
|
vert_buffer_desc.data = C.sg_range{
|
||||||
|
@ -197,17 +197,15 @@ fn init_cube_glsl_i(mut app App) {
|
||||||
size: size_t(vertices.len * int(sizeof(Vertex_t)))
|
size: size_t(vertices.len * int(sizeof(Vertex_t)))
|
||||||
}
|
}
|
||||||
vert_buffer_desc.@type = .vertexbuffer
|
vert_buffer_desc.@type = .vertexbuffer
|
||||||
vert_buffer_desc.label = "cube-vertices".str
|
|
||||||
vbuf := gfx.make_buffer(&vert_buffer_desc)
|
vbuf := gfx.make_buffer(&vert_buffer_desc)
|
||||||
|
|
||||||
/* create an instance buffer for the cube */
|
/* create an instance buffer for the cube */
|
||||||
mut inst_buffer_desc := C.sg_buffer_desc{}
|
mut inst_buffer_desc := C.sg_buffer_desc{label: c'instance-data'}
|
||||||
unsafe {C.memset(&inst_buffer_desc, 0, sizeof(inst_buffer_desc))}
|
unsafe {C.memset(&inst_buffer_desc, 0, sizeof(inst_buffer_desc))}
|
||||||
|
|
||||||
inst_buffer_desc.size = size_t(num_inst * int(sizeof(m4.Vec4)))
|
inst_buffer_desc.size = size_t(num_inst * int(sizeof(m4.Vec4)))
|
||||||
inst_buffer_desc.@type = .vertexbuffer
|
inst_buffer_desc.@type = .vertexbuffer
|
||||||
inst_buffer_desc.usage = .stream
|
inst_buffer_desc.usage = .stream
|
||||||
inst_buffer_desc.label = "instance-data".str
|
|
||||||
inst_buf := gfx.make_buffer(&inst_buffer_desc)
|
inst_buf := gfx.make_buffer(&inst_buffer_desc)
|
||||||
|
|
||||||
|
|
||||||
|
@ -221,7 +219,7 @@ fn init_cube_glsl_i(mut app App) {
|
||||||
22, 21, 20, 23, 22, 20
|
22, 21, 20, 23, 22, 20
|
||||||
]
|
]
|
||||||
|
|
||||||
mut index_buffer_desc := C.sg_buffer_desc{}
|
mut index_buffer_desc := C.sg_buffer_desc{label: c'cube-indices'}
|
||||||
unsafe {C.memset(&index_buffer_desc, 0, sizeof(index_buffer_desc))}
|
unsafe {C.memset(&index_buffer_desc, 0, sizeof(index_buffer_desc))}
|
||||||
index_buffer_desc.size = size_t(indices.len * int(sizeof(u16)))
|
index_buffer_desc.size = size_t(indices.len * int(sizeof(u16)))
|
||||||
index_buffer_desc.data = C.sg_range{
|
index_buffer_desc.data = C.sg_range{
|
||||||
|
@ -229,7 +227,6 @@ fn init_cube_glsl_i(mut app App) {
|
||||||
size: size_t(indices.len * int(sizeof(u16)))
|
size: size_t(indices.len * int(sizeof(u16)))
|
||||||
}
|
}
|
||||||
index_buffer_desc.@type = .indexbuffer
|
index_buffer_desc.@type = .indexbuffer
|
||||||
index_buffer_desc.label = "cube-indices".str
|
|
||||||
ibuf := gfx.make_buffer(&index_buffer_desc)
|
ibuf := gfx.make_buffer(&index_buffer_desc)
|
||||||
|
|
||||||
/* create shader */
|
/* create shader */
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
module obj
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
*
|
*
|
||||||
* .obj loader
|
* .obj loader
|
||||||
|
@ -8,8 +10,6 @@
|
||||||
*
|
*
|
||||||
* TODO:
|
* TODO:
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
module obj
|
|
||||||
|
|
||||||
import gg.m4
|
import gg.m4
|
||||||
import strconv
|
import strconv
|
||||||
|
|
|
@ -68,7 +68,9 @@ pub fn (mut obj_part ObjPart) create_pipeline(in_part []int, shader C.sg_shader,
|
||||||
res.material = obj_part.part[in_part[0]].material
|
res.material = obj_part.part[in_part[0]].material
|
||||||
|
|
||||||
// vertex buffer
|
// vertex buffer
|
||||||
mut vert_buffer_desc := C.sg_buffer_desc{}
|
mut vert_buffer_desc := C.sg_buffer_desc{
|
||||||
|
label: 0
|
||||||
|
}
|
||||||
unsafe { C.memset(&vert_buffer_desc, 0, sizeof(vert_buffer_desc)) }
|
unsafe { C.memset(&vert_buffer_desc, 0, sizeof(vert_buffer_desc)) }
|
||||||
|
|
||||||
vert_buffer_desc.size = size_t(obj_buf.vbuf.len * int(sizeof(Vertex_pnct)))
|
vert_buffer_desc.size = size_t(obj_buf.vbuf.len * int(sizeof(Vertex_pnct)))
|
||||||
|
@ -82,7 +84,9 @@ pub fn (mut obj_part ObjPart) create_pipeline(in_part []int, shader C.sg_shader,
|
||||||
vbuf := gfx.make_buffer(&vert_buffer_desc)
|
vbuf := gfx.make_buffer(&vert_buffer_desc)
|
||||||
|
|
||||||
// index buffer
|
// index buffer
|
||||||
mut index_buffer_desc := C.sg_buffer_desc{}
|
mut index_buffer_desc := C.sg_buffer_desc{
|
||||||
|
label: 0
|
||||||
|
}
|
||||||
unsafe { C.memset(&index_buffer_desc, 0, sizeof(index_buffer_desc)) }
|
unsafe { C.memset(&index_buffer_desc, 0, sizeof(index_buffer_desc)) }
|
||||||
|
|
||||||
index_buffer_desc.size = size_t(obj_buf.ibuf.len * int(sizeof(u32)))
|
index_buffer_desc.size = size_t(obj_buf.ibuf.len * int(sizeof(u32)))
|
|
@ -86,10 +86,10 @@ pub mut:
|
||||||
ka m4.Vec4 = m4.Vec4{
|
ka m4.Vec4 = m4.Vec4{
|
||||||
e: [f32(0.1), 0.0, 0.0, 1.0]!
|
e: [f32(0.1), 0.0, 0.0, 1.0]!
|
||||||
}
|
}
|
||||||
kd m4.Vec4 = m4.Vec4{
|
kd m4.Vec4 = m4.Vec4{
|
||||||
e: [f32(0.5), 0.5, 0.5, 1.0]!
|
e: [f32(0.5), 0.5, 0.5, 1.0]!
|
||||||
}
|
}
|
||||||
ks m4.Vec4 = m4.Vec4{
|
ks m4.Vec4 = m4.Vec4{
|
||||||
e: [f32(1.0), 1.0, 1.0, 1.0]!
|
e: [f32(1.0), 1.0, 1.0, 1.0]!
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -14,9 +14,9 @@ pub fn read_lines_from_file(file_path string) []string {
|
||||||
}
|
}
|
||||||
rows = bts.bytestr().split_into_lines()
|
rows = bts.bytestr().split_into_lines()
|
||||||
} $else {
|
} $else {
|
||||||
path = 'assets/models/' + file_path
|
path = os.resource_abs_path('assets/models/' + file_path)
|
||||||
rows = os.read_lines(path) or {
|
rows = os.read_lines(path) or {
|
||||||
eprintln('File [$path] NOT FOUND!')
|
eprintln('File [$path] NOT FOUND! file_path: $file_path')
|
||||||
return rows
|
return rows
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ pub fn read_bytes_from_file(file_path string) []byte {
|
||||||
exit(0)
|
exit(0)
|
||||||
}
|
}
|
||||||
} $else {
|
} $else {
|
||||||
path = 'assets/models/' + file_path
|
path = os.resource_abs_path('assets/models/' + file_path)
|
||||||
buffer = os.read_bytes(path) or {
|
buffer = os.read_bytes(path) or {
|
||||||
eprintln('Texure file: [$path] NOT FOUND!')
|
eprintln('Texure file: [$path] NOT FOUND!')
|
||||||
exit(0)
|
exit(0)
|
|
@ -189,7 +189,9 @@ fn gg_init_sokol_window(user_data voidptr) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
mut pipdesc := C.sg_pipeline_desc{}
|
mut pipdesc := C.sg_pipeline_desc{
|
||||||
|
label: c'alpha_image'
|
||||||
|
}
|
||||||
unsafe { C.memset(&pipdesc, 0, sizeof(pipdesc)) }
|
unsafe { C.memset(&pipdesc, 0, sizeof(pipdesc)) }
|
||||||
|
|
||||||
color_state := C.sg_color_state{
|
color_state := C.sg_color_state{
|
||||||
|
|
|
@ -9,8 +9,8 @@ const (
|
||||||
|
|
||||||
struct UdpSocket {
|
struct UdpSocket {
|
||||||
handle int
|
handle int
|
||||||
l Addr
|
local Addr
|
||||||
r ?Addr
|
remote ?Addr
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct UdpConn {
|
pub struct UdpConn {
|
||||||
|
@ -28,8 +28,8 @@ pub fn dial_udp(laddr string, raddr string) ?&UdpConn {
|
||||||
sbase := new_udp_socket(local.port) ?
|
sbase := new_udp_socket(local.port) ?
|
||||||
sock := UdpSocket{
|
sock := UdpSocket{
|
||||||
handle: sbase.handle
|
handle: sbase.handle
|
||||||
l: local
|
local: local
|
||||||
r: resolve_wrapper(raddr)
|
remote: resolve_wrapper(raddr)
|
||||||
}
|
}
|
||||||
return &UdpConn{
|
return &UdpConn{
|
||||||
sock: sock
|
sock: sock
|
||||||
|
@ -45,7 +45,7 @@ fn resolve_wrapper(raddr string) ?Addr {
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut c UdpConn) write_ptr(b byteptr, len int) ?int {
|
pub fn (mut c UdpConn) write_ptr(b &byte, len int) ?int {
|
||||||
remote := c.sock.remote() or { return err_no_udp_remote }
|
remote := c.sock.remote() or { return err_no_udp_remote }
|
||||||
return c.write_to_ptr(remote, b, len)
|
return c.write_to_ptr(remote, b, len)
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ pub fn (mut c UdpConn) write_string(s string) ?int {
|
||||||
return c.write_ptr(s.str, s.len)
|
return c.write_ptr(s.str, s.len)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut c UdpConn) write_to_ptr(addr Addr, b byteptr, len int) ?int {
|
pub fn (mut c UdpConn) write_to_ptr(addr Addr, b &byte, len int) ?int {
|
||||||
res := C.sendto(c.sock.handle, b, len, 0, &addr.addr, addr.len)
|
res := C.sendto(c.sock.handle, b, len, 0, &addr.addr, addr.len)
|
||||||
if res >= 0 {
|
if res >= 0 {
|
||||||
return res
|
return res
|
||||||
|
@ -207,7 +207,7 @@ fn new_udp_socket(local_port int) ?&UdpSocket {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (s &UdpSocket) remote() ?Addr {
|
pub fn (s &UdpSocket) remote() ?Addr {
|
||||||
return s.r
|
return s.remote
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut s UdpSocket) set_option_bool(opt SocketOption, value bool) ? {
|
pub fn (mut s UdpSocket) set_option_bool(opt SocketOption, value bool) ? {
|
||||||
|
|
|
@ -24,7 +24,7 @@ pub struct C.sg_desc {
|
||||||
d3d11_render_target_view_cb fn() voidptr
|
d3d11_render_target_view_cb fn() voidptr
|
||||||
d3d11_depth_stencil_view_cb fn() voidptr
|
d3d11_depth_stencil_view_cb fn() voidptr
|
||||||
*/
|
*/
|
||||||
_end_canary u32
|
_end_canary u32
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct C.sg_context_desc {
|
pub struct C.sg_context_desc {
|
||||||
|
@ -43,7 +43,7 @@ pub struct C.sg_context_desc {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct C.sg_gl_context_desc {
|
pub struct C.sg_gl_context_desc {
|
||||||
gl_force_gles2 bool
|
force_gles2 bool
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct C.sg_metal_context_desc {
|
pub struct C.sg_metal_context_desc {
|
||||||
|
@ -82,7 +82,7 @@ pub mut:
|
||||||
sample_count int
|
sample_count int
|
||||||
blend_color C.sg_color
|
blend_color C.sg_color
|
||||||
alpha_to_coverage_enabled bool
|
alpha_to_coverage_enabled bool
|
||||||
label byteptr
|
label &char = &char(0)
|
||||||
_end_canary u32
|
_end_canary u32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,7 +156,7 @@ pub mut:
|
||||||
attrs [16]C.sg_shader_attr_desc
|
attrs [16]C.sg_shader_attr_desc
|
||||||
vs C.sg_shader_stage_desc
|
vs C.sg_shader_stage_desc
|
||||||
fs C.sg_shader_stage_desc
|
fs C.sg_shader_stage_desc
|
||||||
label byteptr
|
label &char
|
||||||
_end_canary u32
|
_end_canary u32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -210,16 +210,16 @@ pub fn (desc &C.sg_shader_desc) make_shader() C.sg_shader {
|
||||||
|
|
||||||
pub struct C.sg_shader_attr_desc {
|
pub struct C.sg_shader_attr_desc {
|
||||||
pub mut:
|
pub mut:
|
||||||
name byteptr // GLSL vertex attribute name (only required for GLES2)
|
name &char // GLSL vertex attribute name (only required for GLES2)
|
||||||
sem_name byteptr // HLSL semantic name
|
sem_name &char // HLSL semantic name
|
||||||
sem_index int // HLSL semantic index
|
sem_index int // HLSL semantic index
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct C.sg_shader_stage_desc {
|
pub struct C.sg_shader_stage_desc {
|
||||||
pub mut:
|
pub mut:
|
||||||
source byteptr
|
source &char
|
||||||
bytecode C.sg_range
|
bytecode C.sg_range
|
||||||
entry byteptr
|
entry &char
|
||||||
uniform_blocks [4]C.sg_shader_uniform_block_desc
|
uniform_blocks [4]C.sg_shader_uniform_block_desc
|
||||||
images [12]C.sg_shader_image_desc
|
images [12]C.sg_shader_image_desc
|
||||||
}
|
}
|
||||||
|
@ -238,14 +238,14 @@ pub mut:
|
||||||
|
|
||||||
pub struct C.sg_shader_uniform_desc {
|
pub struct C.sg_shader_uniform_desc {
|
||||||
pub mut:
|
pub mut:
|
||||||
name byteptr
|
name &char
|
||||||
@type UniformType
|
@type UniformType
|
||||||
array_count int
|
array_count int
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct C.sg_shader_image_desc {
|
pub struct C.sg_shader_image_desc {
|
||||||
pub mut:
|
pub mut:
|
||||||
name byteptr
|
name &char
|
||||||
image_type ImageType
|
image_type ImageType
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,7 +284,7 @@ pub mut:
|
||||||
_start_canary u32
|
_start_canary u32
|
||||||
color_attachments [4]C.sg_pass_attachment_desc
|
color_attachments [4]C.sg_pass_attachment_desc
|
||||||
depth_stencil_attachment C.sg_pass_attachment_desc
|
depth_stencil_attachment C.sg_pass_attachment_desc
|
||||||
label byteptr
|
label &char
|
||||||
_end_canary u32
|
_end_canary u32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -316,14 +316,14 @@ pub mut:
|
||||||
@type BufferType
|
@type BufferType
|
||||||
usage Usage
|
usage Usage
|
||||||
data C.sg_range
|
data C.sg_range
|
||||||
label byteptr
|
label &char
|
||||||
// GL specific
|
// GL specific
|
||||||
gl_buffers [2]u32
|
gl_buffers [2]u32
|
||||||
// Metal specific
|
// Metal specific
|
||||||
mtl_buffers [2]voidptr
|
mtl_buffers [2]voidptr
|
||||||
// D3D11 specific
|
// D3D11 specific
|
||||||
d3d11_buffer voidptr
|
d3d11_buffer voidptr
|
||||||
_end_canary u32
|
_end_canary u32
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct C.sg_buffer_info {
|
pub struct C.sg_buffer_info {
|
||||||
|
@ -364,18 +364,18 @@ pub mut:
|
||||||
min_lod f32
|
min_lod f32
|
||||||
max_lod f32
|
max_lod f32
|
||||||
data C.sg_image_data
|
data C.sg_image_data
|
||||||
label byteptr
|
label &char
|
||||||
// GL specific
|
// GL specific
|
||||||
gl_textures [2]u32
|
gl_textures [2]u32
|
||||||
gl_texture_target u32
|
gl_texture_target u32
|
||||||
// Metal specific
|
// Metal specific
|
||||||
mtl_textures [2]voidptr
|
mtl_textures [2]voidptr
|
||||||
// D3D11 specific
|
// D3D11 specific
|
||||||
d3d11_texture voidptr
|
d3d11_texture voidptr
|
||||||
d3d11_shader_resource_view voidptr
|
d3d11_shader_resource_view voidptr
|
||||||
// WebGPU specific
|
// WebGPU specific
|
||||||
wgpu_texture voidptr
|
wgpu_texture voidptr
|
||||||
_end_canary u32
|
_end_canary u32
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct C.sg_image_info {
|
pub struct C.sg_image_info {
|
||||||
|
@ -397,7 +397,7 @@ pub fn (i C.sg_image) free() {
|
||||||
|
|
||||||
pub struct C.sg_image_data {
|
pub struct C.sg_image_data {
|
||||||
pub mut:
|
pub mut:
|
||||||
//subimage [C.SG_CUBEFACE_NUM][C.SG_MAX_MIPMAPS]C.sg_range
|
// subimage [C.SG_CUBEFACE_NUM][C.SG_MAX_MIPMAPS]C.sg_range
|
||||||
subimage [6][16]C.sg_range
|
subimage [6][16]C.sg_range
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -445,21 +445,21 @@ pub mut:
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct C.sg_stencil_state {
|
pub struct C.sg_stencil_state {
|
||||||
enabled bool
|
enabled bool
|
||||||
front C.sg_stencil_face_state
|
front C.sg_stencil_face_state
|
||||||
back C.sg_stencil_face_state
|
back C.sg_stencil_face_state
|
||||||
read_mask byte
|
read_mask byte
|
||||||
write_mask byte
|
write_mask byte
|
||||||
ref byte
|
ref byte
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct C.sg_depth_state {
|
pub struct C.sg_depth_state {
|
||||||
pixel_format PixelFormat
|
pixel_format PixelFormat
|
||||||
compare CompareFunc
|
compare CompareFunc
|
||||||
write_enabled bool
|
write_enabled bool
|
||||||
bias f32
|
bias f32
|
||||||
bias_slope_scale f32
|
bias_slope_scale f32
|
||||||
bias_clamp f32
|
bias_clamp f32
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct C.sg_stencil_face_state {
|
pub struct C.sg_stencil_face_state {
|
||||||
|
@ -471,13 +471,13 @@ pub struct C.sg_stencil_face_state {
|
||||||
|
|
||||||
pub struct C.sg_blend_state {
|
pub struct C.sg_blend_state {
|
||||||
pub mut:
|
pub mut:
|
||||||
enabled bool
|
enabled bool
|
||||||
src_factor_rgb BlendFactor
|
src_factor_rgb BlendFactor
|
||||||
dst_factor_rgb BlendFactor
|
dst_factor_rgb BlendFactor
|
||||||
op_rgb BlendOp
|
op_rgb BlendOp
|
||||||
src_factor_alpha BlendFactor
|
src_factor_alpha BlendFactor
|
||||||
dst_factor_alpha BlendFactor
|
dst_factor_alpha BlendFactor
|
||||||
op_alpha BlendOp
|
op_alpha BlendOp
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct C.sg_color_attachment_action {
|
pub struct C.sg_color_attachment_action {
|
||||||
|
|
|
@ -197,9 +197,7 @@ pub fn (t &Table) is_same_method(f &Fn, func &Fn) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (t &Table) find_fn(name string) ?Fn {
|
pub fn (t &Table) find_fn(name string) ?Fn {
|
||||||
f := t.fns[name]
|
if f := t.fns[name] {
|
||||||
if f.name.str != 0 {
|
|
||||||
// TODO
|
|
||||||
return f
|
return f
|
||||||
}
|
}
|
||||||
return none
|
return none
|
||||||
|
|
|
@ -2730,8 +2730,10 @@ pub fn (mut c Checker) return_stmt(mut return_stmt ast.Return) {
|
||||||
}
|
}
|
||||||
return_stmt.types = got_types
|
return_stmt.types = got_types
|
||||||
// allow `none` & `error` return types for function that returns optional
|
// allow `none` & `error` return types for function that returns optional
|
||||||
|
option_type_idx := c.table.type_idxs['Option']
|
||||||
|
got_types_0_idx := got_types[0].idx()
|
||||||
if exp_is_optional
|
if exp_is_optional
|
||||||
&& got_types[0].idx() in [ast.none_type_idx, ast.error_type_idx, c.table.type_idxs['Option']] {
|
&& got_types_0_idx in [ast.none_type_idx, ast.error_type_idx, option_type_idx] {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if expected_types.len > 0 && expected_types.len != got_types.len {
|
if expected_types.len > 0 && expected_types.len != got_types.len {
|
||||||
|
@ -4485,7 +4487,8 @@ pub fn (mut c Checker) cast_expr(mut node ast.CastExpr) ast.Type {
|
||||||
if to_type_sym.language != .c {
|
if to_type_sym.language != .c {
|
||||||
c.ensure_type_exists(node.typ, node.pos) or {}
|
c.ensure_type_exists(node.typ, node.pos) or {}
|
||||||
}
|
}
|
||||||
expr_is_ptr := node.expr_type.is_ptr() || node.expr_type.idx() in ast.pointer_type_idxs
|
n_e_t_idx := node.expr_type.idx()
|
||||||
|
expr_is_ptr := node.expr_type.is_ptr() || n_e_t_idx in ast.pointer_type_idxs
|
||||||
if expr_is_ptr && to_type_sym.kind == .string && !node.in_prexpr {
|
if expr_is_ptr && to_type_sym.kind == .string && !node.in_prexpr {
|
||||||
if node.has_arg {
|
if node.has_arg {
|
||||||
c.warn('to convert a C string buffer pointer to a V string, please use x.vstring_with_len(len) instead of string(x,len)',
|
c.warn('to convert a C string buffer pointer to a V string, please use x.vstring_with_len(len) instead of string(x,len)',
|
||||||
|
|
|
@ -5250,7 +5250,9 @@ fn (mut g Gen) struct_init(struct_init ast.StructInit) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if field.typ.has_flag(.optional) {
|
if field.typ.has_flag(.optional) {
|
||||||
// TODO handle/require optionals in inits
|
field_name := c_name(field.name)
|
||||||
|
g.write('.$field_name = {0},')
|
||||||
|
initialized = true
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if field.typ in info.embeds {
|
if field.typ in info.embeds {
|
||||||
|
@ -5906,16 +5908,21 @@ fn (mut g Gen) type_default(typ_ ast.Type) string {
|
||||||
mut has_none_zero := false
|
mut has_none_zero := false
|
||||||
mut init_str := '{'
|
mut init_str := '{'
|
||||||
info := sym.info as ast.Struct
|
info := sym.info as ast.Struct
|
||||||
for field in info.fields {
|
typ_is_shared_f := typ.has_flag(.shared_f)
|
||||||
field_sym := g.table.get_type_symbol(field.typ)
|
if sym.language == .v && !typ_is_shared_f {
|
||||||
if field_sym.kind in [.array, .map] || field.has_default_expr {
|
for field in info.fields {
|
||||||
if field.has_default_expr {
|
field_sym := g.table.get_type_symbol(field.typ)
|
||||||
expr_str := g.expr_string(field.default_expr)
|
if field.has_default_expr
|
||||||
init_str += '.$field.name = $expr_str,'
|
|| field_sym.kind in [.array, .map, .string, .ustring, .bool, .alias, .size_t, .i8, .i16, .int, .i64, .byte, .u16, .u32, .u64, .char, .voidptr, .byteptr, .charptr, .struct_] {
|
||||||
} else {
|
field_name := c_name(field.name)
|
||||||
init_str += '.$field.name = ${g.type_default(field.typ)},'
|
if field.has_default_expr {
|
||||||
|
expr_str := g.expr_string(field.default_expr)
|
||||||
|
init_str += '.$field_name = $expr_str,'
|
||||||
|
} else {
|
||||||
|
init_str += '.$field_name = ${g.type_default(field.typ)},'
|
||||||
|
}
|
||||||
|
has_none_zero = true
|
||||||
}
|
}
|
||||||
has_none_zero = true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if has_none_zero {
|
if has_none_zero {
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
struct Test {
|
||||||
|
s string
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_map_value_init() {
|
||||||
|
m := map[string]Test{}
|
||||||
|
empty := m['not-here']
|
||||||
|
assert !isnil(empty.s.str)
|
||||||
|
}
|
Loading…
Reference in New Issue