Shader shader_new(char* vert_file, char* frag_file)
{
    Shader shader = 0;
    ObjectProgram vert_p = shader_compile(vert_file, GL_VERTEX_SHADER);
    ObjectProgram frag_p = shader_compile(frag_file, GL_FRAGMENT_SHADER);

    if(vert_p && frag_p)
    {
        shader = glCreateProgram();
        glAttachShader(shader,vert_p);
        glAttachShader(shader,frag_p);
        glLinkProgram(shader);

        int linked = 0;

        glGetProgramiv(shader,GL_LINK_STATUS,&linked);

        if( !linked)
        {
            char log[5000];
            int log_size = 0;
            glGetProgramInfoLog(shader,5000,&log_size,log);

            printf("ERROR LINKING SHADER: %s, %s:\n%s\n",vert_file,frag_file,log);
        }
    }
    return shader;
}
Beispiel #2
0
void ar_shader_init(
    struct ar_shader *shader,
    const char *vert_src,
    const char *frag_src
){
    shader->vertex_shader = shader_compile(vert_src, GL_VERTEX_SHADER);
    shader->fragment_shader = shader_compile(frag_src, GL_FRAGMENT_SHADER);

    shader->program = glCreateProgram();

    glAttachShader(shader->program, shader->vertex_shader);
    glAttachShader(shader->program, shader->fragment_shader);

    glLinkProgram(shader->program);

    if(!shader_link_check(shader->program)) exit(-1);

    ar_shader_use(shader);

    int i;
    for (i = 0; i < AR_MAX_ATTRIBUTES; i++){
        char name[] = "a_data0";
        name[6] = '0' + i;
        shader->attributes[i] = glGetAttribLocation(shader->program, name);
    }
    for (i = 0; i < AR_MAX_UNIFORMS; i++){
        char name[] = "u_0";
        name[2] = '0' + i;
        shader->uniforms[i] = glGetUniformLocation(shader->program, name);
    }
}
Beispiel #3
0
static int Shader_allocate(lua_State* L)
{
   struct _kl_shader* shader = NULL;
   GLuint gl_shader;
   GLenum shader_type;
   const char* shader_src = NULL;

   luaL_argcheck(L, lua_isstring(L, 1), 1, "expected shader source");
   luaL_argcheck(L, lua_isnumber(L, 2), 2, "expected shader type");

   shader_src = lua_tostring(L, 1);
   shader_type = (GLenum)lua_tointeger(L, 2);

   if(shader_compile(shader_src, shader_type, &gl_shader) == KL_SUCCESS)
   {
      shader = (struct _kl_shader*)lua_newuserdata(L, sizeof(struct _kl_shader));
      shader->shader = gl_shader;
      shader->shader_type = shader_type;
      luaL_getmetatable(L, SHADER_LUA_LIB);
      lua_setmetatable(L, -2);
   }
   else
   {
      lua_pushstring(L, "error compiling shader");
      lua_error(L);
   }

   return 1;
}
Beispiel #4
0
static int Shader_update(lua_State* L)
{
   struct _kl_shader* shader = (struct _kl_shader*)lua_touserdata(L, 1);
   const char* shader_src = NULL;
   GLuint gl_shader;

   luaL_argcheck(L, lua_isstring(L, 2), 2, "expected shader source");

   shader_src = lua_tostring(L, 2);

   if(shader_compile(shader_src, shader->shader_type, &gl_shader) == KL_SUCCESS)
   {
      GLuint old_shader = shader->shader;
      shader->shader = gl_shader;
      glDeleteShader(old_shader);

      lua_pushboolean(L, 1);
   }
   else
   {
      lua_pushboolean(L, 0);
   }

   return 1;
}
Beispiel #5
0
Shader* make_shader(std::map<std::string, GLenum> shaders) {
    std::vector<GLuint> ids;
    for (auto &p : shaders) {
        ids.push_back(shader_compile(p.first.c_str(), p.second));
    }
    return new Shader(ids);
}
Beispiel #6
0
void
piglit_init(int argc, char **argv)
{
	if (argc < 2)
		print_usage_and_exit(argv[0]);
	{
		char *endptr = NULL;
		num_samples = strtol(argv[1], &endptr, 0);
		if (endptr != argv[1] + strlen(argv[1]))
			print_usage_and_exit(argv[0]);
	}

	piglit_require_gl_version(30);
	piglit_ortho_projection(pattern_width, pattern_height, GL_TRUE);

	/* Skip the test if num_samples > GL_MAX_SAMPLES */
	GLint max_samples;
	glGetIntegerv(GL_MAX_SAMPLES, &max_samples);
	if (num_samples > max_samples)
		piglit_report_result(PIGLIT_SKIP);

	ms_fbo.setup(FboConfig(num_samples, pattern_width, pattern_height));
	resolve_fbo.setup(FboConfig(0, pattern_width, pattern_height));

	buffer_to_test = GL_COLOR_BUFFER_BIT;
	shader_compile();
	glEnable(GL_POLYGON_STIPPLE);
	glPolygonStipple(stipple_pattern);

}
Beispiel #7
0
void Shader::compile(const std::string& vert, const std::string& frag) { COLD_RENDER_DEBUG
	COLD_DEBUG_ASSERT(gl_vertex_shader != 0 && gl_fragment_shader != 0 && gl_program != 0);
	shader_compile(gl_vertex_shader, vert); COLD_RENDER_CHECK
	shader_compile(gl_fragment_shader, frag); COLD_RENDER_CHECK
	glLinkProgram(gl_program); COLD_RENDER_CHECK

#if defined(_DEBUG) && 0
/*
	int size;
	char text[256];

	glGetInfoLogARB(gl_program, 256, &size, text);
	if (*text) {
		os::message_box("Shader compiler error", text, os::MBOX_ERROR);
	}
	*/
#endif
}
Beispiel #8
0
Datei: shader.c Projekt: dzz/ctt2
void shader_load(gfx_shader* shader, const char* v_src_path, const char* f_src_path ){
    char* vertex_src;
    char* frag_src;

    vertex_src = read_file((char*)v_src_path);
    frag_src = read_file((char*)f_src_path);

    shader_compile(shader, vertex_src, frag_src, v_src_path, f_src_path );
    free(vertex_src);
    free(frag_src);
}
Beispiel #9
0
int init_shader(struct shader *sh, const char *vp, const char *fp)
{
	if (shader_init(sh) < 0)
		return -1;
	if (shader_read_file(sh, GL_VERTEX_SHADER, vp) < 0)
		return -1;
	if (shader_read_file(sh, GL_FRAGMENT_SHADER, fp) < 0)
		return -1;
	if (shader_compile(sh) < 0 || shader_link(sh) < 0)
		return -1;

	return 0;
}
void
piglit_init(int argc, char **argv)
{
	int samples;
	/* At present fragment shader supports only fixed number of
	 * attachments (3)
	 */
	int num_attachments = 3;

	if (argc < 2)
		print_usage_and_exit(argv[0]);
	{
		char *endptr = NULL;
		samples = strtol(argv[1], &endptr, 0);
		if (endptr != argv[1] + strlen(argv[1]))
			print_usage_and_exit(argv[0]);
	}

	piglit_require_gl_version(21);
	piglit_require_extension("GL_ARB_framebuffer_object");
	piglit_require_extension("GL_ARB_vertex_array_object");

	int pattern_width = piglit_width / 2;
	int pattern_height = piglit_height / num_attachments;

	piglit_ortho_projection(pattern_width,
				pattern_height,
				GL_TRUE);

	/* Skip the test if samples > GL_MAX_SAMPLES */
	GLint max_samples;
	glGetIntegerv(GL_MAX_SAMPLES, &max_samples);

	if (samples > max_samples)
		piglit_report_result(PIGLIT_SKIP);

	ms_fbo_and_draw_buffers_setup(samples,
				      pattern_width,
				      pattern_height,
				      num_attachments,
				      GL_COLOR_BUFFER_BIT,
				      GL_RGBA);
	shader_compile(true /* sample_alpha_to_coverage */,
		       false /* dual_src_blend */);
}
void
piglit_init(int argc, char **argv)
{
	int samples;
	const int num_attachments = 1;

	if (argc < 2)
		print_usage_and_exit(argv[0]);
	{
		char *endptr = NULL;
		samples = strtol(argv[1], &endptr, 0);
		if (endptr != argv[1] + strlen(argv[1]))
			print_usage_and_exit(argv[0]);
	}

	piglit_require_gl_version(30);

	int pattern_width = piglit_width / 2;
	int pattern_height = piglit_height / num_attachments;

	piglit_ortho_projection(pattern_width,
				pattern_height,
				GL_TRUE);

	/* Skip the test if samples > GL_MAX_SAMPLES */
	GLint max_samples;
	glGetIntegerv(GL_MAX_SAMPLES, &max_samples);

	if (samples > max_samples)
		piglit_report_result(PIGLIT_SKIP);

	ms_fbo_and_draw_buffers_setup(samples,
				      pattern_width,
				      pattern_height,
				      num_attachments,
				      GL_COLOR_BUFFER_BIT,
				      GL_RGBA);

	shader_compile(true /* sample_alpha_to_coverage */,
		       true /* dual_src_blend */,
		       true /* frag_out_zero_write */);
}
void
piglit_init(int argc, char **argv)
{

	if (argc < 2)
		print_usage_and_exit(argv[0]);
	{
		char *endptr = NULL;
		samples = strtol(argv[1], &endptr, 0);
		if (endptr != argv[1] + strlen(argv[1]))
			print_usage_and_exit(argv[0]);
	}

	piglit_require_gl_version(30);

	int pattern_width = piglit_width / 2;
	int pattern_height = piglit_height / num_attachments;

	piglit_ortho_projection(pattern_width,
				pattern_height,
				GL_TRUE);
	/* Skip the test if samples > GL_MAX_SAMPLES */
	GLint max_samples;
	glGetIntegerv(GL_MAX_SAMPLES, &max_samples);

	if (samples > max_samples)
		piglit_report_result(PIGLIT_SKIP);
	/* Testing of integer formats other than GL_RGBA8I is not supported
	 * by utility functions in draw-buffers-common.cpp.
	 */
	ms_fbo_and_draw_buffers_setup(samples,
				      pattern_width,
				      pattern_height,
				      num_attachments,
				      GL_COLOR_BUFFER_BIT,
				      GL_RGBA8I);
	shader_compile(false /* sample_alpha_to_coverage */,
		       false /* dual_src_blend */);
}
PIGLIT_GL_TEST_CONFIG_END

void
piglit_init(int argc, char **argv)
{
	const int num_attachments = 1;
	/* For single sample buffer */
	const int samples = 0;

	piglit_require_gl_version(21);
	piglit_require_extension("GL_ARB_framebuffer_object");
	piglit_require_extension("GL_ARB_vertex_array_object");

	int pattern_width = piglit_width / 2;
	int pattern_height = piglit_height / num_attachments;

	piglit_ortho_projection(pattern_width,
				pattern_height,
				GL_TRUE);

	/* Skip the test if samples > GL_MAX_SAMPLES */
	GLint max_samples;
	glGetIntegerv(GL_MAX_SAMPLES, &max_samples);

	if (samples > max_samples)
		piglit_report_result(PIGLIT_SKIP);

	ms_fbo_and_draw_buffers_setup(samples,
				      pattern_width,
				      pattern_height,
				      num_attachments,
				      GL_COLOR_BUFFER_BIT,
				      GL_RGBA);
	shader_compile(false /* sample_alpha_to_coverage */,
		       false /* dual_src_blend */);
}