Пример #1
0
void
piglit_init(int argc, char **argv)
{
	bool piglit_pass = true;
	GLuint vs, fs, prog;
	GLint loc;
	float vf[] = { 1.0, 2.0, 3.0 };
	double vd[] = { 1.0, 2.0, 3.0, 4.0, 5.0};

	piglit_require_extension("GL_ARB_gpu_shader_fp64");

	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_text);
	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_text);
	prog = piglit_link_simple_program(vs, fs);

	glUseProgram(prog);

	// Setting different type should fail
	loc = glGetUniformLocation(prog, "d");
	glUniform1i(loc, 3);
	piglit_pass = piglit_pass
		&& piglit_check_gl_error(GL_INVALID_OPERATION);
	glUniform1f(loc, 3.0);
	piglit_pass = piglit_pass
		&& piglit_check_gl_error(GL_INVALID_OPERATION);
	glUniform1d(loc, 3.0);
	piglit_pass = piglit_pass && piglit_check_gl_error(GL_NO_ERROR);

	loc = glGetUniformLocation(prog, "v");
	glUniform3fv(loc, 1, vf);
	piglit_pass = piglit_pass
		&& piglit_check_gl_error(GL_INVALID_OPERATION);
	glUniform3d(loc, vd[0], vd[1], vd[2]);
	piglit_pass = piglit_pass && piglit_check_gl_error(GL_NO_ERROR);

	// Setting different size should fail
	loc = glGetUniformLocation(prog, "v");
	glUniform2d(loc, vd[0], vd[1]);
	piglit_pass = piglit_pass
		&& piglit_check_gl_error(GL_INVALID_OPERATION);
	glUniform4d(loc, vd[0], vd[1], vd[2], vd[3]);
	piglit_pass = piglit_pass
		&& piglit_check_gl_error(GL_INVALID_OPERATION);
	glUniform3d(loc, vd[0], vd[1], vd[2]);
	piglit_pass = piglit_pass && piglit_check_gl_error(GL_NO_ERROR);

	// Special case for booleans
	loc = glGetUniformLocation(prog, "b");
	glUniform1d(loc, 1.0);
	piglit_pass = piglit_pass
		&& piglit_check_gl_error(GL_INVALID_OPERATION);
	glUniform1f(loc, 1.0);
	piglit_pass = piglit_pass
		&& piglit_check_gl_error(GL_NO_ERROR);

	piglit_report_result(piglit_pass ? PIGLIT_PASS : PIGLIT_FAIL);
}
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL40_nglUniform4d(JNIEnv *__env, jclass clazz, jint location, jdouble x, jdouble y, jdouble z, jdouble w, jlong __functionAddress) {
	glUniform4dPROC glUniform4d = (glUniform4dPROC)(intptr_t)__functionAddress;
	UNUSED_PARAMS(__env, clazz)
	glUniform4d(location, x, y, z, w);
}