pull/3471/head
kallaballa 2 years ago
parent da3d2a2015
commit fa9c9a25e6
  1. 106
      src/common/subsystems.hpp

@ -48,7 +48,7 @@ void print_fps() {
++cnt;
}
void glCheckError(const std::filesystem::path &file, unsigned int line, const char *expression) {
void gl_check_error(const std::filesystem::path &file, unsigned int line, const char *expression) {
GLint errorCode = glGetError();
if (errorCode != GL_NO_ERROR) {
@ -56,11 +56,11 @@ void glCheckError(const std::filesystem::path &file, unsigned int line, const ch
assert(false);
}
}
#define glCheck(expr) \
#define GL_CHECK(expr) \
expr; \
kb::glCheckError(__FILE__, __LINE__, #expr);
kb::gl_check_error(__FILE__, __LINE__, #expr);
void eglCheckError(const std::filesystem::path &file, unsigned int line, const char *expression) {
void egl_check_error(const std::filesystem::path &file, unsigned int line, const char *expression) {
EGLint errorCode = eglGetError();
if (errorCode != EGL_SUCCESS) {
@ -68,9 +68,9 @@ void eglCheckError(const std::filesystem::path &file, unsigned int line, const c
assert(false);
}
}
#define eglCheck(expr) \
#define EGL_CHECK(expr) \
expr; \
kb::eglCheckError(__FILE__, __LINE__, #expr);
kb::egl_check_error(__FILE__, __LINE__, #expr);
namespace va {
//code in the kb::va namespace adapted from https://github.com/opencv/opencv/blob/4.x/samples/va_intel/display.cpp.inc
@ -499,19 +499,19 @@ void debugMessageCallback(GLenum source, GLenum type, GLuint id, GLenum severity
}
EGLBoolean swap_buffers() {
return eglCheck(eglSwapBuffers(display, surface));
return EGL_CHECK(eglSwapBuffers(display, surface));
}
void init(bool debug = false) {
bool offscreen = !x11::is_initialized();
eglCheck(eglBindAPI(EGL_OPENGL_API));
EGL_CHECK(eglBindAPI(EGL_OPENGL_API));
if (offscreen) {
eglCheck(display = eglGetDisplay(EGL_DEFAULT_DISPLAY));
EGL_CHECK(display = eglGetDisplay(EGL_DEFAULT_DISPLAY));
} else {
eglCheck(display = eglGetDisplay(x11::get_x11_display()));
EGL_CHECK(display = eglGetDisplay(x11::get_x11_display()));
}
eglCheck(eglInitialize(display, nullptr, nullptr));
EGL_CHECK(eglInitialize(display, nullptr, nullptr));
const EGLint egl_config_constraints[] = {
EGL_STENCIL_SIZE, static_cast<EGLint>(8),
@ -531,20 +531,20 @@ void init(bool debug = false) {
EGLint configCount;
EGLConfig configs[1];
eglCheck(eglChooseConfig(display, egl_config_constraints, configs, 1, &configCount));
EGL_CHECK(eglChooseConfig(display, egl_config_constraints, configs, 1, &configCount));
EGLint stencilSize;
eglGetConfigAttrib(display, configs[0],
EGL_STENCIL_SIZE, &stencilSize);
if (!offscreen) {
eglCheck(surface = eglCreateWindowSurface(display, configs[0], x11::get_x11_window(), nullptr));
EGL_CHECK(surface = eglCreateWindowSurface(display, configs[0], x11::get_x11_window(), nullptr));
} else {
EGLint pbuffer_attrib_list[] = {
EGL_WIDTH, WIDTH,
EGL_HEIGHT, HEIGHT,
EGL_NONE };
eglCheck(surface = eglCreatePbufferSurface(display, configs[0], pbuffer_attrib_list));
EGL_CHECK(surface = eglCreatePbufferSurface(display, configs[0], pbuffer_attrib_list));
}
const EGLint contextVersion[] = {
@ -553,15 +553,15 @@ void init(bool debug = false) {
EGL_CONTEXT_OPENGL_PROFILE_MASK, EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT,
EGL_CONTEXT_OPENGL_DEBUG, debug ? EGL_TRUE : EGL_FALSE,
EGL_NONE };
eglCheck(context = eglCreateContext(display, configs[0], EGL_NO_CONTEXT, contextVersion));
eglCheck(eglMakeCurrent(display, surface, surface, context));
eglCheck(eglSwapInterval(display, 1));
EGL_CHECK(context = eglCreateContext(display, configs[0], EGL_NO_CONTEXT, contextVersion));
EGL_CHECK(eglMakeCurrent(display, surface, surface, context));
EGL_CHECK(eglSwapInterval(display, 1));
if (debug) {
glCheck(glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS));
GL_CHECK(glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS));
auto glDebugMessageCallback = (void (*)(void*, void*)) eglGetProcAddress("glDebugMessageCallback");
assert(glDebugMessageCallback);
glCheck(glDebugMessageCallback(reinterpret_cast<void*>(debugMessageCallback), nullptr));
GL_CHECK(glDebugMessageCallback(reinterpret_cast<void*>(debugMessageCallback), nullptr));
}
}
@ -581,12 +581,12 @@ void bind() {
}
void begin() {
glCheck(glBindFramebuffer(GL_FRAMEBUFFER, kb::gl::frame_buf));
GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, kb::gl::frame_buf));
}
void end() {
glCheck(glFlush());
glCheck(glFinish());
GL_CHECK(glFlush());
GL_CHECK(glFinish());
}
void init() {
@ -596,19 +596,19 @@ void init() {
cv::ogl::ocl::initializeContextFromGL();
frame_buf = 0;
glCheck(glGenFramebuffers(1, &frame_buf));
glCheck(glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frame_buf));
GL_CHECK(glGenFramebuffers(1, &frame_buf));
GL_CHECK(glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frame_buf));
GLuint sb;
glGenRenderbuffers(1, &sb);
glBindRenderbuffer(GL_RENDERBUFFER, sb);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, WIDTH, HEIGHT);
glCheck(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, sb));
GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, sb));
frame_buf_tex = new cv::ogl::Texture2D(cv::Size(WIDTH, HEIGHT), cv::ogl::Texture2D::RGBA, false);
frame_buf_tex->bind();
glCheck(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, frame_buf_tex->texId(), 0));
GL_CHECK(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, frame_buf_tex->texId(), 0));
assert(glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE);
@ -624,11 +624,11 @@ std::string get_info() {
}
void acquire_from_gl(cv::UMat &m) {
glCheck(cv::ogl::convertFromGLTexture2D(*gl::frame_buf_tex, m));
GL_CHECK(cv::ogl::convertFromGLTexture2D(*gl::frame_buf_tex, m));
}
void release_to_gl(cv::UMat &m) {
glCheck(cv::ogl::convertToGLTexture2D(m, *gl::frame_buf_tex));
GL_CHECK(cv::ogl::convertToGLTexture2D(m, *gl::frame_buf_tex));
}
void blit_frame_buffer_to_screen() {
@ -661,30 +661,30 @@ namespace nvg {
NVGcontext *vg;
void clear() {
glCheck(glClearColor(0.0f, 0.0f, 0.0f, 1.0f));
glCheck(glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT));
GL_CHECK(glClearColor(0.0f, 0.0f, 0.0f, 1.0f));
GL_CHECK(glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT));
}
void push() {
glCheck(glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS));
glCheck(glPushAttrib(GL_ALL_ATTRIB_BITS));
glCheck(glMatrixMode(GL_MODELVIEW));
glCheck(glPushMatrix());
glCheck(glMatrixMode(GL_PROJECTION));
glCheck(glPushMatrix());
glCheck(glMatrixMode(GL_TEXTURE));
glCheck(glPushMatrix());
GL_CHECK(glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS));
GL_CHECK(glPushAttrib(GL_ALL_ATTRIB_BITS));
GL_CHECK(glMatrixMode(GL_MODELVIEW));
GL_CHECK(glPushMatrix());
GL_CHECK(glMatrixMode(GL_PROJECTION));
GL_CHECK(glPushMatrix());
GL_CHECK(glMatrixMode(GL_TEXTURE));
GL_CHECK(glPushMatrix());
}
void pop() {
glCheck(glMatrixMode(GL_TEXTURE));
glCheck(glPopMatrix());
glCheck(glMatrixMode(GL_PROJECTION));
glCheck(glPopMatrix());
glCheck(glMatrixMode(GL_MODELVIEW));
glCheck(glPopMatrix());
glCheck(glPopClientAttrib());
glCheck(glPopAttrib());
GL_CHECK(glMatrixMode(GL_TEXTURE));
GL_CHECK(glPopMatrix());
GL_CHECK(glMatrixMode(GL_PROJECTION));
GL_CHECK(glPopMatrix());
GL_CHECK(glMatrixMode(GL_MODELVIEW));
GL_CHECK(glPopMatrix());
GL_CHECK(glPopClientAttrib());
GL_CHECK(glPopAttrib());
}
void begin() {
@ -699,9 +699,9 @@ void begin() {
h = ws.second;
}
glCheck(glBindFramebuffer(GL_DRAW_FRAMEBUFFER, kb::gl::frame_buf));
GL_CHECK(glBindFramebuffer(GL_DRAW_FRAMEBUFFER, kb::gl::frame_buf));
nvgSave(vg);
glCheck(glViewport(0, HEIGHT - h, w, h));
GL_CHECK(glViewport(0, HEIGHT - h, w, h));
nvgBeginFrame(vg, w, h, std::fmax(WIDTH/w, HEIGHT/h));
}
@ -715,11 +715,11 @@ void end() {
void init(bool debug = false) {
push();
glCheck(glViewport(0, 0, WIDTH, HEIGHT));
glCheck(glEnable(GL_STENCIL_TEST));
glCheck(glStencilMask(~0));
glCheck(glClearColor(0.0f, 0.0f, 0.0f, 1.0f));
glCheck(glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT));
GL_CHECK(glViewport(0, 0, WIDTH, HEIGHT));
GL_CHECK(glEnable(GL_STENCIL_TEST));
GL_CHECK(glStencilMask(~0));
GL_CHECK(glClearColor(0.0f, 0.0f, 0.0f, 1.0f));
GL_CHECK(glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT));
vg = nvgCreateGL3(NVG_STENCIL_STROKES | debug ? NVG_DEBUG : 0);
if (vg == NULL) {

Loading…
Cancel
Save