1 module unecht.gl.shader; 2 3 import derelict.opengl3.gl3; 4 5 import gl3n.linalg; 6 7 import unecht.meta.misc; 8 9 /// 10 enum ShaderType 11 { 12 vertex, 13 fragment 14 } 15 16 /// 17 final class GLShader 18 { 19 GLuint shader; 20 ShaderType shaderType; 21 string errors; 22 bool success; 23 24 void create(ShaderType _type, string _src) 25 { 26 shaderType = _type; 27 28 shader = glCreateShader(shaderType==ShaderType.vertex ? GL_VERTEX_SHADER : GL_FRAGMENT_SHADER); 29 30 int stringLength = cast(int)_src.length; 31 const(char)* strPtr = _src.ptr; 32 glShaderSource(shader, 1, &strPtr, &stringLength); 33 34 glCompileShader(shader); 35 36 GLint success; 37 glGetShaderiv(shader, GL_COMPILE_STATUS, &success); 38 if (!success) { 39 GLchar[1024] InfoLog; 40 GLsizei logLen; 41 glGetShaderInfoLog(shader, 1024, &logLen, InfoLog.ptr); 42 43 import std.conv:to; 44 errors = to!string(InfoLog[0..logLen-1]); 45 46 import unecht.core.logger; 47 log.errorf("Error compiling shader: '%s'", errors); 48 } 49 } 50 51 /// 52 void destroy() 53 { 54 glDeleteShader(shader); 55 success = false; 56 errors = null; 57 } 58 }