X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fshader.cpp;h=17bf3fad3196ad08b735669bda32f72bf2212a92;hb=e3561c5c4d0b2caf00a0e50ce85c11a9fb62aa72;hp=0da1a6e9df448028cc9518e23c12207dbf751723;hpb=9733137499a84f44c29d06d2551d41a903de1112;p=libs%2Fgl.git diff --git a/source/shader.cpp b/source/shader.cpp index 0da1a6e9..17bf3fad 100644 --- a/source/shader.cpp +++ b/source/shader.cpp @@ -1,7 +1,9 @@ -#include "arb_fragment_shader.h" -#include "arb_shader_objects.h" -#include "arb_vertex_shader.h" +#include +#include +#include +#include #include "error.h" +#include "misc.h" #include "shader.h" using namespace std; @@ -30,6 +32,8 @@ void Shader::init(GLenum t) static Require _req(ARB_fragment_shader); else if(t==GL_VERTEX_SHADER) static Require _req(ARB_vertex_shader); + else if(t==GL_GEOMETRY_SHADER) + static Require _req(EXT_geometry_shader4); id = glCreateShader(t); } @@ -57,16 +61,14 @@ void Shader::source(const char *str, int len) void Shader::compile() { glCompileShader(id); - int value = 0; - glGetShaderiv(id, GL_COMPILE_STATUS, &value); - if(!(compiled = value)) + compiled = get_shader_i(id, GL_COMPILE_STATUS); + if(!compiled) throw compile_error(get_info_log()); } string Shader::get_info_log() const { - GLsizei len = 0; - glGetShaderiv(id, GL_INFO_LOG_LENGTH, &len); + GLsizei len = get_shader_i(id, GL_INFO_LOG_LENGTH); char *buf = new char[len+1]; glGetShaderInfoLog(id, len+1, &len, buf); string log(buf, len); @@ -92,5 +94,14 @@ FragmentShader::FragmentShader(const string &src): Shader(GL_FRAGMENT_SHADER, src) { } + +GeometryShader::GeometryShader(): + Shader(GL_GEOMETRY_SHADER) +{ } + +GeometryShader::GeometryShader(const string &src): + Shader(GL_GEOMETRY_SHADER, src) +{ } + } // namespace GL } // namespace Msp