82 lines
1.7 KiB
D
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;
|
|
}
|
|
|