static void
TestFunctions(void)
{
   printf("Error 0x%x at line %d\n", glGetError(), __LINE__);
   {
      GLfloat pos[3];
      printf("Error 0x%x at line %d\n", glGetError(), __LINE__);
      printf("Light pos %g %g %g\n", pos[0], pos[1], pos[2]);
   }


   {
      GLfloat m[16], result[16];
      GLint mPos;
      int i;

      for (i = 0; i < 16; i++)
         m[i] = (float) i;

      mPos = glGetUniformLocation_func(program, "m");
      printf("Error 0x%x at line %d\n", glGetError(), __LINE__);
      glUniformMatrix4fv_func(mPos, 1, GL_FALSE, m);
      printf("Error 0x%x at line %d\n", glGetError(), __LINE__);

      glGetUniformfv_func(program, mPos, result);
      printf("Error 0x%x at line %d\n", glGetError(), __LINE__);

      for (i = 0; i < 16; i++) {
         printf("%8g %8g\n", m[i], result[i]);
      }
   }

   assert(glIsProgram_func(program));
   assert(glIsShader_func(fragShader));
   assert(glIsShader_func(vertShader));

   /* attached shaders */
   {
      GLuint shaders[20];
      GLsizei count;
      int i;
      glGetAttachedShaders_func(program, 20, &count, shaders);
      for (i = 0; i < count; i++) {
         printf("Attached: %u\n", shaders[i]);
         assert(shaders[i] == fragShader ||
                shaders[i] == vertShader);
      }
   }

   {
      GLchar log[1000];
      GLsizei len;
      glGetShaderInfoLog_func(vertShader, 1000, &len, log);
      printf("Vert Shader Info Log: %s\n", log);
      glGetShaderInfoLog_func(fragShader, 1000, &len, log);
      printf("Frag Shader Info Log: %s\n", log);
      glGetProgramInfoLog_func(program, 1000, &len, log);
      printf("Program Info Log: %s\n", log);
   }
}
示例#2
0
void
ShaderAPITest::test_uniform_query_matrix(void)
{
	GLuint program;
	GLfloat data[18];
	GLint i, r, c;
	GLint location;

	program = make_program("#version 110\nuniform mat3 m[2];\nvoid main() { gl_Position.xyz = m[1][2]; }\n", NULL);
	location = glGetUniformLocation_func(program, "m");
	for (i = 0; i < 9; i++)
		data[i] = i;
	for (i = 9; i < 18; i++)
		data[i] = 321.0;
	glUniformMatrix3fv_func(location, 1, GL_TRUE, data);

	for (i = 0; i < 18; i++)
		data[i] = 123.0;
	glGetUniformfv_func(program, location, data);
	for (c = 0; c < 3; c++)
		for (r = 0; r < 3; r++)
			assert(data[c * 3 + r] == r * 3 + c);
	for (i = 9; i < 18; i++)
		assert(data[i] == 123.0);
}