messing around with OPENGL

opengl
yorick 3 years ago
parent 0443cd4b5f
commit 1952f01247

@ -15,4 +15,5 @@ find_package( OpenCV REQUIRED )
target_link_libraries(cameras ${OpenCV_LIBS})
target_link_libraries(cameras threadweaver)
target_link_libraries(cameras perfcheckers)
MESSAGE(STATUS "Done building cameras")

@ -14,6 +14,7 @@
#include <chrono>
#include <opencv2/opencv.hpp>
#include "../threadweaver/threadweaver.hpp"
#include "../perfcheckers/framerate.hpp"
#define DEBUG_ELAPSED_START std::chrono::steady_clock::time_point bgd = std::chrono::steady_clock::now();
#define DEBUG_ELAPSED_END std::chrono::steady_clock::time_point bge = std::chrono::steady_clock::now();

@ -7,6 +7,7 @@ std::vector<std::mutex*> cameraManager::accessLocks;
void cameraManager::runCaptureForCamera(camera* c, uint index){
while(runCaptureThread){
fcheckManager::fcCam.tickBegin();
if(!c->source->isOpened()){
cout << "camera " << c->path << " is closed, opening..." << endl;
if(!c->source->open(c->path,cv::CAP_ANY)){
@ -23,6 +24,7 @@ void cameraManager::runCaptureForCamera(camera* c, uint index){
} else {
cout << "read error grabbing from camera " << c->path << endl;
}
fcheckManager::fcCam.tickUpdate();
}
}

@ -1,5 +1,6 @@
set(perfcheckers_source_files
framerate.cpp
fcheckManager.cpp
framerate.hpp
)
MESSAGE(STATUS "Building perfcheckers")

@ -0,0 +1,5 @@
#include "framerate.hpp"
framerateChecker fcheckManager::fcUI;
framerateChecker fcheckManager::fcShow;
framerateChecker fcheckManager::fcCam;

@ -1,5 +1,6 @@
#include <ctime>
#include <atomic>
class framerateChecker{
private:
@ -7,9 +8,16 @@ class framerateChecker{
public:
std::time_t tBegin, tEnd;
int tick, fps = 0;
std::atomic<int> tick,fps = 0;
long frameCounter = 0;
void tickBegin();
void tickUpdate();
};
class fcheckManager{
public:
static framerateChecker fcUI;
static framerateChecker fcShow;
static framerateChecker fcCam;
};

Binary file not shown.

@ -3,6 +3,7 @@
//#define DBGMODE
#define DBGCOMM
#define OGLWIN
#ifdef DBGMODE
#define DEBUG_LOG(x) std::cout << "-DEBUG: " << x << std::endl;

@ -19,7 +19,6 @@ add_library(ui ${ui_source_files})
target_link_libraries(ui ${OpenCV_LIBS})
target_link_libraries(ui psvr)
target_link_libraries(ui perfcheckers)
target_link_libraries(ui cameras)
MESSAGE(STATUS "Done building ui")

@ -5,11 +5,11 @@
#include <ctime>
#include <functional>
#include "../perfcheckers/framerate.hpp"
#include "../cameras/_cam.hpp"
#include "../psvr/_psvr.hpp"
#include <opencv2/imgcodecs/imgcodecs.hpp>
#include <opencv2/core.hpp>
#include <opencv2/core/opengl.hpp>
#define DEFAULT_UI_WINDOW_AMOUNT 1 //2 windows, one for each eye
#define DEFAULT_UI_OFFSET_X 1080 //1080
@ -21,6 +21,7 @@ int runtest();
using namespace std;
using namespace cv;
using namespace cv::ogl;
using namespace psvr;
namespace ui {
@ -29,6 +30,7 @@ namespace ui {
public:
UMat drawBuffer;
UMat drawSurface; //Current frame
cv::ogl::Texture2D drawTexture;
int id;
std::string myWindow;
void draw();
@ -39,8 +41,9 @@ namespace ui {
static void drawStartupSequence();
static void drawMenu();
static void runDrawUi();
static UMat OverlayMat; //drawn at each frame
static UMat OsMat; //drawn on certain events
static UMat OverlayMat; //drawn at each frame (screen)
static UMat OsMat; //drawn on certain events (menu)
static cv::ogl::Texture2D OvTexture;
static std::mutex OsMatLock;
private:
static framerateChecker* fpsCounter;

@ -1,12 +1,18 @@
#include "_ui.hpp"
void ui::Ui::draw(){
if(drawSurface.empty())
fcheckManager::fcShow.tickBegin();
if(drawSurface.empty()){
//fcheckManager::fcShow.fps = 0;
return;
}
UiManager::accessLocks.at(this->id)->lock();
drawBuffer = drawSurface;
UiManager::accessLocks.at(this->id)->unlock();
UiManager::accessLocks.at(this->id)->unlock();
//drawTexture = cv::ogl::Texture2D(drawBuffer);
//cv::ogl::convertToGLTexture2D(drawBuffer, drawTexture);
imshow(this->myWindow, this->drawBuffer);
waitKey(17);
waitKey(1);
fcheckManager::fcShow.tickUpdate();
}

@ -1,6 +1,7 @@
#include "_ui.hpp"
UMat ui::UiDrawer::OverlayMat;
UMat ui::UiDrawer::OsMat; //drawn on certain events
cv::ogl::Texture2D OvTexture;
std::mutex ui::UiDrawer::OsMatLock;
framerateChecker* ui::UiDrawer::fpsCounter = new framerateChecker();
@ -11,7 +12,7 @@ framerateChecker* ui::UiDrawer::fpsCounter = new framerateChecker();
namespace ui{
//draws the UI for the left screen of the psvr
void UiDrawer::drawUi(){
fpsCounter->tickBegin();
fcheckManager::fcUI.tickBegin();
UMat UiMat = prepareUiMat(); //prepare black background 960*1080
DEBUG_LOG("prepared UI mat")
cameraManager::accessLocks[0]->lock(); //lock the capture access
@ -43,7 +44,7 @@ namespace ui{
UiManager::accessLocks.at(0)->lock();
UiManager::managedUIs[0]->drawSurface = finished; //write the final image to the psvr UI buffer
UiManager::accessLocks.at(0)->unlock();
fpsCounter->tickUpdate();
fcheckManager::fcUI.tickUpdate();
}
void UiDrawer::drawStartupSequence(){
@ -58,10 +59,18 @@ namespace ui{
return;
}
UMat frame;
#ifdef OGLWIN
cv::ogl::Texture2D frameOGL = Texture2D();
#endif
while(cap.read(frame))
{
frame = OverlayBlackMask(frame, overlay);
imshow(ui::UiManager::managedUIs.at(0)->myWindow, frame);
#ifdef OGLWIN
frameOGL.copyFrom(frame);
cv::imshow(ui::UiManager::managedUIs.at(0)->myWindow, frameOGL);
#else
cv::imshow(ui::UiManager::managedUIs.at(0)->myWindow, frame);
#endif
if(waitKey(30) >= 0) break;
}
cap.release();
@ -81,7 +90,14 @@ namespace ui{
std::string str = iter->first;
cv::putText(MenuMat, str, Point2i(5,stackerIndex+=20), HersheyFonts::FONT_HERSHEY_PLAIN, 1, Scalar(255,255,255), 1, 8, false);
}
//cv::putText(MenuMat, cv::format("Frames per second: %d - %ld", fpsCounter->fps, fpsCounter->frameCounter), Point2i(5,stackerIndex+=20), HersheyFonts::FONT_HERSHEY_PLAIN, 1, Scalar(255,255,255), 1, 8, false);
int uiFps,Drawfps,camFPS = 0;
uiFps = fcheckManager::fcUI.fps;
Drawfps = fcheckManager::fcShow.fps;
camFPS = fcheckManager::fcCam.fps;
cv::putText(MenuMat, cv::format("Eps Ui drawer: %d", uiFps), Point2i(5,stackerIndex+=20), HersheyFonts::FONT_HERSHEY_PLAIN, 1, Scalar(255,255,255), 1, 8, false);
cv::putText(MenuMat, cv::format("Eps imshow: %d", Drawfps), Point2i(5,stackerIndex+=20), HersheyFonts::FONT_HERSHEY_PLAIN, 1, Scalar(255,255,255), 1, 8, false);
cv::putText(MenuMat, cv::format("Eps Camera 0: %d", camFPS), Point2i(5,stackerIndex+=20), HersheyFonts::FONT_HERSHEY_PLAIN, 1, Scalar(255,255,255), 1, 8, false);
cv::rectangle(MenuMat, cv::Rect2i(0,((20*ui::UiController::selectedIndex)+20)+5,wd, 20), Scalar(200,0,0), 3, 8, 0);
OsMatLock.lock();
OsMat = MenuMat;

@ -20,11 +20,19 @@ namespace ui{
Ui* newUI = new Ui();
cout << "creating UI n°" << to_string(i) << endl;
newUI->myWindow = "project- UI"+std::to_string(i);
namedWindow(newUI->myWindow);
#ifdef OGLWIN
DEBUG_LOG("created opengl window")
namedWindow(newUI->myWindow,WINDOW_OPENGL);
#else
DEBUG_LOG("created cpu-based window")
namedWindow(newUI->myWindow);
#endif
moveWindow(newUI->myWindow,DEFAULT_UI_OFFSET_X+i*960,DEFAULT_UI_OFFSET_Y);
resizeWindow(newUI->myWindow,DEFAULT_UI_SIZE_X,DEFAULT_UI_SIZE_Y);
setWindowProperty(newUI->myWindow, cv::WND_PROP_FULLSCREEN, cv::WINDOW_FULLSCREEN);
//setWindowProperty(newUI->myWindow, cv::WND_PROP_FULLSCREEN, cv::WINDOW_FULLSCREEN);
#ifdef OGLWIN
cv::setOpenGlContext(newUI->myWindow);
#endif
cout << "window: " << newUI->myWindow << " created at " << DEFAULT_UI_OFFSET_X+i*960 << " , " << DEFAULT_UI_OFFSET_Y << endl;

Loading…
Cancel
Save