Version initiale du logiciel. Développement commencé le 06/01/2026, en reprenant certaines parties/idées de miniDart, que j'ai écrit quelques années plus tôt
Cette révision appartient à :
137
engine.cxx
Fichier normal
137
engine.cxx
Fichier normal
@@ -0,0 +1,137 @@
|
||||
/*
|
||||
* engine.cxx, now included in digital modulations, was initialy a file from miniDart project
|
||||
* Author : Eric Bachard / lundi 3 octobre 2016, 14:35:03 (UTC+0200)
|
||||
* This file is under GPL v2 License
|
||||
* See : http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*/
|
||||
|
||||
|
||||
#include "SDL3/SDL.h" // We use SDL3
|
||||
|
||||
#include "imgui_impl_sdl3.h"
|
||||
#include "imgui_impl_opengl3.h"
|
||||
#include "engine.h" // class Engine
|
||||
#include "application.h" // WINDOW_WIDTH, WINDOW_HEIGHT,
|
||||
|
||||
#include <GL/gl.h> // OpenGL
|
||||
|
||||
#include "digital_modulation_fr.hpp"
|
||||
|
||||
// TODO later : kept for good reasons (the fact is we currently do not cross-compile for MS Windows)
|
||||
#ifndef NATIVE_BUILD
|
||||
#define NATIVE_BUILD
|
||||
#endif
|
||||
|
||||
using std::cout;
|
||||
using std::endl;
|
||||
|
||||
void Engine::sdl_application_abort(const char * msg)
|
||||
{
|
||||
std::cout << SDL_GetError() << std::endl;
|
||||
SDL_Quit();
|
||||
exit (-1);
|
||||
}
|
||||
|
||||
Engine::Engine()
|
||||
{
|
||||
int anErr = init_SDL();
|
||||
|
||||
if (anErr != 0)
|
||||
{
|
||||
std::cerr << "Cannot initialize SDL or OpenGL. Exiting" << std::endl;
|
||||
SDL_Quit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Engine::~Engine()
|
||||
{
|
||||
SDL_GL_DestroyContext(getGL_Context());
|
||||
SDL_DestroyWindow(getWindow());
|
||||
window = nullptr;
|
||||
}
|
||||
|
||||
int Engine::init_SDL()
|
||||
{
|
||||
std::cout << "\n";
|
||||
SDL_Log("AVX %s\n", SDL_HasAVX()? "detected" : "not detected");
|
||||
SDL_Log("AVX2 %s\n", SDL_HasAVX2()? "detected" : "not detected");
|
||||
SDL_Log("AVX512F %s\n", SDL_HasAVX512F()? "detected" : "not detected");
|
||||
std::cout << "\n";
|
||||
|
||||
// ericb 2022 08 19
|
||||
// source :
|
||||
// https://answers.opencv.org/question/120699/can-opencv-310-be-set-to-capture-an-rtsp-stream-over-udp/
|
||||
// setenv("OPENCV_FFMPEG_CAPTURE_OPTIONS", "rtsp_transport;udp", 1);
|
||||
|
||||
#ifdef NATIVE_BUILD
|
||||
// https://github.com/libsdl-org/SDL/issues/2917
|
||||
putenv((char *)"SDL_PULSEAUDIO_INCLUDE_MONITORS=true");
|
||||
#endif
|
||||
// https://www.gog.com/forum/thimbleweed_park/linux_unable_to_init_sdl_mixer_alsa_couldnt_open_audio_device_no_such_device
|
||||
// https://wiki.libsdl.org/FAQUsingSDL
|
||||
#ifndef NATIVE_BUILD
|
||||
SDL_setenv("SDL_AUDIODRIVER", "DirectSound", true);
|
||||
putenv((char *)"SDL_AUDIODRIVER=DirectSound");
|
||||
#else
|
||||
// SDL_setenv("SDL_AUDIODRIVER", "alsa", true);
|
||||
putenv((char *)"SDL_AUDIODRIVER=alsa");
|
||||
// putenv((char *)"SDL_AUDIODEV=pulse");
|
||||
#endif
|
||||
|
||||
// --------------------- SDL INIT ---------------------
|
||||
// about issues between OpenGL 3.3. and OpenGL 3.0 (only Linux concerned)
|
||||
// https://discourse.libsdl.org/t/confused-about-what-opengl-context-is-being-used-with-sdl/22860
|
||||
// avoid using compatiblity profile
|
||||
|
||||
if (!SDL_Init(SDL_INIT_VIDEO))
|
||||
{
|
||||
fprintf(stdout, "SDL init error: %s\n", SDL_GetError());
|
||||
return -1;
|
||||
}
|
||||
//const char* glsl_version = "#version 130";
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
|
||||
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
||||
|
||||
setWindow((SDL_Window*)SDL_CreateWindow( MAIN_SDL3_WINDOW_NAME,
|
||||
DEFAULT_SDL_WINDOW_WIDTH,
|
||||
DEFAULT_SDL_WINDOW_HEIGHT,
|
||||
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE
|
||||
));
|
||||
|
||||
// check whether the SDL3 window exists
|
||||
if (getWindow() == nullptr)
|
||||
sdl_application_abort("Problem creating the SDL window.\n");
|
||||
else
|
||||
std::cout << "SDL3 Window created " << "\n";
|
||||
|
||||
gl_context = SDL_GL_CreateContext(getWindow());
|
||||
|
||||
std::cout << "GL_Context : " << getGL_Context() << "\n";
|
||||
|
||||
if (getGL_Context() == nullptr)
|
||||
sdl_application_abort("Problem creating GL context.\n");
|
||||
else
|
||||
std::cout << "GL Context created \n" << "\n";
|
||||
|
||||
SDL_GL_MakeCurrent(getWindow(), getGL_Context());
|
||||
|
||||
// 1 == enable VSync ; 0 == disable VSync
|
||||
#define USE_VSYNC
|
||||
#ifdef USE_VSYNC
|
||||
SDL_GL_SetSwapInterval(1);
|
||||
#else
|
||||
SDL_GL_SetSwapInterval(0);
|
||||
#endif
|
||||
|
||||
std::cout << "\nImGui version = " << IMGUI_VERSION << "\n\n";
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Référencer dans un nouveau ticket
Bloquer un utilisateur