void ShaderAPITest::test_attrib_size_type1(const char *glslType, GLenum glType, const char *el) { char buffer[1024]; GLuint program; GLint active, i; //printf(" Running subtest %s\n", glslType); //fflush(stdout); sprintf(buffer, "#version 120\nattribute %s m;\nvoid main() { gl_Position[0] = m%s; }\n", glslType, el); program = make_program(buffer, NULL); glGetProgramiv_func(program, GL_ACTIVE_ATTRIBUTES, &active); assert_no_error(); for (i = 0; i < active; i++) { GLint size = -1; GLenum type = 0; glGetActiveAttrib_func(program, i, sizeof(buffer), NULL, &size, &type, buffer); assert_no_error(); assert(type == glType); assert(size == 1); if (strncmp(buffer, "m", 1) == 0) break; } assert(i < active); /* Otherwise the compiler optimised it out */ }
void ShaderAPITest::test_uniform_size_type1(const char *glslType, GLenum glType, const char *el) { char buffer[1024]; GLuint program; GLint active, i; //printf(" Running subtest %s\n", glslType); //fflush(stdout); sprintf(buffer, "#version 120\nuniform %s m[60];\nvoid main() { gl_Position[0] = m[59]%s; }\n", glslType, el); program = make_program(buffer, NULL); glGetProgramiv_func(program, GL_ACTIVE_UNIFORMS, &active); assert_no_error(); for (i = 0; i < active; i++) { GLint size = -1; GLenum type = 0; glGetActiveUniform_func(program, i, sizeof(buffer), NULL, &size, &type, buffer); assert_no_error(); assert(type == glType); assert(size == 60); if (strncmp(buffer, "m", 1) == 0) break; } }
static void CheckLink(GLuint prog) { GLint stat; glGetProgramiv_func(prog, GL_LINK_STATUS, &stat); if (!stat) { GLchar log[1000]; GLsizei len; glGetProgramInfoLog_func(prog, 1000, &len, log); fprintf(stderr, "Linker error:\n%s\n", log); } }