Author Topic: Plugin utilisateur en C/C++  (Read 5361 times)

0 Members and 1 Guest are viewing this topic.

JeGX

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 1693
    • View Profile
    • Geeks3D.com
Plugin utilisateur en C/C++
« on: June 23, 2014, 03:52:22 PM »
GLSL Hacker 0.7.0+ apporte le support des plugins ou DLLs utilisateurs. Ces librairies dynamiques doivent implémenter les fonctions suivantes:

Code: [Select]
int gxl_dylib_start(void* render_window, int width, int height, const char* data, void* user_data);
int gxl_dylib_stop(const char* data, void* user_data);
int gxl_dylib_frame(float elapsed_time, const char* data, void* user_data);
int gxl_dylib_resize(int width, int height, const char* data, void* user_data);
int gxl_dylib_set_message(const char* message);
char* gxl_dylib_get_message();

render_window pointe sur la structure suivante:

Code: [Select]
struct RenderWindowData_v1
{
#if _WINDOWS 
  HDC _dc; // Device context.
  HWND _hwnd; // Handle on the 3D window.
  HGLRC _glrc; // OpenGL context.
#endif

#if _OSX
  void* _glrc; // OpenGL context.
#endif

#if _LINUX
  Display* _display; // not set, alwyas = 0
  Window _window; // not set, alwyas = 0
  void* _glrc; // OpenGL context.
#endif
};

Une fois que vous avez codé votre DLL avec ces fonctions, il suffit de la charger dans GLSL Hacker avec gh_utils.dylib_load():

Script INIT:
Code: [Select]
dlib = gh_utils.dylib_load(dylib_filename)
plugin_data = ""
gh_utils.dylib_start(dlib, winW, winH, plugin_data)

Il ne reste plus qu'à appeller les fonctions start, frame, resize, etc.

Script FRAME:
Code: [Select]
plugin_data = ""
gh_utils.dylib_frame(dlib, elapsed_time, plugin_data)

Script SIZE:
Code: [Select]
winW, winH = gh_window.getsize(0)
plugin_data = ""
gh_utils.dylib_resize(dlib, winW, winH, plugin_data)


Script TERMINATE:
Code: [Select]
plugin_data = ""
gh_utils.dylib_stop(dlib, plugin_data)
gh_utils.dylib_unload(dlib)


La variable plugin_data permet de transmettre une chaine de caractères au plugin. Cette chaine de caractères vous permet d'envoyer des informations quelconques au plugin.

Une demo complete (avec les codes sources de la DLL pour Windows et OS X) est disponible dans le code sample pack dans le répertoire
host_api/User_Plugin/

Cette demo charge un plugin C++/OpenGL tout simple qui initialise et dessine un triangle: