本文整理汇总了C++中create_shader函数的典型用法代码示例。如果您正苦于以下问题:C++ create_shader函数的具体用法?C++ create_shader怎么用?C++ create_shader使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了create_shader函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: create_program
unsigned int create_program(const char *vsdr, const char *psdr)
{
unsigned int vs, ps, prog;
int status;
if(!(vs = create_shader(GL_VERTEX_SHADER, vsdr))) {
return 0;
}
if(!(ps = create_shader(GL_FRAGMENT_SHADER, psdr))) {
glDeleteShader(vs);
return 0;
}
prog = glCreateProgram();
glAttachShader(prog, vs);
glAttachShader(prog, ps);
glLinkProgram(prog);
glGetProgramiv(prog, GL_LINK_STATUS, &status);
if(!status) {
fprintf(stderr, "failed to link shader program\n");
glDeleteProgram(prog);
prog = 0;
}
return prog;
}
示例2: setup
void setup() {
GLuint vertex_shader = create_shader("vertex.shd", GL_VERTEX_SHADER);
GLuint fragment_shader = create_shader("fragment.shd", GL_FRAGMENT_SHADER);
program = glCreateProgram();
glAttachShader(program, vertex_shader);
glAttachShader(program, fragment_shader);
glLinkProgram(program);
glDeleteShader(vertex_shader);
glDeleteShader(fragment_shader);
glGenVertexArrays(1, &vertex_array_object);
glBindVertexArray(vertex_array_object);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexStorage2D(GL_TEXTURE_2D,
1, // Mipmap level
GL_RGBA32F,
256, 256);
std::unique_ptr<float[]> texture = createTexture();
glTexSubImage2D(GL_TEXTURE_2D,
0, // level 0
0, 0, // offset,
256, 256, // size
GL_RGBA,
GL_FLOAT,
texture.get());
texture.reset();
}
示例3: create_programme_from_files
GLuint create_programme_from_files ( const char* vert_file_name, const char* frag_file_name) {
GLuint vert, frag, programme;
assert (create_shader (vert_file_name, &vert, GL_VERTEX_SHADER));
assert (create_shader (frag_file_name, &frag, GL_FRAGMENT_SHADER));
assert (create_programme (vert, frag, &programme));
return programme;
}
示例4: init_shaders
int init_shaders(void)
{
GLuint vertex_shader = create_shader("geometry_square.vs", GL_VERTEX_SHADER);
if (vertex_shader == 0)
return 0;
GLuint fragment_shader = create_shader("geometry_square.fs", GL_FRAGMENT_SHADER);
if (fragment_shader == 0)
return 0;
// Link vertex shader and fragment shader
program = glCreateProgram();
glAttachShader(program, vertex_shader);
glAttachShader(program, fragment_shader);
glLinkProgram(program);
GLint link_ok = GL_FALSE;
glGetProgramiv(program, GL_LINK_STATUS, &link_ok);
if (!link_ok)
{
fprintf(stderr, "glLinkProgram: ");
print_log(program);
}
// Bind shader variables
const char* attribute_name = "coord3d";
attribute_coord3d = glGetAttribLocation(program, attribute_name);
if (attribute_coord3d == -1)
{
fprintf(stderr, "Cound not bind attribute %s\n", attribute_name);
return 0;
}
return 1;
}
示例5: create_program
static GLuint create_program(const char *vsh, const char *fsh)
{
// Build shaders
GLuint vertex_shader = create_shader(vsh, GL_VERTEX_SHADER);
GLuint fragment_shader = create_shader(fsh, GL_FRAGMENT_SHADER);
// Create program
GLuint program = glCreateProgram();
// Attach shaders
glAttachShader(program, vertex_shader);
glAttachShader(program, fragment_shader);
// Link program
glLinkProgram(program);
// Check for errors
GLint status;
glGetProgramiv(program, GL_LINK_STATUS, &status);
if (status == GL_FALSE) {
GLchar messages[1024];
glGetProgramInfoLog(program, sizeof(messages), 0, &messages[0]);
fprintf(stderr, "GLSL Program Error: %s", messages);
}
// Delete shaders
glDeleteShader(vertex_shader);
glDeleteShader(fragment_shader);
return program;
}
示例6: create_gs_program
GLuint create_gs_program(const char *vertexfile, const char *geometryfile, const char *fragmentfile, GLint input, GLint output, GLint vertices) {
GLuint program = glCreateProgram();
GLuint shader;
if (vertexfile) {
shader = create_shader(vertexfile, GL_VERTEX_SHADER);
if (!shader)
return 0;
glAttachShader(program, shader);
}
if (geometryfile) {
shader = create_shader(geometryfile, GL_GEOMETRY_SHADER);
if (!shader)
return 0;
glAttachShader(program, shader);
glProgramParameteriEXT(program, GL_GEOMETRY_INPUT_TYPE_EXT, input);
glProgramParameteriEXT(program, GL_GEOMETRY_OUTPUT_TYPE_EXT, output);
glProgramParameteriEXT(program, GL_GEOMETRY_VERTICES_OUT_EXT, vertices);
}
if (fragmentfile) {
shader = create_shader(fragmentfile, GL_FRAGMENT_SHADER);
if (!shader)
return 0;
glAttachShader(program, shader);
}
glLinkProgram(program);
GLint link_ok = GL_FALSE;
glGetProgramiv(program, GL_LINK_STATUS, &link_ok);
if (!link_ok) {
fprintf(stderr, "glLinkProgram:");
print_log(program);
glDeleteProgram(program);
return 0;
}
return program;
}
示例7: fprintf
/*
Constructor for the shader. Reads two files and creates vertex shader and fragment shader as
well as links them
*/
Shader::Shader(char* vertexFile, char* fragmentFile)
{
if((VertexShader = create_shader(vertexFile, GL_VERTEX_SHADER)) == 0)
{
fprintf(stderr, "Could not create vertex shader.");
return;
}
if((FragmentShader = create_shader(fragmentFile, GL_FRAGMENT_SHADER)) == 0)
{
fprintf(stderr, "Could not create fragment shader.");
return;
}
Program = glCreateProgram();
glAttachShader(Program, VertexShader);
glAttachShader(Program, FragmentShader);
glLinkProgram(Program);
GLint linkOk = GL_FALSE;
glGetProgramiv(Program, GL_LINK_STATUS, &linkOk);
if(!linkOk)
{
fprintf(stderr, "glLinkProgram: ");
print_log(Program);
return;
}
}
示例8: create_program
static void
create_program(struct nested_client *client,
const char *vert, const char *frag)
{
GLint status;
client->vert = create_shader(vert, GL_VERTEX_SHADER);
client->frag = create_shader(frag, GL_FRAGMENT_SHADER);
client->program = glCreateProgram();
glAttachShader(client->program, client->frag);
glAttachShader(client->program, client->vert);
glBindAttribLocation(client->program, POS, "pos");
glBindAttribLocation(client->program, COL, "color");
glLinkProgram(client->program);
glGetProgramiv(client->program, GL_LINK_STATUS, &status);
if (!status) {
char log[1000];
GLsizei len;
glGetProgramInfoLog(client->program, 1000, &len, log);
fprintf(stderr, "Error: linking:\n%*s\n", len, log);
exit(1);
}
client->rotation =
glGetUniformLocation(client->program, "rotation");
}
示例9: create_program
GLuint create_program(const char *vertexfile, const char *fragmentfile) {
GLuint program = glCreateProgram();
GLuint shader;
if(vertexfile) {
shader = create_shader(vertexfile, GL_VERTEX_SHADER);
if(!shader)
return 0;
glAttachShader(program, shader);
}
if(fragmentfile) {
shader = create_shader(fragmentfile, GL_FRAGMENT_SHADER);
if(!shader)
return 0;
glAttachShader(program, shader);
}
glLinkProgram(program);
GLint link_ok = GL_FALSE;
glGetProgramiv(program, GL_LINK_STATUS, &link_ok);
if (!link_ok) {
fprintf(stderr, "glLinkProgram:");
print_log(program);
glDeleteProgram(program);
return 0;
}
return program;
}
示例10: pos_
fractal_t::fractal_t()
: pos_(0.5, 0), scale_factor_(1)
{
#ifdef USE_CORE_OPENGL
TwInit(TW_OPENGL_CORE, NULL);
#else
TwInit(TW_OPENGL, NULL);
#endif
// Определение "контролов" GUI
TwBar *bar = TwNewBar("Parameters");
TwDefine(" Parameters size='300 50' color='70 100 120' valueswidth=220 iconpos=topleft");
TwAddButton(bar, "Fullscreen toggle", toggle_fullscreen_callback, NULL,
" label='Toggle fullscreen mode' key=f");
// Создание шейдеров
vs_ = create_shader(GL_VERTEX_SHADER , "shaders//fractal.glslvs");
fs_ = create_shader(GL_FRAGMENT_SHADER, "shaders//fractal.glslfs");
// Создание программы путём линковки шейдерова
program_ = create_program(vs_, fs_);
// Создание буфера с вершинными данными
init_buffer();
// Создание VAO
init_vertex_array();
}
示例11: initializeGl
static void initializeGl()
{
GLuint frag, vert;
GLuint program;
GLint status;
frag = create_shader(frag_shader_text, GL_FRAGMENT_SHADER);
vert = create_shader(vert_shader_text, GL_VERTEX_SHADER);
program = glCreateProgram();
glAttachShader(program, frag);
glAttachShader(program, vert);
glLinkProgram(program);
glGetProgramiv(program, GL_LINK_STATUS, &status);
if (!status) {
char log[1000];
GLsizei len;
glGetProgramInfoLog(program, 1000, &len, log);
fprintf(stderr, "Error: linking:\n%*s\n", len, log);
exit(1);
}
glUseProgram(program);
glPos = 0;
glCol = 1;
glBindAttribLocation(program, glPos, "pos");
glBindAttribLocation(program, glCol, "color");
glLinkProgram(program);
glRotationUniform = glGetUniformLocation(program, "rotation");
}
示例12: initPointClouds
void initPointClouds(const char* vertS, const char* fragS, float pntSize) {
GLint link_ok = GL_FALSE;
GLuint vs, fs;
vs = create_shader(vertS, GL_VERTEX_SHADER);
fs = create_shader(fragS, GL_FRAGMENT_SHADER);
//printf("vs=%i fs=%i\n",vs,fs);
__pg.Partprogram = glCreateProgram();
glAttachShader(__pg.Partprogram, vs);
glAttachShader(__pg.Partprogram, fs);
glLinkProgram(__pg.Partprogram);
glGetProgramiv(__pg.Partprogram, GL_LINK_STATUS, &link_ok);
if (!link_ok) {
printf("particle glLinkProgram error \n");
print_log(__pg.Partprogram);
// return 0;
}
__pg.part_vert_attrib =
getShaderLocation(shaderAttrib, __pg.Partprogram, "vertex_attrib");
__pg.part_mvp_uniform =
getShaderLocation(shaderUniform, __pg.Partprogram, "mvp_uniform");
__pg.part_tex_uniform =
getShaderLocation(shaderUniform, __pg.Partprogram, "u_texture");
__pg.part_size_uniform =
getShaderLocation(shaderUniform, __pg.Partprogram, "u_point_size");
glUseProgram(__pg.Partprogram);
glUniform1f(__pg.part_size_uniform, pntSize);
}
示例13: params
Program::Program(map<string, GLint> params, string shader_name) : params(params) {
if ((vs = create_shader((shader_name+".v.glsl").c_str(), GL_VERTEX_SHADER)) == 0) exit(-1);
if ((fs = create_shader((shader_name+".f.glsl").c_str(), GL_FRAGMENT_SHADER)) == 0) exit(-1);
GLint compile_ok = GL_FALSE, link_ok = GL_FALSE;
id = glCreateProgram();
glAttachShader(id, vs);
glAttachShader(id, fs);
glLinkProgram(id);
glGetProgramiv(id, GL_LINK_STATUS, &link_ok);
if (!link_ok) {
fprintf(stderr, "glLinkProgram:");
print_log(id);
exit(-1);
}
for(auto& kv : this->params){
if(kv.first.substr(0, 7) == "uniform"){
bindUniform(kv.first.substr(8).c_str(), kv.second, id); /*uniform*/
}
else{
bindAttribute(kv.first.substr(10).c_str(), kv.second, id); /*attribute*/
}
}
}
示例14: init_resources
int init_resources()
{
//added in the stuff for working with the color buffers here:
GLfloat triangle_colors[] = {
1.0, 1.0, 0.0,
0.0, 0.0, 1.0,
1.0, 0.0, 0.0,
};
glGenBuffers(1, &vbo_triangle_colors);//these are just like below, so shouldn't be anything
glBindBuffer(GL_ARRAY_BUFFER, vbo_triangle_colors);//new to you. gen buffer, pass stuff
glBufferData(GL_ARRAY_BUFFER, sizeof(triangles_colors), triangle_colors, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);//and then lastly unbind.
GLfloat triangle_vertices[] = {
0.0, 0.8,
-0.8, -0.8,
0.8, -0.8,
};
glGenBuffers(1, &vbo_triangle);
glBindBuffer(GL_ARRAY_BUFFER, vbo_triangle);
glBufferData(GL_ARRAY_BUFFER, sizeof(triangle_vertices), triangle_vertices, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
GLint link_ok = GL_FALSE;
GLuint vs, fs;
if ((vs = create_shader("triangle.v.glsl", GL_VERTEX_SHADER)) == 0) return 0;
if ((fs = create_shader("triangle.f.glsl", GL_FRAGMENT_SHADER)) == 0) return 0;
program = glCreateProgram();
glAttachShader(program, vs);
glAttachShader(program, fs);
glLinkProgram(program);
glGetProgramiv(program, GL_LINK_STATUS, &link_ok);
if (!link_ok)
{
fprintf(stderr, "glLinkProgram:");
return 0;
}
const char* attribute_name = "coord2d";
attribute_coord2d = glGetAttribLocation(program, attribute_name);
if (attribute_coord2d == -1)
{
fprintf(stderr, "Could not bind attribute %s\n", attribute_name);
return 0;
}
//this again should look familiar.
attribute_name = "v_color";
attribute_v_color = glGetAttribLocation(program, attribute_name);
if (attribute_v_color == -1)
{
fprintf(stderr, "Could not bind attribute %s\n", attribute_name);
return 0;
}
return 1;
}
示例15: LoadShader
void Shader::LoadShader(const char* vertex,const char* fragment) {
std::vector<GLuint>shaders;
shaders.push_back(create_shader(vertex,GL_VERTEX_SHADER));
shaders.push_back(create_shader(fragment,GL_FRAGMENT_SHADER));
GLuint ProgramID=create_program(shaders);
programID=ProgramID;
}