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; }
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(); }
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(); }
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(); }
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(); }
ShaderProgram::~ShaderProgram() { if (_program != 0) { glDeleteProgram(_program); CHECK_ERROR_GL(); } }
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; }
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; }
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 }
RenderBuffer::~RenderBuffer() { glDeleteRenderbuffers(1, &_id); CHECK_ERROR_GL(); }
RenderBuffer::RenderBuffer() { glGenRenderbuffers(1, &_id); CHECK_ERROR_GL(); }
renderbuffer::~renderbuffer() { glDeleteRenderbuffers(1, &id); CHECK_ERROR_GL(); }
void renderbuffer::resize(GLenum internalformat, GLsizei width, GLsizei height) { glRenderbufferStorage(GL_RENDERBUFFER, internalformat, width, height); CHECK_ERROR_GL(); }