mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 15:09:19 +02:00
create single VSDev for lifetime, destroy application modes
This commit is contained in:
@@ -338,6 +338,9 @@ eu07_application::release_python_lock() {
|
|||||||
|
|
||||||
void
|
void
|
||||||
eu07_application::exit() {
|
eu07_application::exit() {
|
||||||
|
for (auto &mode : m_modes)
|
||||||
|
mode.reset();
|
||||||
|
|
||||||
m_network.reset();
|
m_network.reset();
|
||||||
|
|
||||||
SafeDelete( simulation::Train );
|
SafeDelete( simulation::Train );
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#include "widgets/cameraview.h"
|
#include "widgets/cameraview.h"
|
||||||
#include "extras/VS_Dev.h"
|
|
||||||
#include "stb/stb_image.h"
|
#include "stb/stb_image.h"
|
||||||
#include "Globals.h"
|
#include "Globals.h"
|
||||||
#include "Logs.h"
|
#include "Logs.h"
|
||||||
@@ -14,6 +13,20 @@ void cameraview_window_callback(ImGuiSizeCallbackData *data) {
|
|||||||
data->DesiredSize.y = data->DesiredSize.x * 9.0f / 16.0f;
|
data->DesiredSize.y = data->DesiredSize.x * 9.0f / 16.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ui::cameraview_panel::~cameraview_panel() {
|
||||||
|
if (!exit_thread) {
|
||||||
|
exit_thread = true;
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(mutex);
|
||||||
|
stbi_image_free(image_ptr);
|
||||||
|
image_ptr = nullptr;
|
||||||
|
}
|
||||||
|
cv.notify_all();
|
||||||
|
}
|
||||||
|
if (workthread.joinable())
|
||||||
|
workthread.join();
|
||||||
|
}
|
||||||
|
|
||||||
void ui::cameraview_panel::render()
|
void ui::cameraview_panel::render()
|
||||||
{
|
{
|
||||||
if (!is_open && !exit_thread) {
|
if (!is_open && !exit_thread) {
|
||||||
@@ -81,11 +94,12 @@ void ui::cameraview_panel::render_contents()
|
|||||||
|
|
||||||
void ui::cameraview_panel::workthread_func()
|
void ui::cameraview_panel::workthread_func()
|
||||||
{
|
{
|
||||||
VSDev vsdev;
|
if (!device)
|
||||||
|
device = std::make_unique<VSDev>();
|
||||||
|
|
||||||
while (!exit_thread) {
|
while (!exit_thread) {
|
||||||
uint8_t *buffer = nullptr;
|
uint8_t *buffer = nullptr;
|
||||||
size_t len = vsdev.GetFrameFromStream((char**)&buffer);
|
size_t len = device->GetFrameFromStream((char**)&buffer);
|
||||||
|
|
||||||
if (buffer) {
|
if (buffer) {
|
||||||
int w, h;
|
int w, h;
|
||||||
@@ -93,7 +107,7 @@ void ui::cameraview_panel::workthread_func()
|
|||||||
if (!image)
|
if (!image)
|
||||||
ErrorLog(std::string(stbi_failure_reason()));
|
ErrorLog(std::string(stbi_failure_reason()));
|
||||||
|
|
||||||
vsdev.FreeFrameBuffer((char*)buffer);
|
device->FreeFrameBuffer((char*)buffer);
|
||||||
|
|
||||||
std::unique_lock<std::mutex> lock(mutex);
|
std::unique_lock<std::mutex> lock(mutex);
|
||||||
if (image_ptr)
|
if (image_ptr)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "uilayer.h"
|
#include "uilayer.h"
|
||||||
#include "translation.h"
|
#include "translation.h"
|
||||||
|
#include "extras/VS_Dev.h"
|
||||||
|
|
||||||
namespace ui
|
namespace ui
|
||||||
{
|
{
|
||||||
@@ -17,10 +18,13 @@ class cameraview_panel : public ui_panel
|
|||||||
|
|
||||||
std::optional<opengl_texture> texture;
|
std::optional<opengl_texture> texture;
|
||||||
|
|
||||||
|
std::unique_ptr<VSDev> device;
|
||||||
|
|
||||||
void workthread_func();
|
void workthread_func();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
cameraview_panel();
|
cameraview_panel();
|
||||||
|
~cameraview_panel();
|
||||||
|
|
||||||
void render() override;
|
void render() override;
|
||||||
void render_contents() override;
|
void render_contents() override;
|
||||||
|
|||||||
Reference in New Issue
Block a user