Sokol: Nuklear example

Created on 9 Jun 2018  路  7Comments  路  Source: floooh/sokol

Would be nice to have a nuklear example (instead or over imgui), since nuklear and sokol are C while imgui is C++.

enhancement

Most helpful comment

good idea, I have one here for Oryol: https://github.com/floooh/oryol-samples/blob/master/src/NuklearUIBasic/NuklearUIBasic.cc, should be fairly easy to adopt

All 7 comments

good idea, I have one here for Oryol: https://github.com/floooh/oryol-samples/blob/master/src/NuklearUIBasic/NuklearUIBasic.cc, should be fairly easy to adopt

Hi @floooh,

I've been trying to do this myself by modifying the nuklear_sdl_gl3 example. Here's my work-in-progress. I'm very inexperienced at opengl and graphics programming, so for give my naivet茅, but it seems sokol_gfx needs to support a version of sg_draw which can take in an offset, since it seems nuklear dumps all the data into the same buffer. Oryol has this feature, so maybe sokol should as well? Again, I'm very new to all this, so my apologies for being presumptuous.

Thanks, btw, for the very cool library. The code's very readable, and I'm learning a lot by using/reading it.

Never mind, I found that draw_state has index_buffer_offset which should work fine. I'm now trying to figure out how to translate glMapBuffer into sokol_gfx.

I guess since sokol_gfx aims to be compatible with gles2, it won't have the functionality equivalent to glMapBuffer? In which case, I'm guessing I'd need to duplicate buffers in CPU and GPU, and then use sg_update_buffer.

Yep, problem with glMapBuffer is that it isn't supported in WebGL or WebGL2 at all.

But it's not so bad with Nuklear, since it has all the required vertex- and index-data in 2 continuous chunks already, check out the Nuklear rendering code in the Oryol Nuklear wrapper, for sokol-gfx it would be similar (Oryol has separate calls for Gfx::UpdateVertices and Gfx::UpdateIndices, these would be 2 calls to sg_update_buffer() in sokol-gfx:

https://github.com/floooh/oryol-nuklear/blob/b854097872600ca391ae4f5f2aa8862183630af4/src/NKUI/nkuiWrapper.cc#L231

PS: also see here for initialization of the "nuklear buffers": https://github.com/floooh/oryol-nuklear/blob/b854097872600ca391ae4f5f2aa8862183630af4/src/NKUI/nkuiWrapper.cc#L37

I get an error from nuklear when I replace the GL code with sokol code. This is the error: Assertion failed: (list->cmd_count), function nk_draw_list_command_last, file ./nuklear.h, line 9291., and the code's here: https://github.com/sherjilozair/nuklear-sokol. Run make and then bin/demo for the repro. Most of the changes are in nk_glfw3_device_create and nk_glfw3_render in the file nuklear_glfw_gl3.h. Do you perhaps see any mistakes I'm making?

I just got sokol + sokol_app + nuklear to play nicely together on Windows + OGL 3.3.

Would you be interested in a PR to the sokol-examples repo? I can clean up a few things first, but would probably need help with some of the rest of it:

  1. I didn't set things up to use fips properly, or quite fit in perfectly with the sample app template system. I can probably handle this.
  2. I haven't implemented anything but windows OGL 3.3. I also don't really have a mac handy to test out metal, though I could probably handle most of the other renders easily enough. I could probably copy-pasta-modify the imgui version of the metal shaders, but not test them.
  3. Input is a bit funky since the design of Nuklear seems to need a callback before and after the event queue iterator is pumped, whereas sokol_app seems to not really provide callbacks at those times. I can easily "get it working" with a few global variables to aggregate the most recent event state, and some care to deal with swapping app focus, but maybe you have a better idea. See: https://github.com/floooh/sokol/issues/293
  4. I didn't try to pull the nuklear or sokol boilerplate out into a separate file, the way it seems to be for the sokol imgui sample apps. I also don't think I'm fully in the headspace of the project to do that extraction, so I'd probably need help with that part.

Would you be interested in a PR to the sokol-examples repo?

Yes :)

I haven't implemented anything but windows OGL 3.3. I also don't really have a mac handy to test out metal, though I could probably handle most of the other renders easily enough.

I can take care of that.

Input is a bit funky since the design of Nuklear

See my comments in the issue thread: https://github.com/floooh/sokol/issues/293, maybe we can come up with a solution similar to how I handle input in Dear ImGui without sokol_app.h changes...

I didn't try to pull the nuklear or sokol boilerplate

That's fine, a self-contained sample makes sense as first step (that's also how I started with the Dear ImGui integration), a next step later could then be to put the Nuklear wrapper code into a sokol_nuklear.h header, similar to the sokol_imgui.h header.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

floooh picture floooh  路  7Comments

floooh picture floooh  路  3Comments

mhalber picture mhalber  路  5Comments

SrMordred picture SrMordred  路  4Comments

amerkoleci picture amerkoleci  路  4Comments