bool initProgram() { bool Validated = true; if(Validated) { compiler Compiler; GLuint VertShaderName = Compiler.create(GL_VERTEX_SHADER, getDataDirectory() + VERT_SHADER_SOURCE, "--version 430 --profile core"); GLuint FragShaderName = Compiler.create(GL_FRAGMENT_SHADER, getDataDirectory() + FRAG_SHADER_SOURCE, "--version 430 --profile core"); Validated = Validated && Compiler.check(); ProgramName = glCreateProgram(); glProgramParameteri(ProgramName, GL_PROGRAM_SEPARABLE, GL_TRUE); glAttachShader(ProgramName, VertShaderName); glAttachShader(ProgramName, FragShaderName); glLinkProgram(ProgramName); Validated = Validated && Compiler.checkProgram(ProgramName); } if(Validated) { glCreateProgramPipelines(1, &PipelineName); glUseProgramStages(PipelineName, GL_VERTEX_SHADER_BIT | GL_FRAGMENT_SHADER_BIT, ProgramName); } return Validated; }
static void realize(GtkWidget *widget, gpointer user_data) { gtk_gl_area_make_current(GTK_GL_AREA(widget)); glDebugMessageCallback(debug, NULL); char *str = pk_io_read_file("data/vs.glsl"); programs[0] = glCreateShaderProgramv(GL_VERTEX_SHADER, 1, &str); free(str); str = pk_io_read_file("data/fs.glsl"); programs[1] = glCreateShaderProgramv(GL_FRAGMENT_SHADER, 1, &str); free(str); /* set up pipeline for rendering fullscreen quad */ glCreateProgramPipelines(1, &pipeline); glUseProgramStages(pipeline, GL_VERTEX_SHADER_BIT, programs[0]); glUseProgramStages(pipeline, GL_FRAGMENT_SHADER_BIT, programs[1]); glBindProgramPipeline(pipeline); glCreateVertexArrays(1, &vao); glBindVertexArray(vao); }
GLuint GSShaderOGL::LinkPipeline(const string& pretty_print, GLuint vs, GLuint gs, GLuint ps) { GLuint p; glCreateProgramPipelines(1, &p); glUseProgramStages(p, GL_VERTEX_SHADER_BIT, vs); glUseProgramStages(p, GL_GEOMETRY_SHADER_BIT, gs); glUseProgramStages(p, GL_FRAGMENT_SHADER_BIT, ps); glObjectLabel(GL_PROGRAM_PIPELINE, p, pretty_print.size(), pretty_print.c_str()); m_pipe_to_delete.push_back(p); return p; }
bool initProgram() { bool Validated(true); if(Validated) { compiler Compiler; GLuint VertShaderName = Compiler.create(GL_VERTEX_SHADER, getDataDirectory() + VERT_SHADER_SOURCE_TEXTURE, "--version 450 --profile core"); GLuint FragShaderName = Compiler.create(GL_FRAGMENT_SHADER, getDataDirectory() + FRAG_SHADER_SOURCE_TEXTURE, "--version 450 --profile core"); Validated = Validated && Compiler.check(); ProgramName[pipeline::TEXTURE] = glCreateProgram(); glProgramParameteri(ProgramName[pipeline::TEXTURE], GL_PROGRAM_SEPARABLE, GL_TRUE); glAttachShader(ProgramName[pipeline::TEXTURE], VertShaderName); glAttachShader(ProgramName[pipeline::TEXTURE], FragShaderName); glLinkProgram(ProgramName[pipeline::TEXTURE]); Validated = Validated && Compiler.check_program(ProgramName[pipeline::TEXTURE]); } if(Validated) { compiler Compiler; GLuint VertShaderName = Compiler.create(GL_VERTEX_SHADER, getDataDirectory() + VERT_SHADER_SOURCE_SPLASH, "--version 450 --profile core"); GLuint FragShaderName = Compiler.create(GL_FRAGMENT_SHADER, getDataDirectory() + FRAG_SHADER_SOURCE_SPLASH, "--version 450 --profile core"); Validated = Validated && Compiler.check(); ProgramName[pipeline::SPLASH] = glCreateProgram(); glProgramParameteri(ProgramName[pipeline::SPLASH], GL_PROGRAM_SEPARABLE, GL_TRUE); glAttachShader(ProgramName[pipeline::SPLASH], VertShaderName); glAttachShader(ProgramName[pipeline::SPLASH], FragShaderName); glLinkProgram(ProgramName[pipeline::SPLASH]); Validated = Validated && Compiler.check_program(ProgramName[pipeline::SPLASH]); } if(Validated) { glCreateProgramPipelines(pipeline::MAX, &PipelineName[0]); glUseProgramStages(PipelineName[pipeline::TEXTURE], GL_VERTEX_SHADER_BIT | GL_FRAGMENT_SHADER_BIT, ProgramName[pipeline::TEXTURE]); glUseProgramStages(PipelineName[pipeline::SPLASH], GL_VERTEX_SHADER_BIT | GL_FRAGMENT_SHADER_BIT, ProgramName[pipeline::SPLASH]); } return Validated; }