-
-
Notifications
You must be signed in to change notification settings - Fork 10.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Backends: SDL3: update to run with SDL3. Examples: Add SDL3+Gl exampl…
…e. Remove some version checks. (#6146) More update upcoming in docking branch.
- Loading branch information
Showing
12 changed files
with
780 additions
and
102 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
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
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
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
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,84 @@ | ||
# | ||
# Cross Platform Makefile | ||
# Compatible with MSYS2/MINGW, Ubuntu 14.04.1 and Mac OS X | ||
# | ||
# You will need SDL3 (http://www.libsdl.org) which is still unreleased/unpackaged. | ||
|
||
#CXX = g++ | ||
#CXX = clang++ | ||
|
||
EXE = example_sdl3_opengl3 | ||
IMGUI_DIR = ../.. | ||
SOURCES = main.cpp | ||
SOURCES += $(IMGUI_DIR)/imgui.cpp $(IMGUI_DIR)/imgui_demo.cpp $(IMGUI_DIR)/imgui_draw.cpp $(IMGUI_DIR)/imgui_tables.cpp $(IMGUI_DIR)/imgui_widgets.cpp | ||
SOURCES += $(IMGUI_DIR)/backends/imgui_impl_sdl3.cpp $(IMGUI_DIR)/backends/imgui_impl_opengl3.cpp | ||
OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES)))) | ||
UNAME_S := $(shell uname -s) | ||
LINUX_GL_LIBS = -lGL | ||
|
||
CXXFLAGS = -std=c++11 -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends | ||
CXXFLAGS += -g -Wall -Wformat | ||
LIBS = | ||
|
||
##--------------------------------------------------------------------- | ||
## OPENGL ES | ||
##--------------------------------------------------------------------- | ||
|
||
## This assumes a GL ES library available in the system, e.g. libGLESv2.so | ||
# CXXFLAGS += -DIMGUI_IMPL_OPENGL_ES2 | ||
# LINUX_GL_LIBS = -lGLESv2 | ||
## If you're on a Raspberry Pi and want to use the legacy drivers, | ||
## use the following instead: | ||
# LINUX_GL_LIBS = -L/opt/vc/lib -lbrcmGLESv2 | ||
|
||
##--------------------------------------------------------------------- | ||
## BUILD FLAGS PER PLATFORM | ||
##--------------------------------------------------------------------- | ||
|
||
ifeq ($(UNAME_S), Linux) #LINUX | ||
ECHO_MESSAGE = "Linux" | ||
LIBS += $(LINUX_GL_LIBS) -ldl `sdl3-config --libs` | ||
|
||
CXXFLAGS += `sdl3-config --cflags` | ||
CFLAGS = $(CXXFLAGS) | ||
endif | ||
|
||
ifeq ($(UNAME_S), Darwin) #APPLE | ||
ECHO_MESSAGE = "Mac OS X" | ||
LIBS += -framework OpenGL -framework Cocoa -framework IOKit -framework CoreVideo `sdl3-config --libs` | ||
LIBS += -L/usr/local/lib -L/opt/local/lib | ||
|
||
CXXFLAGS += `sdl3-config --cflags` | ||
CXXFLAGS += -I/usr/local/include -I/opt/local/include | ||
CFLAGS = $(CXXFLAGS) | ||
endif | ||
|
||
ifeq ($(OS), Windows_NT) | ||
ECHO_MESSAGE = "MinGW" | ||
LIBS += -lgdi32 -lopengl32 -limm32 `pkg-config --static --libs sdl3` | ||
|
||
CXXFLAGS += `pkg-config --cflags sdl3` | ||
CFLAGS = $(CXXFLAGS) | ||
endif | ||
|
||
##--------------------------------------------------------------------- | ||
## BUILD RULES | ||
##--------------------------------------------------------------------- | ||
|
||
%.o:%.cpp | ||
$(CXX) $(CXXFLAGS) -c -o $@ $< | ||
|
||
%.o:$(IMGUI_DIR)/%.cpp | ||
$(CXX) $(CXXFLAGS) -c -o $@ $< | ||
|
||
%.o:$(IMGUI_DIR)/backends/%.cpp | ||
$(CXX) $(CXXFLAGS) -c -o $@ $< | ||
|
||
all: $(EXE) | ||
@echo Build complete for $(ECHO_MESSAGE) | ||
|
||
$(EXE): $(OBJS) | ||
$(CXX) -o $@ $^ $(CXXFLAGS) $(LIBS) | ||
|
||
clean: | ||
rm -f $(EXE) $(OBJS) |
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,92 @@ | ||
# | ||
# Makefile to use with SDL+emscripten | ||
# See https://emscripten.org/docs/getting_started/downloads.html | ||
# for installation instructions. | ||
# | ||
# This Makefile assumes you have loaded emscripten's environment. | ||
# (On Windows, you may need to execute emsdk_env.bat or encmdprompt.bat ahead) | ||
# | ||
# Running `make -f Makefile.emscripten` will produce three files: | ||
# - web/index.html | ||
# - web/index.js | ||
# - web/index.wasm | ||
# | ||
# All three are needed to run the demo. | ||
|
||
CC = emcc | ||
CXX = em++ | ||
WEB_DIR = web | ||
EXE = $(WEB_DIR)/index.html | ||
IMGUI_DIR = ../.. | ||
SOURCES = main.cpp | ||
SOURCES += $(IMGUI_DIR)/imgui.cpp $(IMGUI_DIR)/imgui_demo.cpp $(IMGUI_DIR)/imgui_draw.cpp $(IMGUI_DIR)/imgui_tables.cpp $(IMGUI_DIR)/imgui_widgets.cpp | ||
SOURCES += $(IMGUI_DIR)/backends/imgui_impl_sdl3.cpp $(IMGUI_DIR)/backends/imgui_impl_opengl3.cpp | ||
OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES)))) | ||
UNAME_S := $(shell uname -s) | ||
CPPFLAGS = | ||
LDFLAGS = | ||
EMS = | ||
|
||
##--------------------------------------------------------------------- | ||
## EMSCRIPTEN OPTIONS | ||
##--------------------------------------------------------------------- | ||
|
||
# ("EMS" options gets added to both CPPFLAGS and LDFLAGS, whereas some options are for linker only) | ||
EMS += -s USE_SDL=2 | ||
EMS += -s DISABLE_EXCEPTION_CATCHING=1 | ||
LDFLAGS += -s WASM=1 -s ALLOW_MEMORY_GROWTH=1 -s NO_EXIT_RUNTIME=0 -s ASSERTIONS=1 | ||
|
||
# Uncomment next line to fix possible rendering bugs with Emscripten version older then 1.39.0 (https://github.com/ocornut/imgui/issues/2877) | ||
#EMS += -s BINARYEN_TRAP_MODE=clamp | ||
#EMS += -s SAFE_HEAP=1 ## Adds overhead | ||
|
||
# Emscripten allows preloading a file or folder to be accessible at runtime. | ||
# The Makefile for this example project suggests embedding the misc/fonts/ folder into our application, it will then be accessible as "/fonts" | ||
# See documentation for more details: https://emscripten.org/docs/porting/files/packaging_files.html | ||
# (Default value is 0. Set to 1 to enable file-system and include the misc/fonts/ folder as part of the build.) | ||
USE_FILE_SYSTEM ?= 0 | ||
ifeq ($(USE_FILE_SYSTEM), 0) | ||
LDFLAGS += -s NO_FILESYSTEM=1 | ||
CPPFLAGS += -DIMGUI_DISABLE_FILE_FUNCTIONS | ||
endif | ||
ifeq ($(USE_FILE_SYSTEM), 1) | ||
LDFLAGS += --no-heap-copy --preload-file ../../misc/fonts@/fonts | ||
endif | ||
|
||
##--------------------------------------------------------------------- | ||
## FINAL BUILD FLAGS | ||
##--------------------------------------------------------------------- | ||
|
||
CPPFLAGS += -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends | ||
#CPPFLAGS += -g | ||
CPPFLAGS += -Wall -Wformat -Os $(EMS) | ||
LDFLAGS += --shell-file ../libs/emscripten/shell_minimal.html | ||
LDFLAGS += $(EMS) | ||
|
||
##--------------------------------------------------------------------- | ||
## BUILD RULES | ||
##--------------------------------------------------------------------- | ||
|
||
%.o:%.cpp | ||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $< | ||
|
||
%.o:$(IMGUI_DIR)/%.cpp | ||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $< | ||
|
||
%.o:$(IMGUI_DIR)/backends/%.cpp | ||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $< | ||
|
||
all: $(EXE) | ||
@echo Build complete for $(EXE) | ||
|
||
$(WEB_DIR): | ||
mkdir $@ | ||
|
||
serve: all | ||
python3 -m http.server -d $(WEB_DIR) | ||
|
||
$(EXE): $(OBJS) $(WEB_DIR) | ||
$(CXX) -o $@ $(OBJS) $(LDFLAGS) | ||
|
||
clean: | ||
rm -rf $(OBJS) $(WEB_DIR) |
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,57 @@ | ||
|
||
# How to Build | ||
|
||
## Windows with Visual Studio's IDE | ||
|
||
Use the provided project file (.vcxproj). Add to solution (imgui_examples.sln) if necessary. | ||
|
||
## Windows with Visual Studio's CLI | ||
|
||
Use build_win32.bat or directly: | ||
``` | ||
set SDL2_DIR=path_to_your_sdl3_folder | ||
cl /Zi /MD /I.. /I..\.. /I%SDL2_DIR%\include main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp /FeDebug/example_sdl3_opengl3.exe /FoDebug/ /link /libpath:%SDL2_DIR%\lib\x86 SDL3.lib opengl32.lib /subsystem:console | ||
# ^^ include paths ^^ source files ^^ output exe ^^ output dir ^^ libraries | ||
# or for 64-bit: | ||
cl /Zi /MD /I.. /I..\.. /I%SDL2_DIR%\include main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp /FeDebug/example_sdl3_opengl3.exe /FoDebug/ /link /libpath:%SDL2_DIR%\lib\x64 SDL3.lib SDL2mainopengl32.lib /subsystem:console | ||
``` | ||
|
||
## Linux and similar Unixes | ||
|
||
Use our Makefile or directly: | ||
``` | ||
c++ `sdl3-config --cflags` -I .. -I ../.. -I ../../backends | ||
main.cpp ../../backends/imgui_impl_sdl3.cpp ../../backends/imgui_impl_opengl3.cpp ../../imgui*.cpp | ||
`sdl3-config --libs` -lGL -ldl | ||
``` | ||
|
||
## macOS | ||
|
||
Use our Makefile or directly: | ||
``` | ||
brew install sdl3 | ||
c++ `sdl3-config --cflags` -I .. -I ../.. -I ../../backends | ||
main.cpp ../../backends/imgui_impl_sdl3.cpp ../../backends/imgui_impl_opengl3.cpp ../../imgui*.cpp | ||
`sdl3-config --libs` -framework OpenGl -framework CoreFoundation | ||
``` | ||
|
||
## Emscripten | ||
|
||
**Building** | ||
|
||
You need to install Emscripten from https://emscripten.org/docs/getting_started/downloads.html, and have the environment variables set, as described in https://emscripten.org/docs/getting_started/downloads.html#installation-instructions | ||
|
||
- Depending on your configuration, in Windows you may need to run `emsdk/emsdk_env.bat` in your console to access the Emscripten command-line tools. | ||
- You may also refer to our [Continuous Integration setup](https://github.com/ocornut/imgui/tree/master/.github/workflows) for Emscripten setup. | ||
- Then build using `make -f Makefile.emscripten` while in the current directory. | ||
|
||
**Running an Emscripten project** | ||
|
||
To run on a local machine: | ||
- `make -f Makefile.emscripten serve` will use Python3 to spawn a local webserver, you can then browse http://localhost:8000 to access your build. | ||
- Otherwise, generally you will need a local webserver. Quoting [https://emscripten.org/docs/getting_started](https://emscripten.org/docs/getting_started/Tutorial.html#generating-html):<br> | ||
_"Unfortunately several browsers (including Chrome, Safari, and Internet Explorer) do not support file:// [XHR](https://emscripten.org/docs/site/glossary.html#term-xhr) requests, and can’t load extra files needed by the HTML (like a .wasm file, or packaged file data as mentioned lower down). For these browsers you’ll need to serve the files using a [local webserver](https://emscripten.org/docs/getting_started/FAQ.html#faq-local-webserver) and then open http://localhost:8000/hello.html."_ | ||
- Emscripten SDK has a handy `emrun` command: `emrun web/index.html --browser firefox` which will spawn a temporary local webserver (in Firefox). See https://emscripten.org/docs/compiling/Running-html-files-with-emrun.html for details. | ||
- You may use Python 3 builtin webserver: `python -m http.server -d web` (this is what `make serve` uses). | ||
- You may use Python 2 builtin webserver: `cd web && python -m SimpleHTTPServer`. | ||
- If you are accessing the files over a network, certain browsers, such as Firefox, will restrict Gamepad API access to secure contexts only (e.g. https only). |
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,8 @@ | ||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. | ||
@set OUT_DIR=Debug | ||
@set OUT_EXE=example_sdl3_opengl3 | ||
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL3_DIR%\include | ||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp | ||
@set LIBS=/LIBPATH:%SDL3_DIR%\lib\x86 SDL3.lib opengl32.lib shell32.lib | ||
mkdir %OUT_DIR% | ||
cl /nologo /Zi /MD %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console |
Oops, something went wrong.
typo SDL2 -> SDL3