sdl phase 1
This commit is contained in:
294
examples/28-sdl-graphics.sx
Normal file
294
examples/28-sdl-graphics.sx
Normal file
@@ -0,0 +1,294 @@
|
||||
#import "modules/std.sx";
|
||||
#import "modules/sdl3.sx";
|
||||
#import "modules/opengl.sx";
|
||||
|
||||
PI :f32: 3.14159265;
|
||||
|
||||
// ---- Matrix math (column-major [16]f32, passed as [*]f32) ----
|
||||
|
||||
mat4_zero :: (m: [*]f32) {
|
||||
i := 0;
|
||||
while i < 16 { m[i] = 0.0; i += 1; }
|
||||
}
|
||||
|
||||
mat4_identity :: (m: [*]f32) {
|
||||
mat4_zero(m);
|
||||
m[0] = 1.0; m[5] = 1.0; m[10] = 1.0; m[15] = 1.0;
|
||||
}
|
||||
|
||||
mat4_multiply :: (out: [*]f32, a: [*]f32, b: [*]f32) {
|
||||
tmp : [16]f32 = ---;
|
||||
j := 0;
|
||||
while j < 4 {
|
||||
i := 0;
|
||||
while i < 4 {
|
||||
sum : f32 = 0.0;
|
||||
k := 0;
|
||||
while k < 4 {
|
||||
sum = sum + a[k * 4 + i] * b[j * 4 + k];
|
||||
k += 1;
|
||||
}
|
||||
tmp[j * 4 + i] = sum;
|
||||
i += 1;
|
||||
}
|
||||
j += 1;
|
||||
}
|
||||
i := 0;
|
||||
while i < 16 { out[i] = tmp[i]; i += 1; }
|
||||
}
|
||||
|
||||
mat4_perspective :: (m: [*]f32, fov: f32, aspect: f32, near: f32, far: f32) {
|
||||
mat4_zero(m);
|
||||
half := fov / 2.0;
|
||||
f := cos(half) / sin(half);
|
||||
m[0] = f / aspect;
|
||||
m[5] = f;
|
||||
m[10] = (far + near) / (near - far);
|
||||
m[11] = -1.0;
|
||||
m[14] = (2.0 * far * near) / (near - far);
|
||||
}
|
||||
|
||||
mat4_rotate_y :: (m: [*]f32, angle: f32) {
|
||||
mat4_zero(m);
|
||||
c := cos(angle);
|
||||
s := sin(angle);
|
||||
m[0] = c;
|
||||
m[2] = 0.0 - s;
|
||||
m[5] = 1.0;
|
||||
m[8] = s;
|
||||
m[10] = c;
|
||||
m[15] = 1.0;
|
||||
}
|
||||
|
||||
mat4_rotate_x :: (m: [*]f32, angle: f32) {
|
||||
mat4_zero(m);
|
||||
c := cos(angle);
|
||||
s := sin(angle);
|
||||
m[0] = 1.0;
|
||||
m[5] = c;
|
||||
m[6] = s;
|
||||
m[9] = 0.0 - s;
|
||||
m[10] = c;
|
||||
m[15] = 1.0;
|
||||
}
|
||||
|
||||
mat4_translate :: (m: [*]f32, tx: f32, ty: f32, tz: f32) {
|
||||
mat4_identity(m);
|
||||
m[12] = tx;
|
||||
m[13] = ty;
|
||||
m[14] = tz;
|
||||
}
|
||||
|
||||
// ---- Shader helpers ----
|
||||
|
||||
compile_shader :: (shader_type: u32, source: [:0]u8) -> u32 {
|
||||
shader : u32 = glCreateShader(shader_type);
|
||||
src_ptr : *void = xx &source[0];
|
||||
glShaderSource(shader, 1, xx &src_ptr, null);
|
||||
glCompileShader(shader);
|
||||
|
||||
status : s32 = 0;
|
||||
glGetShaderiv(shader, GL_COMPILE_STATUS, xx &status);
|
||||
if status == GL_FALSE {
|
||||
log_buf : [512]u8 = ---;
|
||||
glGetShaderInfoLog(shader, 512, null, xx &log_buf[0]);
|
||||
print("Shader compile error\n");
|
||||
}
|
||||
shader;
|
||||
}
|
||||
|
||||
create_program :: (vert_src: [:0]u8, frag_src: [:0]u8) -> u32 {
|
||||
vs : u32 = compile_shader(GL_VERTEX_SHADER, vert_src);
|
||||
fs : u32 = compile_shader(GL_FRAGMENT_SHADER, frag_src);
|
||||
|
||||
prog : u32 = glCreateProgram();
|
||||
glAttachShader(prog, vs);
|
||||
glAttachShader(prog, fs);
|
||||
glLinkProgram(prog);
|
||||
|
||||
status : s32 = 0;
|
||||
glGetProgramiv(prog, GL_LINK_STATUS, xx &status);
|
||||
if status == GL_FALSE {
|
||||
log_buf : [512]u8 = ---;
|
||||
glGetProgramInfoLog(prog, 512, null, xx &log_buf[0]);
|
||||
print("Program link error\n");
|
||||
}
|
||||
|
||||
glDeleteShader(vs);
|
||||
glDeleteShader(fs);
|
||||
prog;
|
||||
}
|
||||
|
||||
// ---- Main ----
|
||||
|
||||
main :: () {
|
||||
SDL_Init(SDL_INIT_VIDEO);
|
||||
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG);
|
||||
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
||||
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
|
||||
|
||||
window := SDL_CreateWindow("sx GL cube", 800, 600, SDL_WINDOW_OPENGL);
|
||||
gl_ctx := SDL_GL_CreateContext(window);
|
||||
SDL_GL_MakeCurrent(window, gl_ctx);
|
||||
SDL_GL_SetSwapInterval(1);
|
||||
|
||||
load_gl(SDL_GL_GetProcAddress);
|
||||
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glDepthFunc(GL_LESS);
|
||||
|
||||
// Shaders
|
||||
vert_src : [:0]u8 = "#version 330 core\nlayout (location = 0) in vec3 aPos;\nlayout (location = 1) in vec3 aNormal;\nuniform mat4 uMVP;\nout vec3 vNormal;\nout vec3 vPos;\nvoid main() {\n gl_Position = uMVP * vec4(aPos, 1.0);\n vNormal = aNormal;\n vPos = aPos;\n}\n";
|
||||
|
||||
frag_src : [:0]u8 = "#version 330 core\nin vec3 vNormal;\nin vec3 vPos;\nout vec4 FragColor;\nuniform vec3 uLightDir;\nuniform float uWire;\nvoid main() {\n if (uWire > 0.5) {\n FragColor = vec4(0.05, 0.05, 0.05, 1.0);\n return;\n }\n vec3 n = normalize(vNormal);\n vec3 l = normalize(uLightDir);\n float diff = max(dot(n, l), 0.15);\n float cx = floor(vPos.x * 2.0 + 0.001);\n float cy = floor(vPos.y * 2.0 + 0.001);\n float cz = floor(vPos.z * 2.0 + 0.001);\n float check = mod(cx + cy + cz, 2.0);\n vec3 col1 = vec3(0.9, 0.5, 0.2);\n vec3 col2 = vec3(0.2, 0.6, 0.9);\n vec3 base = mix(col1, col2, check);\n FragColor = vec4(base * diff, 1.0);\n}\n";
|
||||
|
||||
program : u32 = create_program(vert_src, frag_src);
|
||||
glUseProgram(program);
|
||||
|
||||
mvp_loc : s32 = glGetUniformLocation(program, "uMVP");
|
||||
light_loc : s32 = glGetUniformLocation(program, "uLightDir");
|
||||
wire_loc : s32 = glGetUniformLocation(program, "uWire");
|
||||
|
||||
// Cube vertices: position(3) + normal(3), 36 vertices = 216 floats
|
||||
vertices : [216]f32 = .[
|
||||
// Front face (z = +0.5)
|
||||
-0.5, -0.5, 0.5, 0.0, 0.0, 1.0,
|
||||
0.5, -0.5, 0.5, 0.0, 0.0, 1.0,
|
||||
0.5, 0.5, 0.5, 0.0, 0.0, 1.0,
|
||||
-0.5, -0.5, 0.5, 0.0, 0.0, 1.0,
|
||||
0.5, 0.5, 0.5, 0.0, 0.0, 1.0,
|
||||
-0.5, 0.5, 0.5, 0.0, 0.0, 1.0,
|
||||
// Back face (z = -0.5)
|
||||
0.5, -0.5, -0.5, 0.0, 0.0, -1.0,
|
||||
-0.5, -0.5, -0.5, 0.0, 0.0, -1.0,
|
||||
-0.5, 0.5, -0.5, 0.0, 0.0, -1.0,
|
||||
0.5, -0.5, -0.5, 0.0, 0.0, -1.0,
|
||||
-0.5, 0.5, -0.5, 0.0, 0.0, -1.0,
|
||||
0.5, 0.5, -0.5, 0.0, 0.0, -1.0,
|
||||
// Top face (y = +0.5)
|
||||
-0.5, 0.5, 0.5, 0.0, 1.0, 0.0,
|
||||
0.5, 0.5, 0.5, 0.0, 1.0, 0.0,
|
||||
0.5, 0.5, -0.5, 0.0, 1.0, 0.0,
|
||||
-0.5, 0.5, 0.5, 0.0, 1.0, 0.0,
|
||||
0.5, 0.5, -0.5, 0.0, 1.0, 0.0,
|
||||
-0.5, 0.5, -0.5, 0.0, 1.0, 0.0,
|
||||
// Bottom face (y = -0.5)
|
||||
-0.5, -0.5, -0.5, 0.0, -1.0, 0.0,
|
||||
0.5, -0.5, -0.5, 0.0, -1.0, 0.0,
|
||||
0.5, -0.5, 0.5, 0.0, -1.0, 0.0,
|
||||
-0.5, -0.5, -0.5, 0.0, -1.0, 0.0,
|
||||
0.5, -0.5, 0.5, 0.0, -1.0, 0.0,
|
||||
-0.5, -0.5, 0.5, 0.0, -1.0, 0.0,
|
||||
// Right face (x = +0.5)
|
||||
0.5, -0.5, 0.5, 1.0, 0.0, 0.0,
|
||||
0.5, -0.5, -0.5, 1.0, 0.0, 0.0,
|
||||
0.5, 0.5, -0.5, 1.0, 0.0, 0.0,
|
||||
0.5, -0.5, 0.5, 1.0, 0.0, 0.0,
|
||||
0.5, 0.5, -0.5, 1.0, 0.0, 0.0,
|
||||
0.5, 0.5, 0.5, 1.0, 0.0, 0.0,
|
||||
// Left face (x = -0.5)
|
||||
-0.5, -0.5, -0.5, -1.0, 0.0, 0.0,
|
||||
-0.5, -0.5, 0.5, -1.0, 0.0, 0.0,
|
||||
-0.5, 0.5, 0.5, -1.0, 0.0, 0.0,
|
||||
-0.5, -0.5, -0.5, -1.0, 0.0, 0.0,
|
||||
-0.5, 0.5, 0.5, -1.0, 0.0, 0.0,
|
||||
-0.5, 0.5, -0.5, -1.0, 0.0, 0.0
|
||||
];
|
||||
|
||||
// Create VAO and VBO
|
||||
vao : u32 = 0;
|
||||
vbo : u32 = 0;
|
||||
glGenVertexArrays(1, xx &vao);
|
||||
glGenBuffers(1, xx &vbo);
|
||||
|
||||
glBindVertexArray(vao);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, vbo);
|
||||
glBufferData(GL_ARRAY_BUFFER, 864, xx &vertices[0], GL_STATIC_DRAW);
|
||||
|
||||
// Position attribute (location 0): 3 floats, stride 24 bytes, offset 0
|
||||
glVertexAttribPointer(0, 3, GL_FLOAT, 0, 24, xx 0);
|
||||
glEnableVertexAttribArray(0);
|
||||
|
||||
// Normal attribute (location 1): 3 floats, stride 24 bytes, offset 12
|
||||
glVertexAttribPointer(1, 3, GL_FLOAT, 0, 24, xx 12);
|
||||
glEnableVertexAttribArray(1);
|
||||
|
||||
// Set light direction
|
||||
glUniform3f(light_loc, 0.5, 0.7, 1.0);
|
||||
glUniform1f(wire_loc, 0.0);
|
||||
|
||||
// Render loop
|
||||
running := true;
|
||||
event : [128]u8 = ---;
|
||||
|
||||
while running {
|
||||
while SDL_PollEvent(xx &event[0]) {
|
||||
etype : u32 = xx event[0];
|
||||
if etype == SDL_EVENT_QUIT {
|
||||
running = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Compute rotation angle from time
|
||||
ticks := SDL_GetTicks();
|
||||
ms : f32 = xx ticks;
|
||||
angle := ms * 0.001;
|
||||
|
||||
// Build matrices
|
||||
proj : [16]f32 = ---;
|
||||
mat4_perspective(xx &proj[0], PI / 4.0, 800.0 / 600.0, 0.1, 100.0);
|
||||
|
||||
view : [16]f32 = ---;
|
||||
mat4_translate(xx &view[0], 0.0, 0.0, -3.0);
|
||||
|
||||
rot_y : [16]f32 = ---;
|
||||
mat4_rotate_y(xx &rot_y[0], angle);
|
||||
|
||||
rot_x : [16]f32 = ---;
|
||||
mat4_rotate_x(xx &rot_x[0], angle * 0.7);
|
||||
|
||||
// model = rot_y * rot_x
|
||||
model : [16]f32 = ---;
|
||||
mat4_multiply(xx &model[0], xx &rot_y[0], xx &rot_x[0]);
|
||||
|
||||
// view_model = view * model
|
||||
vm : [16]f32 = ---;
|
||||
mat4_multiply(xx &vm[0], xx &view[0], xx &model[0]);
|
||||
|
||||
// mvp = proj * view_model
|
||||
mvp : [16]f32 = ---;
|
||||
mat4_multiply(xx &mvp[0], xx &proj[0], xx &vm[0]);
|
||||
|
||||
glUniformMatrix4fv(mvp_loc, 1, 0, xx &mvp[0]);
|
||||
|
||||
glClearColor(0.1, 0.1, 0.15, 1.0);
|
||||
glClear(GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
// Solid pass
|
||||
glUniform1f(wire_loc, 0.0);
|
||||
glBindVertexArray(vao);
|
||||
glDrawArrays(GL_TRIANGLES, 0, 36);
|
||||
|
||||
// Wireframe overlay
|
||||
glDepthFunc(GL_LEQUAL);
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
||||
glLineWidth(2.0);
|
||||
glUniform1f(wire_loc, 1.0);
|
||||
glDrawArrays(GL_TRIANGLES, 0, 36);
|
||||
|
||||
// Restore
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||
glDepthFunc(GL_LESS);
|
||||
glUniform1f(wire_loc, 0.0);
|
||||
|
||||
SDL_GL_SwapWindow(window);
|
||||
}
|
||||
|
||||
SDL_GL_DestroyContext(gl_ctx);
|
||||
SDL_DestroyWindow(window);
|
||||
SDL_Quit();
|
||||
}
|
||||
28
examples/29-fn-pointers.sx
Normal file
28
examples/29-fn-pointers.sx
Normal file
@@ -0,0 +1,28 @@
|
||||
#import "modules/std.sx";
|
||||
|
||||
add :: (a: s32, b: s32) -> s32 { a + b; }
|
||||
mul :: (a: s32, b: s32) -> s32 { a * b; }
|
||||
|
||||
apply :: (f: (s32, s32) -> s32, x: s32, y: s32) -> s32 {
|
||||
f(x, y);
|
||||
}
|
||||
|
||||
main :: () {
|
||||
// Store function in variable
|
||||
fp : (s32, s32) -> s32 = add;
|
||||
print("fp(3,4) = {}\n", fp(3, 4));
|
||||
|
||||
// Reassign to different function
|
||||
fp = mul;
|
||||
print("fp(3,4) = {}\n", fp(3, 4));
|
||||
|
||||
// Pass function pointer as argument
|
||||
print("apply(add,5,6) = {}\n", apply(add, 5, 6));
|
||||
print("apply(mul,5,6) = {}\n", apply(mul, 5, 6));
|
||||
}
|
||||
|
||||
// ** stdout **
|
||||
//fp(3,4) = 7
|
||||
//fp(3,4) = 12
|
||||
//apply(add,5,6) = 11
|
||||
//apply(mul,5,6) = 30
|
||||
98
examples/modules/opengl.sx
Normal file
98
examples/modules/opengl.sx
Normal file
@@ -0,0 +1,98 @@
|
||||
// OpenGL 3.3 Core — runtime-loaded function pointers
|
||||
// No #library needed — caller provides a loader (e.g. SDL_GL_GetProcAddress)
|
||||
|
||||
// Constants
|
||||
GL_FALSE :s32: 0;
|
||||
GL_TRUE :s32: 1;
|
||||
GL_DEPTH_TEST :u32: 0x0B71;
|
||||
GL_CULL_FACE :u32: 0x0B44;
|
||||
GL_BLEND :u32: 0x0BE2;
|
||||
GL_TRIANGLES :u32: 4;
|
||||
GL_LINES :u32: 1;
|
||||
GL_FLOAT :u32: 0x1406;
|
||||
GL_UNSIGNED_INT :u32: 0x1405;
|
||||
GL_VERTEX_SHADER :u32: 0x8B31;
|
||||
GL_FRAGMENT_SHADER :u32: 0x8B30;
|
||||
GL_COMPILE_STATUS :u32: 0x8B81;
|
||||
GL_LINK_STATUS :u32: 0x8B82;
|
||||
GL_ARRAY_BUFFER :u32: 0x8892;
|
||||
GL_ELEMENT_ARRAY_BUFFER :u32: 0x8893;
|
||||
GL_STATIC_DRAW :u32: 0x88E4;
|
||||
GL_COLOR_BUFFER_BIT :u32: 0x4000;
|
||||
GL_DEPTH_BUFFER_BIT :u32: 0x0100;
|
||||
GL_FRONT_AND_BACK :u32: 0x0408;
|
||||
GL_LINE :u32: 0x1B01;
|
||||
GL_FILL :u32: 0x1B02;
|
||||
|
||||
// Function pointer variables (mutable, loaded at runtime)
|
||||
glClearColor : (f32, f32, f32, f32) -> void = ---;
|
||||
glClear : (u32) -> void = ---;
|
||||
glEnable : (u32) -> void = ---;
|
||||
glDisable : (u32) -> void = ---;
|
||||
glViewport : (s32, s32, s32, s32) -> void = ---;
|
||||
glDrawArrays : (u32, s32, s32) -> void = ---;
|
||||
glPolygonMode : (u32, u32) -> void = ---;
|
||||
glLineWidth : (f32) -> void = ---;
|
||||
glCreateShader : (u32) -> u32 = ---;
|
||||
glShaderSource : (u32, s32, *void, *void) -> void = ---;
|
||||
glCompileShader : (u32) -> void = ---;
|
||||
glGetShaderiv : (u32, u32, *void) -> void = ---;
|
||||
glGetShaderInfoLog : (u32, s32, *void, *void) -> void = ---;
|
||||
glCreateProgram : () -> u32 = ---;
|
||||
glAttachShader : (u32, u32) -> void = ---;
|
||||
glLinkProgram : (u32) -> void = ---;
|
||||
glGetProgramiv : (u32, u32, *void) -> void = ---;
|
||||
glGetProgramInfoLog : (u32, s32, *void, *void) -> void = ---;
|
||||
glUseProgram : (u32) -> void = ---;
|
||||
glDeleteShader : (u32) -> void = ---;
|
||||
glGenVertexArrays : (s32, *void) -> void = ---;
|
||||
glGenBuffers : (s32, *void) -> void = ---;
|
||||
glBindVertexArray : (u32) -> void = ---;
|
||||
glBindBuffer : (u32, u32) -> void = ---;
|
||||
glBufferData : (u32, s64, *void, u32) -> void = ---;
|
||||
glVertexAttribPointer : (u32, s32, u32, u8, s32, *void) -> void = ---;
|
||||
glEnableVertexAttribArray : (u32) -> void = ---;
|
||||
glGetUniformLocation : (u32, [:0]u8) -> s32 = ---;
|
||||
glUniformMatrix4fv : (s32, s32, u8, *void) -> void = ---;
|
||||
glUniform3f : (s32, f32, f32, f32) -> void = ---;
|
||||
glDepthFunc : (u32) -> void = ---;
|
||||
glUniform1f : (s32, f32) -> void = ---;
|
||||
GL_LESS :u32: 0x0201;
|
||||
GL_LEQUAL :u32: 0x0203;
|
||||
|
||||
// Loader: call once after creating GL context
|
||||
// Pass in a proc loader (e.g. SDL_GL_GetProcAddress)
|
||||
load_gl :: (get_proc: ([:0]u8) -> *void) {
|
||||
glClearColor = xx get_proc("glClearColor");
|
||||
glClear = xx get_proc("glClear");
|
||||
glEnable = xx get_proc("glEnable");
|
||||
glDisable = xx get_proc("glDisable");
|
||||
glViewport = xx get_proc("glViewport");
|
||||
glDrawArrays = xx get_proc("glDrawArrays");
|
||||
glPolygonMode = xx get_proc("glPolygonMode");
|
||||
glLineWidth = xx get_proc("glLineWidth");
|
||||
glCreateShader = xx get_proc("glCreateShader");
|
||||
glShaderSource = xx get_proc("glShaderSource");
|
||||
glCompileShader = xx get_proc("glCompileShader");
|
||||
glGetShaderiv = xx get_proc("glGetShaderiv");
|
||||
glGetShaderInfoLog = xx get_proc("glGetShaderInfoLog");
|
||||
glCreateProgram = xx get_proc("glCreateProgram");
|
||||
glAttachShader = xx get_proc("glAttachShader");
|
||||
glLinkProgram = xx get_proc("glLinkProgram");
|
||||
glGetProgramiv = xx get_proc("glGetProgramiv");
|
||||
glGetProgramInfoLog = xx get_proc("glGetProgramInfoLog");
|
||||
glUseProgram = xx get_proc("glUseProgram");
|
||||
glDeleteShader = xx get_proc("glDeleteShader");
|
||||
glGenVertexArrays = xx get_proc("glGenVertexArrays");
|
||||
glGenBuffers = xx get_proc("glGenBuffers");
|
||||
glBindVertexArray = xx get_proc("glBindVertexArray");
|
||||
glBindBuffer = xx get_proc("glBindBuffer");
|
||||
glBufferData = xx get_proc("glBufferData");
|
||||
glVertexAttribPointer = xx get_proc("glVertexAttribPointer");
|
||||
glEnableVertexAttribArray = xx get_proc("glEnableVertexAttribArray");
|
||||
glGetUniformLocation = xx get_proc("glGetUniformLocation");
|
||||
glUniformMatrix4fv = xx get_proc("glUniformMatrix4fv");
|
||||
glUniform3f = xx get_proc("glUniform3f");
|
||||
glDepthFunc = xx get_proc("glDepthFunc");
|
||||
glUniform1f = xx get_proc("glUniform1f");
|
||||
}
|
||||
41
examples/modules/sdl3.sx
Normal file
41
examples/modules/sdl3.sx
Normal file
@@ -0,0 +1,41 @@
|
||||
#library "SDL3";
|
||||
|
||||
// SDL_InitFlags
|
||||
SDL_INIT_VIDEO :u32: 0x20;
|
||||
|
||||
// SDL_WindowFlags
|
||||
SDL_WINDOW_OPENGL :u64: 0x2;
|
||||
|
||||
// SDL_GLAttr (enum starting at 0)
|
||||
SDL_GL_DOUBLEBUFFER :s32: 5;
|
||||
SDL_GL_DEPTH_SIZE :s32: 6;
|
||||
SDL_GL_CONTEXT_MAJOR_VERSION :s32: 17;
|
||||
SDL_GL_CONTEXT_MINOR_VERSION :s32: 18;
|
||||
SDL_GL_CONTEXT_FLAGS :s32: 19;
|
||||
SDL_GL_CONTEXT_PROFILE_MASK :s32: 20;
|
||||
|
||||
// SDL_GLProfile
|
||||
SDL_GL_CONTEXT_PROFILE_CORE :s32: 0x1;
|
||||
|
||||
// SDL_GLContextFlag
|
||||
SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG :s32: 0x2;
|
||||
|
||||
// SDL_EventType
|
||||
SDL_EVENT_QUIT :u32: 0x100;
|
||||
SDL_EVENT_KEY_DOWN :u32: 0x300;
|
||||
|
||||
// Functions
|
||||
SDL_Init :: (flags: u32) -> bool #foreign;
|
||||
SDL_Quit :: () -> void #foreign;
|
||||
SDL_CreateWindow :: (title: [:0]u8, w: s32, h: s32, flags: u64) -> *void #foreign;
|
||||
SDL_DestroyWindow :: (window: *void) -> void #foreign;
|
||||
SDL_GL_SetAttribute :: (attr: s32, value: s32) -> bool #foreign;
|
||||
SDL_GL_CreateContext :: (window: *void) -> *void #foreign;
|
||||
SDL_GL_DestroyContext :: (context: *void) -> bool #foreign;
|
||||
SDL_GL_MakeCurrent :: (window: *void, context: *void) -> bool #foreign;
|
||||
SDL_GL_SwapWindow :: (window: *void) -> bool #foreign;
|
||||
SDL_GL_SetSwapInterval :: (interval: s32) -> bool #foreign;
|
||||
SDL_GL_GetProcAddress :: (proc: [:0]u8) -> *void #foreign;
|
||||
SDL_PollEvent :: (event: *void) -> bool #foreign;
|
||||
SDL_GetTicks :: () -> u64 #foreign;
|
||||
SDL_Delay :: (ms: u32) -> void #foreign;
|
||||
@@ -1,6 +1,8 @@
|
||||
Vector :: ($N: int, $T: Type) -> Type #builtin;
|
||||
write :: (str: string) -> void #builtin;
|
||||
sqrt :: (x: $T) -> T #builtin;
|
||||
sin :: (x: $T) -> T #builtin;
|
||||
cos :: (x: $T) -> T #builtin;
|
||||
size_of :: ($T: Type) -> s64 #builtin;
|
||||
alloc :: (size: s64) -> string #builtin;
|
||||
malloc :: (size: s64) -> *void #builtin;
|
||||
|
||||
Reference in New Issue
Block a user