summaryrefslogtreecommitdiff
path: root/src/webgl.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/webgl.zig')
-rw-r--r--src/webgl.zig155
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;