restructure GLES 3.0 adaption defines

pull/3471/head
kallaballa 2 years ago
parent b35f831581
commit 2d1d023917
  1. 32
      modules/v4d/CMakeLists.txt
  2. 8
      modules/v4d/include/opencv2/v4d/dialog.hpp
  3. 12
      modules/v4d/include/opencv2/v4d/nvg.hpp
  4. 10
      modules/v4d/include/opencv2/v4d/v4d.hpp
  5. 12
      modules/v4d/samples/shader/shader-demo.cpp
  6. 6
      modules/v4d/samples/tetra/tetra-demo.cpp
  7. 4
      modules/v4d/samples/video/video-demo.cpp
  8. 6
      modules/v4d/src/detail/clvacontext.hpp
  9. 4
      modules/v4d/src/detail/framebuffercontext.cpp
  10. 19
      modules/v4d/src/detail/framebuffercontext.hpp
  11. 4
      modules/v4d/src/detail/nanovgcontext.cpp
  12. 16
      modules/v4d/src/detail/nanovgcontext.hpp
  13. 5
      modules/v4d/src/dialog.cpp
  14. 2
      modules/v4d/src/v4d.cpp

@ -14,6 +14,9 @@ if (${idx} LESS 0)
endif()
set(CMAKE_CXX_FLAGS "${CMAKE_LD_FLAGS} -L../../lib")
OCV_OPTION(OPENCV_V4D_ENABLE_ES3 "Enable OpenGL ES 3.0 backend for V4D" OFF
VERIFY HAVE_OPENGL)
find_package(Git QUIET)
if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../.git")
# Update submodules as needed
@ -40,19 +43,20 @@ ocv_glob_module_sources()
ocv_module_include_directories()
ocv_create_module()
ocv_add_samples(opencv_face opencv_tracking opencv_objdetect opencv_stitching opencv_optflow opencv_imgcodecs opencv_features2d opencv_dnn)
target_compile_features(example_v4d_display_image PRIVATE cxx_std_20)
target_compile_features(example_v4d_custom_source_and_sink PRIVATE cxx_std_20)
target_compile_features(example_v4d_display_image PRIVATE cxx_std_20)
target_compile_features(example_v4d_display_image_fb PRIVATE cxx_std_20)
target_compile_features(example_v4d_font_rendering PRIVATE cxx_std_20)
target_compile_features(example_v4d_font_with_gui PRIVATE cxx_std_20)
target_link_libraries(example_v4d_font_with_gui PRIVATE nanogui)
target_compile_features(example_v4d_render_opengl PRIVATE cxx_std_20)
target_link_libraries(example_v4d_render_opengl PRIVATE GL)
target_compile_features(example_v4d_vector_graphics_and_fb PRIVATE cxx_std_20)
target_compile_features(example_v4d_vector_graphics PRIVATE cxx_std_20)
target_compile_features(example_v4d_video_editing PRIVATE cxx_std_20)
if(BUILD_EXAMPLES)
target_compile_features(example_v4d_display_image PRIVATE cxx_std_20)
target_compile_features(example_v4d_custom_source_and_sink PRIVATE cxx_std_20)
target_compile_features(example_v4d_display_image PRIVATE cxx_std_20)
target_compile_features(example_v4d_display_image_fb PRIVATE cxx_std_20)
target_compile_features(example_v4d_font_rendering PRIVATE cxx_std_20)
target_compile_features(example_v4d_font_with_gui PRIVATE cxx_std_20)
target_link_libraries(example_v4d_font_with_gui PRIVATE nanogui)
target_compile_features(example_v4d_render_opengl PRIVATE cxx_std_20)
target_link_libraries(example_v4d_render_opengl PRIVATE GL)
target_compile_features(example_v4d_vector_graphics_and_fb PRIVATE cxx_std_20)
target_compile_features(example_v4d_vector_graphics PRIVATE cxx_std_20)
target_compile_features(example_v4d_video_editing PRIVATE cxx_std_20)
endif()
set(NANOGUI_BUILD_SHARED ON)
set(NANOGUI_BUILD_PYTHON OFF)
@ -61,7 +65,7 @@ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third/nanogui)
add_library(nanovg "third/nanogui/ext/nanovg/src/nanovg.c")
target_compile_features(opencv_v4d PRIVATE cxx_std_20)
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wunused-parameter -Wdeprecated-enum-enum-conversion)
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wunused-parameter -Wdeprecated-enum-enum-conversion -Wformat-truncation)
ocv_target_link_libraries(${the_module} ${GLEW_LIBRARIES} OpenCL -lnanovg -lnanogui -lGL)

@ -6,15 +6,9 @@
#ifndef SRC_OPENCV_V4D_DIALOG_HPP_
#define SRC_OPENCV_V4D_DIALOG_HPP_
#ifdef __EMSCRIPTEN__
#define V4D_USE_ES3 1
#define OPENCV_V4D_USE_ES3 1
#endif
#ifndef V4D_USE_ES3
#define NANOGUI_USE_OPENGL
#else
#define NANOGUI_USE_GLES
#define NANOGUI_GLES_VERSION 3
#endif
#include <nanogui/nanogui.h>
#include <opencv2/core/cvdef.h>
#include <opencv2/core/mat.hpp>

@ -7,11 +7,15 @@
#define SRC_OPENCV_V4D_NVG_HPP_
#include "v4d.hpp"
#ifndef __EMSCRIPTEN__
#define NANOGUI_USE_OPENGL
#ifndef OPENCV_V4D_USE_ES3
# ifndef NANOGUI_USE_OPENGL
# define NANOGUI_USE_OPENGL
# endif
#else
#define NANOGUI_USE_GLES
#define NANOGUI_GLES_VERSION 3
# ifndef NANOGUI_USE_GLES
# define NANOGUI_USE_GLES
# define NANOGUI_GLES_VERSION 3
# endif
#endif
#include <nanogui/opengl.h>

@ -21,18 +21,12 @@
#include "cxxpool.hpp"
#ifdef __EMSCRIPTEN__
#define V4D_USE_ES3 1
#define OPENCV_V4D_USE_ES3 1
#include <emscripten.h>
#endif
#ifndef V4D_USE_ES3
#define NANOGUI_USE_OPENGL
#else
#define NANOGUI_USE_GLES
#define NANOGUI_GLES_VERSION 3
#endif
#include <nanogui/nanogui.h>
#ifndef V4D_USE_ES3
#ifndef OPENCV_V4D_USE_ES3
#include <GL/glew.h>
#else
#include <GLES3/gl3.h>

@ -44,7 +44,7 @@ GLint zoom_hdl;
/** shader and program handle **/
GLuint shader_program_hdl;
#ifndef V4D_USE_ES3
#ifndef OPENCV_V4D_USE_ES3
//vertex array
GLuint VAO;
#endif
@ -71,7 +71,7 @@ unsigned int indices[] =
void load_buffer_data(){
#ifndef V4D_USE_ES3
#ifndef OPENCV_V4D_USE_ES3
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);
#endif
@ -89,7 +89,7 @@ void load_buffer_data(){
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
#ifndef V4D_USE_ES3
#ifndef OPENCV_V4D_USE_ES3
glBindVertexArray(0);
#endif
}
@ -141,7 +141,7 @@ GLuint init_shader(const char* vShader, const char* fShader, const char* outputA
glAttachShader( program, shader );
}
#ifndef V4D_USE_ES3
#ifndef OPENCV_V4D_USE_ES3
/* Link output */
glBindFragDataLocation(program, 0, outputAttributeName);
#endif
@ -170,7 +170,7 @@ GLuint init_shader(const char* vShader, const char* fShader, const char* outputA
//mandelbrot shader code adapted from my own project: https://github.com/kallaballa/FractalDive#after
void load_shader(){
#ifndef V4D_USE_ES3
#ifndef OPENCV_V4D_USE_ES3
const string shaderVersion = "330";
#else
const string shaderVersion = "300 es";
@ -293,7 +293,7 @@ void render_scene(const cv::Size& sz) {
glUniform1f(zoom_hdl, zoom);
}
#ifndef V4D_USE_ES3
#ifndef OPENCV_V4D_USE_ES3
glBindVertexArray(VAO);
#endif
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

@ -8,7 +8,7 @@
constexpr long unsigned int WIDTH = 1920;
constexpr long unsigned int HEIGHT = 1080;
constexpr double FPS = 60;
constexpr bool OFFSCREEN = false;
constexpr bool OFFSCREEN = true;
constexpr const char* OUTPUT_FILENAME = "tetra-demo.mkv";
constexpr unsigned long DIAG = hypot(double(WIDTH), double(HEIGHT));
@ -20,7 +20,7 @@ using std::endl;
static cv::Ptr<cv::viz::V4D> v4d = cv::viz::V4D::make(cv::Size(WIDTH, HEIGHT), cv::Size(WIDTH, HEIGHT), OFFSCREEN, "Tetra Demo");
void init_scene(const cv::Size& sz) {
#ifndef V4D_USE_ES3
#ifndef OPENCV_V4D_USE_ES3
//Initialize the OpenGL scene
glViewport(0, 0, sz.width, sz.height);
glColor3f(1.0, 1.0, 1.0);
@ -41,7 +41,7 @@ void init_scene(const cv::Size& sz) {
}
void render_scene(const cv::Size& sz) {
#ifndef V4D_USE_ES3
#ifndef OPENCV_V4D_USE_ES3
//Render a tetrahedron using immediate mode because the code is more concise for a demo
glViewport(0, 0, sz.width, sz.height);
glRotatef(1, 0, 1, 0);

@ -21,7 +21,7 @@ using std::string;
static cv::Ptr<cv::viz::V4D> v4d = cv::viz::V4D::make(cv::Size(WIDTH, HEIGHT), cv::Size(WIDTH, HEIGHT), OFFSCREEN, "Video Demo");
void init_scene(const cv::Size& sz) {
#ifndef V4D_USE_ES3
#ifndef OPENCV_V4D_USE_ES3
//Initialize the OpenGL scene
glViewport(0, 0, sz.width, sz.height);
glColor3f(1.0, 1.0, 1.0);
@ -42,7 +42,7 @@ void init_scene(const cv::Size& sz) {
}
void render_scene(const cv::Size& sz) {
#ifndef V4D_USE_ES3
#ifndef OPENCV_V4D_USE_ES3
//Render a tetrahedron using immediate mode because the code is more concise for a demo
glViewport(0, 0, sz.width, sz.height);
glRotatef(1, 0, 1, 0);

@ -3,8 +3,8 @@
// of this distribution and at http://opencv.org/license.html.
// Copyright Amir Hassan (kallaballa) <amir@viel-zu.org>
#ifndef SRC_COMMON_CLVACONTEXT_HPP_
#define SRC_COMMON_CLVACONTEXT_HPP_
#ifndef SRC_OPENCV_CLVACONTEXT_HPP_
#define SRC_OPENCV_CLVACONTEXT_HPP_
#include "framebuffercontext.hpp"
@ -59,4 +59,4 @@ public:
}
}
#endif /* SRC_COMMON_CLVACONTEXT_HPP_ */
#endif /* SRC_OPENCV_CLVACONTEXT_HPP_ */

@ -8,7 +8,7 @@
#include "opencv2/v4d/util.hpp"
#include "opencv2/v4d/v4d.hpp"
#ifndef V4D_USE_ES3
#ifndef OPENCV_V4D_USE_ES3
#include <GL/glew.h>
#endif
@ -19,7 +19,7 @@ namespace detail {
//FIXME use cv::ogl
FrameBufferContext::FrameBufferContext(const cv::Size& frameBufferSize) :
frameBufferSize_(frameBufferSize) {
#ifndef V4D_USE_ES3
#ifndef OPENCV_V4D_USE_ES3
glewExperimental = true;
glewInit();
try {

@ -3,22 +3,27 @@
// of this distribution and at http://opencv.org/license.html.
// Copyright Amir Hassan (kallaballa) <amir@viel-zu.org>
#ifndef SRC_COMMON_CLGLCONTEXT_HPP_
#define SRC_COMMON_CLGLCONTEXT_HPP_
#ifndef SRC_OPENCV_FRAMEBUFFERCONTEXT_HPP_
#define SRC_OPENCV_FRAMEBUFFERCONTEXT_HPP_
#ifndef __EMSCRIPTEN__
#include <CL/cl.h>
#include <CL/cl_gl.h>
# ifndef CL_TARGET_OPENCL_VERSION
# define CL_TARGET_OPENCL_VERSION 120
# endif
# include <CL/cl.h>
# include <CL/cl_gl.h>
#else
#define V4D_USE_ES3 1
# define OPENCV_V4D_USE_ES3 1
#endif
#ifndef V4D_USE_ES3
#ifndef OPENCV_V4D_USE_ES3
# include <GL/glew.h>
# define GLFW_INCLUDE_GLCOREARB
#else
# define GLFW_INCLUDE_ES3
# define GLFW_INCLUDE_GLEXT
#endif
#include <GLFW/glfw3.h>
#include <opencv2/core/ocl.hpp>
#include <opencv2/core/opengl.hpp>
@ -184,4 +189,4 @@ protected:
}
}
#endif /* SRC_COMMON_CLGLCONTEXT_HPP_ */
#endif /* SRC_OPENCV_FRAMEBUFFERCONTEXT_HPP_ */

@ -27,7 +27,7 @@ void NanoVGContext::render(std::function<void(const cv::Size&)> fn) {
}
void push() {
#ifndef V4D_USE_ES3
#ifndef OPENCV_V4D_USE_ES3
GL_CHECK(glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS));
GL_CHECK(glPushAttrib(GL_ALL_ATTRIB_BITS));
GL_CHECK(glMatrixMode(GL_MODELVIEW));
@ -40,7 +40,7 @@ void push() {
}
void pop() {
#ifndef V4D_USE_ES3
#ifndef OPENCV_V4D_USE_ES3
GL_CHECK(glMatrixMode(GL_TEXTURE));
GL_CHECK(glPopMatrix());
GL_CHECK(glMatrixMode(GL_PROJECTION));

@ -3,20 +3,18 @@
// of this distribution and at http://opencv.org/license.html.
// Copyright Amir Hassan (kallaballa) <amir@viel-zu.org>
#ifndef SRC_COMMON_NANOVGCONTEXT_HPP_
#define SRC_COMMON_NANOVGCONTEXT_HPP_
#ifdef __EMSCRIPTEN__
#define V4D_USE_ES3 1
#endif
#ifndef SRC_OPENCV_NANOVGCONTEXT_HPP_
#define SRC_OPENCV_NANOVGCONTEXT_HPP_
#ifndef V4D_USE_ES3
#include "framebuffercontext.hpp"
#include <nanogui/nanogui.h>
#ifndef OPENCV_V4D_USE_ES3
#define NANOGUI_USE_OPENGL
#else
#define NANOGUI_USE_GLES
#define NANOGUI_GLES_VERSION 3
#endif
#include "framebuffercontext.hpp"
#include <nanogui/nanogui.h>
#include <nanogui/opengl.h>
#include "opencv2/v4d/util.hpp"
#include "opencv2/v4d/nvg.hpp"
@ -82,4 +80,4 @@ private:
}
}
#endif /* SRC_COMMON_NANOVGCONTEXT_HPP_ */
#endif /* SRC_OPENCV_NANOVGCONTEXT_HPP_ */

@ -5,10 +5,7 @@
#include "opencv2/v4d/dialog.hpp"
#include <nanogui/layout.h>
#ifdef __EMSCRIPTEN__
#define V4D_USE_ES3 1
#endif
#ifndef V4D_USE_ES3
#ifndef OPENCV_V4D_USE_ES3
# include <GL/glew.h>
# define GLFW_INCLUDE_GLCOREARB
#else

@ -124,7 +124,7 @@ bool V4D::initializeWindowing() {
glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint (GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint (GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#elif defined(V4D_USE_ES3)
#elif defined(OPENCV_V4D_USE_ES3)
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
glfwWindowHint(GLFW_CONTEXT_CREATION_API, GLFW_EGL_CONTEXT_API);

Loading…
Cancel
Save