Skip to content

Commit c2bf9ab

Browse files
Merge pull request #30 from RSGL/main
fix opengles 2 support
2 parents cce61bc + 388d71c commit c2bf9ab

File tree

11 files changed

+208
-22
lines changed

11 files changed

+208
-22
lines changed

.github/workflows/linux.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,6 @@ jobs:
5151
run: |
5252
sudo apt-get update -qq
5353
sudo apt-get install gcc-multilib
54-
sudo apt-get install -y --no-install-recommends libx11-dev mesa-common-dev libglx-dev libxcursor-dev mesa-vulkan-drivers libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libxext-dev libxfixes-dev libwayland-dev libxkbcommon-dev
54+
sudo apt-get install -y --no-install-recommends libx11-dev mesa-common-dev libglx-dev libxcursor-dev mesa-vulkan-drivers libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libxext-dev libxfixes-dev libwayland-dev libxkbcommon-dev libgles2-mesa-dev
5555
cd examples && make
5656
if: matrix.bits == 64

.github/workflows/web.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ jobs:
2323

2424
- name: Compile to WebAssembly
2525
run: |
26-
echo "not building (for now)"
27-
# make CC=emcc
26+
cd examples && make CC=emcc
2827
2928
- name: Deploy Pages
3029
if: github.event_name != 'pull_request'

examples/Makefile

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ OS_DIR = \\
1919
WARNINGS = -Wall -Werror
2020
detected_OS = windows
2121

22+
NO_GLES = 1
23+
2224
# not using a cross compiler
2325
ifeq (,$(filter $(CC),x86_64-w64-mingw32-gcc i686-w64-mingw32-gcc x86_64-w64-mingw32-g++ /opt/msvc/bin/x64/cl.exe /opt/msvc/bin/x86/cl.exe))
2426
detected_OS := $(shell uname 2>/dev/null || echo Unknown)
@@ -31,6 +33,7 @@ ifeq (,$(filter $(CC),x86_64-w64-mingw32-gcc i686-w64-mingw32-gcc x86_64-w64-min
3133
WARNINGS = -Wall
3234
endif
3335
ifeq ($(detected_OS),Linux)
36+
NO_GLES = 0
3437
LIBS := -lXrandr -lX11 -lm -lGL -ldl -lpthread
3538
EXT =
3639
OS_DIR = /
@@ -53,16 +56,17 @@ ifneq (,$(filter $(CC),cl /opt/msvc/bin/x64/cl.exe /opt/msvc/bin/x86/cl.exe))
5356
WARNINGS =
5457
LIBS = /static
5558
else ifeq ($(CC),emcc)
59+
NO_GLES = 0
5660
LINK_GL1 = -s LEGACY_GL_EMULATION -D LEGACY_GL_EMULATION -sGL_UNSAFE_OPTS=0
5761
LINK_GL3 = -s FULL_ES3
5862
LINK_GL2 = -s FULL_ES2
59-
EXPORTED_JS = -s EXPORTED_RUNTIME_METHODS="['stringToNewUTF8']"
60-
LIBS = -s WASM=1 -s ASYNCIFY -s USE_WEBGL2 -s GL_SUPPORT_EXPLICIT_SWAP_CONTROL=1 $(EXPORTED_JS)
63+
# --preload-file logo.png@logo.png
64+
PRELOAD = --embed-file logo.png
65+
EXPORTED_JS = $(PRELOAD) -s EXPORTED_RUNTIME_METHODS="['stringToNewUTF8']"
66+
LIBS = -s WASM=1 -s ASYNCIFY -s GL_SUPPORT_EXPLICIT_SWAP_CONTROL=1 $(EXPORTED_JS)
6167
EXT = .js
6268
NO_GLES = 0
6369
detected_OS = web
64-
65-
LIBS += -DRSGL_GL_NO_LEGACY
6670
else ifeq (,$(filter $(CC), g++ clang++ x86_64-w64-mingw32-g++))
6771
LIBS += -std=c99
6872
endif
@@ -79,26 +83,40 @@ EXAMPLE_OUTPUTS = \
7983
basics/buffers \
8084
basics/gl11 \
8185
basics/framebuffer \
82-
86+
basics/gl2 \
8387

8488
EXAMPLE_OUTPUTS_CUSTOM = \
8589
microui_demo/microui_demo \
90+
basics/gles2 \
91+
basics/gles3 \
8692

8793

8894
all: xdg-shell.c $(EXAMPLE_OUTPUTS) $(EXAMPLE_OUTPUTS_CUSTOM)
8995

9096
examples: $(EXAMPLE_OUTPUTS) $(EXAMPLE_OUTPUTS_CUSTOM)
9197

98+
basics/gles2: basics/gles2.c ../RSGL.h ../renderers/*.h
99+
ifneq ($(NO_GLES), 1)
100+
$(CC) $(CFLAGS) -g2 $(WARNIGNS) -I../renderers/ -I../ -I./deps $< $(LIBS) -o $@$(EXT)
101+
else
102+
echo no OpenGL ES
103+
endif
92104

93-
microui_demo/microui_demo: microui_demo/microui_demo.c microui_demo/*.c ../RSGL.h ../renderers/*.h
94-
$(CC) $(CFLAGS) -g3 $(WARNIGNS) microui_demo/microui.c -I../renderers/ -I../ -I./deps $< $(LIBS) -o $@$(EXT)
105+
basics/gles3: basics/gles3.c ../RSGL.h ../renderers/*.h
106+
ifneq ($(NO_GLES), 1)
107+
$(CC) $(CFLAGS) -g2 $(WARNIGNS) -I../renderers/ -I../ -I./deps $< $(LIBS) -o $@$(EXT)
108+
else
109+
echo no OpenGL ES
110+
endif
95111

112+
microui_demo/microui_demo: microui_demo/microui_demo.c microui_demo/*.c ../RSGL.h ../renderers/*.h
113+
$(CC) $(CFLAGS) -g2 $(WARNIGNS) microui_demo/microui.c -I../renderers/ -I../ -I./deps $< $(LIBS) -o $@$(EXT)
96114

97115
advanced/glfw: advanced/glfw.c ../RSGL.h ../renderers/*.h
98-
$(CC) $(CFLAGS) -g3 $(WARNIGNS) -I../renderers/ -I../ -I./deps $< $(LIBS) -lglfw -o $@$(EXT)
116+
$(CC) $(CFLAGS) -g2 $(WARNIGNS) -I../renderers/ -I../ -I./deps $< $(LIBS) -lglfw -o $@$(EXT)
99117

100118
$(EXAMPLE_OUTPUTS): %: %.c ../RSGL.h ../renderers/*.h
101-
$(CC) $(WARNINGS) -g3 -I../renderers/ -I../ -I./deps $< $(LIBS) $(LINK_GL3) $(CFLAGS) -o $@$(EXT)
119+
$(CC) $(WARNINGS) -g2 -I../renderers/ -I../ -I./deps $< $(LIBS) $(LINK_GL3) $(CFLAGS) -o $@$(EXT)
102120

103121
debug: all
104122
@for exe in $(EXAMPLE_OUTPUTS); do \

examples/basics/basic.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
#define RSGL_IMPLEMENTATION
22
#include "RSGL.h"
33
#include "RSGL_gl.h"
4+
5+
#ifndef __EMSCRIPTEN__
46
#include "RSGL_gl1.h"
7+
#endif
58

69
#define RGFW_INT_DEFINED
710
#define RGFW_OPENGL
@@ -17,8 +20,13 @@ int main() {
1720

1821
RGFW_window* window = RGFW_createWindow("window", 0, 0, 500, 500, RGFW_windowCenter | RGFW_windowOpenGL);
1922

23+
#ifndef __EMSCRIPTEN__
2024
RSGL_renderer* renderer_opengl11 = RSGL_renderer_init(RSGL_GL1_rendererProc(), (void*)RGFW_getProcAddress_OpenGL);
21-
RSGL_renderer_viewport(renderer_opengl11, RSGL_RECT(0, 0, 500, 500));
25+
#else
26+
RSGL_renderer* renderer_opengl11 = RSGL_renderer_init(RSGL_GL_rendererProc(), (void*)RGFW_getProcAddress_OpenGL);
27+
#endif
28+
29+
RSGL_renderer_viewport(renderer_opengl11, RSGL_RECT(0, 0, 500, 500));
2230
RSGL_renderer_updateSize(renderer_opengl11, 500, 500);
2331

2432
RSGL_renderer* renderer_opengl = RSGL_renderer_init(RSGL_GL_rendererProc(), (void*)RGFW_getProcAddress_OpenGL);

examples/basics/cube.c

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ int main(void) {
5151

5252
view.type = RSGL_viewType3D;
5353
view.view3D.up = RSGL_VEC3D(0, 10, 0);
54-
view.view3D.target = RSGL_VEC3D(0, 0, 10);
54+
view.view3D.target = RSGL_VEC3D(3, 0, 10);
5555
view.view3D.pos = RSGL_VEC3D(-1, 0, 1);
5656

5757
RSGL_mat4 viewMat = RSGL_view_getMatrix(&view);
@@ -61,15 +61,35 @@ int main(void) {
6161

6262
while (RGFW_window_shouldClose(win) == 0) {
6363
RGFW_pollEvents();
64-
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
6564

65+
if (RGFW_isMouseDown(RGFW_mouseLeft)) {
66+
float x, y;
67+
RGFW_getMouseVector(&x, &y);
68+
69+
view.view3D.target.x += x;
70+
view.view3D.target.y += y;
71+
72+
RSGL_mat4 viewMat = RSGL_view_getMatrix(&view);
73+
RSGL_renderer_setViewMatrix(renderer, viewMat);
74+
}
75+
76+
float scrollY;
77+
RGFW_getMouseScroll(NULL, &scrollY);
78+
if (scrollY) {
79+
view.view3D.pos.z += scrollY / 10.0f;
80+
// view.view3D.up.z += scrollY / 10.0f;
81+
82+
RSGL_mat4 viewMat = RSGL_view_getMatrix(&view);
83+
RSGL_renderer_setViewMatrix(renderer, viewMat);
84+
}
85+
86+
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
6687

6788
RSGL_renderer_clear(renderer, RSGL_RGB(80, 80, 110));
6889

6990
RSGL_renderer_setRotate(renderer, rotate);
70-
rotate.y += 0.01;
7191
RSGL_renderer_setColor(renderer, RSGL_RGB(255, 0, 0));
72-
RSGL_drawCube(renderer, RSGL_CUBE(0, 300, 1, 200, 200, 1));
92+
RSGL_drawCube(renderer, RSGL_CUBE(0, 300, 1.0, 200, 200, 1));
7393

7494
RSGL_renderer_render(renderer);
7595
RGFW_window_swapBuffers_OpenGL(win);

examples/basics/gl11.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@
22
#define RFONT_IMPLEMENTATION
33
#define RSGL_IMPLEMENTATION
44
#include "RSGL.h"
5+
6+
#ifndef __EMSCRIPTEN__
57
#include "RSGL_gl1.h"
8+
#else
9+
#include "RSGL_gl.h"
10+
#endif
611

712
#define RGFW_INT_DEFINED
813
#define RGFW_OPENGL
@@ -35,8 +40,12 @@ void rollDie(RSGL_renderer* renderer, i32* index, float* value) {
3540
int main() {
3641
RGFW_window* window = RGFW_createWindow("window", 0, 0, 500, 500, RGFW_windowCenter | RGFW_windowOpenGL);
3742

43+
#ifndef __EMSCRIPTEN__
3844
RSGL_renderer* renderer = RSGL_renderer_init(RSGL_GL1_rendererProc(), (void*)RGFW_getProcAddress_OpenGL);
39-
RSGL_renderer_viewport(renderer, RSGL_RECT(0, 0, 500, 500));
45+
#else
46+
RSGL_renderer* renderer = RSGL_renderer_init(RSGL_GL_rendererProc(), (void*)RGFW_getProcAddress_OpenGL);
47+
#endif
48+
RSGL_renderer_viewport(renderer, RSGL_RECT(0, 0, 500, 500));
4049
RSGL_renderer_updateSize(renderer, 500, 500);
4150

4251
int w, h, c;

examples/basics/gl2.c

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#define RSGL_GL2
2+
#define RSGL_DEBUG
3+
#define RSGL_IMPLEMENTATION
4+
#include "RSGL.h"
5+
#include "RSGL_gl.h"
6+
7+
#define RGFW_INT_DEFINED
8+
#define RGFW_OPENGL
9+
#define RGFW_IMPLEMENTATION
10+
#include "examples/deps/RGFW.h"
11+
12+
int main() {
13+
RGFW_glHints* hints = RGFW_getGlobalHints_OpenGL();
14+
hints->major = 2;
15+
hints->minor = 0;
16+
RGFW_setGlobalHints_OpenGL(hints);
17+
18+
RGFW_window* window = RGFW_createWindow("window", 0, 0, 500, 500, RGFW_windowCenter | RGFW_windowOpenGL);
19+
20+
RSGL_renderer* renderer = RSGL_renderer_init(RSGL_GL_rendererProc(), (void*)RGFW_getProcAddress_OpenGL);
21+
22+
RSGL_renderer_viewport(renderer, RSGL_RECT(0, 0, 500, 500));
23+
RSGL_renderer_updateSize(renderer, 500, 500);
24+
25+
while (RGFW_window_shouldClose(window) == RGFW_FALSE) {
26+
RGFW_pollEvents();
27+
28+
RSGL_renderer_clear(renderer, RSGL_RGB(10, 50, 100));
29+
30+
RSGL_renderer_setColor(renderer, RSGL_RGB(255, 0, 0));
31+
RSGL_drawRect(renderer, RSGL_RECT(200, 200, 200, 200));
32+
RSGL_renderer_render(renderer);
33+
34+
RGFW_window_swapBuffers_OpenGL(window);
35+
}
36+
37+
RSGL_renderer_free(renderer);
38+
RGFW_window_close(window);
39+
}

examples/basics/gles2.c

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#define RSGL_DEBUG
2+
#define RSGL_GLES2
3+
#define RSGL_IMPLEMENTATION
4+
#include "RSGL.h"
5+
#include "RSGL_gl.h"
6+
7+
#define RGFW_INT_DEFINED
8+
#define RGFW_OPENGL
9+
#define RGFW_IMPLEMENTATION
10+
#include "examples/deps/RGFW.h"
11+
12+
int main() {
13+
RGFW_glHints* hints = RGFW_getGlobalHints_OpenGL();
14+
hints->major = 2;
15+
hints->minor = 0;
16+
hints->profile = RGFW_glES;
17+
RGFW_setGlobalHints_OpenGL(hints);
18+
19+
RGFW_window* window = RGFW_createWindow("window", 0, 0, 500, 500, RGFW_windowCenter | RGFW_windowOpenGL);
20+
21+
RSGL_renderer* renderer = RSGL_renderer_init(RSGL_GL_rendererProc(), (void*)RGFW_getProcAddress_OpenGL);
22+
23+
RSGL_renderer_viewport(renderer, RSGL_RECT(0, 0, 500, 500));
24+
RSGL_renderer_updateSize(renderer, 500, 500);
25+
26+
while (RGFW_window_shouldClose(window) == RGFW_FALSE) {
27+
RGFW_pollEvents();
28+
29+
RSGL_renderer_clear(renderer, RSGL_RGB(10, 50, 100));
30+
31+
RSGL_renderer_setColor(renderer, RSGL_RGB(255, 0, 0));
32+
RSGL_drawRect(renderer, RSGL_RECT(200, 200, 200, 200));
33+
RSGL_renderer_render(renderer);
34+
35+
RGFW_window_swapBuffers_OpenGL(window);
36+
}
37+
38+
RSGL_renderer_free(renderer);
39+
RGFW_window_close(window);
40+
}

examples/basics/gles3.c

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#define RSGL_DEBUG
2+
#define RSGL_GLES3
3+
#define RSGL_IMPLEMENTATION
4+
#include "RSGL.h"
5+
#include "RSGL_gl.h"
6+
7+
#define RGFW_INT_DEFINED
8+
#define RGFW_OPENGL
9+
#define RGFW_IMPLEMENTATION
10+
#include "examples/deps/RGFW.h"
11+
12+
int main() {
13+
RGFW_glHints* hints = RGFW_getGlobalHints_OpenGL();
14+
hints->major = 3;
15+
hints->minor = 0;
16+
hints->profile = RGFW_glES;
17+
RGFW_setGlobalHints_OpenGL(hints);
18+
19+
RGFW_window* window = RGFW_createWindow("window", 0, 0, 500, 500, RGFW_windowCenter | RGFW_windowOpenGL);
20+
21+
RSGL_renderer* renderer = RSGL_renderer_init(RSGL_GL_rendererProc(), (void*)RGFW_getProcAddress_OpenGL);
22+
23+
RSGL_renderer_viewport(renderer, RSGL_RECT(0, 0, 500, 500));
24+
RSGL_renderer_updateSize(renderer, 500, 500);
25+
26+
while (RGFW_window_shouldClose(window) == RGFW_FALSE) {
27+
RGFW_pollEvents();
28+
29+
RSGL_renderer_clear(renderer, RSGL_RGB(10, 50, 100));
30+
31+
RSGL_renderer_setColor(renderer, RSGL_RGB(255, 0, 0));
32+
RSGL_drawRect(renderer, RSGL_RECT(200, 200, 200, 200));
33+
RSGL_renderer_render(renderer);
34+
35+
RGFW_window_swapBuffers_OpenGL(window);
36+
}
37+
38+
RSGL_renderer_free(renderer);
39+
RGFW_window_close(window);
40+
}

examples/basics/shapes.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,15 @@
1717

1818
#include <stdio.h>
1919

20-
int main(void) {
21-
RGFW_window* win = RGFW_createWindow("RSGL shapes example", 0, 0, 500, 500, RGFW_windowCenter | RGFW_windowOpenGL);
2220

21+
int main(void) {
22+
RGFW_window* win = RGFW_createWindow("RSGL shapes example", 0, 0, 500, 500, RGFW_windowCenter | RGFW_windowOpenGL);
2323
RSGL_renderer* renderer = RSGL_renderer_init(RSGL_GL_rendererProc(), (void*)RGFW_getProcAddress_OpenGL);
24+
2425
RSGL_renderer_viewport(renderer, RSGL_RECT(0, 0, 500, 500));
2526
RSGL_renderer_updateSize(renderer, 500, 500);
2627

2728
bool fill = true;
28-
2929
RSGL_vec3D rotate = RSGL_VEC3D(0, 0, 0);
3030
while (RGFW_window_shouldClose(win) == RGFW_FALSE) {
3131
RGFW_pollEvents();

0 commit comments

Comments
 (0)