#include <msp/strings/format.h>
#include "buffer.h"
#include "error.h"
+#include "misc.h"
#include "program.h"
#include "shader.h"
(*i)->compile();
uniforms.clear();
+ legacy_vars = false;
glLinkProgram(id);
- int value;
- glGetProgramiv(id, GL_LINK_STATUS, &value);
- if(!(linked = value))
+ linked = get_program_i(id, GL_LINK_STATUS);
+ if(!linked)
throw compile_error(get_info_log());
- int count;
- glGetProgramiv(id, GL_ACTIVE_UNIFORMS, &count);
+ unsigned count = get_program_i(id, GL_ACTIVE_UNIFORMS);
vector<UniformInfo *> uniforms_by_index(count);
- for(int i=0; i<count; ++i)
+ for(unsigned i=0; i<count; ++i)
{
char name[128];
int len = 0;
int size;
GLenum type;
- glGetActiveUniform(id, i, 128, &len, &size, &type, name);
+ glGetActiveUniform(id, i, sizeof(name), &len, &size, &type, name);
if(len && strncmp(name, "gl_", 3))
{
/* Some implementations report the first element of a uniform array,
info.type = type;
uniforms_by_index[i] = &info;
}
+ else
+ legacy_vars = true;
+ }
+
+ count = get_program_i(id, GL_ACTIVE_ATTRIBUTES);
+ for(unsigned i=0; i<count; ++i)
+ {
+ char name[128];
+ int len = 0;
+ int size;
+ GLenum type;
+ glGetActiveAttrib(id, i, sizeof(name), &len, &size, &type, name);
+ if(len && !strncmp(name, "gl_", 3))
+ legacy_vars = true;
}
if(ARB_uniform_buffer_object)
{
- glGetProgramiv(id, GL_ACTIVE_UNIFORM_BLOCKS, &count);
- for(int i=0; i<count; ++i)
+ count = get_program_i(id, GL_ACTIVE_UNIFORM_BLOCKS);
+ for(unsigned i=0; i<count; ++i)
{
char name[128];
int len;
- glGetActiveUniformBlockName(id, i, 128, &len, name);
+ glGetActiveUniformBlockName(id, i, sizeof(name), &len, name);
UniformBlockInfo &info = uniform_blocks[name];
info.name = name;
+ int value;
glGetActiveUniformBlockiv(id, i, GL_UNIFORM_BLOCK_DATA_SIZE, &value);
info.data_size = value;
string Program::get_info_log() const
{
- GLsizei len = 0;
- glGetProgramiv(id, GL_INFO_LOG_LENGTH, &len);
+ GLsizei len = get_program_i(id, GL_INFO_LOG_LENGTH);
char *buf = new char[len+1];
glGetProgramInfoLog(id, len+1, &len, buf);
string log(buf, len);