Esempio n. 1
0
bool ShaderProgram::LinkProgram(GLuint program)
{
    GLint status;
    glLinkProgram(program);
	CHECK_ERROR_GL();

#if defined(DEBUG)
    GLint logLength;
    glGetProgramiv(program, GL_INFO_LOG_LENGTH, &logLength);
	CHECK_ERROR_GL();
    if (logLength > 0) {
        GLchar *log = (GLchar *)malloc((size_t)logLength);
        glGetProgramInfoLog(program, logLength, &logLength, log);
	    CHECK_ERROR_GL();
		print_log("log", log);
        free(log);
    }
#endif

    glGetProgramiv(program, GL_LINK_STATUS, &status);
	CHECK_ERROR_GL();
    if (status == 0) {
        return false;
    }

    return true;
}
Esempio n. 2
0
void RenderBuffer::PrepareColorBuffer(GLsizei width, GLsizei height)
{
	glBindRenderbuffer(GL_RENDERBUFFER, _id);
	CHECK_ERROR_GL();
	glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, width, height);
	CHECK_ERROR_GL();
	glBindRenderbuffer(GL_RENDERBUFFER, 0);
	CHECK_ERROR_GL();
}
Esempio n. 3
0
void RenderBuffer::PrepareDepthBuffer(GLsizei width, GLsizei height)
{
	glBindRenderbuffer(GL_RENDERBUFFER, _id);
	CHECK_ERROR_GL();
	glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height);
	CHECK_ERROR_GL();
	glBindRenderbuffer(GL_RENDERBUFFER, 0);
	CHECK_ERROR_GL();
}
Esempio n. 4
0
renderbuffer::renderbuffer(GLenum internalformat, GLsizei width, GLsizei height)
{
	glGenRenderbuffers(1, &id);
	CHECK_ERROR_GL();
	glBindRenderbuffer(GL_RENDERBUFFER, id);
	CHECK_ERROR_GL();
	glRenderbufferStorage(GL_RENDERBUFFER, internalformat, width, height);
	CHECK_ERROR_GL();
}
Esempio n. 5
0
ShaderProgram::ShaderProgram(const char* vertexshader, const char* fragmentshader) :
_blend_sfactor(GL_ONE),
_blend_dfactor(GL_ZERO)
{
	_program = glCreateProgram();
	CHECK_ERROR_GL();

	GLuint vertex_shader = CompileShader(GL_VERTEX_SHADER, vertexshader);
	GLuint fragment_shader = CompileShader(GL_FRAGMENT_SHADER, fragmentshader);

    glAttachShader(_program, vertex_shader);
	CHECK_ERROR_GL();
    glAttachShader(_program, fragment_shader);
	CHECK_ERROR_GL();

    if (!LinkProgram(_program)) {
        if (_program) {
            glDeleteProgram(_program);
	        CHECK_ERROR_GL();
	        _program = 0;
        }
        return;
    }
	ValidateProgram(_program);

	glDetachShader(_program, vertex_shader);
	CHECK_ERROR_GL();
	glDetachShader(_program, fragment_shader);
	CHECK_ERROR_GL();

	glDeleteShader(vertex_shader);
	CHECK_ERROR_GL();
	glDeleteShader(fragment_shader);
	CHECK_ERROR_GL();
}
Esempio n. 6
0
ShaderProgram::~ShaderProgram()
{
    if (_program != 0)
    {
        glDeleteProgram(_program);
	    CHECK_ERROR_GL();
    }
}
Esempio n. 7
0
GLuint ShaderProgram::CompileShader(GLenum type, const char* source)
{
    std::string str(source);
    
    if (str.size() >= 2 && str[0] == '{' && str[str.size() - 1] == '}')
        str = str.substr(1, str.size() - 2);
    
#ifdef OPENWAR_USING_GLES2
    str.insert(0, "precision highp float; precision lowp int; ");
#else
    str.insert(0, "#version 120\n");
#endif

	const GLchar *src = str.c_str();

	GLuint result = glCreateShader(type);
	CHECK_ERROR_GL();
	glShaderSource(result, 1, &src, NULL);
	CHECK_ERROR_GL();
	glCompileShader(result);
	CHECK_ERROR_GL();

	#if 1 //defined(DEBUG)
	GLint logLength;
	glGetShaderiv(result, GL_INFO_LOG_LENGTH, &logLength);
	CHECK_ERROR_GL();
	if (logLength > 0)
	{
		GLchar *log = (GLchar *)std::malloc((size_t)logLength);
		glGetShaderInfoLog(result, logLength, &logLength, log);
		CHECK_ERROR_GL();
		print_log("compile", log);
		std::free(log);
	}
	#endif

	//GLint status;
	//glGetShaderiv(*shader, GL_COMPILE_STATUS, &status);

	return result;
}
Esempio n. 8
0
bool ShaderProgram::ValidateProgram(GLuint program)
{
	GLint logLength, status;

	glValidateProgram(program);
	CHECK_ERROR_GL();
	glGetProgramiv(program, GL_INFO_LOG_LENGTH, &logLength);
	CHECK_ERROR_GL();
	if (logLength > 0)
	{
		GLchar *log = (GLchar *)std::malloc((size_t)logLength);
		glGetProgramInfoLog(program, logLength, &logLength, log);
		print_log("validate", log);
		std::free(log);
	}

	glGetProgramiv(program, GL_VALIDATE_STATUS, &status);
	CHECK_ERROR_GL();
	if (status == 0) {
		return false;
	}

	return true;
}
Esempio n. 9
0
void energy::Fitting::init(Worker *worker)
{
    this->camera = worker->camera;
    this->offscreenrend = &(worker->offscreenrend);
    this->sensor_depth_texture = worker->sensor_depth_texture;
    this->skeleton = worker->skeleton;
    this->cylinders = worker->cylinders;
    this->handfinder = worker->handfinder;

    ///--- 3D fitting
    tw_settings->tw_add(settings->fit3D_enable,"E_3D (enable)","group=Fitting");
    tw_settings->tw_add(settings->fit3D_weight,"E_3D (weight)","group=Fitting");
    tw_settings->tw_add(settings->fit3D_reweight,"E_3D (l1nrm?)","group=Fitting");
    tw_settings->tw_add(settings->fit3D_backface_check,"E_3D (occlus?)","group=Fitting");
    tw_settings->tw_add(settings->fit3D_point2plane,"E_3D (p2P?)","group=Fitting");
    ///--- 2D fitting
    tw_settings->tw_add(settings->fit2D_enable,"E_2D (enable)","group=Fitting");
    tw_settings->tw_add(settings->fit2D_weight,"E_2D (weight)","group=Fitting");

#ifdef WITH_CUDA
    cudax::CudaHelper::init();
    cudax::CublasHelper::init();

    ///--- Run some tests before we get started
    kernel_memory_tests();

    ///--- Init worker for GPU computation of normals
    distance_transform.init(camera->width(), camera->height());

    ///--- init resource mapper for cuda
    render_color.init(offscreenrend->fb->color_tex_id());
    render_xyz.init(offscreenrend->fb->extra_tex_id());
    render_normals.init(offscreenrend->fb->norms_tex_id());
    sensor_depth.init(sensor_depth_texture->texid());

    // LOG(INFO ) << camera->inv_projection_matrix();
    kernel_init(this->settings, camera->width(), camera->height(), num_thetas, camera->focal_length_x(), camera->focal_length_y(), camera->inv_projection_matrix().data());
    CHECK_ERROR_GL();
#endif
}
Esempio n. 10
0
RenderBuffer::~RenderBuffer()
{
	glDeleteRenderbuffers(1, &_id);
	CHECK_ERROR_GL();
}
Esempio n. 11
0
RenderBuffer::RenderBuffer()
{
	glGenRenderbuffers(1, &_id);
	CHECK_ERROR_GL();
}
Esempio n. 12
0
renderbuffer::~renderbuffer()
{
	glDeleteRenderbuffers(1, &id);
	CHECK_ERROR_GL();
}
Esempio n. 13
0
void renderbuffer::resize(GLenum internalformat, GLsizei width, GLsizei height)
{
	glRenderbufferStorage(GL_RENDERBUFFER, internalformat, width, height);
	CHECK_ERROR_GL();
}