Coder Social home page Coder Social logo

Nuklear example about sokol HOT 8 CLOSED

floooh avatar floooh commented on July 22, 2024
Nuklear example

from sokol.

Comments (8)

floooh avatar floooh commented on July 22, 2024 3

I just merged a sokol_nuklear.h backend and example, contributed by @wmerrifield :)

from sokol.

floooh avatar floooh commented on July 22, 2024 2

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

from sokol.

sherjilozair avatar sherjilozair commented on July 22, 2024 1

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.

from sokol.

floooh avatar floooh commented on July 22, 2024 1

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: #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.

from sokol.

sherjilozair avatar sherjilozair commented on July 22, 2024

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.

from sokol.

floooh avatar floooh commented on July 22, 2024

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

from sokol.

sherjilozair avatar sherjilozair commented on July 22, 2024

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?

from sokol.

kavika13 avatar kavika13 commented on July 22, 2024

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: #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.

from sokol.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.