3 This file is part of libmspgl
4 Copyright © 2007 Mikko Rasa, Mikkosoft Productions
5 Distributed under the LGPL
8 #include "arb_shader_objects.h"
17 Shader::Shader(ShaderType t):
20 if(t==FRAGMENT_SHADER)
21 require_extension("GL_ARB_fragment_program");
22 else if(t==VERTEX_SHADER)
23 require_extension("GL_ARB_vertex_program");
25 id=glCreateShaderObjectARB(t);
28 Shader::Shader(ShaderType t, const string &src):
31 if(t==FRAGMENT_SHADER)
32 require_extension("GL_ARB_fragment_program");
33 else if(t==VERTEX_SHADER)
34 require_extension("GL_ARB_vertex_program");
36 id=glCreateShaderObjectARB(t);
44 glDeleteObjectARB(id);
47 void Shader::source(sizei count, const char **str, const int *len)
49 glShaderSourceARB(id, count, str, len);
52 void Shader::source(const string &str)
54 source(str.data(), str.size());
57 void Shader::source(const char *str, int len)
59 source(1, &str, &len);
62 bool Shader::compile()
64 glCompileShaderARB(id);
65 compiled=get_param(GL_COMPILE_STATUS);
69 int Shader::get_param(GLenum param) const
72 glGetObjectParameterivARB(id, param, &value);
76 string Shader::get_info_log() const
78 sizei len=get_param(GL_INFO_LOG_LENGTH);
80 glGetInfoLogARB(id, len+1, reinterpret_cast<GLsizei *>(&len), log);
81 return string(log, len);