dlib/opengl/opengl.d
2026-05-18 05:30:01 +10:00

82 lines
1.7 KiB
D

import dlib.aliases;
import dlib.util;
import dlib.alloc;
static if(NativeTarget)
{
import dlibincludes;
public import opengl_native;
}
else
{
public import opengl_wasm;
}
public import glenum;
u32
GLCreateShader(GLEnum shader_type, string[] shader_src)
{
i32[32] src_lengths;
immutable(char)*[32] src_ptrs;
for(usize i = 0; i < shader_src.length; i += 1)
{
src_ptrs[i] = shader_src[i].ptr;
src_lengths[i] = cast(i32)shader_src[i].length;
}
u32 shader = glCreateShader(shader_type);
glShaderSource(shader, cast(u32)shader_src.length, src_ptrs.ptr, src_lengths.ptr);
i32 success;
glGetShaderiv(shader, GLE.COMPILE_STATUS, &success);
if(!success)
{
char[512] info_log;
i32 log_length;
glGetShaderInfoLog(shader, cast(u32)info_log.length, &log_length, info_log.ptr);
Errf("Error compiling shader: %s", Str(info_log[0 .. log_length]));
shader = 0;
}
return shader;
}
u32
GLCreateProgramFromSources(string[] vertex_src, string[] fragment_src)
{
u32 program;
u32 vertex_shader = GLCreateShader(GLE.VERTEX_SHADER, vertex_src);
u32 fragment_shader = GLCreateShader(GLE.FRAGMENT_SHADER, fragment_src);
if(vertex_shader && fragment_shader)
{
program = glCreateProgram();
glAttachShader(program, vertex_shader);
glAttachShader(program, fragment_shader);
glLinkProgram(program);
i32 success;
glGetProgramiv(program, GLE.LINK_STATUS, &success);
if(!success)
{
char[512] info_log;
i32 log_length;
glGetProgramInfoLog(program, cast(u32)info_log.length, &log_length, info_log.ptr);
Errf("Error compiling program: %s", Str(info_log[0 .. log_length]));
program = 0;
}
}
if(!program)
{
Errf("Failed to create program!");
}
return program;
}