forked from vurtun/nuklear
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'lumonix-glfw_opengl4_demo'
- Loading branch information
Showing
3 changed files
with
895 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
# Install | ||
BIN = demo | ||
|
||
# Flags | ||
CFLAGS += -std=c99 -pedantic -O2 | ||
|
||
SRC = main.c | ||
OBJ = $(SRC:.c=.o) | ||
|
||
ifeq ($(OS),Windows_NT) | ||
BIN := $(BIN).exe | ||
LIBS = -lglfw3 -lopengl32 -lm -lGLU32 -lGLEW32 | ||
else | ||
UNAME_S := $(shell uname -s) | ||
GLFW3 := $(shell pkg-config --libs glfw3) | ||
ifeq ($(UNAME_S),Darwin) | ||
LIBS := $(GLFW3) -framework OpenGL -framework Cocoa -framework IOKit -framework CoreVideo -lm -lGLEW -L/usr/local/lib | ||
else | ||
LIBS = $(GLFW3) -lGL -lm -lGLU -lGLEW | ||
endif | ||
endif | ||
|
||
$(BIN): | ||
@mkdir -p bin | ||
rm -f bin/$(BIN) $(OBJS) | ||
$(CC) $(SRC) $(CFLAGS) -o bin/$(BIN) $(LIBS) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,222 @@ | ||
/* nuklear - 1.32.0 - public domain */ | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <stdint.h> | ||
#include <stdarg.h> | ||
#include <string.h> | ||
#include <math.h> | ||
#include <assert.h> | ||
#include <math.h> | ||
#include <limits.h> | ||
#include <time.h> | ||
|
||
#include <GL/glew.h> | ||
#include <GLFW/glfw3.h> | ||
|
||
#define NK_INCLUDE_FIXED_TYPES | ||
#define NK_INCLUDE_STANDARD_IO | ||
#define NK_INCLUDE_STANDARD_VARARGS | ||
#define NK_INCLUDE_DEFAULT_ALLOCATOR | ||
#define NK_INCLUDE_VERTEX_BUFFER_OUTPUT | ||
#define NK_INCLUDE_FONT_BAKING | ||
#define NK_INCLUDE_DEFAULT_FONT | ||
#define NK_IMPLEMENTATION | ||
#define NK_GLFW_GL4_IMPLEMENTATION | ||
#include "../../nuklear.h" | ||
#include "nuklear_glfw_gl4.h" | ||
|
||
#define WINDOW_WIDTH 1200 | ||
#define WINDOW_HEIGHT 800 | ||
|
||
#define MAX_VERTEX_BUFFER 512 * 1024 | ||
#define MAX_ELEMENT_BUFFER 128 * 1024 | ||
|
||
/* =============================================================== | ||
* | ||
* EXAMPLE | ||
* | ||
* ===============================================================*/ | ||
/* This are some code examples to provide a small overview of what can be | ||
* done with this library. To try out an example uncomment the defines */ | ||
/*#define INCLUDE_ALL */ | ||
/*#define INCLUDE_STYLE */ | ||
/*#define INCLUDE_CALCULATOR */ | ||
/*#define INCLUDE_OVERVIEW */ | ||
/*#define INCLUDE_NODE_EDITOR */ | ||
|
||
#ifdef INCLUDE_ALL | ||
#define INCLUDE_STYLE | ||
#define INCLUDE_CALCULATOR | ||
#define INCLUDE_OVERVIEW | ||
#define INCLUDE_NODE_EDITOR | ||
#endif | ||
|
||
#ifdef INCLUDE_STYLE | ||
#include "../style.c" | ||
#endif | ||
#ifdef INCLUDE_CALCULATOR | ||
#include "../calculator.c" | ||
#endif | ||
#ifdef INCLUDE_OVERVIEW | ||
#include "../overview.c" | ||
#endif | ||
#ifdef INCLUDE_NODE_EDITOR | ||
#include "../node_editor.c" | ||
#endif | ||
|
||
/* =============================================================== | ||
* | ||
* DEMO | ||
* | ||
* ===============================================================*/ | ||
static void error_callback(int e, const char *d) | ||
{printf("Error %d: %s\n", e, d);} | ||
|
||
int main(void) | ||
{ | ||
/* Platform */ | ||
static GLFWwindow *win; | ||
int width = 0, height = 0; | ||
struct nk_context *ctx; | ||
struct nk_colorf bg; | ||
struct nk_image img; | ||
|
||
/* GLFW */ | ||
glfwSetErrorCallback(error_callback); | ||
if (!glfwInit()) { | ||
fprintf(stdout, "[GFLW] failed to init!\n"); | ||
exit(1); | ||
} | ||
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); | ||
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5); | ||
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); | ||
#ifdef __APPLE__ | ||
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); | ||
#endif | ||
win = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "Demo", NULL, NULL); | ||
glfwMakeContextCurrent(win); | ||
glfwGetWindowSize(win, &width, &height); | ||
|
||
/* OpenGL */ | ||
glViewport(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); | ||
glewExperimental = 1; | ||
if (glewInit() != GLEW_OK) { | ||
fprintf(stderr, "Failed to setup GLEW\n"); | ||
exit(1); | ||
} | ||
|
||
ctx = nk_glfw3_init(win, NK_GLFW3_INSTALL_CALLBACKS, MAX_VERTEX_BUFFER, MAX_ELEMENT_BUFFER); | ||
/* Load Fonts: if none of these are loaded a default font will be used */ | ||
/* Load Cursor: if you uncomment cursor loading please hide the cursor */ | ||
{struct nk_font_atlas *atlas; | ||
nk_glfw3_font_stash_begin(&atlas); | ||
/*struct nk_font *droid = nk_font_atlas_add_from_file(atlas, "../../../extra_font/DroidSans.ttf", 14, 0);*/ | ||
/*struct nk_font *roboto = nk_font_atlas_add_from_file(atlas, "../../../extra_font/Roboto-Regular.ttf", 14, 0);*/ | ||
/*struct nk_font *future = nk_font_atlas_add_from_file(atlas, "../../../extra_font/kenvector_future_thin.ttf", 13, 0);*/ | ||
/*struct nk_font *clean = nk_font_atlas_add_from_file(atlas, "../../../extra_font/ProggyClean.ttf", 12, 0);*/ | ||
/*struct nk_font *tiny = nk_font_atlas_add_from_file(atlas, "../../../extra_font/ProggyTiny.ttf", 10, 0);*/ | ||
/*struct nk_font *cousine = nk_font_atlas_add_from_file(atlas, "../../../extra_font/Cousine-Regular.ttf", 13, 0);*/ | ||
nk_glfw3_font_stash_end(); | ||
/*nk_style_load_all_cursors(ctx, atlas->cursors);*/ | ||
/*nk_style_set_font(ctx, &droid->handle);*/} | ||
|
||
#ifdef INCLUDE_STYLE | ||
/*set_style(ctx, THEME_WHITE);*/ | ||
/*set_style(ctx, THEME_RED);*/ | ||
/*set_style(ctx, THEME_BLUE);*/ | ||
/*set_style(ctx, THEME_DARK);*/ | ||
#endif | ||
|
||
/* Create bindless texture. | ||
* The index returned is not the opengl resource id. | ||
* IF you need the GL resource id use: nk_glfw3_get_tex_ogl_id() */ | ||
{int tex_index = 0; | ||
enum {tex_width = 256, tex_height = 256}; | ||
char pixels[tex_width * tex_height * 4]; | ||
memset(pixels, 128, sizeof(pixels)); | ||
tex_index = nk_glfw3_create_texture(pixels, tex_width, tex_height); | ||
img = nk_image_id(tex_index);} | ||
|
||
bg.r = 0.10f, bg.g = 0.18f, bg.b = 0.24f, bg.a = 1.0f; | ||
while (!glfwWindowShouldClose(win)) | ||
{ | ||
/* Input */ | ||
glfwPollEvents(); | ||
nk_glfw3_new_frame(); | ||
|
||
/* GUI */ | ||
if (nk_begin(ctx, "Demo", nk_rect(50, 50, 230, 250), | ||
NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_SCALABLE| | ||
NK_WINDOW_MINIMIZABLE|NK_WINDOW_TITLE)) | ||
{ | ||
enum {EASY, HARD}; | ||
static int op = EASY; | ||
static int property = 20; | ||
nk_layout_row_static(ctx, 30, 80, 1); | ||
if (nk_button_label(ctx, "button")) | ||
fprintf(stdout, "button pressed\n"); | ||
|
||
nk_layout_row_dynamic(ctx, 30, 2); | ||
if (nk_option_label(ctx, "easy", op == EASY)) op = EASY; | ||
if (nk_option_label(ctx, "hard", op == HARD)) op = HARD; | ||
|
||
nk_layout_row_dynamic(ctx, 25, 1); | ||
nk_property_int(ctx, "Compression:", 0, &property, 100, 10, 1); | ||
|
||
nk_layout_row_dynamic(ctx, 20, 1); | ||
nk_label(ctx, "background:", NK_TEXT_LEFT); | ||
nk_layout_row_dynamic(ctx, 25, 1); | ||
if (nk_combo_begin_color(ctx, nk_rgb_cf(bg), nk_vec2(nk_widget_width(ctx),400))) { | ||
nk_layout_row_dynamic(ctx, 120, 1); | ||
bg = nk_color_picker(ctx, bg, NK_RGBA); | ||
nk_layout_row_dynamic(ctx, 25, 1); | ||
bg.r = nk_propertyf(ctx, "#R:", 0, bg.r, 1.0f, 0.01f,0.005f); | ||
bg.g = nk_propertyf(ctx, "#G:", 0, bg.g, 1.0f, 0.01f,0.005f); | ||
bg.b = nk_propertyf(ctx, "#B:", 0, bg.b, 1.0f, 0.01f,0.005f); | ||
bg.a = nk_propertyf(ctx, "#A:", 0, bg.a, 1.0f, 0.01f,0.005f); | ||
nk_combo_end(ctx); | ||
} | ||
} | ||
nk_end(ctx); | ||
|
||
/* Bindless Texture */ | ||
if (nk_begin(ctx, "Texture", nk_rect(250, 150, 230, 250), | ||
NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_SCALABLE| | ||
NK_WINDOW_MINIMIZABLE|NK_WINDOW_TITLE)) | ||
{ | ||
struct nk_command_buffer *canvas = nk_window_get_canvas(ctx); | ||
struct nk_rect total_space = nk_window_get_content_region(ctx); | ||
nk_draw_image(canvas, total_space, &img, nk_white); | ||
} | ||
nk_end(ctx); | ||
|
||
/* -------------- EXAMPLES ---------------- */ | ||
#ifdef INCLUDE_CALCULATOR | ||
calculator(ctx); | ||
#endif | ||
#ifdef INCLUDE_OVERVIEW | ||
overview(ctx); | ||
#endif | ||
#ifdef INCLUDE_NODE_EDITOR | ||
node_editor(ctx); | ||
#endif | ||
/* ----------------------------------------- */ | ||
|
||
/* Draw */ | ||
glfwGetWindowSize(win, &width, &height); | ||
glViewport(0, 0, width, height); | ||
glClear(GL_COLOR_BUFFER_BIT); | ||
glClearColor(bg.r, bg.g, bg.b, bg.a); | ||
/* IMPORTANT: `nk_glfw_render` modifies some global OpenGL state | ||
* with blending, scissor, face culling, depth test and viewport and | ||
* defaults everything back into a default state. | ||
* Make sure to either a.) save and restore or b.) reset your own state after | ||
* rendering the UI. */ | ||
nk_glfw3_render(NK_ANTI_ALIASING_ON); | ||
glfwSwapBuffers(win); | ||
} | ||
nk_glfw3_shutdown(); | ||
glfwTerminate(); | ||
return 0; | ||
} | ||
|
Oops, something went wrong.