Exemple #1
0
SmartPtr<GLBuffer>
GLBuffer::create_buffer (
    GLenum target,
    const GLvoid *data, uint32_t size,
    GLenum usage)
{
    XCAM_ASSERT (size > 0);

    GLuint buf_id = 0;
    glGenBuffers (1, &buf_id);
    GLenum error = gl_error ();
    XCAM_FAIL_RETURN (
        ERROR, buf_id && (error == GL_NO_ERROR), NULL,
        "GL buffer creation failed, error flag: %s", gl_error_string (error));

    glBindBuffer (target, buf_id);
    XCAM_FAIL_RETURN (
        ERROR, (error = gl_error ()) == GL_NO_ERROR, NULL,
        "GL buffer creation failed when bind buffer:%d, error flag: %s",
        buf_id, gl_error_string (error));

    glBufferData (target, size, data, usage);
    XCAM_FAIL_RETURN (
        ERROR, (error = gl_error ()) == GL_NO_ERROR, NULL,
        "GL buffer creation failed in glBufferData, id:%d, error flag: %s",
        buf_id, gl_error_string (error));

    SmartPtr<GLBuffer> buf_obj =
        new GLBuffer (buf_id, target, usage, size);

    return buf_obj;
}
Exemple #2
0
GLint check_ogl_error(){
	GLenum gl_error;
	GLint retCode = 0;

	gl_error = glGetError();

	while (gl_error != GL_NO_ERROR){
		errorlogger("ERROR: glError: ", gl_error_string(gl_error));
		std::cout << "ERROR: glError: " << gl_error_string(gl_error) << std::endl;
		gl_error = glGetError();
		retCode = 1;
	}

	return retCode;
}
Exemple #3
0
XCamReturn
GLBuffer::flush_map ()
{
    if (!_mapped_range.is_mapped ())
        return XCAM_RETURN_ERROR_ORDER;

    XCAM_FAIL_RETURN (
        ERROR, _mapped_range.flags & GL_MAP_FLUSH_EXPLICIT_BIT,
        XCAM_RETURN_ERROR_GLES,
        "GL buffer flush_map buf:%d failed, invalid flags(:%d)",
        _buf_id, _mapped_range.flags);

    XCamReturn ret = bind ();
    XCAM_FAIL_RETURN (
        ERROR, xcam_ret_is_ok (ret), ret,
        "GL bind buffer failed, buf_id:%d", _buf_id);

    glFlushMappedBufferRange (_target, _mapped_range.offset,  _mapped_range.len);
    GLenum error = gl_error ();
    XCAM_FAIL_RETURN (
        ERROR, error == GL_NO_ERROR,
        XCAM_RETURN_ERROR_GLES,
        "GL buffer flush_map buf:%d failed, error flag: %s",
        _buf_id, gl_error_string (error));

    return XCAM_RETURN_NO_ERROR;
}
Exemple #4
0
void *
GLBuffer::map_range (uint32_t offset, uint32_t length, GLbitfield flags)
{
    if (length == 0)
        length = _size;

    if (_mapped_range.is_mapped () &&
            _mapped_range.flags == flags &&
            _mapped_range.offset == offset &&
            _mapped_range.len == length) {
        return _mapped_range.ptr;
    }
    _mapped_range.clear ();

    XCamReturn ret = bind ();
    XCAM_FAIL_RETURN (
        ERROR, xcam_ret_is_ok (ret), NULL,
        "GL bind buffer failed, buf_id:%d", _buf_id);

    void *ptr = glMapBufferRange (_target, offset, length, flags);
    GLenum error = gl_error ();
    XCAM_FAIL_RETURN (
        ERROR, ptr && (error == GL_NO_ERROR), NULL,
        "GL buffer map range failed, buf_id:%d, offset:%d, len:%d, flags:%d, error flag: %s",
        _buf_id, offset, length, flags, gl_error_string (error));

    _mapped_range.offset = offset;
    _mapped_range.len = length;
    _mapped_range.flags = flags;
    _mapped_range.ptr = ptr;

    return ptr;
}
Exemple #5
0
void gl_call(const char *func, uint32_t line, const char *glfunc) {
    GLenum err;
    if ((err = glGetError()) == GL_NO_ERROR)
        return;

    log_error("gles2: function %s in %s line %u: %s", glfunc, func, line, gl_error_string(glGetError()));
}
Exemple #6
0
XCamReturn
GLBuffer::bind ()
{
    glBindBuffer (_target, _buf_id);
    GLenum error = gl_error ();
    XCAM_FAIL_RETURN (
        ERROR, error == GL_NO_ERROR, XCAM_RETURN_ERROR_GLES,
        "GL bind buffer:%d failed, error flag: %s", _buf_id, gl_error_string (error));
    return XCAM_RETURN_NO_ERROR;
}
Exemple #7
0
GLBuffer::~GLBuffer ()
{
    if (_buf_id) {
        glDeleteBuffers (1, &_buf_id);

        GLenum error = gl_error ();
        if (error != GL_NO_ERROR) {
            XCAM_LOG_WARNING (
                "GL Buffer delete buffer failed, error flag: %s", gl_error_string (error));
        }
    }
}
Exemple #8
0
XCamReturn
GLBuffer::bind_buffer_range (uint32_t index, uint32_t offset, uint32_t size)
{
    XCamReturn ret = bind ();
    XCAM_FAIL_RETURN (
        ERROR, xcam_ret_is_ok (ret), ret,
        "GL bind buffer failed, buf_id:%d", _buf_id);

    glBindBufferRange (_target, index, _buf_id, offset, size);
    GLenum error = gl_error ();
    XCAM_FAIL_RETURN (
        ERROR, error == GL_NO_ERROR, XCAM_RETURN_ERROR_GLES,
        "GL bind buffer range failed. buf_id:%d failed, idx:%d, error flag: %s",
        _buf_id, index, gl_error_string (error));

    return XCAM_RETURN_NO_ERROR;
}
Exemple #9
0
XCamReturn
GLBuffer::unmap ()
{
    if (!_mapped_range.is_mapped ())
        return XCAM_RETURN_ERROR_ORDER;

    XCamReturn ret = bind ();
    XCAM_FAIL_RETURN (
        ERROR, xcam_ret_is_ok (ret), ret,
        "GL bind buffer failed, buf_id:%d", _buf_id);

    XCAM_FAIL_RETURN (
        ERROR, glUnmapBuffer (_target), XCAM_RETURN_ERROR_GLES,
        "GL buffer unmap buf:%d failed, error flag: %s",
        _buf_id, gl_error_string (gl_error ()));

    _mapped_range.clear ();

    return XCAM_RETURN_NO_ERROR;
}
Exemple #10
0
static
void gl_call(const char *func, uint32_t line, const char *glfunc)
{
   GLenum error;
   if ((error = gl.api.glGetError()) == GL_NO_ERROR)
      return;

   wlc_log(WLC_LOG_ERROR, "gles2: function %s at line %u: %s == %s", func, line, glfunc, gl_error_string(error));
}