503 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			503 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			V
		
	
	
module gfx
 | 
						|
 | 
						|
pub struct C.sg_desc {
 | 
						|
	_start_canary      u32
 | 
						|
	buffer_pool_size   int
 | 
						|
	image_pool_size    int
 | 
						|
	shader_pool_size   int
 | 
						|
	pipeline_pool_size int
 | 
						|
	pass_pool_size     int
 | 
						|
	context_pool_size  int
 | 
						|
	context            C.sg_context_desc
 | 
						|
	/*
 | 
						|
	// GL specific
 | 
						|
    gl_force_gles2 bool
 | 
						|
    // Metal-specific
 | 
						|
    mtl_device voidptr
 | 
						|
    mtl_renderpass_descriptor_cb fn() voidptr
 | 
						|
    mtl_drawable_cb fn() voidptr
 | 
						|
    mtl_global_uniform_buffer_size int
 | 
						|
    mtl_sampler_cache_size int
 | 
						|
    // D3D11-specific
 | 
						|
    d3d11_device voidptr
 | 
						|
    d3d11_device_context voidptr
 | 
						|
    d3d11_render_target_view_cb fn() voidptr
 | 
						|
    d3d11_depth_stencil_view_cb fn() voidptr
 | 
						|
	*/
 | 
						|
	_end_canary        u32
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_context_desc {
 | 
						|
	/*
 | 
						|
	sg_pixel_format color_format;
 | 
						|
    sg_pixel_format depth_format;
 | 
						|
    int sample_count;
 | 
						|
    sg_wgpu_context_desc wgpu;
 | 
						|
	*/
 | 
						|
	sample_count int
 | 
						|
	gl           C.sg_gl_context_desc
 | 
						|
	metal        C.sg_mtl_context_desc
 | 
						|
	d3d11        C.sg_d3d11_context_desc
 | 
						|
	color_format PixelFormat
 | 
						|
	depth_format PixelFormat
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_gl_context_desc {
 | 
						|
	gl_force_gles2 bool
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_mtl_context_desc {
 | 
						|
	device                   voidptr
 | 
						|
	renderpass_descriptor_cb fn () voidptr
 | 
						|
	drawable_cb              fn () voidptr
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_d3d11_context_desc {
 | 
						|
	device                voidptr
 | 
						|
	device_context        voidptr
 | 
						|
	render_target_view_cb fn () voidptr
 | 
						|
	depth_stencil_view_cb fn () voidptr
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_pipeline_desc {
 | 
						|
pub mut:
 | 
						|
	_start_canary  u32
 | 
						|
	layout         C.sg_layout_desc
 | 
						|
	shader         C.sg_shader
 | 
						|
	primitive_type PrimitiveType
 | 
						|
	index_type     IndexType
 | 
						|
	depth_stencil  C.sg_depth_stencil_state
 | 
						|
	blend          C.sg_blend_state
 | 
						|
	rasterizer     C.sg_rasterizer_state
 | 
						|
	label          byteptr
 | 
						|
	_end_canary    u32
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_pipeline_info {
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_pipeline {
 | 
						|
pub:
 | 
						|
	id u32
 | 
						|
}
 | 
						|
 | 
						|
pub fn (p C.sg_pipeline) free() {
 | 
						|
	C.sg_destroy_pipeline(p)
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_bindings {
 | 
						|
pub mut:
 | 
						|
	_start_canary         u32
 | 
						|
	vertex_buffers        [8]C.sg_buffer
 | 
						|
	vertex_buffer_offsets [8]int
 | 
						|
	index_buffer          C.sg_buffer
 | 
						|
	index_buffer_offset   int
 | 
						|
	vs_images             [8]C.sg_image
 | 
						|
	fs_images             [8]C.sg_image
 | 
						|
	_end_canary           u32
 | 
						|
}
 | 
						|
 | 
						|
pub fn (mut b C.sg_bindings) set_vert_image(index int, img C.sg_image) {
 | 
						|
	b.vs_images[index] = img
 | 
						|
}
 | 
						|
 | 
						|
pub fn (mut b C.sg_bindings) set_frag_image(index int, img C.sg_image) {
 | 
						|
	b.fs_images[index] = img
 | 
						|
}
 | 
						|
 | 
						|
pub fn (b &C.sg_bindings) update_vert_buffer(index int, data voidptr, element_size int, element_count int) {
 | 
						|
	C.sg_update_buffer(b.vertex_buffers[index], data, element_size * element_count)
 | 
						|
}
 | 
						|
 | 
						|
pub fn (b &C.sg_bindings) append_vert_buffer(index int, data voidptr, element_size int, element_count int) int {
 | 
						|
	return C.sg_append_buffer(b.vertex_buffers[index], data, element_size * element_count)
 | 
						|
}
 | 
						|
 | 
						|
pub fn (b &C.sg_bindings) update_index_buffer(data voidptr, element_size int, element_count int) {
 | 
						|
	C.sg_update_buffer(b.index_buffer, data, element_size * element_count)
 | 
						|
}
 | 
						|
 | 
						|
pub fn (b &C.sg_bindings) append_index_buffer(data voidptr, element_size int, element_count int) int {
 | 
						|
	return C.sg_append_buffer(b.index_buffer, data, element_size * element_count)
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_shader_desc {
 | 
						|
pub mut:
 | 
						|
	_start_canary u32
 | 
						|
	attrs         [16]C.sg_shader_attr_desc
 | 
						|
	vs            C.sg_shader_stage_desc
 | 
						|
	fs            C.sg_shader_stage_desc
 | 
						|
	label         byteptr
 | 
						|
	_end_canary   u32
 | 
						|
}
 | 
						|
 | 
						|
pub fn (mut desc C.sg_shader_desc) set_vert_src(src string) &C.sg_shader_desc {
 | 
						|
	desc.vs.source = src.str
 | 
						|
	return desc
 | 
						|
}
 | 
						|
 | 
						|
pub fn (mut desc C.sg_shader_desc) set_frag_src(src string) &C.sg_shader_desc {
 | 
						|
	desc.fs.source = src.str
 | 
						|
	return desc
 | 
						|
}
 | 
						|
 | 
						|
pub fn (mut desc C.sg_shader_desc) set_vert_image(index int, name string) &C.sg_shader_desc {
 | 
						|
	desc.vs.images[index].name = name.str
 | 
						|
	desc.vs.images[index].@type = ._2d
 | 
						|
	return desc
 | 
						|
}
 | 
						|
 | 
						|
pub fn (mut desc C.sg_shader_desc) set_frag_image(index int, name string) &C.sg_shader_desc {
 | 
						|
	desc.fs.images[index].name = name.str
 | 
						|
	desc.fs.images[index].@type = ._2d
 | 
						|
	return desc
 | 
						|
}
 | 
						|
 | 
						|
pub fn (mut desc C.sg_shader_desc) set_vert_uniform_block_size(block_index int, size int) &C.sg_shader_desc {
 | 
						|
	desc.vs.uniform_blocks[block_index].size = size
 | 
						|
	return desc
 | 
						|
}
 | 
						|
 | 
						|
pub fn (mut desc C.sg_shader_desc) set_frag_uniform_block_size(block_index int, size int) &C.sg_shader_desc {
 | 
						|
	desc.fs.uniform_blocks[block_index].size = size
 | 
						|
	return desc
 | 
						|
}
 | 
						|
 | 
						|
pub fn (mut desc C.sg_shader_desc) set_vert_uniform(block_index int, uniform_index int, name string, @type UniformType, array_count int) &C.sg_shader_desc {
 | 
						|
	desc.vs.uniform_blocks[block_index].uniforms[uniform_index].name = name.str
 | 
						|
	desc.vs.uniform_blocks[block_index].uniforms[uniform_index].@type = @type
 | 
						|
	return desc
 | 
						|
}
 | 
						|
 | 
						|
pub fn (mut desc C.sg_shader_desc) set_frag_uniform(block_index int, uniform_index int, name string, @type UniformType, array_count int) &C.sg_shader_desc {
 | 
						|
	desc.fs.uniform_blocks[block_index].uniforms[uniform_index].name = name.str
 | 
						|
	desc.fs.uniform_blocks[block_index].uniforms[uniform_index].@type = @type
 | 
						|
	return desc
 | 
						|
}
 | 
						|
 | 
						|
pub fn (desc &C.sg_shader_desc) make_shader() C.sg_shader {
 | 
						|
	return C.sg_make_shader(desc)
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_shader_attr_desc {
 | 
						|
pub mut:
 | 
						|
	name      byteptr // GLSL vertex attribute name (only required for GLES2)
 | 
						|
	sem_name  byteptr // HLSL semantic name
 | 
						|
	sem_index int // HLSL semantic index
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_shader_stage_desc {
 | 
						|
pub mut:
 | 
						|
	source         byteptr
 | 
						|
	byte_code      &byte
 | 
						|
	byte_code_size int
 | 
						|
	entry          byteptr
 | 
						|
	uniform_blocks [4]C.sg_shader_uniform_block_desc
 | 
						|
	images         [12]C.sg_shader_image_desc
 | 
						|
}
 | 
						|
 | 
						|
pub fn (mut desc C.sg_shader_stage_desc) set_image(index int, name string) C.sg_shader_stage_desc {
 | 
						|
	desc.images[index].name = name.str
 | 
						|
	desc.images[index].@type = ._2d
 | 
						|
	return *desc
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_shader_uniform_block_desc {
 | 
						|
pub mut:
 | 
						|
	size     int
 | 
						|
	uniforms [16]C.sg_shader_uniform_desc
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_shader_uniform_desc {
 | 
						|
pub mut:
 | 
						|
	name        byteptr
 | 
						|
	@type       UniformType
 | 
						|
	array_count int
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_shader_image_desc {
 | 
						|
pub mut:
 | 
						|
	name  byteptr
 | 
						|
	@type ImageType
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_shader_info {
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_context {
 | 
						|
	id u32
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_shader {
 | 
						|
pub:
 | 
						|
	id u32
 | 
						|
}
 | 
						|
 | 
						|
pub fn (s C.sg_shader) free() {
 | 
						|
	C.sg_destroy_shader(s)
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_pass_desc {
 | 
						|
pub mut:
 | 
						|
	_start_canary            u32
 | 
						|
	color_attachments        [4]C.sg_attachment_desc
 | 
						|
	depth_stencil_attachment C.sg_attachment_desc
 | 
						|
	label                    byteptr
 | 
						|
	_end_canary              u32
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_pass_info {
 | 
						|
	info C.sg_slot_info
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_pass_action {
 | 
						|
pub mut:
 | 
						|
	_start_canary u32
 | 
						|
	colors        [4]C.sg_color_attachment_action
 | 
						|
	depth         C.sg_depth_attachment_action
 | 
						|
	stencil       C.sg_stencil_attachment_action
 | 
						|
	_end_canary   u32
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_pass {
 | 
						|
	id u32
 | 
						|
}
 | 
						|
 | 
						|
pub fn (p C.sg_pass) free() {
 | 
						|
	C.sg_destroy_pass(p)
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_buffer_desc {
 | 
						|
pub mut:
 | 
						|
	_start_canary u32
 | 
						|
	size          int
 | 
						|
	@type         BufferType
 | 
						|
	usage         Usage
 | 
						|
	content       byteptr
 | 
						|
	label         byteptr
 | 
						|
	// GL specific
 | 
						|
	gl_buffers    [2]u32
 | 
						|
	// Metal specific
 | 
						|
	mtl_buffers   [2]voidptr
 | 
						|
	// D3D11 specific
 | 
						|
	d3d11_buffer  voidptr
 | 
						|
	_end_canary   u32
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_buffer_info {
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_buffer {
 | 
						|
	id u32
 | 
						|
}
 | 
						|
 | 
						|
pub fn (b C.sg_buffer) free() {
 | 
						|
	C.sg_destroy_buffer(b)
 | 
						|
}
 | 
						|
 | 
						|
pub struct DepthLayers {
 | 
						|
	depth  int
 | 
						|
	layers int
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_image_desc {
 | 
						|
pub mut:
 | 
						|
	_start_canary  u32
 | 
						|
	@type          ImageType
 | 
						|
	render_target  bool
 | 
						|
	width          int
 | 
						|
	height         int
 | 
						|
	depth          DepthLayers
 | 
						|
	// depth int
 | 
						|
	// union {
 | 
						|
	// int depth;
 | 
						|
	// int layers;
 | 
						|
	// };
 | 
						|
	num_mipmaps    int
 | 
						|
	usage          Usage
 | 
						|
	pixel_format   PixelFormat
 | 
						|
	sample_count   int
 | 
						|
	min_filter     Filter
 | 
						|
	mag_filter     Filter
 | 
						|
	wrap_u         Wrap
 | 
						|
	wrap_v         Wrap
 | 
						|
	wrap_w         Wrap
 | 
						|
	border_color   BorderColor
 | 
						|
	max_anisotropy u32
 | 
						|
	min_lod        f32
 | 
						|
	max_lod        f32
 | 
						|
	content        C.sg_image_content
 | 
						|
	label          byteptr
 | 
						|
	// GL specific
 | 
						|
	gl_textures    [2]u32
 | 
						|
	// Metal specific
 | 
						|
	mtl_textures   [2]voidptr
 | 
						|
	// D3D11 specific
 | 
						|
	d3d11_texture  voidptr
 | 
						|
	_end_canary    u32
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_image_info {
 | 
						|
pub mut:
 | 
						|
	slot            C.sg_slot_info // resource pool slot info
 | 
						|
	upd_frame_index u32 // frame index of last sg_update_image()
 | 
						|
	num_slots       int // number of renaming-slots for dynamically updated images
 | 
						|
	active_slot     int // currently active write-slot for dynamically updated images
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_image {
 | 
						|
pub:
 | 
						|
	id u32
 | 
						|
}
 | 
						|
 | 
						|
pub fn (i C.sg_image) free() {
 | 
						|
	C.sg_destroy_image(i)
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_image_content {
 | 
						|
pub mut:
 | 
						|
	subimage [6][16]C.sg_subimage_content
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_subimage_content {
 | 
						|
pub mut:
 | 
						|
	ptr  voidptr // pointer to subimage data
 | 
						|
	size int // size in bytes of pointed-to subimage data
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_features {
 | 
						|
pub:
 | 
						|
	instancing              bool // hardware instancing supported
 | 
						|
	origin_top_left         bool // framebuffer and texture origin is in top left corner
 | 
						|
	multiple_render_targets bool // offscreen render passes can have multiple render targets attached
 | 
						|
	msaa_render_targets     bool // offscreen render passes support MSAA antialiasing
 | 
						|
	imagetype_3d            bool // creation of SG_IMAGETYPE_3D images is supported
 | 
						|
	imagetype_array         bool // creation of SG_IMAGETYPE_ARRAY images is supported
 | 
						|
	image_clamp_to_border   bool // border color and clamp-to-border UV-wrap mode is supported
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_limits {
 | 
						|
pub:
 | 
						|
	max_image_size_2d      u32 // max width/height of SG_IMAGETYPE_2D images
 | 
						|
	max_image_size_cube    u32 // max width/height of SG_IMAGETYPE_CUBE images
 | 
						|
	max_image_size_3d      u32 // max width/height/depth of SG_IMAGETYPE_3D images
 | 
						|
	max_image_size_array   u32 // max width/height pf SG_IMAGETYPE_ARRAY images
 | 
						|
	max_image_array_layers u32 // max number of layers in SG_IMAGETYPE_ARRAY images
 | 
						|
	max_vertex_attrs       u32 // <= SG_MAX_VERTEX_ATTRIBUTES (only on some GLES2 impls)
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_layout_desc {
 | 
						|
pub mut:
 | 
						|
	buffers [8]C.sg_buffer_layout_desc
 | 
						|
	attrs   [16]C.sg_vertex_attr_desc
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_buffer_layout_desc {
 | 
						|
pub mut:
 | 
						|
	stride    int
 | 
						|
	step_func VertexStep
 | 
						|
	step_rate int
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_vertex_attr_desc {
 | 
						|
pub mut:
 | 
						|
	buffer_index int
 | 
						|
	offset       int
 | 
						|
	format       VertexFormat
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_depth_stencil_state {
 | 
						|
	stencil_front       C.sg_stencil_state
 | 
						|
	stencil_back        C.sg_stencil_state
 | 
						|
	depth_compare_func  CompareFunc
 | 
						|
	depth_write_enabled bool
 | 
						|
	stencil_enabled     bool
 | 
						|
	stencil_read_mask   byte
 | 
						|
	stencil_write_mask  byte
 | 
						|
	stencil_ref         byte
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_stencil_state {
 | 
						|
	fail_op       StencilOp
 | 
						|
	depth_fail_op StencilOp
 | 
						|
	pass_op       StencilOp
 | 
						|
	compare_func  CompareFunc
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_blend_state {
 | 
						|
pub mut:
 | 
						|
	enabled                bool
 | 
						|
	src_factor_rgb         BlendFactor
 | 
						|
	dst_factor_rgb         BlendFactor
 | 
						|
	op_rgb                 BlendOp
 | 
						|
	src_factor_alpha       BlendFactor
 | 
						|
	dst_factor_alpha       BlendFactor
 | 
						|
	op_alpha               BlendOp
 | 
						|
	color_write_mask       byte
 | 
						|
	color_attachment_count int
 | 
						|
	color_format           PixelFormat
 | 
						|
	depth_format           PixelFormat
 | 
						|
	blend_color            [4]f32
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_rasterizer_state {
 | 
						|
pub mut:
 | 
						|
	alpha_to_coverage_enabled bool
 | 
						|
	cull_mode                 CullMode
 | 
						|
	face_winding              FaceWinding
 | 
						|
	sample_count              int
 | 
						|
	depth_bias                f32
 | 
						|
	depth_bias_slope_scale    f32
 | 
						|
	depth_bias_clamp          f32
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_color_attachment_action {
 | 
						|
pub mut:
 | 
						|
	action Action
 | 
						|
	val    [4]f32
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
pub fn (mut action C.sg_color_attachment_action) set_color_values(r, g, b, a f32) {
 | 
						|
    action.val[0] = r
 | 
						|
    action.val[1] = g
 | 
						|
    action.val[2] = b
 | 
						|
    action.val[3] = a
 | 
						|
}
 | 
						|
*/
 | 
						|
pub struct C.sg_depth_attachment_action {
 | 
						|
pub mut:
 | 
						|
	action Action
 | 
						|
	val    f32
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_stencil_attachment_action {
 | 
						|
pub mut:
 | 
						|
	action Action
 | 
						|
	val    byte
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_pixelformat_info {
 | 
						|
pub:
 | 
						|
	sample bool // pixel format can be sampled in shaders
 | 
						|
	filter bool // pixel format can be sampled with filtering
 | 
						|
	render bool // pixel format can be used as render target
 | 
						|
	blend  bool // alpha-blending is supported
 | 
						|
	msaa   bool // pixel format can be used as MSAA render target
 | 
						|
	depth  bool // pixel format is a depth format
 | 
						|
}
 | 
						|
 | 
						|
pub struct C.sg_attachment_desc {
 | 
						|
pub mut:
 | 
						|
	image     C.sg_image
 | 
						|
	mip_level int
 | 
						|
	face      int
 | 
						|
	// image sg_image
 | 
						|
	// mip_level int
 | 
						|
	// union {
 | 
						|
	// face int
 | 
						|
	// layer int
 | 
						|
	// slice int
 | 
						|
	// }
 | 
						|
}
 |