当前位置: 首页>>代码示例>>C++>>正文


C++ create_shader函数代码示例

本文整理汇总了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;
}
开发者ID:SStalker,项目名称:Asteroids,代码行数:26,代码来源:distfield.c

示例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();
    }
开发者ID:mlackman,项目名称:study_opengl,代码行数:33,代码来源:main.cpp

示例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;
}
开发者ID:cognoscola,项目名称:simple_level_editor,代码行数:7,代码来源:shader_loader.cpp

示例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;
}
开发者ID:Clearlove1992,项目名称:GraphicsDemos,代码行数:35,代码来源:geometry_square.cpp

示例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;
}
开发者ID:LIJI32,项目名称:SameBoy,代码行数:31,代码来源:shader.c

示例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;
}
开发者ID:bcosenza,项目名称:bsh,代码行数:35,代码来源:Shader_utils.cpp

示例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;
	}
}
开发者ID:steenstn,项目名称:SteenGraph,代码行数:31,代码来源:Shader.cpp

示例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");
}
开发者ID:Igalia,项目名称:webkitgtk-wayland-proto,代码行数:28,代码来源:client.c

示例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;
}
开发者ID:toshipiazza,项目名称:Mandelbrot-OpenGL,代码行数:30,代码来源:shader_utils.cpp

示例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();
}
开发者ID:Icemore,项目名称:homework,代码行数:25,代码来源:fractal.cpp

示例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");
}
开发者ID:emutavchi,项目名称:pxCore,代码行数:34,代码来源:SimpleOpenGL.cpp

示例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);

}
开发者ID:PDKK,项目名称:doubleHexapod,代码行数:32,代码来源:support.c

示例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*/
		}
	}
}
开发者ID:Darks10,项目名称:HappyLand,代码行数:26,代码来源:Program.cpp

示例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;
}	
开发者ID:Narcolapser,项目名称:Littlefoot-Landmines,代码行数:59,代码来源:s5.c

示例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;
}
开发者ID:tim099,项目名称:GameTest,代码行数:8,代码来源:Shader.cpp


注:本文中的create_shader函数示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。