spair / imgui-java Goto Github PK
View Code? Open in Web Editor NEWJNI based binding for Dear ImGui
License: MIT License
JNI based binding for Dear ImGui
License: MIT License
Hi!
While ImPlot/plotShaded
exists in the library, I cannot find this specific version of the call, with two ys
vectors. Is there a way to call it in the library or is it missing?
I'm trying to port https://github.com/ocornut/imgui/blob/master/examples/imgui_impl_glfw.cpp with 1.76-0.13.
The updateGamepads()
method requires accessing the io.NavInputs
array but I cannot find a suitable io.setNavInputs()
method.
Am I missing something obvious or do we need to add that functionality?
The glyph range arrays provided by the functions ImFontAtlas.getGlyphRangesChineseFull()
and ImFontAtlas.getGlyphRangesChineseSimplifiedCommond()
are cut-off after the first 4 ranges.
For example, with getGlyphRangesChineseFull()
it is supposed to be this array (see here):
0x0020, 0x00FF, // Basic Latin + Latin Supplement
0x2000, 0x206F, // General Punctuation
0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana
0x31F0, 0x31FF, // Katakana Phonetic Extensions
0xFF00, 0xFFEF, // Half-width characters
0xFFFD, 0xFFFD, // Invalid
0x4e00, 0x9FAF, // CJK Ideograms
The result from the method returns just the first four ranges, though:
0x0020, 0x00FF, // Basic Latin + Latin Supplement
0x2000, 0x206F, // General Punctuation
0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana
0x31F0, 0x31FF, // Katakana Phonetic Extensions
Note that all but one of the missing values are too large for a Java short (e.g. 0xFF00). I don't know what exactly happens during a JNI call, but it looks to me like the data is cut-off because it doesn't fit into the signed short data type. If that is true, one solution would be to use a char instead of a short here, considering it is unsigned and could represent all the relevant glyph ranges necessary (the ImWchar16 used in C++ dear imgui is also an unsigned 16 bit data type).
Hi any chance we could get support for dock node builder? Right now I have to set the position of child windows to where they should and move them to dock onto the parent/bg window if I want them to be split. Would be nice if we could have the windows split on the start of the application. Regardless thanks again for the awesome bindings and sorry to bother you so much!
Caused by: java.lang.UnsupportedOperationException: java.lang.UnsatisfiedLinkError: shadow.org.lwjgl.system.jni.JNINativeInterface.nNewDirectByteBuffer(JJ)Ljava/nio/ByteBuffer;
at shadow.org.lwjgl.system.MemoryUtil.(MemoryUtil.java:133
Hi I'm trying to create a cross platform editor could you create mac bindings please?
As LWJGL3 introduced more efficient stack and off-heap memory buffers, it would be convenient to use those sometimes instead of allocating heap Im_type_ or type[]. As an example (maybe a bit artificial), I would like to do
FloatBuffer lengthBuffer = MemoryUtil.memAllocFloat(1);
lengthBuffer.put(length).flip();
if (ImGui.dragFloat("Length", MemoryUtil.memAddress(lengthBuffer)) {
// update length
}
or even
try (MemoryStack stack = MemoryStack.stackPush()) {
FloatBuffer coordsBuffer = stack.floats(z, y, x);
if (ImGui.dragFloat("X", stack.getPointerAddress()) {
// update x
}
if (ImGui.dragFloat("Y", stack.getPointerAddress() + 4) {
// update y
}
if (ImGui.dragFloat("Z", stack.getPointerAddress() + 8) {
// update z
}
}
I know. This doesn't really make sense to go back to an older version of lwjgl but hear me out. Please check out this issue which describes why I think a back-port could be useful: here, I don't ask you to fully port the master branch but perhaps a secondary branch that supports lwjgl 3.2.1. TL;DR macos forces lwjgl 3.2.1 for minecraft, your ImGui bindings requires <= 3.2.2
How should this method be used? If I try to use it it always crashes java no matter what arguments I use.
I wated to use the method like here: https://github.com/epezent/implot/blob/555ff688a8134bc0c602123149abe9c17d577475/implot_demo.cpp#L415
It takes two arrays and the size which there is no java wrapper apparently
I successfully compiled the imgui-java and generated the libimgui-java64.so. When I try to run the example demo I get this:
/opt/idea-IU-192.7142.36/jbr/bin/java: symbol lookup error: /opt/imgui-java/imgui-java/bin/libimgui-java64.so: undefined symbol: FT_New_Library
I have the freetype2 library linked when I compiled it, so I don't understand.
linux64.cppFlags += " -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include"
linux64.linkerFlags += " -lfreetype "
How can i use implements like imgui_impl_softraster?
I tried to add a new native method in ImNodes.java (for testing around).
Thats how the file looks: https://prnt.sc/1236qfd
If I build it with the command in the README and then run the example I get following error: https://prnt.sc/1236sso
The example builds and runs if I remove my own method.
Would appreciate if you can tell me how I can add java wrappers for new ImGUI addons.
I'm using the latest jar (https://github.com/SpaiR/imgui-java/releases/download/v1.81.1/imgui-app-1.81.1.jar)
Exception in thread "main" java.lang.UnsatisfiedLinkError: /tmp/imgui-java-bin_jraynor/libimgui-java64.so: /lib/x86_64-linux-gnu/libm.so.6: version
GLIBC_2.29' not found (required by /tmp/imgui-java-bin_jraynor/libimgui-java64.so)`
I think you've built the linux bindings with a unreleased verision of GLIBC, the current release is 2.28, so could you possibily rebuild those natives with a other version of GLIBC so it will work for more users? (Coming from zorin 15.2)
Its will be very useful for me.
I first wanted to try to write code directly in Java, but in C++ ImGui there is also ImGuiContext
and ImGuiWindow/ImGuiWindowClass
in which I need to get win32 DC
(device context) and through it ItemWidth
as well as ItemWidthStack
. I just used this function in C++ before, but now I'm writing in Java and I'm wondering how it will look on it. And is it even possible to somehow get the ImGuiContext
from via JNI
? In the same place, it seems like if you need a DC
, then we need to get through to the Win32 API.
This should reproduce it:
ImGui.menuItem("label", null, false, true);
I am on macOS and calling it via Clojure.
Looking at the autogenerated JNI bindings I see it always calls GetStringUTFChars
on the shortcut
parameter. I don't know much about JNI but this seems to crash if supplied with a null.
Greetings,
could you please add this class in your next release with all its functions.
// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]"
struct ImGuiTextFilter
{
IMGUI_API ImGuiTextFilter(const char* default_filter = "");
IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build
IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const;
IMGUI_API void Build();
void Clear() { InputBuf[0] = 0; Build(); }
bool IsActive() const { return !Filters.empty(); }
// [Internal]
struct ImGuiTextRange
{
const char* b;
const char* e;
ImGuiTextRange() { b = e = NULL; }
ImGuiTextRange(const char* _b, const char* _e) { b = _b; e = _e; }
bool empty() const { return b == e; }
IMGUI_API void split(char separator, ImVector<ImGuiTextRange>* out) const;
};
char InputBuf[256];
ImVector<ImGuiTextRange>Filters;
int CountGrep;
};
Thanks,
Georgii
I've succesfully installed the library using Maven. Tried to run the example in here but the program crashes when it hits these functions:
ImGui#setConfigViewportsNoTaskBarIcon(boolean);
(Line 150)
ImFontConfig#setMergeMode(boolean);
(Line 166 & 171)
ImFontConfig#setPixelSnapH(boolean);
(Line 167 & 172)
Also, although unrelated, when invoking the ImFontAtlas#addFontFromFileTTF(String, float, ImFontConfig)
, I have to give the string "src/main/resources/Righteous-Regular.ttf" instead of "/Righteous-Regular.ttf". I'd normally give the latter to "load from file system" functions but it doesn't work. Why does that happen? (for example ImGuiGlfwExample#loadFromResources(String) takes the latter and works).
The ImGui.java file states
// Inputs Utilities: Keyboard
// - For 'int user_key_index' you can use your own indices/enums according to how your backend/engine stored them in io.KeysDown[].
// - We don't know the meaning of those value. You can use GetKeyIndex() to map a ImGuiKey_ value into the user index.
This seems to imply I would need to forward keyboard inputs to ImGui from my engine, then poll isKeyPressed() using the appropriate indices.
However, given that ImGui is able to provide text input out of the box, I was wondering if there was a way to poll the keyboard without doing so? Or is it the case that ImGui is able to detect and process keyboard input, but does not have a mapping of key names to integers, hence I would need to define this mapping myself?
P.S. Thank you for creating this binding, I'm finding it stable and very straightforward to use with my libGDX projects! ๐
Hi, I have just begun on a new LWJGL 3 game and wanted to use ImGui for testing stuff. But I ran into a problem. I am using my own GLFW window so when initializing ImGui I set installCallbacks
to false. But even though I do that, input like "Mouse Down" and "Mouse Movement" still works.
MY ImGui class
public class ImGuiLayer extends Layer {
private Application application;
private ImGuiImplGlfw imGuiImp;
private ImGuiImplGl3 imGuiGlImp;
public ImGuiLayer(Application app) {
super();
this.application = app;
ImGui.createContext();
imGuiImp = new ImGuiImplGlfw();
imGuiImp.init(app.window.windowId, false);
imGuiGlImp = new ImGuiImplGl3();
imGuiGlImp.init("#version 150");
ImGui.init();
ImGui.styleColorsDark();
}
@Override
public boolean handleEvent(Event e) {
return false;
}
@Override
public void close() {
imGuiImp.dispose();
imGuiGlImp.dispose();
ImGui.destroyContext();
}
public void draw() {
// aft
DecimalFormat df = new DecimalFormat("#.#####");
String aft = df.format(application.window.getAft());
ImGui.begin("Eninge Stats");
// Window stats
ImGui.text("Window Stats:");
ImGui.text("FPS: " + application.window.getFps());
ImGui.text("AFT: " + aft);
// memory,
double maxMem = Runtime.getRuntime().maxMemory() / (double)(1024 * 1024);
double freMem = Runtime.getRuntime().freeMemory() / (double)(1024 * 1024);
double usedMem = maxMem-freMem;
ImGui.newLine();
ImGui.text("Memory Stats:");
ImGui.text("Memory Allocated: " + Math.round(maxMem) + "MB");
ImGui.text("Memory Used: " + Math.round(usedMem) + "/" + Math.round(maxMem) + "MB");
ImGui.text("Memory Free: " + Math.round(freMem) + "MB");
ImGui.end();
}
@Override
public void render() {
// Start frame
imGuiImp.newFrame();
ImGui.newFrame();
draw();
// render
ImGui.render();
imGuiGlImp.renderDrawData(ImGui.getDrawData());
}
}
I've been using a non-hidpi monitor so have only recently noticed that when I use my retina display I get the following ImGui output:
Should I be looking at my scale factor configuration or is it a broader problem related to ocornut/imgui#2826?
Hi,
I'm facing a strange issue with this library. I'm doing some tests, and it seems that once the imgui.ini file is created, the commands list is always 0
and the buffers are not populated. I've tried to create a simple sample to show this. The folloing code just initializes Imgui, creates the demo window, renders it and then tries to get the commands list.
package org.vulkanb;
import imgui.*;
import imgui.type.ImInt;
public class TestImGui {
public static void main(String[] args) {
try {
ImGui.createContext();
ImGuiIO imGuiIO = ImGui.getIO();
imGuiIO.setDisplaySize(1280, 720);
imGuiIO.setDisplayFramebufferScale(1.0f, 1.0f);
ImInt outWidth = new ImInt();
ImInt outHeight = new ImInt();
imGuiIO.getFonts().getTexDataAsAlpha8(outWidth, outHeight);
ImGui.newFrame();
ImGui.showDemoWindow();
ImGui.render();
ImDrawData imDrawData = ImGui.getDrawData();
System.out.println("Cmd Lists=" + imDrawData.getCmdListsCount());
System.out.println("Total vertices count=" + imDrawData.getTotalVtxCount());
System.out.println("Total indices count=" + imDrawData.getTotalIdxCount());
System.out.println("Draw data valid=" + imDrawData.getValid());
ImGui.destroyContext();
} catch (Exception excp) {
excp.printStackTrace();
}
}
}
The first time it ies ececuted, no imgui.ini file is present, I get the following result:
Cmd Lists=1
Total vertices count=814
Total indices count=1365
Draw data valid=true
However, if I execute the example again, the imgui.ini is present, I get the following output:
Cmd Lists=0
Total vertices count=0
Total indices count=0
Draw data valid=true
I'm using openjdk 15.0.2 2021-01-19
and version 1.81.2
of the imgui-java library.
Any idea of what I am missing? In addition to that, it seems to mee that the vertex coordinates have quite small values (the display size seems not to be applied). I don't know if this related to this issue or not.
Any guidance is very much appreciated.
Is there a way for you to included the following native call methods like GetCurrentContext and SetCurrentContext?
// Context creation and access
// Each context create its own ImFontAtlas by default. You may instance one yourself and pass it to CreateContext() to share a font atlas between imgui contexts.
// None of those functions is reliant on the current context.
IMGUI_API ImGuiContext* CreateContext(ImFontAtlas* shared_font_atlas = NULL);
IMGUI_API void DestroyContext(ImGuiContext* ctx = NULL); // NULL = destroy current context
IMGUI_API ImGuiContext* **GetCurrentContext**();
IMGUI_API void **SetCurrentContext**(ImGuiContext* ctx);
https://github.com/ocornut/imgui/blob/master/imgui.h
I need to have the ability to support multiple contexts because I'm using multiple secondary buffers in Vulkan.
https://github.com/BalazsJako/ImGuiColorTextEdit
This would be super useful for me and a lot of users.
Target: Minecraft 1.16.2
Fabric: latest
heres the example code
package net.fabricmc.example.screen;
import java.util.Objects;
import imgui.ImGui;
import imgui.ImGuiIO;
import imgui.flag.ImGuiConfigFlags;
import imgui.gl3.ImGuiImplGl3;
import imgui.glfw.ImGuiImplGlfw;
import imgui.type.ImString;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.LiteralText;
@Environment(EnvType.CLIENT)
public class ImguiScreen extends Screen {
private long windowPtr;
private final ImGuiImplGlfw implGlfw = new ImGuiImplGlfw();
private final ImGuiImplGl3 implGl3 = new ImGuiImplGl3();
private final ImGuiIO io;
public ImguiScreen() {
super(new LiteralText("ImguiScreen"));
windowPtr = MinecraftClient.getInstance().getWindow().getHandle();
ImGui.createContext();
io = ImGui.getIO();
implGlfw.init(windowPtr, false);
implGl3.init("#version 150");
}
@Override
public boolean isPauseScreen() {
return false;
}
@Override
public boolean charTyped(char chr, int keyCode) {
if (io.getWantTextInput()) {
io.addInputCharacter(chr);
}
super.charTyped(chr, keyCode);
return true;
}
@Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
if (io.getWantCaptureKeyboard()) {
if (io.getKeysDown(keyCode)) {
io.setKeysDown(new boolean[] { true });
}
}
super.keyPressed(keyCode, scanCode, modifiers);
return true;
}
@Override
public boolean keyReleased(int keyCode, int scanCode, int modifiers) {
if (io.getWantCaptureKeyboard()) {
if (io.getKeysDown(keyCode)) {
io.setKeysDown(new boolean[] { false });
}
}
super.keyReleased(keyCode, scanCode, modifiers);
return true;
}
ImString msg = new ImString();
@Override
public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
// TODO Auto-generated method stub
implGlfw.newFrame();
ImGui.newFrame();
ImGui.begin("hello");
ImGui.text("hello");
ImGui.inputText("Sample", msg);
ImGui.end();
ImGui.render();
implGl3.renderDrawData(Objects.requireNonNull(ImGui.getDrawData()));
}
}
sometimes access violation error stuff
The Original API defines a ImGui.dockSpace() function that is not present in this binding.
It says Missing artifact io.imgui.java:binding:jar:1.78-1.2.0
on pom.xml
<dependency>
<groupId>io.imgui.java</groupId>
<artifactId>binding</artifactId>
<version>1.78-1.2.0</version>
</dependency>
<dependency>
<groupId>io.imgui.java</groupId>
<artifactId>lwjgl3</artifactId>
<version>1.78-1.2.0</version>
</dependency>
Would it be possible to get binaries (as in packages as part of the releases on maven central) for both Windows and MacOS for arm64?
Thanks,
Trevor
I've recently upgraded to the new version from 1.79-1.4.0 to 1.80-1.5.0.
It appears that the setColors method does not behave correctly.
If i try to upload my theme by correctly reading all the values from a file (exported from the inbuild theme builder) in a float[][] buffer, I get a strange JVM-Crash.
I didn't have that issue before with 1.79-1.4.0.
This is the stacktrace that java automatically generated:
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) j imgui.ImGuiStyle.setColors([[F)V+0 j OxyEngine.System.OxyUISystem.init()V+33 j OxyEngine.System.OxyUISystem.<init>(LOxyEngine/Core/Window/WindowHandle;)V+50 j OxyEngine.Core.Layers.UILayer.<init>(LOxyEngine/Core/Window/WindowHandle;)V+24 j OxyEngineEditor.EditorApplication.init()V+230 j OxyEngineEditor.EditorApplication.lambda$run$0()V+1 j OxyEngineEditor.EditorApplication$$Lambda$36+0x0000000800bd2810.run()V+4 j java.lang.Thread.run()V+11 [email protected] v ~StubRoutines::call_stub
Thanks in advance!
This errors occurs when trying to build the natives for mac: https://pastebin.com/q0UtvXKn
I tried to build the natives and it always fails with the same error.
Build log: https://pastebin.com/Km0MRPWj
How are you handling situations when the render state changes, in vulkan they are using a callback function. Is it possible for you to quickly add this binding to your native library?
` // Render command lists
// (Because we merged all buffers into a single one, we maintain our own offset into them)
int global_vtx_offset = 0;
int global_idx_offset = 0;
for (int n = 0; n < draw_data->CmdListsCount; n++)
{
const ImDrawList* cmd_list = draw_data->CmdLists[n];
for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
{
const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i];
if (pcmd->UserCallback != NULL)
{
// User callback, registered via ImDrawList::AddCallback()
// (ImDrawCallback_ResetRenderState is a special callback value used by the user to request the renderer to reset render state.)
if (pcmd->UserCallback == ImDrawCallback_ResetRenderState)
ImGui_ImplVulkan_SetupRenderState(draw_data, command_buffer, rb, fb_width, fb_height);
else
pcmd->UserCallback(cmd_list, pcmd);
}
else
{
// Project scissor/clipping rectangles into framebuffer space
ImVec4 clip_rect;
clip_rect.x = (pcmd->ClipRect.x - clip_off.x) * clip_scale.x;
clip_rect.y = (pcmd->ClipRect.y - clip_off.y) * clip_scale.y;
clip_rect.z = (pcmd->ClipRect.z - clip_off.x) * clip_scale.x;
clip_rect.w = (pcmd->ClipRect.w - clip_off.y) * clip_scale.y;
if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0f && clip_rect.w >= 0.0f)
{
// Negative offsets are illegal for vkCmdSetScissor
if (clip_rect.x < 0.0f)
clip_rect.x = 0.0f;
if (clip_rect.y < 0.0f)
clip_rect.y = 0.0f;
// Apply scissor/clipping rectangle
VkRect2D scissor;
scissor.offset.x = (int32_t)(clip_rect.x);
scissor.offset.y = (int32_t)(clip_rect.y);
scissor.extent.width = (uint32_t)(clip_rect.z - clip_rect.x);
scissor.extent.height = (uint32_t)(clip_rect.w - clip_rect.y);
vkCmdSetScissor(command_buffer, 0, 1, &scissor);
// Draw
vkCmdDrawIndexed(command_buffer, pcmd->ElemCount, 1, pcmd->IdxOffset + global_idx_offset, pcmd->VtxOffset + global_vtx_offset, 0);
}
}
}
global_idx_offset += cmd_list->IdxBuffer.Size;
global_vtx_offset += cmd_list->VtxBuffer.Size;
}`
I'm really confused. I only wanted to use imgui-app, but the jar imgui-app-1.82.2.jar seems not enough.
Relevant build issue:
> Task :imgui-app:compileJava FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':imgui-app:compileJava'.
> java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module @0x5eb4340f) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module @0x5eb4340f
Hi again, sorry to bother you, but upon trying to add the native bindings for mac, gradle fails to find the jar. I thought this was user error, but it seems they aren't present in the actual jcenter repo? Maybe it's a cache issue and will be resolved with time? Regardless gradle is failing to find the natives at the moment with the following error `Could not resolve all files for configuration ':modules:ide:runtimeClasspath.
Could not find io.imgui.java:natives-macos:1.76-0.11.
Searched in the following locations:
- https://repo.maven.apache.org/maven2/io/imgui/java/natives-macos/1.76-0.11/natives-macos-1.76-0.11.pom
- https://jcenter.bintray.com/io/imgui/java/natives-macos/1.76-0.11/natives-macos-1.76-0.11.pom'
A couple of weeks ago I was working on font-awesome integration in our project and found out that imgui-java currently lacks bindings for ImFontGlyphRangesBuilder. Fortunately, it's a fairly simple utility class which can be easily reimplemented in java, and so I did, but it still feels like something which should be a part of the library.
I am willing to make a PR but wanted to ask if you think it should be an actual bindings or java reimplementation. I also would be willing to add an example of font-awesome integration (with ImFontGlyphRangesBuilder usage) in the demo application but only if you think it will be of any benefit for the project.
p.s. tried to contact you on discord but unable to send messages for some reason.
First of all, I just wanted to say, this is an amazing binding. I haven't had any problems, and it's working exactly as expected. This is a wonder library. Secondly, I was wondering if you could create bindings for the docking branch of imgui? Here is the branch for docking. Thanks again for this awesome library, looking forward to (maybe) getting to use docking though aswell!
Tl;DR This is a big ol' feature request.
What about including bindings for https://github.com/epezent/implot?
Should Java bindings for it be included in a separate project?
P.S. Thanks for working on this library. I've been using it and it's working very well! Absolutely love it.
Does this version support the docking feature?
Greetings,
I'm getting this error with your java bindings on my 18.04 Ubuntu running Java 11:
Exception in thread "main" java.lang.UnsatisfiedLinkError: /tmp/imgui-java-bin_gviznyuk/libimgui-java64.so: /lib/x86_64-linux-gnu/libm.so.6: version 'GLIBC_2.29' not found (required by /tmp/imgui-java-bin_gviznyuk/libimgui-java64.so)
Checked my version: using "lbb --version"
ldd (Ubuntu GLIBC 2.27-3ubuntu1) 2.27
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
Hey could you include ImGuizmo if you get a chance?
thank you!
I'm using the below code to type into the input text box;
ImGui.inputText("default", new imgui.type.ImString("test"), 32);
but it just lets me write 4 characters instead of 32,,,, which is the correct way?
Greetings,
I have successfully integrated your Imgui API with Vulkan (lwjgl bindings)! My only question is there is a way for you to send me a flag that tells that the render state has changed? Given the nature of Vulkan with Imgui, I have to reset the command pool, for every frame, and redraw all the objects. This way I can save a few GPU cycles.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.