diff options
Diffstat (limited to 'src/webgl.zig')
-rw-r--r-- | src/webgl.zig | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/src/webgl.zig b/src/webgl.zig new file mode 100644 index 0000000..b97c8fa --- /dev/null +++ b/src/webgl.zig @@ -0,0 +1,155 @@ +pub const Buffer = extern struct { handle: u32 }; +pub const Shader = packed struct(u32) { handle: u32 }; +pub const Program = packed struct(u32) { handle: u32 }; +pub const Texture = packed struct(u32) { handle: u32 }; + +pub const GLProgramInfo = enum(u32) { + delete_status = 0x8B80, + link_status = 0x8B82, +}; + +pub const GLShaderType = enum(u32) { + fragment_shader = 0x8B30, + vertex_shader = 0x8B31, +}; + +pub const GLShaderInfo = enum(u32) { + shader_type = 0x8B4F, + delete_status = 0x8B80, + compile_status = 0x8B81, +}; + +pub const GLBindingPoint = enum(u32) { + array_buffer = 0x8892, + element_array_buffer = 0x8893, +}; + +pub const GLUsagePattern = enum(u32) { + stream_draw = 0x88E0, + static_draw = 0x88E4, + dynamic_draw = 0x88E8, +}; + +pub const color_buffer_bit = 0x00004000; +pub const depth_buffer_bit = 0x00000100; + +pub extern fn clearColor(r: f32, g: f32, b: f32, a: f32) void; +pub extern fn clear(mask: u32) void; + +pub extern fn enable(cap: u32) void; +pub extern fn blendFunc(sfactor: u32, dfactor: u32) void; + +pub extern fn createBuffer() Buffer; +pub extern fn bindBuffer(target: GLBindingPoint, buffer: Buffer) void; +pub extern fn bufferData( + target: GLBindingPoint, + ptr: [*c]const f32, + len: u32, + usage: GLUsagePattern, +) void; + +pub extern fn createShader(shader_type: GLShaderType) Shader; +pub extern fn shaderSource(shader: Shader, source_ptr: [*c]const u8, len: u32) void; +pub extern fn compileShader(shader: Shader) void; +pub extern fn getShaderParameter(shader: Shader, info: GLShaderInfo) u32; +pub extern fn deleteShader(shader: Shader) void; +pub extern fn getShaderInfoLog(shader: Shader, buf: [*c]u8, len: u32) u32; + +pub extern fn createProgram() Program; +pub extern fn deleteProgram(program: Program) void; +pub extern fn attachShader(program: Program, shader: Shader) void; +pub extern fn linkProgram(program: Program) void; +pub extern fn getProgramParameter(program: Program, info: GLProgramInfo) u32; +pub extern fn getProgramInfoLog(program: Program, buf: [*c]const u8, len: u32) u32; +pub extern fn useProgram(program: Program) void; + +pub extern fn getAttribLocation(program: Program, buf: [*c]const u8, len: u32) i32; +pub extern fn getUniformLocation(program: Program, buf: [*c]const u8, len: u32) i32; + +pub extern fn uniform1i(location: i32, v0: i32) void; +pub extern fn uniform2f(location: i32, v0: f32, v1: f32) void; +pub extern fn uniform4f(location: i32, v0: f32, v1: f32, v2: f32, v3: f32) void; +pub extern fn uniformMatrix3fv(location: i32, ptr: [*c]const @Vector(3, f32)) void; + +pub const VertexArrayObject = packed struct(u32) { handle: u32 }; +const GLType = enum(u32) { + i8 = 0x1400, + u8 = 0x1401, + i16 = 0x1402, + u16 = 0x1403, + i32 = 0x1404, + u32 = 0x1405, + f32 = 0x1406, +}; + +const GLBool = enum(i32) { + false = 0, + true = 1, +}; + +pub extern fn createVertexArray() VertexArrayObject; +pub extern fn bindVertexArray(vao: VertexArrayObject) void; +pub extern fn enableVertexAttribArray(attrib_location: i32) void; +pub extern fn vertexAttribPointer( + attrib_location: u32, + size: i32, + gl_type: GLType, + normalize: GLBool, + stride: i32, + offset: i32, +) void; + +pub extern fn viewport(x: i32, y: i32, width: i32, height: i32) void; + +const GLDrawMode = enum(u32) { + points = 0x0000, + lines = 0x0001, + line_loop = 0x0002, + line_strip = 0x0003, + triangles = 0x0004, + triangle_strip = 0x00005, + triangle_fan = 0x00006, +}; + +pub extern fn drawArrays(mode: GLDrawMode, first: i32, count: i32) void; + +pub extern fn createTexture() Texture; + +const TextureBindTarget = enum(u32) { + texture_2d = 0x0DE1, + texture_cube_map = 0x8514, + texture_3d = 0x806F, + texture_2d_array = 0x8C1A, +}; +pub extern fn bindTexture(target: TextureBindTarget, texture: Texture) void; + +pub const texture_0 = 0x84c0; +pub extern fn activeTexture(idx: u32) void; + +const TextureTarget = enum(u32) { + texture_2d = 0x0DE1, +}; +const TextureFormat = enum(u32) { + rgba = 0x1908, +}; +pub extern fn texImage2D( + target: TextureTarget, + level: i32, + internal_format: TextureFormat, + width: i32, + height: i32, + border: i32, + format: TextureFormat, + data_type: GLType, + ptr: *const anyopaque, + count: u32, + offset: u32, +) void; + +pub extern fn vertexAttribDivisor(loc: i32, divisor: i32) void; +pub extern fn drawArraysInstanced( + mode: GLDrawMode, + first: i32, + count: i32, + instace_count: i32, +) void; |