Browse Source

variadic GlProgram instead of initializer_list

opengl-renderer-broken
Martin Dørum 4 years ago
parent
commit
090fb8bb59

+ 7
- 2
libcygnet/include/cygnet/GlProgram.h View File

@@ -19,7 +19,7 @@ public:
GlShader(const char *source, Type type);
~GlShader();

GLuint id() { return id_; }
GLuint id() const { return id_; }

private:
GLuint id_;
@@ -28,9 +28,14 @@ private:

class GlProgram: NonCopyable {
public:
GlProgram(std::initializer_list<std::reference_wrapper<GlShader>> shaders);
template <typename... T, typename = std::enable_if_t<std::conjunction_v<std::is_same<T, GlShader>...>>>
GlProgram(const T &... shaders): GlProgram() { (addShader(shaders), ...); link(); }
GlProgram() { id_ = glCreateProgram(); }
~GlProgram();

void addShader(const GlShader &shader) { glAttachShader(id_, shader.id()); }
void link();

void use() { glUseProgram(id_); }
GLuint id() { return id_; }
GLuint getLocation(const char *name) { return glGetAttribLocation(id_, name); }

+ 0
- 1
libcygnet/include/cygnet/util.h View File

@@ -42,5 +42,4 @@ public:
~Deferred() { Func(); }
};


}

+ 1
- 1
libcygnet/samples/hello-triangle/hello-triangle.cc View File

@@ -23,7 +23,7 @@ int main() {

Cygnet::GlShader vertex(vertexSource, Cygnet::GlShader::Type::VERTEX);
Cygnet::GlShader fragment(fragmentSource, Cygnet::GlShader::Type::FRAGMENT);
Cygnet::GlProgram program({ vertex, fragment });
Cygnet::GlProgram program(vertex, fragment);
GLuint positionAttrib = program.getLocation("position");
program.use();


+ 2
- 7
libcygnet/src/GlProgram.cc View File

@@ -41,13 +41,8 @@ GlShader::~GlShader() {
}
}

GlProgram::GlProgram(std::initializer_list<std::reference_wrapper<GlShader>> shaders) {
id_ = glCreateProgram();

for (GlShader &shader: shaders) {
glAttachShader(id_, shader.id());
}

void GlProgram::link() {
std::cout << "link\n";
glLinkProgram(id_);

char log[4096];

Loading…
Cancel
Save