[DEV] continue integration of Web mode ==> some internal bugs
This commit is contained in:
parent
681a46ea70
commit
fe260e377e
@ -27,17 +27,17 @@
|
|||||||
#include <emscripten.h>
|
#include <emscripten.h>
|
||||||
|
|
||||||
bool hasDisplay = false;
|
bool hasDisplay = false;
|
||||||
//#define DEBUG_SDL_EVENT
|
#define DEBUG_GLUT_EVENT
|
||||||
#ifdef DEBUG_SDL_EVENT
|
#ifdef DEBUG_GLUT_EVENT
|
||||||
#define SDL_DEBUG GALE_DEBUG
|
#define GLUT_DEBUG GALE_DEBUG
|
||||||
#define SDL_VERBOSE GALE_VERBOSE
|
#define GLUT_VERBOSE GALE_VERBOSE
|
||||||
#define SDL_INFO GALE_INFO
|
#define GLUT_INFO GALE_INFO
|
||||||
#define SDL_CRITICAL GALE_CRITICAL
|
#define GLUT_CRITICAL GALE_CRITICAL
|
||||||
#else
|
#else
|
||||||
#define SDL_DEBUG GALE_VERBOSE
|
#define GLUT_DEBUG GALE_VERBOSE
|
||||||
#define SDL_VERBOSE GALE_VERBOSE
|
#define GLUT_VERBOSE GALE_VERBOSE
|
||||||
#define SDL_INFO GALE_VERBOSE
|
#define GLUT_INFO GALE_VERBOSE
|
||||||
#define SDL_CRITICAL GALE_VERBOSE
|
#define GLUT_CRITICAL GALE_VERBOSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef GALE_BUILD_EGAMI
|
#ifdef GALE_BUILD_EGAMI
|
||||||
@ -45,35 +45,31 @@ bool hasDisplay = false;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
class SDLInterface : public gale::Context {
|
class GLUTInterface : public gale::Context {
|
||||||
private:
|
private:
|
||||||
gale::key::Special m_guiKeyBoardMode;
|
gale::key::Special m_guiKeyBoardMode;
|
||||||
int32_t m_originX;
|
int32_t m_originX;
|
||||||
int32_t m_originY;
|
int32_t m_originY;
|
||||||
int32_t m_cursorEventX;
|
vec2 m_cursorEventPos;
|
||||||
int32_t m_cursorEventY;
|
vec2 m_currentSize;
|
||||||
int32_t m_currentHeight;
|
|
||||||
int32_t m_currentWidth;
|
|
||||||
bool m_doubleBuffered;
|
bool m_doubleBuffered;
|
||||||
bool m_run;
|
bool m_run;
|
||||||
//forcing the position
|
//forcing the position
|
||||||
bool m_grabAllEvent; //!< grab mode enable...
|
bool m_grabAllEvent; //!< grab mode enable...
|
||||||
vec2 m_forcePos; //!< position to reset the cursor
|
vec2 m_forcePos; //!< position to reset the cursor
|
||||||
bool m_positionChangeRequested; //!< the position modifiquation has been requested
|
bool m_positionChangeRequested; //!< the position modifiquation has been requested
|
||||||
vec2 m_curentGrabDelta; //!< the position in SDL will arrive by pool
|
vec2 m_curentGrabDelta; //!< the position in GLUT will arrive by pool
|
||||||
bool m_inputIsPressed[MAX_MANAGE_INPUT];
|
bool m_inputIsPressed[MAX_MANAGE_INPUT];
|
||||||
std::string m_uniqueWindowsName;
|
std::string m_uniqueWindowsName;
|
||||||
enum gale::context::cursor m_currentCursor; //!< select the current cursor to display :
|
enum gale::context::cursor m_currentCursor; //!< select the current cursor to display :
|
||||||
char32_t m_lastKeyPressed; //!< The last element key presed...
|
char32_t m_lastKeyPressed; //!< The last element key presed...
|
||||||
public:
|
public:
|
||||||
SDLInterface(gale::Application* _application, int32_t _argc, const char* _argv[]) :
|
GLUTInterface(gale::Application* _application, int32_t _argc, const char* _argv[]) :
|
||||||
gale::Context(_application, _argc, _argv),
|
gale::Context(_application, _argc, _argv),
|
||||||
m_originX(0),
|
m_originX(0),
|
||||||
m_originY(0),
|
m_originY(0),
|
||||||
m_cursorEventX(0),
|
m_cursorEventPos(0,0),
|
||||||
m_cursorEventY(0),
|
m_currentSize(640,480),
|
||||||
m_currentHeight(450),
|
|
||||||
m_currentWidth(600),
|
|
||||||
m_doubleBuffered(0),
|
m_doubleBuffered(0),
|
||||||
m_run(false),
|
m_run(false),
|
||||||
m_grabAllEvent(false),
|
m_grabAllEvent(false),
|
||||||
@ -82,14 +78,14 @@ class SDLInterface : public gale::Context {
|
|||||||
m_curentGrabDelta(0,0),
|
m_curentGrabDelta(0,0),
|
||||||
m_currentCursor(gale::context::cursor::arrow),
|
m_currentCursor(gale::context::cursor::arrow),
|
||||||
m_lastKeyPressed(0) {
|
m_lastKeyPressed(0) {
|
||||||
SDL_INFO("SDL:INIT");
|
GLUT_INFO("GLUT:INIT");
|
||||||
for (int32_t iii=0; iii<MAX_MANAGE_INPUT; iii++) {
|
for (int32_t iii=0; iii<MAX_MANAGE_INPUT; iii++) {
|
||||||
m_inputIsPressed[iii] = false;
|
m_inputIsPressed[iii] = false;
|
||||||
}
|
}
|
||||||
if (m_doubleBuffered) {
|
if (m_doubleBuffered) {
|
||||||
//XSync(m_display,0);
|
//XSync(m_display,0);
|
||||||
}
|
}
|
||||||
OS_Resize(vec2(m_currentWidth, m_currentHeight));
|
OS_Resize(m_currentSize);
|
||||||
|
|
||||||
// Configure the DPI of the screen:
|
// Configure the DPI of the screen:
|
||||||
{
|
{
|
||||||
@ -102,82 +98,194 @@ class SDLInterface : public gale::Context {
|
|||||||
m_run = true;
|
m_run = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
~SDLInterface() {
|
~GLUTInterface() {
|
||||||
//SDL_Quit();
|
//GLUT_Quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t run() {
|
int32_t draw() {
|
||||||
SDL_INFO("RUN");
|
GLUT_INFO("RUN");
|
||||||
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
||||||
SDL_INFO("RUN 2");
|
GLUT_INFO("RUN 2");
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
SDL_INFO("RUN 3");
|
GLUT_INFO("RUN 3");
|
||||||
//glLoadIdentity();
|
//glLoadIdentity();
|
||||||
SDL_INFO("Draw [START]");
|
GLUT_INFO("Draw [START]");
|
||||||
OS_Draw(true);
|
OS_Draw(true);
|
||||||
SDL_INFO("Draw [STOP]");
|
GLUT_INFO("Draw [STOP]");
|
||||||
glutSwapBuffers();
|
glutSwapBuffers();
|
||||||
//std::this_thread::sleep_for(std::chrono::milliseconds(1000));
|
//std::this_thread::sleep_for(std::chrono::milliseconds(1000));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/****************************************************************************************/
|
/****************************************************************************************/
|
||||||
virtual void stop() {
|
virtual void stop() {
|
||||||
SDL_INFO("SDL-API: Stop");
|
GLUT_INFO("GLUT-API: Stop");
|
||||||
m_run = false;
|
m_run = false;
|
||||||
}
|
}
|
||||||
|
void reshape(int _width, int _height) {
|
||||||
|
glViewport(0, 0, (GLint) _width, (GLint) _height);
|
||||||
|
m_currentSize = vec2(_width, _height);
|
||||||
|
OS_Resize(vec2(_width, _height));
|
||||||
|
}
|
||||||
|
void special(int _special) {
|
||||||
|
GALE_INFO("Value=" << _special);
|
||||||
|
bool find = true;
|
||||||
|
enum gale::key::keyboard keyInput = gale::key::keyboard::unknow;
|
||||||
|
switch (_special) {
|
||||||
|
//case 80: // keypad
|
||||||
|
case GLUT_KEY_UP: keyInput = gale::key::keyboard::up; break;
|
||||||
|
//case 83: // keypad
|
||||||
|
case GLUT_KEY_LEFT: keyInput = gale::key::keyboard::left; break;
|
||||||
|
//case 85: // keypad
|
||||||
|
case GLUT_KEY_RIGHT: keyInput = gale::key::keyboard::right; break;
|
||||||
|
//case 88: // keypad
|
||||||
|
case GLUT_KEY_DOWN: keyInput = gale::key::keyboard::down; break;
|
||||||
|
//case 81: // keypad
|
||||||
|
case GLUT_KEY_PAGE_UP: keyInput = gale::key::keyboard::pageUp; break;
|
||||||
|
//case 89: // keypad
|
||||||
|
case GLUT_KEY_PAGE_DOWN: keyInput = gale::key::keyboard::pageDown; break;
|
||||||
|
//case 79: // keypad
|
||||||
|
case GLUT_KEY_HOME: keyInput = gale::key::keyboard::start; break;
|
||||||
|
//case 87: // keypad
|
||||||
|
case GLUT_KEY_END: keyInput = gale::key::keyboard::end; break;
|
||||||
|
// TODO: case 78: keyInput = gale::key::keyboard::stopDefil; break;
|
||||||
|
// TODO: case 127: keyInput = gale::key::keyboard::wait; break;
|
||||||
|
//case 90: // keypad
|
||||||
|
case GLUT_KEY_INSERT: keyInput = gale::key::keyboard::insert; break;
|
||||||
|
//case 84: keyInput = gale::key::keyboardCenter; break; // Keypad
|
||||||
|
case GLUT_KEY_F1: keyInput = gale::key::keyboard::f1; break;
|
||||||
|
case GLUT_KEY_F2: keyInput = gale::key::keyboard::f2; break;
|
||||||
|
case GLUT_KEY_F3: keyInput = gale::key::keyboard::f3; break;
|
||||||
|
case GLUT_KEY_F4: keyInput = gale::key::keyboard::f4; break;
|
||||||
|
case GLUT_KEY_F5: keyInput = gale::key::keyboard::f5; break;
|
||||||
|
case GLUT_KEY_F6: keyInput = gale::key::keyboard::f6; break;
|
||||||
|
case GLUT_KEY_F7: keyInput = gale::key::keyboard::f7; break;
|
||||||
|
case GLUT_KEY_F8: keyInput = gale::key::keyboard::f8; break;
|
||||||
|
case GLUT_KEY_F9: keyInput = gale::key::keyboard::f9; break;
|
||||||
|
case GLUT_KEY_F10: keyInput = gale::key::keyboard::f10; break;
|
||||||
|
case GLUT_KEY_F11: keyInput = gale::key::keyboard::f11; break;
|
||||||
|
case GLUT_KEY_F12: keyInput = gale::key::keyboard::f12; break;
|
||||||
|
case 112: keyInput = gale::key::keyboard::shiftLeft; break;
|
||||||
|
case 114: keyInput = gale::key::keyboard::ctrlLeft; break;
|
||||||
|
case 116: keyInput = gale::key::keyboard::alt; break;
|
||||||
|
case 111: // Suppr
|
||||||
|
find = false;
|
||||||
|
OS_setKeyboard(m_guiKeyBoardMode,
|
||||||
|
gale::key::keyboard::character,
|
||||||
|
gale::key::status::down,
|
||||||
|
false,
|
||||||
|
0x7F);
|
||||||
|
OS_setKeyboard(m_guiKeyBoardMode,
|
||||||
|
gale::key::keyboard::character,
|
||||||
|
gale::key::status::up,
|
||||||
|
false,
|
||||||
|
0x7F);
|
||||||
|
break;
|
||||||
|
case 120: // delete
|
||||||
|
find = false;
|
||||||
|
OS_setKeyboard(m_guiKeyBoardMode,
|
||||||
|
gale::key::keyboard::character,
|
||||||
|
gale::key::status::down,
|
||||||
|
false,
|
||||||
|
0x08);
|
||||||
|
OS_setKeyboard(m_guiKeyBoardMode,
|
||||||
|
gale::key::keyboard::character,
|
||||||
|
gale::key::status::up,
|
||||||
|
false,
|
||||||
|
0x08);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
find = false;
|
||||||
|
GALE_ERROR("Not find special:" << _special);
|
||||||
|
}
|
||||||
|
if (find == true) {
|
||||||
|
OS_setKeyboard(m_guiKeyBoardMode,
|
||||||
|
keyInput,
|
||||||
|
gale::key::status::down,
|
||||||
|
false);
|
||||||
|
OS_setKeyboard(m_guiKeyBoardMode,
|
||||||
|
keyInput,
|
||||||
|
gale::key::status::up,
|
||||||
|
false);
|
||||||
|
}
|
||||||
|
/* case GLUT_KEY_F11:
|
||||||
|
glutFullScreen();
|
||||||
|
break;
|
||||||
|
*/
|
||||||
|
GALE_ERROR("eventKey Move type : " << keyInput );
|
||||||
|
}
|
||||||
|
|
||||||
|
void keyboard(unsigned char _key) {
|
||||||
|
GALE_ERROR("keyboard: " << int(_key));
|
||||||
|
OS_setKeyboard(m_guiKeyBoardMode,
|
||||||
|
gale::key::keyboard::character,
|
||||||
|
gale::key::status::down,
|
||||||
|
false,
|
||||||
|
_key);
|
||||||
|
OS_setKeyboard(m_guiKeyBoardMode,
|
||||||
|
gale::key::keyboard::character,
|
||||||
|
gale::key::status::up,
|
||||||
|
false,
|
||||||
|
_key);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mouse(int _button, bool _up, const vec2& _pos) {
|
||||||
|
GALE_ERROR("mouse: " << _button << " " << (_up==true?"up":"down") << " " << _pos);
|
||||||
|
m_cursorEventPos = vec2(_pos.x(), m_currentSize.y() - _pos.y());
|
||||||
|
OS_SetInput(gale::key::type::mouse,
|
||||||
|
(_up==true?gale::key::status::up:gale::key::status::down),
|
||||||
|
_button+1,
|
||||||
|
m_cursorEventPos);
|
||||||
|
m_inputIsPressed[_button+1] = !_up;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mousePasive(const vec2& _pos) {
|
||||||
|
GALE_ERROR("mouse: " << _pos);
|
||||||
|
m_cursorEventPos = vec2(_pos.x(), m_currentSize.y() - _pos.y());
|
||||||
|
|
||||||
|
// For compatibility of the Android system :
|
||||||
|
bool findOne = false;
|
||||||
|
for (int32_t iii=0; iii<MAX_MANAGE_INPUT ; iii++) {
|
||||||
|
if (m_inputIsPressed[iii] == true) {
|
||||||
|
OS_SetInput(gale::key::type::mouse,
|
||||||
|
gale::key::status::move,
|
||||||
|
iii,
|
||||||
|
m_cursorEventPos);
|
||||||
|
findOne = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (findOne == false) {
|
||||||
|
OS_SetInput(gale::key::type::mouse,
|
||||||
|
gale::key::status::move,
|
||||||
|
0,
|
||||||
|
m_cursorEventPos);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
SDLInterface* g_interface = nullptr;
|
GLUTInterface* g_interface = nullptr;
|
||||||
|
|
||||||
static void gears_idle() {
|
static void gale_glut_idle() {
|
||||||
glutPostRedisplay();
|
glutPostRedisplay();
|
||||||
|
//g_interface->idle();
|
||||||
}
|
}
|
||||||
|
static void gale_glut_reshape(int _width, int _height) {
|
||||||
/**
|
g_interface->reshape(_width, _height);
|
||||||
* Handles a new window size or exposure.
|
|
||||||
*
|
|
||||||
* @param width the window width
|
|
||||||
* @param height the window height
|
|
||||||
*/
|
|
||||||
static void gears_reshape(int width, int height) {
|
|
||||||
/* Update the projection matrix */
|
|
||||||
//perspective(ProjectionMatrix, 60.0, width / (float)height, 1.0, 1024.0);
|
|
||||||
/* Set the viewport */
|
|
||||||
glViewport(0, 0, (GLint) width, (GLint) height);
|
|
||||||
}
|
}
|
||||||
|
static void gale_glut_draw() {
|
||||||
/**
|
g_interface->draw();
|
||||||
* Draws the gears.
|
|
||||||
*/
|
|
||||||
static void gears_draw() {
|
|
||||||
g_interface->run();
|
|
||||||
}
|
}
|
||||||
|
static void gale_glut_special(int _special, int _x, int _y) {
|
||||||
/**
|
g_interface->special(_special);
|
||||||
* Handles special glut events.
|
}
|
||||||
*
|
static void gale_glut_keyboard(unsigned char _key, int _x, int _y) {
|
||||||
* @param special the event to handle.
|
g_interface->keyboard(_key);
|
||||||
*/
|
}
|
||||||
static void gears_special(int _special, int _crap, int _morecrap) {
|
static void gale_glut_mouse(int _button, int _state, int _x, int _y) {
|
||||||
switch (_special) {
|
g_interface->mouse( _button, bool(_state), vec2(_x, _y));
|
||||||
case GLUT_KEY_LEFT:
|
}
|
||||||
GALE_INFO("GLUT_KEY_LEFT");
|
static void gale_glut_mouse_pasive(int _x, int _y) {
|
||||||
break;
|
g_interface->mousePasive(vec2(_x, _y));
|
||||||
case GLUT_KEY_RIGHT:
|
|
||||||
GALE_INFO("GLUT_KEY_RIGHT");
|
|
||||||
break;
|
|
||||||
case GLUT_KEY_UP:
|
|
||||||
GALE_INFO("GLUT_KEY_UP");
|
|
||||||
break;
|
|
||||||
case GLUT_KEY_DOWN:
|
|
||||||
GALE_INFO("GLUT_KEY_DOWN");
|
|
||||||
break;
|
|
||||||
case GLUT_KEY_F11:
|
|
||||||
glutFullScreen();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Main of the program
|
* @brief Main of the program
|
||||||
@ -185,7 +293,6 @@ static void gears_special(int _special, int _crap, int _morecrap) {
|
|||||||
* @return std IO
|
* @return std IO
|
||||||
*/
|
*/
|
||||||
int gale::run(gale::Application* _application, int _argc, const char *_argv[]) {
|
int gale::run(gale::Application* _application, int _argc, const char *_argv[]) {
|
||||||
GALE_DEBUG("lklklklklk\n");
|
|
||||||
#ifndef __EMSCRIPTEN__
|
#ifndef __EMSCRIPTEN__
|
||||||
// include GL stuff, to check that we can compile hybrid 2d/GL apps
|
// include GL stuff, to check that we can compile hybrid 2d/GL apps
|
||||||
extern void glBegin(int mode);
|
extern void glBegin(int mode);
|
||||||
@ -195,12 +302,10 @@ int gale::run(gale::Application* _application, int _argc, const char *_argv[]) {
|
|||||||
glBindBuffer(0, 0);
|
glBindBuffer(0, 0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
GALE_DEBUG("22222222\n");
|
|
||||||
etk::init(_argc, _argv);
|
etk::init(_argc, _argv);
|
||||||
GALE_DEBUG("33333333\n");
|
g_interface = new GLUTInterface(_application, _argc, _argv);
|
||||||
g_interface = new SDLInterface(_application, _argc, _argv);
|
|
||||||
if (g_interface == nullptr) {
|
if (g_interface == nullptr) {
|
||||||
GALE_CRITICAL("Can not create the SDL interface ... MEMORY allocation error");
|
GALE_CRITICAL("Can not create the GLUT interface ... MEMORY allocation error");
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,16 +315,19 @@ int gale::run(gale::Application* _application, int _argc, const char *_argv[]) {
|
|||||||
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
|
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
|
||||||
glutCreateWindow("coucou, name to change ...");
|
glutCreateWindow("coucou, name to change ...");
|
||||||
/* Set up glut callback functions */
|
/* Set up glut callback functions */
|
||||||
glutIdleFunc(gears_idle);
|
glutIdleFunc(gale_glut_idle);
|
||||||
glutReshapeFunc(gears_reshape);
|
glutReshapeFunc(gale_glut_reshape);
|
||||||
glutDisplayFunc(gears_draw);
|
glutDisplayFunc(gale_glut_draw);
|
||||||
glutSpecialFunc(gears_special);
|
glutSpecialFunc(gale_glut_special);
|
||||||
|
//glutEntryFunc(gale_glut_entry);
|
||||||
|
glutKeyboardFunc(gale_glut_keyboard);
|
||||||
|
glutMouseFunc(gale_glut_mouse);
|
||||||
|
glutMotionFunc(gale_glut_mouse_pasive);
|
||||||
GALE_DEBUG("7987984654654\n");
|
GALE_DEBUG("7987984654654\n");
|
||||||
|
|
||||||
glutMainLoop();
|
glutMainLoop();
|
||||||
|
|
||||||
GALE_DEBUG("444444\n");
|
int32_t retValue = 0;
|
||||||
int32_t retValue = 0; //g_interface->run();
|
|
||||||
|
|
||||||
delete(g_interface);
|
delete(g_interface);
|
||||||
g_interface = nullptr;
|
g_interface = nullptr;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user