#include "rwtest.h"

namespace rw {
namespace gl {

GLint
linkProgram(GLint vertshader, GLint fragshader)
{
	GLint success;
	GLint len;
	char *log;

	GLint program = glCreateProgram();
	assert(program != 0);
	glBindAttribLocation(program, 0, "in_vertex");
	glBindAttribLocation(program, 1, "in_texCoord");
	glBindAttribLocation(program, 2, "in_normal");
	glBindAttribLocation(program, 3, "in_color");
	glBindAttribLocation(program, 4, "in_weight");
	glBindAttribLocation(program, 5, "in_indices");
	glBindAttribLocation(program, 6, "in_extraColor");
	glAttachShader(program, vertshader);
	glAttachShader(program, fragshader);
	glLinkProgram(program);
	glGetProgramiv(program, GL_LINK_STATUS, &success);
	if(!success){
		glGetProgramiv(program, GL_INFO_LOG_LENGTH, &len);
		log = new char[len];
		glGetProgramInfoLog(program, len, NULL, log);
		fprintf(stderr, "Link Error: %s\n", log);
		delete[] log;
		glDeleteProgram(program);
		return 0;
	}
	return program;
}

GLint
compileShader(const char **src, int count, int type)
{
	GLint success;
	GLint len;
	char *log;

	GLint shader = glCreateShader(type);
	assert(shader != 0);
	glShaderSource(shader, count, src, NULL);
	glCompileShader(shader);
	glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
	if(!success){
		glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &len);
		log = new char[len];
		glGetShaderInfoLog(shader, len, NULL, log);
		fprintf(stderr, "Shader Error: %s\n", log);
		delete[] log;
		glDeleteProgram(shader);
		return 0;
	}
	return shader;
}

}
}