inital commit, prepared a base for the application
This commit is contained in:
commit
7f359212fb
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
*.data
|
||||||
|
*.wasm
|
||||||
|
|
||||||
|
spsGUI.js
|
||||||
|
|
||||||
|
test.js
|
6
.gitmodules
vendored
Normal file
6
.gitmodules
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[submodule "imgui"]
|
||||||
|
path = imgui
|
||||||
|
url = https://github.com/ocornut/imgui.git
|
||||||
|
[submodule "implot"]
|
||||||
|
path = implot
|
||||||
|
url = https://github.com/epezent/implot.git
|
16
.vscode/c_cpp_properties.json
vendored
Normal file
16
.vscode/c_cpp_properties.json
vendored
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Linux",
|
||||||
|
"includePath": [
|
||||||
|
"${workspaceFolder}/**"
|
||||||
|
],
|
||||||
|
"defines": [],
|
||||||
|
"compilerPath": "/usr/bin/gcc",
|
||||||
|
"cStandard": "c17",
|
||||||
|
"cppStandard": "gnu++17",
|
||||||
|
"intelliSenseMode": "linux-gcc-x64"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version": 4
|
||||||
|
}
|
20
Makefile
Normal file
20
Makefile
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
CXX = em++
|
||||||
|
OUTPUT = spsGUI.js
|
||||||
|
IMGUI_DIR = imgui
|
||||||
|
|
||||||
|
SOURCES = spsGUI.cpp
|
||||||
|
SOURCES += implot/implot.cpp implot/implot_items.cpp
|
||||||
|
SOURCES += $(IMGUI_DIR)/backends/imgui_impl_glfw.cpp $(IMGUI_DIR)/backends/imgui_impl_opengl3.cpp
|
||||||
|
SOURCES += $(IMGUI_DIR)/imgui.cpp $(IMGUI_DIR)/imgui_draw.cpp $(IMGUI_DIR)/imgui_demo.cpp $(IMGUI_DIR)/imgui_widgets.cpp $(IMGUI_DIR)/imgui_tables.cpp
|
||||||
|
|
||||||
|
LIBS = -lGL
|
||||||
|
WEBGL_VER = -s USE_WEBGL2=1 -s USE_GLFW=3 -s FULL_ES3=1
|
||||||
|
USE_WASM = -s WASM=1
|
||||||
|
|
||||||
|
all: $(SOURCES) $(OUTPUT)
|
||||||
|
|
||||||
|
$(OUTPUT): $(SOURCES)
|
||||||
|
$(CXX) $(SOURCES) -std=c++11 -o $(OUTPUT) $(LIBS) $(WEBGL_VER) -O2 $(USE_WASM) -Iimplot -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(OUTPUT)
|
1
imgui
Submodule
1
imgui
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 79d6f4e211f245de24ab7c3a58f33261bd7931bf
|
1
implot
Submodule
1
implot
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit cc5e1daa5c7f2335a9460ae79c829011dc5cef2d
|
53
index.html
Normal file
53
index.html
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="en-us">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<title>WebGui Demo</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: arial;
|
||||||
|
margin: 0;
|
||||||
|
padding: none;
|
||||||
|
}
|
||||||
|
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; }
|
||||||
|
div.emscripten { text-align: center; }
|
||||||
|
div.emscripten_border { border: none; }
|
||||||
|
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */
|
||||||
|
canvas.emscripten { border: 0px none; background-color: black; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="emscripten_border">
|
||||||
|
<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()"></canvas>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type='text/javascript'>
|
||||||
|
var Module = {
|
||||||
|
preRun: [],
|
||||||
|
postRun: [],
|
||||||
|
print: (function() {})(),
|
||||||
|
printErr: function(text) {},
|
||||||
|
canvas: (function() {
|
||||||
|
var canvas = document.getElementById('canvas');
|
||||||
|
// As a default initial behavior, pop up an alert when webgl context is lost. To make your
|
||||||
|
// application robust, you may want to override this behavior before shipping!
|
||||||
|
// See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
|
||||||
|
canvas.addEventListener("webglcontextlost", function(e) { alert('WebGL context lost. You will need to reload the page.'); e.preventDefault(); }, false);
|
||||||
|
return canvas;
|
||||||
|
})(),
|
||||||
|
setStatus: function(text) {},
|
||||||
|
totalDependencies: 0,
|
||||||
|
monitorRunDependencies: function(left) {}
|
||||||
|
};
|
||||||
|
window.addEventListener('resize', js_resizeCanvas, false);
|
||||||
|
function js_resizeCanvas() {
|
||||||
|
document.getElementById('canvas').width = window.innerWidth;
|
||||||
|
document.getElementById('canvas').height = window.innerHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<script async type="text/javascript" src="spsGUI.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
161
spsGUI.cpp
Normal file
161
spsGUI.cpp
Normal file
|
@ -0,0 +1,161 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#ifdef __EMSCRIPTEN__
|
||||||
|
#include <emscripten.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define GLFW_INCLUDE_ES3
|
||||||
|
#include <GLES3/gl3.h>
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
#include "imgui.h"
|
||||||
|
#include "imgui_impl_opengl3.h"
|
||||||
|
#include "imgui_impl_glfw.h"
|
||||||
|
|
||||||
|
#ifndef IMPLOT_DISABLE_OBSOLETE_FUNCTIONS
|
||||||
|
#define IMPLOT_DISABLE_OBSOLETE_FUNCTIONS
|
||||||
|
#endif
|
||||||
|
#include "implot.h"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstring>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
GLFWwindow* g_window;
|
||||||
|
ImVec4 clear_color = ImVec4(0xCE/255., 0xB8/255., 0x88/255., 1.00f);
|
||||||
|
int g_width;
|
||||||
|
int g_height;
|
||||||
|
// Function used by c++ to get the size of the html canvas
|
||||||
|
EM_JS(int, canvas_get_width, (), {
|
||||||
|
return Module.canvas.width;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Function used by c++ to get the size of the html canvas
|
||||||
|
EM_JS(int, canvas_get_height, (), {
|
||||||
|
return Module.canvas.height;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Function called by javascript
|
||||||
|
EM_JS(void, resizeCanvas, (), {
|
||||||
|
js_resizeCanvas();
|
||||||
|
});
|
||||||
|
|
||||||
|
void on_size_changed(){
|
||||||
|
glfwSetWindowSize(g_window, g_width, g_height);
|
||||||
|
|
||||||
|
ImGui::SetCurrentContext(ImGui::GetCurrentContext());
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop(){
|
||||||
|
|
||||||
|
int width = canvas_get_width();
|
||||||
|
int height = canvas_get_height();
|
||||||
|
|
||||||
|
if (width != g_width || height != g_height){
|
||||||
|
g_width = width;
|
||||||
|
g_height = height;
|
||||||
|
on_size_changed();
|
||||||
|
}
|
||||||
|
|
||||||
|
glfwPollEvents();
|
||||||
|
|
||||||
|
ImGui_ImplOpenGL3_NewFrame();
|
||||||
|
ImGui_ImplGlfw_NewFrame();
|
||||||
|
ImGui::NewFrame();
|
||||||
|
|
||||||
|
// Debug Window
|
||||||
|
{
|
||||||
|
ImGui::SetNextWindowSize(ImVec2(400, 100), ImGuiCond_FirstUseEver);
|
||||||
|
ImGui::SetNextWindowPos(ImVec2(1000, 100), ImGuiCond_FirstUseEver);
|
||||||
|
ImGui::Begin("Debug");
|
||||||
|
ImGui::Text("Hello, world!"); // Display some text (you can use a format string too)
|
||||||
|
ImGui::ColorEdit3("bg color", (float*)&clear_color); // Edit 3 floats representing a color
|
||||||
|
|
||||||
|
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate);
|
||||||
|
ImGui::End();
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::Render();
|
||||||
|
|
||||||
|
int display_w, display_h;
|
||||||
|
glfwMakeContextCurrent(g_window);
|
||||||
|
glfwGetFramebufferSize(g_window, &display_w, &display_h);
|
||||||
|
glViewport(0, 0, display_w, display_h);
|
||||||
|
glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
|
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
|
||||||
|
glfwMakeContextCurrent(g_window);
|
||||||
|
}
|
||||||
|
|
||||||
|
//^ #########################################################
|
||||||
|
int init_gl(){
|
||||||
|
if( !glfwInit() ){
|
||||||
|
fprintf( stderr, "Failed to initialize GLFW\n" );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // We don't want the old OpenGL
|
||||||
|
|
||||||
|
// Open a window and create its OpenGL context
|
||||||
|
int canvasWidth = g_width;
|
||||||
|
int canvasHeight = g_height;
|
||||||
|
g_window = glfwCreateWindow(canvasWidth, canvasHeight, "Woods-Saxon Calculation Demo", NULL, NULL);
|
||||||
|
if( g_window == NULL ){
|
||||||
|
fprintf( stderr, "Failed to open GLFW window.\n" );
|
||||||
|
glfwTerminate();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
glfwMakeContextCurrent(g_window); // Initialize GLEW
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int init_imgui(){
|
||||||
|
|
||||||
|
// Setup Dear ImGui binding
|
||||||
|
IMGUI_CHECKVERSION();
|
||||||
|
ImGui::CreateContext();
|
||||||
|
ImGui_ImplGlfw_InitForOpenGL(g_window, true);
|
||||||
|
ImGui_ImplOpenGL3_Init();
|
||||||
|
|
||||||
|
ImPlot::CreateContext();
|
||||||
|
|
||||||
|
// Setup style
|
||||||
|
//ImGui::StyleColorsDark();
|
||||||
|
ImGui::StyleColorsLight();
|
||||||
|
|
||||||
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
|
|
||||||
|
resizeCanvas();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int init(){
|
||||||
|
init_gl();
|
||||||
|
init_imgui();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void quit(){
|
||||||
|
glfwTerminate();
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" int main(int argc, char** argv){
|
||||||
|
|
||||||
|
g_width = canvas_get_width();
|
||||||
|
g_height = canvas_get_height();
|
||||||
|
if (init() != 0) return 1;
|
||||||
|
|
||||||
|
#ifdef __EMSCRIPTEN__
|
||||||
|
emscripten_set_main_loop(loop, 0, 1);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
quit();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user