Beispiel #1
0
void
piglit_init(int argc, char **argv)
{
	GLboolean try_to_render;

	piglit_require_gl_version(20);

	piglit_require_extension("GL_EXT_separate_shader_objects");

	glClearColor(0.3, 0.3, 0.3, 0.0);
	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);

	prog[0] = glCreateShaderProgramEXT(GL_VERTEX_SHADER, vs_text);
	prog[1] = glCreateShaderProgramEXT(GL_FRAGMENT_SHADER, fs_text);

	/* Don't try to render if either program failed to link.  The
	 * GL_EXT_separate_shader_obejcts spec is really vague about whether
	 * or not linking will fail here.
	 */
	printf("Checking link result for vertex shader...\n");
	try_to_render = piglit_link_check_status_quiet(prog[0]);

	printf("Checking link result for fragment shader...\n");
	try_to_render = piglit_link_check_status_quiet(prog[1])
		&& try_to_render;

	if (!try_to_render)
		piglit_report_result(PIGLIT_PASS);
}
void
piglit_init(int argc, char **argv)
{
	GLboolean pass = GL_TRUE;
	GLint count;
	GLuint prog;
	GLenum err;

	piglit_require_gl_version(20);

	piglit_require_extension("GL_EXT_separate_shader_objects");

	prog = glCreateShaderProgramEXT(GL_VERTEX_SHADER, vs_text);

	err = glGetError();
	if (err != 0) {
		printf("Unexpected OpenGL error state 0x%04x for "
		       "glCreateShaderProgramEXT\n", err);
		pass = GL_FALSE;
	}

	count = -1;
	glGetProgramiv(prog, GL_ATTACHED_SHADERS, &count);
	if (count != 0) {
		printf("Expected attached shader count of 0, got %d.\n", count);
		pass = GL_FALSE;
	}

	piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
}
Beispiel #3
0
void
piglit_init(int argc, char **argv)
{
	GLuint vs;
	GLuint fs;

	if (piglit_get_gl_version() < 20) {
		printf("Requires OpenGL 2.0\n");
		piglit_report_result(PIGLIT_SKIP);
	}

	piglit_require_extension("GL_EXT_separate_shader_objects");

	glClearColor(0.3, 0.3, 0.3, 0.0);

	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);

	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_text);
	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, bad_fs_text);

	prog[0] = piglit_link_simple_program(vs, 0);
	prog[1] = glCreateShaderProgramEXT(GL_FRAGMENT_SHADER, good_fs_text);
	prog[2] = piglit_link_simple_program(vs, fs);

	glDeleteShader(vs);
	glDeleteShader(fs);
}
void
piglit_init(int argc, char **argv)
{
	GLint loc;

	piglit_require_gl_version(20);

	piglit_require_extension("GL_EXT_separate_shader_objects");

	glClearColor(0.3, 0.3, 0.3, 0.0);

	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);

	prog[0] = glCreateShaderProgramEXT(GL_VERTEX_SHADER, vs_text);
	prog[1] = glCreateShaderProgramEXT(GL_FRAGMENT_SHADER, fs_text);

	loc = glGetUniformLocation(prog[0], "color");
	if (loc < 0) {
		printf("Unable to get uniform location in separate vertex "
		       "shader");
		piglit_report_result(PIGLIT_FAIL);
	}

	glActiveProgramEXT(prog[0]);
	glUniform4f(loc, 0.0, 0.5, 0.0, 0.5);

	loc = glGetUniformLocation(prog[1], "color");
	if (loc < 0) {
		printf("Unable to get uniform location in separate fragment "
		       "shader");
		piglit_report_result(PIGLIT_FAIL);
	}

	glActiveProgramEXT(prog[1]);
	glUniform1i(loc, 2);
}
GLboolean
try_CreateShaderProgram(GLenum type, const char *source, GLenum expect)
{
	GLboolean pass = GL_TRUE;
	GLenum err;
	GLuint prog;

	/* There shouldn't be any GL errors, but clear them all just to be
	 * sure.
	 */
	while (glGetError() != 0)
		/* empty */ ;

	/* Type is not one of the known shader types.  This should generate
	 * the error GL_INVALID_ENUM.
	 */
	prog = glCreateShaderProgramEXT(type, source);

	err = glGetError();
	if (err != expect) {
		printf("Unexpected OpenGL error state 0x%04x for "
		       "glCreateShaderProgramEXT called with\n"
		       "the %sshader target 0x%04x (expected 0x%04x).\n",
		       err, (expect == 0) ? "" : "invalid ", type, expect);
		pass = GL_FALSE;
	}

	while (glGetError() != 0)
		/* empty */ ;

	/* Exactly one of expect or prog should be zero.  If the caller expected
	 * an error (expect != 0), a program should not have been created.  If
	 * the caller expected success, a program should have been created.
	 */
	if ((expect == 0) != (prog != 0)) {
		printf("Expected that a program would %sbe created, "
		       "but instead one was %screated.\n",
		       (expect == 0) ? "not " : "",
		       (prog == 0) ? "not " : "");
		pass = GL_FALSE;
	}

	return pass;
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_EXTSeparateShaderObjects_nglCreateShaderProgramEXT(JNIEnv *env, jclass clazz, jint type, jlong string, jlong function_pointer) {
	const GLchar *string_address = (const GLchar *)(intptr_t)string;
	glCreateShaderProgramEXTPROC glCreateShaderProgramEXT = (glCreateShaderProgramEXTPROC)((intptr_t)function_pointer);
	GLuint __result = glCreateShaderProgramEXT(type, string_address);
	return __result;
}