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); }
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; }