Generating a common interface for multiple platform specific binding

Martin Pernollet martin.pernollet at protonmail.com
Tue Dec 20 15:04:57 UTC 2022


Hi everyone,

I am back on track with OpenGL binding with Panama!

I have one code design / tooling question related to JExtract : is it possible to generate a common interface that would be implemented by all platform specific binding generated by JExtract since JDK 19 or 20?

Here's my use case in more detail : I've been advised to generate different binding for different OS (and maybe version). For OpenGL, this lead me to a glut_h binding for macOS, one for Windows and one for Linux.

To let the user/developer face a single entry point, I manually write a [GL interface](https://github.com/jzy3d/panama-gl/blob/feature/fbo/src/main/java/opengl/GL.java). I then define a [GL_macOS_10_15_3](https://github.com/jzy3d/panama-gl/blob/feature/fbo/src/main/java/opengl/macos/GL_macOS_10_15_3.java) class that wraps the binding (!). When I expand the prototype to Windows, I should copy paste this to GL_Windows_10 and modify the imports to reference the appropriate bindings. The goal is to write code like this

GL gl = Platform.selectAmong(GL_macOS_10_15_3.class, GL_windows_10.class, ...)
gl.glDoSomething()

I don't think there would be another way to have java developer write applications that ignore the target hardware. However my approach is stupid : time consuming and error prone because manual. A real life case may have 10 implementations and 1000 functions.

Does JExtract provide a solution to this? Should I create this tool by myself based on all generated bindings ? Would anyone recommend something smarter?

Regards,

Martin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/panama-dev/attachments/20221220/5fef339a/attachment.htm>


More information about the panama-dev mailing list