diff options
| author | Ray <[email protected]> | 2017-04-20 00:21:38 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2017-04-20 00:21:38 +0200 |
| commit | bc1bfe54d6df0b872b604870d3e55a9f9f4e19dd (patch) | |
| tree | fa1fb6c1b03008d98c342970fa095d7cc84c2252 /examples | |
| parent | 407746193d991190fa4dead94649abb2ed27d462 (diff) | |
| parent | 35172430c6b5929e8f6781e0d92b4bc1f9fcc2a2 (diff) | |
| download | raylib-bc1bfe54d6df0b872b604870d3e55a9f9f4e19dd.tar.gz raylib-bc1bfe54d6df0b872b604870d3e55a9f9f4e19dd.zip | |
Merge pull request #262 from raysan5/develop
Integrate develop branch
Diffstat (limited to 'examples')
122 files changed, 957 insertions, 1449 deletions
diff --git a/examples/Makefile b/examples/Makefile index ac5d2226..060789e7 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -31,6 +31,13 @@ PLATFORM ?= PLATFORM_DESKTOP # define NO to use OpenAL Soft as static library (shared by default) SHARED_OPENAL ?= YES +ifeq ($(PLATFORM),PLATFORM_WEB) + SHARED_OPENAL = NO +endif + +# define raylib directory for include and library +RAYLIB_PATH = D:\GitHub\raylib + # determine PLATFORM_OS in case PLATFORM_DESKTOP selected ifeq ($(PLATFORM),PLATFORM_DESKTOP) # No uname.exe on MinGW!, but OS=Windows_NT on Windows! ifeq ($(UNAME),Msys) -> Windows @@ -74,7 +81,7 @@ endif # -std=gnu99 defines C language mode (GNU C from 1999 revision) # -fgnu89-inline declaring inline functions support (GCC optimized) # -Wno-missing-braces ignore invalid warning (GCC bug 53119) -# -D_DEFAULT_SOURCE use with -std=c99 on Linux to enable timespec and drflac +# -D_DEFAULT_SOURCE use with -std=c99 on Linux and PLATFORM_WEB, required for timespec ifeq ($(PLATFORM),PLATFORM_DESKTOP) ifeq ($(PLATFORM_OS),WINDOWS) CFLAGS = -O2 -s -Wall -std=c99 @@ -87,11 +94,12 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP) endif endif ifeq ($(PLATFORM),PLATFORM_WEB) - CFLAGS = -O1 -Wall -std=c99 -s USE_GLFW=3 -s ASSERTIONS=1 --profiling --preload-file resources - # -O2 # if used, also set --memory-init-file 0 - # --memory-init-file 0 # to avoid an external memory initialization code file (.mem) - #-s ALLOW_MEMORY_GROWTH=1 # to allow memory resizing - #-s TOTAL_MEMORY=16777216 # to specify heap memory size (default = 16MB) + CFLAGS = -O1 -Wall -std=c99 -D_DEFAULT_SOURCE -s USE_GLFW=3 -s ASSERTIONS=1 --profiling + # -O2 # if used, also set --memory-init-file 0 + # --memory-init-file 0 # to avoid an external memory initialization code file (.mem) + # -s ALLOW_MEMORY_GROWTH=1 # to allow memory resizing + # -s TOTAL_MEMORY=16777216 # to specify heap memory size (default = 16MB) + # -preload-file file.res # embbed file.res resource into .data file endif ifeq ($(PLATFORM),PLATFORM_RPI) CFLAGS = -O2 -s -Wall -std=gnu99 -fgnu89-inline @@ -101,24 +109,24 @@ endif # define raylib release directory for compiled library ifeq ($(PLATFORM),PLATFORM_DESKTOP) ifeq ($(PLATFORM_OS),WINDOWS) - RAYLIB_PATH = ../release/win32/mingw32 + RAYLIB_RELEASE = $(RAYLIB_PATH)/release/win32/mingw32 endif ifeq ($(PLATFORM_OS),LINUX) - RAYLIB_PATH = ../release/linux + RAYLIB_RELEASE = $(RAYLIB_PATH)/release/linux endif ifeq ($(PLATFORM_OS),OSX) - RAYLIB_PATH = ../release/osx + RAYLIB_RELEASE = $(RAYLIB_PATH)/release/osx endif endif ifeq ($(PLATFORM),PLATFORM_WEB) - RAYLIB_PATH = ../release/html5 + RAYLIB_RELEASE = $(RAYLIB_PATH)/release/html5 endif ifeq ($(PLATFORM),PLATFORM_RPI) - RAYLIB_PATH = ../release/rpi + RAYLIB_RELEASE = $(RAYLIB_PATH)/release/rpi endif # define any directories containing required header files -INCLUDES = -I. -I../src -I../src/external -I$(RAYLIB_PATH) +INCLUDES = -I. -I$(RAYLIB_RELEASE) -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external ifeq ($(PLATFORM),PLATFORM_RPI) INCLUDES += -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads @@ -127,9 +135,9 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP) ifeq ($(PLATFORM_OS),WINDOWS) # external libraries headers # GLFW3 - INCLUDES += -I../src/external/glfw3/include + INCLUDES += -I$(RAYLIB_PATH)/src/external/glfw3/include # OpenAL Soft - INCLUDES += -I../src/external/openal_soft/include + INCLUDES += -I$(RAYLIB_PATH)/src/external/openal_soft/include endif ifeq ($(PLATFORM_OS),LINUX) # you may optionally create this directory and install raylib @@ -142,7 +150,7 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP) endif # define library paths containing required libs -LFLAGS = -L. -L../src -L$(RAYLIB_PATH) +LFLAGS = -L. -L$(RAYLIB_RELEASE) -L$(RAYLIB_PATH)/src ifeq ($(PLATFORM),PLATFORM_RPI) LFLAGS += -L/opt/vc/lib @@ -152,9 +160,9 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP) ifeq ($(PLATFORM_OS),WINDOWS) # external libraries to link with # GLFW3 - LFLAGS += -L../src/external/glfw3/lib/$(LIBPATH) + LFLAGS += -L$(RAYLIB_PATH)/src/external/glfw3/lib/$(LIBPATH) # OpenAL Soft - LFLAGS += -L../src/external/openal_soft/lib/$(LIBPATH) + LFLAGS += -L$(RAYLIB_PATH)/src/external/openal_soft/lib/$(LIBPATH) endif endif @@ -195,18 +203,19 @@ ifeq ($(PLATFORM),PLATFORM_RPI) endif ifeq ($(PLATFORM),PLATFORM_WEB) # just adjust the correct path to libraylib.bc - LIBS = ../release/html5/libraylib.bc + LIBS = $(RAYLIB_RELEASE)/libraylib.bc endif # define additional parameters and flags for windows ifeq ($(PLATFORM_OS),WINDOWS) # resources file contains windows exe icon # -Wl,--subsystem,windows hides the console window - WINFLAGS = ../src/resources -Wl,--subsystem,windows + WINFLAGS = $(RAYLIB_PATH)/src/resources -Wl,--subsystem,windows endif ifeq ($(PLATFORM),PLATFORM_WEB) EXT = .html + WEB_SHELL = --shell-file $(RAYLIB_PATH)\templates\web_shell\shell.html endif # define all object files required @@ -232,36 +241,35 @@ EXAMPLES = \ shapes/shapes_basic_shapes \ shapes/shapes_colors_palette \ shapes/shapes_logo_raylib_anim \ + shapes/shapes_lines_bezier \ textures/textures_logo_raylib \ textures/textures_image_loading \ textures/textures_rectangle \ textures/textures_srcrec_dstrec \ textures/textures_to_image \ textures/textures_raw_data \ - textures/textures_formats_loading \ - textures/textures_particles_trail_blending \ + textures/textures_particles_blending \ textures/textures_image_processing \ textures/textures_image_drawing \ text/text_sprite_fonts \ text/text_bmfont_ttf \ - text/text_rbmf_fonts \ + text/text_raylib_fonts \ text/text_format_text \ - text/text_font_select \ text/text_writing_anim \ text/text_ttf_loading \ text/text_bmfont_unordered \ + text/text_input_box \ models/models_geometric_shapes \ models/models_box_collisions \ models/models_billboard \ models/models_obj_loading \ models/models_heightmap \ models/models_cubicmap \ - models/models_ray_picking \ + models/models_mesh_picking \ shaders/shaders_model_shader \ shaders/shaders_shapes_textures \ shaders/shaders_custom_uniform \ shaders/shaders_postprocessing \ - shaders/shaders_standard_lighting \ audio/audio_sound_loading \ audio/audio_music_stream \ audio/audio_module_playing \ @@ -278,6 +286,10 @@ EXAMPLES = \ # in this case, the 'default' target entry is raylib all: examples +# generic compilation pattern +%: %.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) + # compile all examples examples: $(EXAMPLES) @@ -299,11 +311,7 @@ core/core_mouse_wheel: core/core_mouse_wheel.c # compile [core] example - gamepad input core/core_input_gamepad: core/core_input_gamepad.c -ifeq ($(PLATFORM), $(filter $(PLATFORM),PLATFORM_DESKTOP PLATFORM_RPI)) $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) -else - @echo core_input_gamepad: Example not supported on PLATFORM_ANDROID or PLATFORM_WEB -endif # compile [core] example - generate random values core/core_random_values: core/core_random_values.c @@ -376,6 +384,10 @@ shapes/shapes_colors_palette: shapes/shapes_colors_palette.c # compile [shapes] example - raylib logo animation shapes/shapes_logo_raylib_anim: shapes/shapes_logo_raylib_anim.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) + +# compile [shapes] example - lines bezier +shapes/shapes_lines_bezier: shapes/shapes_lines_bezier.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) # compile [textures] example - raylib logo texture loading textures/textures_logo_raylib: textures/textures_logo_raylib.c @@ -400,13 +412,9 @@ textures/textures_to_image: textures/textures_to_image.c # compile [textures] example - texture raw data textures/textures_raw_data: textures/textures_raw_data.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) - -# compile [textures] example - texture formats loading -textures/textures_formats_loading: textures/textures_formats_loading.c - $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) - -# compile [textures] example - texture particles trail blending -textures/textures_particles_trail_blending: textures/textures_particles_trail_blending.c + +# compile [textures] example - texture particles blending +textures/textures_particles_blending: textures/textures_particles_blending.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) # compile [textures] example - texture image processing @@ -425,18 +433,14 @@ text/text_sprite_fonts: text/text_sprite_fonts.c text/text_bmfont_ttf: text/text_bmfont_ttf.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) -# compile [text] example - raylib bitmap fonts (rBMF) -text/text_rbmf_fonts: text/text_rbmf_fonts.c +# compile [text] example - raylib fonts +text/text_raylib_fonts: text/text_raylib_fonts.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) # compile [text] example - text formatting text/text_format_text: text/text_format_text.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) -# compile [text] example - font selection program -text/text_font_select: text/text_font_select.c - $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) - # compile [text] example - text writing animation text/text_writing_anim: text/text_writing_anim.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) @@ -448,6 +452,10 @@ text/text_ttf_loading: text/text_ttf_loading.c # compile [text] example - text bmfont unordered text/text_bmfont_unordered: text/text_bmfont_unordered.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) + +# compile [text] example - text input box +text/text_input_box: text/text_input_box.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) # compile [models] example - basic geometric 3d shapes models/models_geometric_shapes: models/models_geometric_shapes.c @@ -477,8 +485,8 @@ models/models_heightmap: models/models_heightmap.c models/models_cubicmap: models/models_cubicmap.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) -# compile [models] example - model ray picking -models/models_ray_picking: models/models_ray_picking.c +# compile [models] example - model mesh picking +models/models_mesh_picking: models/models_mesh_picking.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) # compile [shaders] example - model shader @@ -497,10 +505,6 @@ shaders/shaders_custom_uniform: shaders/shaders_custom_uniform.c shaders/shaders_postprocessing: shaders/shaders_postprocessing.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) -# compile [shaders] example - standard lighting -shaders/shaders_standard_lighting: shaders/shaders_standard_lighting.c - $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) - # compile [audio] example - sound loading and playing (WAV and OGG) audio/audio_sound_loading: audio/audio_sound_loading.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) @@ -519,23 +523,23 @@ audio/audio_raw_stream: audio/audio_raw_stream.c # compile [physac] example - physics demo physac/physics_demo: physac/physics_demo.c - $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -lpthread -D$(PLATFORM) $(WINFLAGS) + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -static -lpthread -D$(PLATFORM) $(WINFLAGS) # compile [physac] example - physics friction physac/physics_friction: physac/physics_friction.c - $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -lpthread -D$(PLATFORM) $(WINFLAGS) + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -static -lpthread -D$(PLATFORM) $(WINFLAGS) # compile [physac] example - physics movement physac/physics_movement: physac/physics_movement.c - $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -lpthread -D$(PLATFORM) $(WINFLAGS) + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -static -lpthread -D$(PLATFORM) $(WINFLAGS) # compile [physac] example - physics restitution physac/physics_restitution: physac/physics_restitution.c - $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -lpthread -D$(PLATFORM) $(WINFLAGS) + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -static -lpthread -D$(PLATFORM) $(WINFLAGS) # compile [physac] example - physics shatter physac/physics_shatter: physac/physics_shatter.c - $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -lpthread -D$(PLATFORM) $(WINFLAGS) + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -static -lpthread -D$(PLATFORM) $(WINFLAGS) # fix dylib install path name for each executable (MAC) fix_dylib: @@ -553,7 +557,7 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP) ifeq ($(PLATFORM_OS),LINUX) find -type f -executable | xargs file -i | grep -E 'x-object|x-archive|x-sharedlib|x-executable' | rev | cut -d ':' -f 2- | rev | xargs rm -f else - del *.o *.exe + del *.o *.exe /s endif endif endif @@ -565,8 +569,3 @@ ifeq ($(PLATFORM),PLATFORM_WEB) del *.o *.html *.js endif @echo Cleaning done - -# instead of defining every module one by one, we can define a pattern -# this pattern below will automatically compile every module defined on $(OBJS) -#%.exe : %.c -# $(CC) -o $@ $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) diff --git a/examples/audio/audio_module_playing.c b/examples/audio/audio_module_playing.c index 08ae2b05..671a119f 100644 --- a/examples/audio/audio_module_playing.c +++ b/examples/audio/audio_module_playing.c @@ -52,7 +52,7 @@ int main() circles[i].color = colors[GetRandomValue(0, 13)]; } - Music xm = LoadMusicStream("resources/audio/mini1111.xm"); + Music xm = LoadMusicStream("resources/mini1111.xm"); PlayMusicStream(xm); diff --git a/examples/audio/audio_music_stream.c b/examples/audio/audio_music_stream.c index 9c1ca4df..f9fe23d2 100644 --- a/examples/audio/audio_music_stream.c +++ b/examples/audio/audio_music_stream.c @@ -24,7 +24,7 @@ int main() InitAudioDevice(); // Initialize audio device - Music music = LoadMusicStream("resources/audio/guitar_noodling.ogg"); + Music music = LoadMusicStream("resources/guitar_noodling.ogg"); PlayMusicStream(music); diff --git a/examples/audio/audio_sound_loading.c b/examples/audio/audio_sound_loading.c index feb30563..00e58326 100644 --- a/examples/audio/audio_sound_loading.c +++ b/examples/audio/audio_sound_loading.c @@ -24,8 +24,8 @@ int main() InitAudioDevice(); // Initialize audio device - Sound fxWav = LoadSound("resources/audio/sound.wav"); // Load WAV audio file - Sound fxOgg = LoadSound("resources/audio/tanatana.ogg"); // Load OGG audio file + Sound fxWav = LoadSound("resources/sound.wav"); // Load WAV audio file + Sound fxOgg = LoadSound("resources/tanatana.ogg"); // Load OGG audio file SetTargetFPS(60); //-------------------------------------------------------------------------------------- diff --git a/examples/audio/resources/audio/chiptun1.mod b/examples/audio/resources/chiptun1.mod Binary files differindex 00d16885..00d16885 100644 --- a/examples/audio/resources/audio/chiptun1.mod +++ b/examples/audio/resources/chiptun1.mod diff --git a/examples/audio/resources/audio/coin.wav b/examples/audio/resources/coin.wav Binary files differindex 6007509b..6007509b 100644 --- a/examples/audio/resources/audio/coin.wav +++ b/examples/audio/resources/coin.wav diff --git a/examples/audio/resources/audio/guitar_noodling.ogg b/examples/audio/resources/guitar_noodling.ogg Binary files differindex f5022040..f5022040 100644 --- a/examples/audio/resources/audio/guitar_noodling.ogg +++ b/examples/audio/resources/guitar_noodling.ogg diff --git a/examples/audio/resources/audio/mini1111.xm b/examples/audio/resources/mini1111.xm Binary files differindex a185c1a2..a185c1a2 100644 --- a/examples/audio/resources/audio/mini1111.xm +++ b/examples/audio/resources/mini1111.xm diff --git a/examples/audio/resources/audio/sound.wav b/examples/audio/resources/sound.wav Binary files differindex b5d01c9b..b5d01c9b 100644 --- a/examples/audio/resources/audio/sound.wav +++ b/examples/audio/resources/sound.wav diff --git a/examples/audio/resources/audio/spring.wav b/examples/audio/resources/spring.wav Binary files differindex c7fbf1b9..c7fbf1b9 100644 --- a/examples/audio/resources/audio/spring.wav +++ b/examples/audio/resources/spring.wav diff --git a/examples/audio/resources/audio/tanatana.flac b/examples/audio/resources/tanatana.flac Binary files differindex dfe735cd..dfe735cd 100644 --- a/examples/audio/resources/audio/tanatana.flac +++ b/examples/audio/resources/tanatana.flac diff --git a/examples/audio/resources/audio/tanatana.ogg b/examples/audio/resources/tanatana.ogg Binary files differindex 90b1795a..90b1795a 100644 --- a/examples/audio/resources/audio/tanatana.ogg +++ b/examples/audio/resources/tanatana.ogg diff --git a/examples/audio/resources/audio/weird.wav b/examples/audio/resources/weird.wav Binary files differindex 101029c5..101029c5 100644 --- a/examples/audio/resources/audio/weird.wav +++ b/examples/audio/resources/weird.wav diff --git a/examples/core/core_input_gamepad.c b/examples/core/core_input_gamepad.c index f98885e3..64520a47 100644 --- a/examples/core/core_input_gamepad.c +++ b/examples/core/core_input_gamepad.c @@ -4,8 +4,8 @@ * * NOTE: This example requires a Gamepad connected to the system * raylib is configured to work with the following gamepads: -* Xbox 360 Controller (Xbox 360, Xbox One) -* PLAYSTATION(R)3 Controller +* - Xbox 360 Controller (Xbox 360, Xbox One) +* - PLAYSTATION(R)3 Controller * Check raylib.h for buttons configuration * * This example has been created using raylib 1.6 (www.raylib.com) diff --git a/examples/core/core_vr_simulator.c b/examples/core/core_vr_simulator.c index 5e6c6446..69e0f849 100644 --- a/examples/core/core_vr_simulator.c +++ b/examples/core/core_vr_simulator.c @@ -1,19 +1,11 @@ /******************************************************************************************* * -* raylib [core] example - Oculus Rift CV1 +* raylib [core] example - VR Simulator (Oculus Rift CV1 parameters) * -* Compile example using: -* gcc -o $(NAME_PART).exe $(FILE_NAME) -I..\src\external -I..\src\external\OculusSDK\LibOVR\Include / -* -L. -L..\src\external\OculusSDK\LibOVR -lLibOVRRT32_1 -lraylib -lglfw3 -lopengl32 -lgdi32 -std=c99 / -* -Wl,-allow-multiple-definition -* -* #define SUPPORT_OCULUS_RIFT_CV1 / RLGL_OCULUS_SUPPORT -* Enable Oculus Rift CV1 functionality -* -* This example has been created using raylib 1.5 (www.raylib.com) +* This example has been created using raylib 1.7 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * -* Copyright (c) 2016 Ramon Santamaria (@raysan5) +* Copyright (c) 2017 Ramon Santamaria (@raysan5) * ********************************************************************************************/ @@ -28,7 +20,7 @@ int main() // NOTE: screenWidth/screenHeight should match VR device aspect ratio - InitWindow(screenWidth, screenHeight, "raylib [core] example - oculus rift"); + InitWindow(screenWidth, screenHeight, "raylib [core] example - vr simulator"); InitVrSimulator(HMD_OCULUS_RIFT_CV1); // Init VR simulator (Oculus Rift CV1 parameters) @@ -83,7 +75,7 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- - CloseVrSimulator(); + CloseVrSimulator(); // Close VR simulator CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/models/models_ray_picking.c b/examples/models/models_mesh_picking.c index 67b13155..0b5247ec 100644 --- a/examples/models/models_ray_picking.c +++ b/examples/models/models_mesh_picking.c @@ -1,6 +1,6 @@ /******************************************************************************************* * -* raylib [models] example - Ray picking in 3d mode, ground plane, triangle, mesh +* raylib [models] example - Mesh picking in 3d mode, ground plane, triangle, mesh * * This example has been created using raylib 1.7 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) @@ -11,11 +11,9 @@ ********************************************************************************************/ #include "raylib.h" -#include "../src/raymath.h" - -#include <stdio.h> -#include <float.h> +#include "raymath.h" +#define FLT_MAX 3.40282347E+38F // Maximum value of a float, defined in <float.h> int main() { @@ -24,23 +22,23 @@ int main() int screenWidth = 800; int screenHeight = 450; - InitWindow(screenWidth, screenHeight, "raylib [models] example - 3d ray picking"); + InitWindow(screenWidth, screenHeight, "raylib [models] example - mesh picking"); // Define the camera to look into our 3d world Camera camera; - camera.position = (Vector3){ 10.0f, 8.0f, 10.0f }; // Camera position + camera.position = (Vector3){ 10.0f, 8.0f, 10.0f }; // Camera position camera.target = (Vector3){ 0.0f, 2.3f, 0.0f }; // Camera looking at point camera.up = (Vector3){ 0.0f, 1.6f, 0.0f }; // Camera up vector (rotation towards target) camera.fovy = 45.0f; // Camera field-of-view Y - Ray ray; // Picking line ray + Ray ray; // Picking ray - Model tower = LoadModel("resources/model/lowpoly-tower.obj"); // Load OBJ model - Texture2D texture = LoadTexture("resources/model/lowpoly-tower.png"); // Load model texture - tower.material.texDiffuse = texture; // Set model diffuse texture + Model tower = LoadModel("resources/tower.obj"); // Load OBJ model + Texture2D texture = LoadTexture("resources/tower.png"); // Load model texture + tower.material.texDiffuse = texture; // Set model diffuse texture - Vector3 towerPos = { 0.0f, 0.0f, 0.0f }; // Set model position - BoundingBox towerBBox = CalculateBoundingBox( tower.mesh ); + Vector3 towerPos = { 0.0f, 0.0f, 0.0f }; // Set model position + BoundingBox towerBBox = CalculateBoundingBox(tower.mesh); bool hitMeshBBox = false; bool hitTriangle = false; @@ -91,7 +89,7 @@ int main() cursorColor = PURPLE; hitObjectName = "Triangle"; - bary = Barycenter(nearestHit.hitPosition, ta, tb, tc); + bary = VectorBarycenter(nearestHit.hitPosition, ta, tb, tc); hitTriangle = true; } else hitTriangle = false; @@ -138,15 +136,15 @@ int main() // If we hit something, draw the cursor at the hit point if (nearestHit.hit) { - DrawCube(nearestHit.hitPosition, 0.5, 0.5, 0.5, cursorColor); - DrawCubeWires(nearestHit.hitPosition, 0.5, 0.5, 0.5, YELLOW); + DrawCube(nearestHit.hitPosition, 0.3, 0.3, 0.3, cursorColor); + DrawCubeWires(nearestHit.hitPosition, 0.3, 0.3, 0.3, RED); Vector3 normalEnd; normalEnd.x = nearestHit.hitPosition.x + nearestHit.hitNormal.x; normalEnd.y = nearestHit.hitPosition.y + nearestHit.hitNormal.y; normalEnd.z = nearestHit.hitPosition.z + nearestHit.hitNormal.z; - DrawLine3D(nearestHit.hitPosition, normalEnd, YELLOW); + DrawLine3D(nearestHit.hitPosition, normalEnd, RED); } DrawRay(ray, MAROON); @@ -187,7 +185,10 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context + UnloadModel(tower); // Unload model + UnloadTexture(texture); // Unload texture + + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; diff --git a/examples/models/models_mesh_picking.png b/examples/models/models_mesh_picking.png Binary files differnew file mode 100644 index 00000000..045db585 --- /dev/null +++ b/examples/models/models_mesh_picking.png diff --git a/examples/models/resources/model/lowpoly-tower.obj b/examples/models/resources/tower.obj index ea03a9fc..ea03a9fc 100644 --- a/examples/models/resources/model/lowpoly-tower.obj +++ b/examples/models/resources/tower.obj diff --git a/examples/models/resources/model/lowpoly-tower.png b/examples/models/resources/tower.png Binary files differindex 7c9239e2..7c9239e2 100644 --- a/examples/models/resources/model/lowpoly-tower.png +++ b/examples/models/resources/tower.png diff --git a/examples/others/oculus_rift.c b/examples/others/oculus_rift.c new file mode 100644 index 00000000..f1b0bd3b --- /dev/null +++ b/examples/others/oculus_rift.c @@ -0,0 +1,538 @@ +/******************************************************************************************* +* +* raylib [core] example - Oculus Rift CV1 +* +* Compile example using: +* gcc -o $(NAME_PART).exe $(FILE_NAME) -I..\src\external -I..\src\external\OculusSDK\LibOVR\Include / +* -L. -L..\src\external\OculusSDK\LibOVR -lLibOVRRT32_1 -lraylib -lglfw3 -lopengl32 -lgdi32 -std=c99 / +* -Wl,-allow-multiple-definition +* +* #define SUPPORT_OCULUS_RIFT_CV1 / RLGL_OCULUS_SUPPORT +* Enable Oculus Rift CV1 functionality +* +* This example has been created using raylib 1.5 (www.raylib.com) +* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) +* +* Copyright (c) 2016 Ramon Santamaria (@raysan5) +* +********************************************************************************************/ + +#include "raylib.h" + +#include "glad.h" // Required for: OpenGL types and functions declarations +#include "raymath.h" // Required for: Vector3, Quaternion and Matrix functionality + +#include <string.h> // Required for: memset() +#include <stdlib.h> // Required for: exit() +#include <stdio.h> // required for: vfprintf() +#include <stdarg.h> // Required for: va_list, va_start(), vfprintf(), va_end() + +#define RLGL_OCULUS_SUPPORT // Enable Oculus Rift code +#if defined(RLGL_OCULUS_SUPPORT) + #include "OVR_CAPI_GL.h" // Oculus SDK for OpenGL +#endif + +//---------------------------------------------------------------------------------- +// Defines and Macros +//---------------------------------------------------------------------------------- +// ... + +//---------------------------------------------------------------------------------- +// Types and Structures Definition +//---------------------------------------------------------------------------------- + +// TraceLog message types +typedef enum { INFO = 0, ERROR, WARNING, DEBUG, OTHER } TraceLogType; + +#if defined(RLGL_OCULUS_SUPPORT) +// Oculus buffer type +typedef struct OculusBuffer { + ovrTextureSwapChain textureChain; + GLuint depthId; + GLuint fboId; + int width; + int height; +} OculusBuffer; + +// Oculus mirror texture type +typedef struct OculusMirror { + ovrMirrorTexture texture; + GLuint fboId; + int width; + int height; +} OculusMirror; + +// Oculus layer type +typedef struct OculusLayer { + ovrViewScaleDesc viewScaleDesc; + ovrLayerEyeFov eyeLayer; // layer 0 + //ovrLayerQuad quadLayer; // TODO: layer 1: '2D' quad for GUI + Matrix eyeProjections[2]; + int width; + int height; +} OculusLayer; +#endif + +//---------------------------------------------------------------------------------- +// Global Variables Definition +//---------------------------------------------------------------------------------- +#if defined(RLGL_OCULUS_SUPPORT) +// OVR device variables +static ovrSession session; // Oculus session (pointer to ovrHmdStruct) +static ovrHmdDesc hmdDesc; // Oculus device descriptor parameters +static ovrGraphicsLuid luid; // Oculus locally unique identifier for the program (64 bit) +static OculusLayer layer; // Oculus drawing layer (similar to photoshop) +static OculusBuffer buffer; // Oculus internal buffers (texture chain and fbo) +static OculusMirror mirror; // Oculus mirror texture and fbo +static unsigned int frameIndex = 0; // Oculus frames counter, used to discard frames from chain +#endif + +//---------------------------------------------------------------------------------- +// Module specific Functions Declaration +//---------------------------------------------------------------------------------- +#if defined(RLGL_OCULUS_SUPPORT) +static bool InitOculusDevice(void); // Initialize Oculus device (returns true if success) +static void CloseOculusDevice(void); // Close Oculus device +static void UpdateOculusTracking(Camera *camera); // Update Oculus head position-orientation tracking +static void BeginOculusDrawing(void); // Setup Oculus buffers for drawing +static void EndOculusDrawing(void); // Finish Oculus drawing and blit framebuffer to mirror + +static OculusBuffer LoadOculusBuffer(ovrSession session, int width, int height); // Load Oculus required buffers +static void UnloadOculusBuffer(ovrSession session, OculusBuffer buffer); // Unload texture required buffers +static OculusMirror LoadOculusMirror(ovrSession session, int width, int height); // Load Oculus mirror buffers +static void UnloadOculusMirror(ovrSession session, OculusMirror mirror); // Unload Oculus mirror buffers +static void BlitOculusMirror(ovrSession session, OculusMirror mirror); // Copy Oculus screen buffer to mirror texture +static OculusLayer InitOculusLayer(ovrSession session); // Init Oculus layer (similar to photoshop) +static Matrix FromOvrMatrix(ovrMatrix4f ovrM); // Convert from Oculus ovrMatrix4f struct to raymath Matrix struct +#endif + +static void TraceLog(int msgType, const char *text, ...); + +int main() +{ + // Initialization + //-------------------------------------------------------------------------------------- + int screenWidth = 1080; + int screenHeight = 600; + + // NOTE: screenWidth/screenHeight should match VR device aspect ratio + + InitWindow(screenWidth, screenHeight, "raylib [core] example - oculus rift"); + + bool vrDeviceReady = InitOculusDevice(); // Init VR device Oculus Rift CV1 + + if (!vrDeviceReady) InitVrSimulator(HMD_OCULUS_RIFT_CV1); // Init VR simulator if device fails + + // Define the camera to look into our 3d world + Camera camera; + camera.position = (Vector3){ 5.0f, 2.0f, 5.0f }; // Camera position + camera.target = (Vector3){ 0.0f, 2.0f, 0.0f }; // Camera looking at point + camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) + camera.fovy = 60.0f; // Camera field-of-view Y + + Vector3 cubePosition = { 0.0f, 0.0f, 0.0f }; + + SetCameraMode(camera, CAMERA_FIRST_PERSON); // Set first person camera mode + + SetTargetFPS(90); // Set our game to run at 90 frames-per-second + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + if (!vrDeviceReady) UpdateCamera(&camera); // Update camera (simulator mode) + else UpdateOculusTracking(&camera); // Update camera with device tracking data + + if (IsKeyPressed(KEY_SPACE)) ToggleVrMode(); // Toggle VR mode + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + if (vrDeviceReady) BeginOculusDrawing(); + else BeginVrDrawing(); + + Begin3dMode(camera); + + DrawCube(cubePosition, 2.0f, 2.0f, 2.0f, RED); + DrawCubeWires(cubePosition, 2.0f, 2.0f, 2.0f, MAROON); + + DrawGrid(40, 1.0f); + + End3dMode(); + + if (vrDeviceReady) EndOculusDrawing(); + else EndVrDrawing(); + + DrawFPS(10, 10); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + if (vrDeviceReady) CloseOculusDevice(); + else CloseVrSimulator(); + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} + +//---------------------------------------------------------------------------------- +// Module specific Functions Definition +//---------------------------------------------------------------------------------- + +#if defined(RLGL_OCULUS_SUPPORT) +// Set internal projection and modelview matrix depending on eyes tracking data +static void SetStereoView(int eye, Matrix matProjection, Matrix matModelView) +{ + Matrix eyeProjection = matProjection; + Matrix eyeModelView = matModelView; + + glViewport(layer.eyeLayer.Viewport[eye].Pos.x, layer.eyeLayer.Viewport[eye].Pos.y, + layer.eyeLayer.Viewport[eye].Size.w, layer.eyeLayer.Viewport[eye].Size.h); + + Quaternion eyeRenderPose = (Quaternion){ layer.eyeLayer.RenderPose[eye].Orientation.x, + layer.eyeLayer.RenderPose[eye].Orientation.y, + layer.eyeLayer.RenderPose[eye].Orientation.z, + layer.eyeLayer.RenderPose[eye].Orientation.w }; + QuaternionInvert(&eyeRenderPose); + Matrix eyeOrientation = QuaternionToMatrix(eyeRenderPose); + Matrix eyeTranslation = MatrixTranslate(-layer.eyeLayer.RenderPose[eye].Position.x, + -layer.eyeLayer.RenderPose[eye].Position.y, + -layer.eyeLayer.RenderPose[eye].Position.z); + + Matrix eyeView = MatrixMultiply(eyeTranslation, eyeOrientation); // Matrix containing eye-head movement + eyeModelView = MatrixMultiply(matModelView, eyeView); // Combine internal camera matrix (modelview) wih eye-head movement + + eyeProjection = layer.eyeProjections[eye]; +} + +// Initialize Oculus device (returns true if success) +static bool InitOculusDevice(void) +{ + bool oculusReady = false; + + ovrResult result = ovr_Initialize(NULL); + + if (OVR_FAILURE(result)) TraceLog(WARNING, "OVR: Could not initialize Oculus device"); + else + { + result = ovr_Create(&session, &luid); + if (OVR_FAILURE(result)) + { + TraceLog(WARNING, "OVR: Could not create Oculus session"); + ovr_Shutdown(); + } + else + { + hmdDesc = ovr_GetHmdDesc(session); + + TraceLog(INFO, "OVR: Product Name: %s", hmdDesc.ProductName); + TraceLog(INFO, "OVR: Manufacturer: %s", hmdDesc.Manufacturer); + TraceLog(INFO, "OVR: Product ID: %i", hmdDesc.ProductId); + TraceLog(INFO, "OVR: Product Type: %i", hmdDesc.Type); + //TraceLog(INFO, "OVR: Serial Number: %s", hmdDesc.SerialNumber); + TraceLog(INFO, "OVR: Resolution: %ix%i", hmdDesc.Resolution.w, hmdDesc.Resolution.h); + + // NOTE: Oculus mirror is set to defined screenWidth and screenHeight... + // ...ideally, it should be (hmdDesc.Resolution.w/2, hmdDesc.Resolution.h/2) + + // Initialize Oculus Buffers + layer = InitOculusLayer(session); + buffer = LoadOculusBuffer(session, layer.width, layer.height); + mirror = LoadOculusMirror(session, hmdDesc.Resolution.w/2, hmdDesc.Resolution.h/2); // NOTE: hardcoded... + layer.eyeLayer.ColorTexture[0] = buffer.textureChain; //SetOculusLayerTexture(eyeLayer, buffer.textureChain); + + // Recenter OVR tracking origin + ovr_RecenterTrackingOrigin(session); + + oculusReady = true; + } + } + + return oculusReady; +} + +// Close Oculus device (and unload buffers) +static void CloseOculusDevice(void) +{ + UnloadOculusMirror(session, mirror); // Unload Oculus mirror buffer + UnloadOculusBuffer(session, buffer); // Unload Oculus texture buffers + + ovr_Destroy(session); // Free Oculus session data + ovr_Shutdown(); // Close Oculus device connection +} + +// Update Oculus head position-orientation tracking +static void UpdateOculusTracking(Camera *camera) +{ + frameIndex++; + + ovrPosef eyePoses[2]; + ovr_GetEyePoses(session, frameIndex, ovrTrue, layer.viewScaleDesc.HmdToEyeOffset, eyePoses, &layer.eyeLayer.SensorSampleTime); + + layer.eyeLayer.RenderPose[0] = eyePoses[0]; + layer.eyeLayer.RenderPose[1] = eyePoses[1]; + + // TODO: Update external camera with eyePoses data (position, orientation) + // NOTE: We can simplify to simple camera if we consider IPD and HMD device configuration again later + // it will be useful for the user to draw, lets say, billboards oriented to camera + + // Get session status information + ovrSessionStatus sessionStatus; + ovr_GetSessionStatus(session, &sessionStatus); + + if (sessionStatus.ShouldQuit) TraceLog(WARNING, "OVR: Session should quit..."); + if (sessionStatus.ShouldRecenter) ovr_RecenterTrackingOrigin(session); + //if (sessionStatus.HmdPresent) // HMD is present. + //if (sessionStatus.DisplayLost) // HMD was unplugged or the display driver was manually disabled or encountered a TDR. + //if (sessionStatus.HmdMounted) // HMD is on the user's head. + //if (sessionStatus.IsVisible) // the game or experience has VR focus and is visible in the HMD. +} + +// Setup Oculus buffers for drawing +static void BeginOculusDrawing(void) +{ + GLuint currentTexId; + int currentIndex; + + ovr_GetTextureSwapChainCurrentIndex(session, buffer.textureChain, ¤tIndex); + ovr_GetTextureSwapChainBufferGL(session, buffer.textureChain, currentIndex, ¤tTexId); + + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, buffer.fboId); + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, currentTexId, 0); + //glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, buffer.depthId, 0); // Already binded +} + +// Finish Oculus drawing and blit framebuffer to mirror +static void EndOculusDrawing(void) +{ + // Unbind current framebuffer (Oculus buffer) + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); + + ovr_CommitTextureSwapChain(session, buffer.textureChain); + + ovrLayerHeader *layers = &layer.eyeLayer.Header; + ovr_SubmitFrame(session, frameIndex, &layer.viewScaleDesc, &layers, 1); + + // Blit mirror texture to back buffer + BlitOculusMirror(session, mirror); +} + +// Load Oculus required buffers: texture-swap-chain, fbo, texture-depth +static OculusBuffer LoadOculusBuffer(ovrSession session, int width, int height) +{ + OculusBuffer buffer; + buffer.width = width; + buffer.height = height; + + // Create OVR texture chain + ovrTextureSwapChainDesc desc = {}; + desc.Type = ovrTexture_2D; + desc.ArraySize = 1; + desc.Width = width; + desc.Height = height; + desc.MipLevels = 1; + desc.Format = OVR_FORMAT_R8G8B8A8_UNORM_SRGB; // Requires glEnable(GL_FRAMEBUFFER_SRGB); + desc.SampleCount = 1; + desc.StaticImage = ovrFalse; + + ovrResult result = ovr_CreateTextureSwapChainGL(session, &desc, &buffer.textureChain); + + if (!OVR_SUCCESS(result)) TraceLog(WARNING, "OVR: Failed to create swap textures buffer"); + + int textureCount = 0; + ovr_GetTextureSwapChainLength(session, buffer.textureChain, &textureCount); + + if (!OVR_SUCCESS(result) || !textureCount) TraceLog(WARNING, "OVR: Unable to count swap chain textures"); + + for (int i = 0; i < textureCount; ++i) + { + GLuint chainTexId; + ovr_GetTextureSwapChainBufferGL(session, buffer.textureChain, i, &chainTexId); + glBindTexture(GL_TEXTURE_2D, chainTexId); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + } + + glBindTexture(GL_TEXTURE_2D, 0); + + /* + // Setup framebuffer object (using depth texture) + glGenFramebuffers(1, &buffer.fboId); + glGenTextures(1, &buffer.depthId); + glBindTexture(GL_TEXTURE_2D, buffer.depthId); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, buffer.width, buffer.height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL); + */ + + // Setup framebuffer object (using depth renderbuffer) + glGenFramebuffers(1, &buffer.fboId); + glGenRenderbuffers(1, &buffer.depthId); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, buffer.fboId); + glBindRenderbuffer(GL_RENDERBUFFER, buffer.depthId); + glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, buffer.width, buffer.height); + glBindRenderbuffer(GL_RENDERBUFFER, 0); + glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, buffer.depthId); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); + + return buffer; +} + +// Unload texture required buffers +static void UnloadOculusBuffer(ovrSession session, OculusBuffer buffer) +{ + if (buffer.textureChain) + { + ovr_DestroyTextureSwapChain(session, buffer.textureChain); + buffer.textureChain = NULL; + } + + if (buffer.depthId != 0) glDeleteTextures(1, &buffer.depthId); + if (buffer.fboId != 0) glDeleteFramebuffers(1, &buffer.fboId); +} + +// Load Oculus mirror buffers +static OculusMirror LoadOculusMirror(ovrSession session, int width, int height) +{ + OculusMirror mirror; + mirror.width = width; + mirror.height = height; + + ovrMirrorTextureDesc mirrorDesc; + memset(&mirrorDesc, 0, sizeof(mirrorDesc)); + mirrorDesc.Format = OVR_FORMAT_R8G8B8A8_UNORM_SRGB; + mirrorDesc.Width = mirror.width; + mirrorDesc.Height = mirror.height; + + if (!OVR_SUCCESS(ovr_CreateMirrorTextureGL(session, &mirrorDesc, &mirror.texture))) TraceLog(WARNING, "Could not create mirror texture"); + + glGenFramebuffers(1, &mirror.fboId); + + return mirror; +} + +// Unload Oculus mirror buffers +static void UnloadOculusMirror(ovrSession session, OculusMirror mirror) +{ + if (mirror.fboId != 0) glDeleteFramebuffers(1, &mirror.fboId); + if (mirror.texture) ovr_DestroyMirrorTexture(session, mirror.texture); +} + +// Copy Oculus screen buffer to mirror texture +static void BlitOculusMirror(ovrSession session, OculusMirror mirror) +{ + GLuint mirrorTextureId; + + ovr_GetMirrorTextureBufferGL(session, mirror.texture, &mirrorTextureId); + + glBindFramebuffer(GL_READ_FRAMEBUFFER, mirror.fboId); + glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, mirrorTextureId, 0); +#if defined(GRAPHICS_API_OPENGL_33) + // NOTE: glBlitFramebuffer() requires extension: GL_EXT_framebuffer_blit (not available in OpenGL ES 2.0) + glBlitFramebuffer(0, 0, mirror.width, mirror.height, 0, mirror.height, mirror.width, 0, GL_COLOR_BUFFER_BIT, GL_NEAREST); +#endif + glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); +} + +// Init Oculus layer (similar to photoshop) +static OculusLayer InitOculusLayer(ovrSession session) +{ + OculusLayer layer = { 0 }; + + layer.viewScaleDesc.HmdSpaceToWorldScaleInMeters = 1.0f; + + memset(&layer.eyeLayer, 0, sizeof(ovrLayerEyeFov)); + layer.eyeLayer.Header.Type = ovrLayerType_EyeFov; + layer.eyeLayer.Header.Flags = ovrLayerFlag_TextureOriginAtBottomLeft; + + ovrEyeRenderDesc eyeRenderDescs[2]; + + for (int eye = 0; eye < 2; eye++) + { + eyeRenderDescs[eye] = ovr_GetRenderDesc(session, eye, hmdDesc.DefaultEyeFov[eye]); + ovrMatrix4f ovrPerspectiveProjection = ovrMatrix4f_Projection(eyeRenderDescs[eye].Fov, 0.01f, 10000.0f, ovrProjection_None); //ovrProjection_ClipRangeOpenGL); + layer.eyeProjections[eye] = FromOvrMatrix(ovrPerspectiveProjection); // NOTE: struct ovrMatrix4f { float M[4][4] } --> struct Matrix + + layer.viewScaleDesc.HmdToEyeOffset[eye] = eyeRenderDescs[eye].HmdToEyeOffset; + layer.eyeLayer.Fov[eye] = eyeRenderDescs[eye].Fov; + + ovrSizei eyeSize = ovr_GetFovTextureSize(session, eye, layer.eyeLayer.Fov[eye], 1.0f); + layer.eyeLayer.Viewport[eye].Size = eyeSize; + layer.eyeLayer.Viewport[eye].Pos.x = layer.width; + layer.eyeLayer.Viewport[eye].Pos.y = 0; + + layer.height = eyeSize.h; //std::max(renderTargetSize.y, (uint32_t)eyeSize.h); + layer.width += eyeSize.w; + } + + return layer; +} + +// Convert from Oculus ovrMatrix4f struct to raymath Matrix struct +static Matrix FromOvrMatrix(ovrMatrix4f ovrmat) +{ + Matrix rmat; + + rmat.m0 = ovrmat.M[0][0]; + rmat.m1 = ovrmat.M[1][0]; + rmat.m2 = ovrmat.M[2][0]; + rmat.m3 = ovrmat.M[3][0]; + rmat.m4 = ovrmat.M[0][1]; + rmat.m5 = ovrmat.M[1][1]; + rmat.m6 = ovrmat.M[2][1]; + rmat.m7 = ovrmat.M[3][1]; + rmat.m8 = ovrmat.M[0][2]; + rmat.m9 = ovrmat.M[1][2]; + rmat.m10 = ovrmat.M[2][2]; + rmat.m11 = ovrmat.M[3][2]; + rmat.m12 = ovrmat.M[0][3]; + rmat.m13 = ovrmat.M[1][3]; + rmat.m14 = ovrmat.M[2][3]; + rmat.m15 = ovrmat.M[3][3]; + + MatrixTranspose(&rmat); + + return rmat; +} +#endif + +// Output a trace log message +// NOTE: Expected msgType: (0)Info, (1)Error, (2)Warning +static void TraceLog(int msgType, const char *text, ...) +{ + va_list args; + va_start(args, text); + + switch (msgType) + { + case INFO: fprintf(stdout, "INFO: "); break; + case ERROR: fprintf(stdout, "ERROR: "); break; + case WARNING: fprintf(stdout, "WARNING: "); break; + case DEBUG: fprintf(stdout, "DEBUG: "); break; + default: break; + } + + vfprintf(stdout, text, args); + fprintf(stdout, "\n"); + + va_end(args); + + if (msgType == ERROR) exit(1); +} + diff --git a/examples/shaders/resources/shaders/glsl100/standard.fs b/examples/others/resources/shaders/glsl100/standard.fs index fe604e2a..fe604e2a 100644 --- a/examples/shaders/resources/shaders/glsl100/standard.fs +++ b/examples/others/resources/shaders/glsl100/standard.fs diff --git a/examples/shaders/resources/shaders/glsl100/standard.vs b/examples/others/resources/shaders/glsl100/standard.vs index 49c5a3eb..49c5a3eb 100644 --- a/examples/shaders/resources/shaders/glsl100/standard.vs +++ b/examples/others/resources/shaders/glsl100/standard.vs diff --git a/examples/shaders/resources/shaders/glsl330/standard.fs b/examples/others/resources/shaders/glsl330/standard.fs index 0d461484..0d461484 100644 --- a/examples/shaders/resources/shaders/glsl330/standard.fs +++ b/examples/others/resources/shaders/glsl330/standard.fs diff --git a/examples/shaders/resources/shaders/glsl330/standard.vs b/examples/others/resources/shaders/glsl330/standard.vs index fc0a5ff4..fc0a5ff4 100644 --- a/examples/shaders/resources/shaders/glsl330/standard.vs +++ b/examples/others/resources/shaders/glsl330/standard.vs diff --git a/examples/others/rlgl_oculus_rift.c b/examples/others/rlgl_oculus_rift.c deleted file mode 100644 index 30ef6f3b..00000000 --- a/examples/others/rlgl_oculus_rift.c +++ /dev/null @@ -1,393 +0,0 @@ -/******************************************************************************************* -* -* raylib [rlgl] example - Oculus minimum sample -* -* NOTE: This example requires OpenGL 3.3 or ES2 versions for shaders support, -* OpenGL 1.1 does not support shaders but it can also be used. -* -* Compile rlgl module using: -* gcc -c rlgl.c -Wall -std=c99 -DRLGL_STANDALONE -DRAYMATH_IMPLEMENTATION -DGRAPHICS_API_OPENGL_33 -DRLGL_OCULUS_SUPPORT -* -* NOTE 1: rlgl module requires the following header-only files: -* external/glad.h - OpenGL extensions loader (stripped to only required extensions) -* shader_standard.h - Standard shader for materials and lighting -* shader_distortion.h - Distortion shader for VR -* raymath.h - Vector and matrix math functions -* -* NOTE 2: rlgl requires LibOVR (Oculus PC SDK) to support Oculus Rift CV1 -* -* Compile example using: -* gcc -o rlgl_oculus_rift.exe rlgl_oculus_rift.c rlgl.o -L. -lLibOVRRT32_1 -lglfw3 -lopengl32 -lgdi32 -std=c99 -* -* NOTE: Example must be linked against LibOVRRT32_1.dll that comes with Oculus Rift runtime. -* -* This example has been created using raylib 1.5 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Copyright (c) 2015 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include <stdlib.h> -#include <stdarg.h> -#include <stdio.h> -#include <string.h> -#include <math.h> - -#include <GLFW/glfw3.h> // Windows/Context and inputs management - -#define RLGL_STANDALONE -#include "rlgl.h" // rlgl library: OpenGL 1.1 immediate-mode style coding - -#define RED (Color){ 230, 41, 55, 255 } // Red -#define RAYWHITE (Color){ 245, 245, 245, 255 } // My own White (raylib logo) -#define DARKGRAY (Color){ 80, 80, 80, 255 } // Dark Gray - -//---------------------------------------------------------------------------------- -// Module specific Functions Declaration -//---------------------------------------------------------------------------------- -static void ErrorCallback(int error, const char* description); -static void KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods); - -// Drawing functions (uses rlgl functionality) -static void DrawGrid(int slices, float spacing); -static void DrawCube(Vector3 position, float width, float height, float length, Color color); -static void DrawCubeWires(Vector3 position, float width, float height, float length, Color color); -static void DrawRectangleV(Vector2 position, Vector2 size, Color color); - -//---------------------------------------------------------------------------------- -// Main Entry point -//---------------------------------------------------------------------------------- -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - int screenWidth = 1080; // Mirror screen width (set to hmdDesc.Resolution.w/2) - int screenHeight = 600; // Mirror screen height (set to hmdDesc.Resolution.h/2) - - // NOTE: Mirror screen size can be set to any desired resolution! - - // GLFW3 Initialization + OpenGL 3.3 Context + Extensions - //-------------------------------------------------------- - glfwSetErrorCallback(ErrorCallback); - - if (!glfwInit()) - { - TraceLog(WARNING, "GLFW3: Can not initialize GLFW"); - return 1; - } - else TraceLog(INFO, "GLFW3: GLFW initialized successfully"); - - glfwWindowHint(GLFW_SAMPLES, 4); - glfwWindowHint(GLFW_DEPTH_BITS, 16); - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); - glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); - glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE); - - GLFWwindow *window = glfwCreateWindow(screenWidth, screenHeight, "rlgl oculus rift", NULL, NULL); - - if (!window) - { - glfwTerminate(); - return 2; - } - else TraceLog(INFO, "GLFW3: Window created successfully"); - - glfwSetKeyCallback(window, KeyCallback); - - glfwMakeContextCurrent(window); - glfwSwapInterval(0); - - // Load OpenGL 3.3 supported extensions - rlglLoadExtensions(glfwGetProcAddress); - //-------------------------------------------------------- - - // Initialize OpenGL context (states and resources) - rlglInit(screenWidth, screenHeight); - - rlClearColor(245, 245, 245, 255); // Define clear color - rlEnableDepthTest(); // Enable DEPTH_TEST for 3D - - // Define custom camera to initialize projection and view matrices - Camera camera; - camera.position = (Vector3){ 5.0f, 5.0f, 5.0f }; // Camera position - camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point - camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) - camera.fovy = 45.0f; // Camera field-of-view Y - - // Initialize viewport and internal projection/modelview matrices - rlViewport(0, 0, screenWidth, screenHeight); - rlMatrixMode(RL_PROJECTION); // Switch to PROJECTION matrix - rlLoadIdentity(); // Reset current matrix (PROJECTION) - - // Setup perspective projection - float aspect = (float)screenWidth/(float)screenHeight; - double top = 0.01*tan(camera.fovy*PI/360.0); - double right = top*aspect; - rlFrustum(-right, right, -top, top, 0.01, 1000.0); - - rlMatrixMode(RL_MODELVIEW); // Switch back to MODELVIEW matrix - rlLoadIdentity(); // Reset current matrix (MODELVIEW) - - // Setup Camera view - Matrix cameraView = MatrixLookAt(camera.position, camera.target, camera.up); - rlMultMatrixf(MatrixToFloat(cameraView)); // Multiply MODELVIEW matrix by view matrix (camera) - - InitOculusDevice(); // Initialize Oculus Rift CV1 - - Vector3 cubePosition = { 0.0f, 0.0f, 0.0f }; - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!glfwWindowShouldClose(window)) - { - // Update - //---------------------------------------------------------------------------------- - UpdateOculusTracking(&camera); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginOculusDrawing(); - - rlClearScreenBuffers(); // Clear current framebuffer(s) - - DrawCube(cubePosition, 2.0f, 2.0f, 2.0f, RED); - DrawCubeWires(cubePosition, 2.0f, 2.0f, 2.0f, RAYWHITE); - DrawGrid(10, 1.0f); - - // NOTE: Internal buffers drawing (3D data) - rlglDraw(); - - EndOculusDrawing(); - - glfwSwapBuffers(window); - glfwPollEvents(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseOculusDevice(); // Close Oculus device and clear resources - - rlglClose(); // Unload rlgl internal buffers and default shader/texture - - glfwDestroyWindow(window); // Close window - glfwTerminate(); // Free GLFW3 resources - //-------------------------------------------------------------------------------------- - - return 0; -} - -//---------------------------------------------------------------------------------- -// Module specific Functions Definitions -//---------------------------------------------------------------------------------- - -// GLFW3: Error callback -static void ErrorCallback(int error, const char* description) -{ - TraceLog(ERROR, description); -} - -// GLFW3: Keyboard callback -static void KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) - { - glfwSetWindowShouldClose(window, GL_TRUE); - } -} - -// Draw rectangle using rlgl OpenGL 1.1 style coding (translated to OpenGL 3.3 internally) -static void DrawRectangleV(Vector2 position, Vector2 size, Color color) -{ - rlBegin(RL_TRIANGLES); - rlColor4ub(color.r, color.g, color.b, color.a); - - rlVertex2i(position.x, position.y); - rlVertex2i(position.x, position.y + size.y); - rlVertex2i(position.x + size.x, position.y + size.y); - - rlVertex2i(position.x, position.y); - rlVertex2i(position.x + size.x, position.y + size.y); - rlVertex2i(position.x + size.x, position.y); - rlEnd(); -} - -// Draw a grid centered at (0, 0, 0) -static void DrawGrid(int slices, float spacing) -{ - int halfSlices = slices / 2; - - rlBegin(RL_LINES); - for(int i = -halfSlices; i <= halfSlices; i++) - { - if (i == 0) - { - rlColor3f(0.5f, 0.5f, 0.5f); - rlColor3f(0.5f, 0.5f, 0.5f); - rlColor3f(0.5f, 0.5f, 0.5f); - rlColor3f(0.5f, 0.5f, 0.5f); - } - else - { - rlColor3f(0.75f, 0.75f, 0.75f); - rlColor3f(0.75f, 0.75f, 0.75f); - rlColor3f(0.75f, 0.75f, 0.75f); - rlColor3f(0.75f, 0.75f, 0.75f); - } - - rlVertex3f((float)i*spacing, 0.0f, (float)-halfSlices*spacing); - rlVertex3f((float)i*spacing, 0.0f, (float)halfSlices*spacing); - - rlVertex3f((float)-halfSlices*spacing, 0.0f, (float)i*spacing); - rlVertex3f((float)halfSlices*spacing, 0.0f, (float)i*spacing); - } - rlEnd(); -} - -// Draw cube -// NOTE: Cube position is the center position -void DrawCube(Vector3 position, float width, float height, float length, Color color) -{ - float x = 0.0f; - float y = 0.0f; - float z = 0.0f; - - rlPushMatrix(); - - // NOTE: Be careful! Function order matters (rotate -> scale -> translate) - rlTranslatef(position.x, position.y, position.z); - //rlScalef(2.0f, 2.0f, 2.0f); - //rlRotatef(45, 0, 1, 0); - - rlBegin(RL_TRIANGLES); - rlColor4ub(color.r, color.g, color.b, color.a); - - // Front Face ----------------------------------------------------- - rlVertex3f(x-width/2, y-height/2, z+length/2); // Bottom Left - rlVertex3f(x+width/2, y-height/2, z+length/2); // Bottom Right - rlVertex3f(x-width/2, y+height/2, z+length/2); // Top Left - - rlVertex3f(x+width/2, y+height/2, z+length/2); // Top Right - rlVertex3f(x-width/2, y+height/2, z+length/2); // Top Left - rlVertex3f(x+width/2, y-height/2, z+length/2); // Bottom Right - - // Back Face ------------------------------------------------------ - rlVertex3f(x-width/2, y-height/2, z-length/2); // Bottom Left - rlVertex3f(x-width/2, y+height/2, z-length/2); // Top Left - rlVertex3f(x+width/2, y-height/2, z-length/2); // Bottom Right - - rlVertex3f(x+width/2, y+height/2, z-length/2); // Top Right - rlVertex3f(x+width/2, y-height/2, z-length/2); // Bottom Right - rlVertex3f(x-width/2, y+height/2, z-length/2); // Top Left - - // Top Face ------------------------------------------------------- - rlVertex3f(x-width/2, y+height/2, z-length/2); // Top Left - rlVertex3f(x-width/2, y+height/2, z+length/2); // Bottom Left - rlVertex3f(x+width/2, y+height/2, z+length/2); // Bottom Right - - rlVertex3f(x+width/2, y+height/2, z-length/2); // Top Right - rlVertex3f(x-width/2, y+height/2, z-length/2); // Top Left - rlVertex3f(x+width/2, y+height/2, z+length/2); // Bottom Right - - // Bottom Face ---------------------------------------------------- - rlVertex3f(x-width/2, y-height/2, z-length/2); // Top Left - rlVertex3f(x+width/2, y-height/2, z+length/2); // Bottom Right - rlVertex3f(x-width/2, y-height/2, z+length/2); // Bottom Left - - rlVertex3f(x+width/2, y-height/2, z-length/2); // Top Right - rlVertex3f(x+width/2, y-height/2, z+length/2); // Bottom Right - rlVertex3f(x-width/2, y-height/2, z-length/2); // Top Left - - // Right face ----------------------------------------------------- - rlVertex3f(x+width/2, y-height/2, z-length/2); // Bottom Right - rlVertex3f(x+width/2, y+height/2, z-length/2); // Top Right - rlVertex3f(x+width/2, y+height/2, z+length/2); // Top Left - - rlVertex3f(x+width/2, y-height/2, z+length/2); // Bottom Left - rlVertex3f(x+width/2, y-height/2, z-length/2); // Bottom Right - rlVertex3f(x+width/2, y+height/2, z+length/2); // Top Left - - // Left Face ------------------------------------------------------ - rlVertex3f(x-width/2, y-height/2, z-length/2); // Bottom Right - rlVertex3f(x-width/2, y+height/2, z+length/2); // Top Left - rlVertex3f(x-width/2, y+height/2, z-length/2); // Top Right - - rlVertex3f(x-width/2, y-height/2, z+length/2); // Bottom Left - rlVertex3f(x-width/2, y+height/2, z+length/2); // Top Left - rlVertex3f(x-width/2, y-height/2, z-length/2); // Bottom Right - rlEnd(); - rlPopMatrix(); -} - -// Draw cube wires -void DrawCubeWires(Vector3 position, float width, float height, float length, Color color) -{ - float x = 0.0f; - float y = 0.0f; - float z = 0.0f; - - rlPushMatrix(); - - rlTranslatef(position.x, position.y, position.z); - //rlRotatef(45, 0, 1, 0); - - rlBegin(RL_LINES); - rlColor4ub(color.r, color.g, color.b, color.a); - - // Front Face ----------------------------------------------------- - // Bottom Line - rlVertex3f(x-width/2, y-height/2, z+length/2); // Bottom Left - rlVertex3f(x+width/2, y-height/2, z+length/2); // Bottom Right - - // Left Line - rlVertex3f(x+width/2, y-height/2, z+length/2); // Bottom Right - rlVertex3f(x+width/2, y+height/2, z+length/2); // Top Right - - // Top Line - rlVertex3f(x+width/2, y+height/2, z+length/2); // Top Right - rlVertex3f(x-width/2, y+height/2, z+length/2); // Top Left - - // Right Line - rlVertex3f(x-width/2, y+height/2, z+length/2); // Top Left - rlVertex3f(x-width/2, y-height/2, z+length/2); // Bottom Left - - // Back Face ------------------------------------------------------ - // Bottom Line - rlVertex3f(x-width/2, y-height/2, z-length/2); // Bottom Left - rlVertex3f(x+width/2, y-height/2, z-length/2); // Bottom Right - - // Left Line - rlVertex3f(x+width/2, y-height/2, z-length/2); // Bottom Right - rlVertex3f(x+width/2, y+height/2, z-length/2); // Top Right - - // Top Line - rlVertex3f(x+width/2, y+height/2, z-length/2); // Top Right - rlVertex3f(x-width/2, y+height/2, z-length/2); // Top Left - - // Right Line - rlVertex3f(x-width/2, y+height/2, z-length/2); // Top Left - rlVertex3f(x-width/2, y-height/2, z-length/2); // Bottom Left - - // Top Face ------------------------------------------------------- - // Left Line - rlVertex3f(x-width/2, y+height/2, z+length/2); // Top Left Front - rlVertex3f(x-width/2, y+height/2, z-length/2); // Top Left Back - - // Right Line - rlVertex3f(x+width/2, y+height/2, z+length/2); // Top Right Front - rlVertex3f(x+width/2, y+height/2, z-length/2); // Top Right Back - - // Bottom Face --------------------------------------------------- - // Left Line - rlVertex3f(x-width/2, y-height/2, z+length/2); // Top Left Front - rlVertex3f(x-width/2, y-height/2, z-length/2); // Top Left Back - - // Right Line - rlVertex3f(x+width/2, y-height/2, z+length/2); // Top Right Front - rlVertex3f(x+width/2, y-height/2, z-length/2); // Top Right Back - rlEnd(); - rlPopMatrix(); -}
\ No newline at end of file diff --git a/examples/shaders/shaders_standard_lighting.c b/examples/others/standard_lighting.c index 16cd7ff6..14fda32e 100644 --- a/examples/shaders/shaders_standard_lighting.c +++ b/examples/others/standard_lighting.c @@ -101,7 +101,8 @@ int main() Material material;// = LoadStandardMaterial(); - material.shader = LoadShader("resources/shaders/glsl330/standard.vs", "resources/shaders/glsl330/standard.fs"); + material.shader = LoadShader("resources/shaders/glsl330/standard.vs", + "resources/shaders/glsl330/standard.fs"); // Try to get lights location points (if available) GetShaderLightsLocations(material.shader); diff --git a/examples/physac/physics_demo.c b/examples/physac/physics_demo.c index b12ac708..1b54d51b 100644 --- a/examples/physac/physics_demo.c +++ b/examples/physac/physics_demo.c @@ -2,9 +2,11 @@ * * Physac - Physics demo * -* NOTE: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations. +* NOTE 1: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations. +* NOTE 2: Physac requires static C library linkage to avoid dependency on MinGW DLL (-static -lpthread) +* +* Use the following line to compile: * -* Use the following code to compile (-static -lpthread): * gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread * -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition * @@ -15,7 +17,7 @@ #include "raylib.h" #define PHYSAC_IMPLEMENTATION -#include "../src/physac.h" +#include "physac.h" int main() { @@ -26,7 +28,6 @@ int main() SetConfigFlags(FLAG_MSAA_4X_HINT); InitWindow(screenWidth, screenHeight, "Physac [raylib] - Physics demo"); - SetTargetFPS(60); // Physac logo drawing position int logoX = screenWidth - MeasureText("Physac", 30) - 10; @@ -42,6 +43,8 @@ int main() // Create obstacle circle physics body PhysicsBody circle = CreatePhysicsBodyCircle((Vector2){ screenWidth/2, screenHeight/2 }, 45, 10); circle->enabled = false; // Disable body state to convert it to static (no dynamics, but collisions) + + SetTargetFPS(60); //-------------------------------------------------------------------------------------- // Main game loop @@ -118,8 +121,10 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- ClosePhysics(); // Unitialize physics + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; } + diff --git a/examples/physac/physics_friction.c b/examples/physac/physics_friction.c index db1b5f4c..9472729a 100644 --- a/examples/physac/physics_friction.c +++ b/examples/physac/physics_friction.c @@ -2,9 +2,11 @@ * * Physac - Physics friction * -* NOTE: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations. +* NOTE 1: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations. +* NOTE 2: Physac requires static C library linkage to avoid dependency on MinGW DLL (-static -lpthread) +* +* Use the following line to compile: * -* Use the following code to compile (-static -lpthread): * gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread * -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition * @@ -15,7 +17,7 @@ #include "raylib.h" #define PHYSAC_IMPLEMENTATION -#include "../src/physac.h" +#include "physac.h" int main() { @@ -26,7 +28,6 @@ int main() SetConfigFlags(FLAG_MSAA_4X_HINT); InitWindow(screenWidth, screenHeight, "Physac [raylib] - Physics friction"); - SetTargetFPS(60); // Physac logo drawing position int logoX = screenWidth - MeasureText("Physac", 30) - 10; @@ -61,6 +62,8 @@ int main() bodyB->staticFriction = 1; bodyB->dynamicFriction = 1; SetPhysicsBodyRotation(bodyB, 330*DEG2RAD); + + SetTargetFPS(60); //-------------------------------------------------------------------------------------- // Main game loop @@ -132,8 +135,10 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- ClosePhysics(); // Unitialize physics + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; } + diff --git a/examples/physac/physics_movement.c b/examples/physac/physics_movement.c index 3345404d..4b2c9ab0 100644 --- a/examples/physac/physics_movement.c +++ b/examples/physac/physics_movement.c @@ -2,9 +2,11 @@ * * Physac - Physics movement * -* NOTE: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations. +* NOTE 1: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations. +* NOTE 2: Physac requires static C library linkage to avoid dependency on MinGW DLL (-static -lpthread) +* +* Use the following line to compile: * -* Use the following code to compile (-static -lpthread): * gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread * -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition * @@ -15,9 +17,9 @@ #include "raylib.h" #define PHYSAC_IMPLEMENTATION -#include "../src/physac.h" +#include "physac.h" -#define VELOCITY 0.5f +#define VELOCITY 0.5f int main() { @@ -28,7 +30,6 @@ int main() SetConfigFlags(FLAG_MSAA_4X_HINT); InitWindow(screenWidth, screenHeight, "Physac [raylib] - Physics movement"); - SetTargetFPS(60); // Physac logo drawing position int logoX = screenWidth - MeasureText("Physac", 30) - 10; @@ -54,6 +55,8 @@ int main() // Create movement physics body PhysicsBody body = CreatePhysicsBodyRectangle((Vector2){ screenWidth/2, screenHeight/2 }, 50, 50, 1); body->freezeOrient = true; // Constrain body rotation to avoid little collision torque amounts + + SetTargetFPS(60); //-------------------------------------------------------------------------------------- // Main game loop @@ -118,8 +121,10 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- ClosePhysics(); // Unitialize physics + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; } + diff --git a/examples/physac/physics_restitution.c b/examples/physac/physics_restitution.c index 534d125e..2be8f42e 100644 --- a/examples/physac/physics_restitution.c +++ b/examples/physac/physics_restitution.c @@ -2,9 +2,11 @@ * * Physac - Physics restitution * -* NOTE: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations. +* NOTE 1: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations. +* NOTE 2: Physac requires static C library linkage to avoid dependency on MinGW DLL (-static -lpthread) +* +* Use the following line to compile: * -* Use the following code to compile (-static -lpthread): * gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread * -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition * @@ -15,7 +17,7 @@ #include "raylib.h" #define PHYSAC_IMPLEMENTATION -#include "../src/physac.h" +#include "physac.h" int main() { @@ -26,7 +28,6 @@ int main() SetConfigFlags(FLAG_MSAA_4X_HINT); InitWindow(screenWidth, screenHeight, "Physac [raylib] - Physics restitution"); - SetTargetFPS(60); // Physac logo drawing position int logoX = screenWidth - MeasureText("Physac", 30) - 10; @@ -47,6 +48,8 @@ int main() circleB->restitution = 0.5f; PhysicsBody circleC = CreatePhysicsBodyCircle((Vector2){ screenWidth*0.75f, screenHeight/2 }, 30, 10); circleC->restitution = 1; + + SetTargetFPS(60); //-------------------------------------------------------------------------------------- // Main game loop @@ -111,8 +114,10 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- ClosePhysics(); // Unitialize physics + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; } + diff --git a/examples/physac/physics_shatter.c b/examples/physac/physics_shatter.c index fac90714..6b474cd3 100644 --- a/examples/physac/physics_shatter.c +++ b/examples/physac/physics_shatter.c @@ -2,9 +2,11 @@ * * Physac - Body shatter * -* NOTE: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations. +* NOTE 1: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations. +* NOTE 2: Physac requires static C library linkage to avoid dependency on MinGW DLL (-static -lpthread) +* +* Use the following line to compile: * -* Use the following code to compile (-static -lpthread): * gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread * -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition * @@ -15,7 +17,7 @@ #include "raylib.h" #define PHYSAC_IMPLEMENTATION -#include "../src/physac.h" +#include "physac.h" int main() { @@ -26,7 +28,6 @@ int main() SetConfigFlags(FLAG_MSAA_4X_HINT); InitWindow(screenWidth, screenHeight, "Physac [raylib] - Body shatter"); - SetTargetFPS(60); // Physac logo drawing position int logoX = screenWidth - MeasureText("Physac", 30) - 10; @@ -38,6 +39,8 @@ int main() // Create random polygon physics body to shatter PhysicsBody body = CreatePhysicsBodyPolygon((Vector2){ screenWidth/2, screenHeight/2 }, GetRandomValue(80, 200), GetRandomValue(3, 8), 10); + + SetTargetFPS(60); //-------------------------------------------------------------------------------------- // Main game loop @@ -103,8 +106,10 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- ClosePhysics(); // Unitialize physics + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; } + diff --git a/examples/shaders/resources/fudesumi.png b/examples/shaders/resources/fudesumi.png Binary files differnew file mode 100644 index 00000000..8ba983dc --- /dev/null +++ b/examples/shaders/resources/fudesumi.png diff --git a/examples/shaders/resources/model/lowpoly-tower.obj b/examples/shaders/resources/model/lowpoly-tower.obj deleted file mode 100644 index ea03a9fc..00000000 --- a/examples/shaders/resources/model/lowpoly-tower.obj +++ /dev/null @@ -1,456 +0,0 @@ -# Blender v2.78 (sub 0) OBJ File: 'lowpoly-tower.blend' -# www.blender.org -o Grid -v -4.000000 0.000000 4.000000 -v -2.327363 0.000000 4.654725 -v 0.000000 0.000000 4.654725 -v 2.327363 0.000000 4.654725 -v 4.000000 0.000000 4.000000 -v -4.654725 0.955085 2.327363 -v -2.000000 0.815050 2.000000 -v 0.000000 0.476341 2.423448 -v 2.000000 0.476341 2.000000 -v 4.654725 0.000000 2.327363 -v -4.654725 1.649076 0.000000 -v -2.423448 1.092402 0.000000 -v 2.423448 0.198579 0.000000 -v 4.654725 0.000000 0.000000 -v -4.654725 1.649076 -2.327363 -v -2.000000 1.092402 -2.000000 -v 0.000000 0.476341 -2.423448 -v 2.000000 -0.012791 -2.000000 -v 4.654725 0.000000 -2.612731 -v -4.000000 0.955085 -4.000000 -v -2.327363 0.955085 -4.654725 -v 0.000000 0.955085 -4.654725 -v 2.327363 0.000000 -4.654725 -v 4.000000 0.000000 -4.000000 -v 2.423448 0.682825 0.000000 -v 2.000000 0.565423 -2.000000 -v -4.654725 -0.020560 2.327363 -v -4.654725 0.000000 0.000000 -v -4.654725 0.000000 -2.327363 -v -4.000000 0.000000 -4.000000 -v -2.327363 0.000000 -4.654725 -v 0.000000 -0.020560 -4.654725 -v 0.000000 0.709880 -1.230535 -v -0.000000 7.395413 0.000000 -v 0.962071 0.709880 -0.767226 -v -0.533909 0.709880 1.108674 -v -1.199683 0.709880 0.273820 -v -0.962071 0.709880 -0.767226 -v 1.506076 0.859071 1.325337 -v 1.199683 0.709880 0.273820 -v 0.533909 0.709880 1.108674 -v 0.000000 1.875340 -1.177842 -v -0.000000 2.293973 -0.649884 -v -0.000000 4.365648 -0.627970 -v 0.000000 6.167194 -0.942957 -v 0.000000 6.232434 -1.708677 -v 1.335898 6.232434 -1.065343 -v 0.737233 6.167195 -0.587924 -v 0.490966 4.365648 -0.391533 -v 0.508100 2.293973 -0.405196 -v 0.920874 1.875340 -0.734372 -v -0.741367 6.232434 1.539465 -v -0.409133 6.167195 0.849574 -v -0.272466 4.365648 0.565781 -v -0.281974 2.293973 0.585526 -v -0.511047 1.875340 1.061199 -v -1.665837 6.232434 0.380217 -v -0.919314 6.167195 0.209828 -v -0.612225 4.365648 0.139736 -v -0.633590 2.293973 0.144613 -v -1.148311 1.875340 0.262095 -v -1.335898 6.232434 -1.065343 -v -0.737233 6.167195 -0.587924 -v -0.490967 4.365648 -0.391533 -v -0.508100 2.293973 -0.405196 -v -0.920874 1.875340 -0.734372 -v 1.665837 6.232434 0.380216 -v 0.919315 6.167195 0.209828 -v 0.612225 4.365648 0.139736 -v 0.633590 2.293973 0.144613 -v 1.148311 1.875340 0.262095 -v 0.741367 6.232434 1.539465 -v 0.409133 6.167195 0.849575 -v 0.272466 4.365648 0.565781 -v 0.281974 2.293973 0.585526 -v 0.511046 1.875340 1.061199 -v 0.000000 5.012550 -0.969733 -v 0.758168 5.012550 -0.604618 -v -0.420751 5.012550 0.873699 -v -0.945419 5.012550 0.215786 -v -0.758168 5.012550 -0.604618 -v 0.945419 5.012550 0.215786 -v 0.420751 5.012550 0.873699 -vt 0.0523 0.5444 -vt 0.1817 0.4284 -vt 0.1641 0.5859 -vt 0.0177 0.4451 -vt 0.1526 0.3090 -vt 0.0189 0.1737 -vt 0.0188 0.3088 -vt 0.0561 0.0762 -vt 0.1757 0.1924 -vt 0.3024 0.4534 -vt 0.3071 0.5902 -vt 0.3413 0.2459 -vt 0.2906 0.1614 -vt 0.4116 0.1801 -vt 0.2834 0.3774 -vt 0.1526 0.0362 -vt 0.2917 0.1622 -vt 0.4446 0.5865 -vt 0.4443 0.2989 -vt 0.3711 0.3021 -vt 0.4396 0.0275 -vt 0.4094 0.1829 -vt 0.4219 0.4255 -vt 0.5474 0.5381 -vt 0.5811 0.4376 -vt 0.5715 0.1505 -vt 0.5811 0.2997 -vt 0.5272 0.0533 -vt 0.2208 0.2194 -vt 0.3456 0.3610 -vt 0.2878 0.0321 -vt 0.2321 0.3392 -vt 0.4432 0.0177 -vt 0.7347 0.7934 -vt 0.7382 0.7595 -vt 0.8982 0.7768 -vt 0.6169 0.7595 -vt 0.6139 0.7879 -vt 0.4951 0.7634 -vt 0.1551 0.6832 -vt 0.2925 0.6268 -vt 0.2925 0.6832 -vt 0.7795 0.6832 -vt 0.6421 0.6268 -vt 0.7795 0.6255 -vt 0.5046 0.7241 -vt 0.6421 0.7241 -vt 0.3986 0.6268 -vt 0.3986 0.6832 -vt 0.5046 0.6268 -vt 0.0177 0.6268 -vt 0.1551 0.6255 -vt 0.8856 0.6268 -vt 0.1899 0.9579 -vt 0.1194 0.8696 -vt 0.2324 0.8696 -vt 0.1899 0.7813 -vt 0.0943 0.7595 -vt 0.0177 0.8206 -vt 0.0177 0.9186 -vt 0.0943 0.9797 -vt 0.2793 0.2349 -vt 0.2304 0.2758 -vt 0.6597 0.0177 -vt 0.6954 0.0993 -vt 0.6367 0.0768 -vt 0.7558 0.0777 -vt 0.7238 0.0440 -vt 0.8840 0.1330 -vt 0.7385 0.1141 -vt 0.9157 0.0886 -vt 0.9781 0.1232 -vt 0.9224 0.1276 -vt 0.2677 0.8141 -vt 0.3463 0.8037 -vt 0.3086 0.8339 -vt 0.6387 0.3550 -vt 0.7130 0.3801 -vt 0.6596 0.4053 -vt 0.7245 0.3245 -vt 0.6919 0.3383 -vt 0.8655 0.3566 -vt 0.7351 0.3577 -vt 0.9770 0.3365 -vt 0.9078 0.3751 -vt 0.9174 0.3282 -vt 0.2677 0.9018 -vt 0.3086 0.8821 -vt 0.6803 0.2948 -vt 0.6251 0.3035 -vt 0.7194 0.2854 -vt 0.8764 0.2832 -vt 0.9221 0.2861 -vt 0.3363 0.9565 -vt 0.3464 0.9122 -vt 0.6751 0.2482 -vt 0.6178 0.2499 -vt 0.7179 0.2431 -vt 0.9823 0.2484 -vt 0.9247 0.2452 -vt 0.3935 0.9014 -vt 0.6755 0.1996 -vt 0.6164 0.1941 -vt 0.7201 0.1992 -vt 0.8793 0.2446 -vt 0.9823 0.2060 -vt 0.9257 0.2051 -vt 0.4598 0.8580 -vt 0.4144 0.8579 -vt 0.6819 0.1498 -vt 0.6222 0.1361 -vt 0.7266 0.1555 -vt 0.8831 0.1684 -vt 0.9252 0.1659 -vt 0.4218 0.7790 -vt 0.3934 0.8145 -vt 0.3363 0.7595 -vt 0.8815 0.2060 -vt 0.8720 0.3208 -vt 0.8825 0.1012 -vt 0.9735 0.0816 -vt 0.9718 0.3817 -vt 0.9807 0.2918 -vt 0.4218 0.9370 -vt 0.9810 0.1644 -vn 0.1035 0.8806 0.4623 -vn 0.0964 0.9481 0.3030 -vn 0.0000 0.9780 0.2088 -vn 0.0659 0.9835 0.1683 -vn 0.2325 0.9320 0.2779 -vn 0.0553 0.9960 -0.0702 -vn 0.2827 0.9564 0.0728 -vn 0.1873 0.9776 -0.0961 -vn 0.2421 0.9703 0.0000 -vn 0.0921 0.9772 -0.1913 -vn -0.0277 0.9947 -0.0993 -vn 0.2308 0.9274 -0.2944 -vn 0.2771 0.9572 -0.0837 -vn 0.3724 0.9074 0.1947 -vn 0.0777 0.9770 -0.1985 -vn -0.1094 0.9539 0.2794 -vn 0.0364 0.9844 0.1721 -vn 0.1683 0.9835 0.0659 -vn 0.0674 0.9901 0.1230 -vn 0.4338 0.8823 0.1829 -vn 0.2845 0.9565 0.0649 -vn 0.0886 0.9961 0.0000 -vn 0.2000 0.9789 0.0424 -vn 0.1417 0.9830 0.1171 -vn 0.3021 0.9524 0.0412 -vn -0.0193 0.9986 -0.0493 -vn 0.0000 0.9777 0.2098 -vn 0.0005 0.9781 -0.2083 -vn 0.1879 0.9782 -0.0887 -vn 0.2249 0.0000 0.9744 -vn 0.9783 0.0000 -0.2071 -vn 0.9783 0.0000 0.2071 -vn 0.0000 0.0000 -1.0000 -vn -1.0000 0.0000 0.0000 -vn -0.3645 0.0000 -0.9312 -vn -0.9312 0.0000 -0.3645 -vn -0.9312 0.0000 0.3645 -vn 0.2615 0.7979 -0.5431 -vn 0.5877 0.7979 -0.1341 -vn 0.4713 0.7979 0.3758 -vn -0.0000 0.7979 0.6028 -vn -0.4713 0.7979 0.3758 -vn -0.5877 0.7979 -0.1341 -vn -0.2615 0.7979 -0.5431 -vn -0.1285 0.9864 -0.1025 -vn 0.0929 0.8937 0.4389 -vn -0.4335 0.0407 -0.9002 -vn -0.2867 0.7507 -0.5952 -vn -0.4339 0.0095 -0.9009 -vn -0.4338 0.0209 -0.9008 -vn -0.0408 -0.9956 -0.0848 -vn -0.9741 0.0407 -0.2223 -vn -0.6441 0.7507 -0.1470 -vn -0.9749 0.0095 -0.2225 -vn -0.9747 0.0209 -0.2225 -vn -0.0918 -0.9956 -0.0209 -vn -0.7812 0.0407 0.6230 -vn -0.5165 0.7507 0.4119 -vn -0.7818 0.0095 0.6235 -vn -0.7817 0.0209 0.6234 -vn -0.0736 -0.9956 0.0587 -vn -0.0000 0.0407 0.9992 -vn 0.0000 0.7507 0.6607 -vn 0.0000 0.0095 1.0000 -vn -0.0000 0.0209 0.9998 -vn -0.0000 -0.9956 0.0941 -vn 0.7812 0.0407 0.6230 -vn 0.5165 0.7507 0.4119 -vn 0.7818 0.0095 0.6235 -vn 0.7817 0.0209 0.6234 -vn 0.0736 -0.9956 0.0587 -vn 0.9741 0.0407 -0.2223 -vn 0.6441 0.7507 -0.1470 -vn 0.9749 0.0095 -0.2225 -vn 0.9747 0.0209 -0.2225 -vn 0.0918 -0.9956 -0.0209 -vn 0.4335 0.0407 -0.9002 -vn 0.2867 0.7507 -0.5952 -vn 0.4339 0.0095 -0.9009 -vn 0.4338 0.0209 -0.9008 -vn 0.0408 -0.9956 -0.0848 -vn 0.3918 -0.4298 -0.8135 -vn 0.8803 -0.4298 -0.2009 -vn 0.7059 -0.4298 0.5630 -vn -0.0000 -0.4298 0.9029 -vn -0.7059 -0.4298 0.5630 -vn -0.8803 -0.4298 -0.2009 -vn -0.3918 -0.4298 -0.8135 -vn 0.0210 0.9998 -0.0048 -vn 0.0482 0.9981 -0.0385 -vn -0.0166 0.9914 -0.1301 -vn -0.0090 0.9904 -0.1379 -vn 0.2820 0.9576 0.0597 -vn -0.0000 0.9846 0.1749 -vn -0.0921 0.9772 -0.1913 -vn -0.1734 0.9794 0.1036 -s off -f 1/1/1 7/2/1 6/3/1 -f 2/4/2 8/5/2 7/2/2 -f 4/6/3 8/5/3 3/7/3 -f 5/8/4 9/9/4 4/6/4 -f 6/3/5 12/10/5 11/11/5 -f 35/12/6 25/13/6 26/14/6 -f 7/2/7 37/15/7 12/10/7 -f 10/16/8 13/17/8 9/9/8 -f 12/10/9 15/18/9 11/11/9 -f 35/12/10 17/19/10 33/20/10 -f 13/17/11 19/21/11 18/22/11 -f 16/23/12 20/24/12 15/18/12 -f 17/19/13 21/25/13 16/23/13 -f 17/19/14 23/26/14 22/27/14 -f 26/14/15 24/28/15 23/26/15 -f 1/1/16 2/4/16 7/2/16 -f 2/4/3 3/7/3 8/5/3 -f 4/6/17 9/9/17 8/5/17 -f 5/8/18 10/16/18 9/9/18 -f 6/3/19 7/2/19 12/10/19 -f 25/13/20 39/29/20 9/9/20 -f 38/30/21 12/10/21 37/15/21 -f 10/16/22 14/31/22 13/17/22 -f 12/10/23 16/23/23 15/18/23 -f 8/5/24 36/32/24 7/2/24 -f 38/30/25 17/19/25 16/23/25 -f 13/17/22 14/31/22 19/21/22 -f 16/23/26 21/25/26 20/24/26 -f 17/19/27 22/27/27 21/25/27 -f 17/19/28 26/14/28 23/26/28 -f 26/14/29 19/33/29 24/28/29 -f 26/34/30 18/35/30 19/36/30 -f 26/34/31 13/37/31 18/35/31 -f 25/38/32 9/39/32 13/37/32 -f 22/40/33 31/41/33 21/42/33 -f 6/43/34 28/44/34 27/45/34 -f 15/46/34 28/44/34 11/47/34 -f 21/42/35 30/48/35 20/49/35 -f 20/49/36 29/50/36 15/46/36 -f 22/40/33 23/51/33 32/52/33 -f 6/43/37 27/45/37 1/53/37 -f 46/54/38 34/55/38 47/56/38 -f 47/56/39 34/55/39 67/57/39 -f 67/57/40 34/55/40 72/58/40 -f 72/58/41 34/55/41 52/59/41 -f 52/59/42 34/55/42 57/60/42 -f 57/60/43 34/55/43 62/61/43 -f 62/61/44 34/55/44 46/54/44 -f 40/62/45 41/63/45 39/29/45 -f 39/29/46 8/5/46 9/9/46 -f 38/64/47 42/65/47 33/66/47 -f 65/67/48 42/65/48 66/68/48 -f 65/67/49 44/69/49 43/70/49 -f 81/71/50 45/72/50 77/73/50 -f 62/74/51 45/75/51 63/76/51 -f 37/77/52 66/78/52 38/79/52 -f 60/80/53 66/78/53 61/81/53 -f 60/80/54 64/82/54 65/83/54 -f 58/84/55 81/85/55 80/86/55 -f 57/87/56 63/76/56 58/88/56 -f 56/89/57 37/77/57 36/90/57 -f 55/91/58 61/81/58 56/89/58 -f 54/92/59 60/80/59 55/91/59 -f 79/93/60 58/84/60 80/86/60 -f 52/94/61 58/88/61 53/95/61 -f 76/96/62 36/90/62 41/97/62 -f 75/98/63 56/89/63 76/96/63 -f 75/98/64 54/92/64 55/91/64 -f 73/99/65 79/93/65 83/100/65 -f 73/101/66 52/94/66 53/95/66 -f 71/102/67 41/97/67 40/103/67 -f 70/104/68 76/96/68 71/102/68 -f 70/104/69 74/105/69 75/98/69 -f 68/106/70 83/100/70 82/107/70 -f 67/108/71 73/101/71 68/109/71 -f 51/110/72 40/103/72 35/111/72 -f 50/112/73 71/102/73 51/110/73 -f 49/113/74 70/104/74 50/112/74 -f 78/114/75 68/106/75 82/107/75 -f 47/115/76 68/109/76 48/116/76 -f 42/65/77 35/111/77 33/66/77 -f 43/70/78 51/110/78 42/65/78 -f 44/69/79 50/112/79 43/70/79 -f 45/72/80 78/114/80 77/73/80 -f 46/117/81 48/116/81 45/75/81 -f 44/69/82 78/114/82 49/113/82 -f 49/113/83 82/107/83 69/118/83 -f 82/107/84 74/105/84 69/118/84 -f 83/100/85 54/92/85 74/105/85 -f 79/93/86 59/119/86 54/92/86 -f 80/86/87 64/82/87 59/119/87 -f 64/120/88 77/73/88 44/69/88 -f 35/12/89 40/62/89 25/13/89 -f 7/2/90 36/32/90 37/15/90 -f 35/12/91 26/14/91 17/19/91 -f 25/13/92 40/62/92 39/29/92 -f 38/30/93 16/23/93 12/10/93 -f 8/5/94 41/63/94 36/32/94 -f 38/30/95 33/20/95 17/19/95 -f 26/34/31 25/38/31 13/37/31 -f 22/40/33 32/52/33 31/41/33 -f 6/43/34 11/47/34 28/44/34 -f 15/46/34 29/50/34 28/44/34 -f 21/42/35 31/41/35 30/48/35 -f 20/49/36 30/48/36 29/50/36 -f 39/29/96 41/63/96 8/5/96 -f 38/64/47 66/68/47 42/65/47 -f 65/67/48 43/70/48 42/65/48 -f 65/67/49 64/120/49 44/69/49 -f 81/71/50 63/121/50 45/72/50 -f 62/74/51 46/117/51 45/75/51 -f 37/77/52 61/81/52 66/78/52 -f 60/80/53 65/83/53 66/78/53 -f 60/80/54 59/119/54 64/82/54 -f 58/84/55 63/122/55 81/85/55 -f 57/87/56 62/74/56 63/76/56 -f 56/89/57 61/81/57 37/77/57 -f 55/91/58 60/80/58 61/81/58 -f 54/92/59 59/119/59 60/80/59 -f 79/93/60 53/123/60 58/84/60 -f 52/94/61 57/87/61 58/88/61 -f 76/96/62 56/89/62 36/90/62 -f 75/98/63 55/91/63 56/89/63 -f 75/98/64 74/105/64 54/92/64 -f 73/99/65 53/123/65 79/93/65 -f 73/101/66 72/124/66 52/94/66 -f 71/102/67 76/96/67 41/97/67 -f 70/104/68 75/98/68 76/96/68 -f 70/104/69 69/118/69 74/105/69 -f 68/106/70 73/99/70 83/100/70 -f 67/108/71 72/124/71 73/101/71 -f 51/110/72 71/102/72 40/103/72 -f 50/112/73 70/104/73 71/102/73 -f 49/113/74 69/118/74 70/104/74 -f 78/114/75 48/125/75 68/106/75 -f 47/115/76 67/108/76 68/109/76 -f 42/65/77 51/110/77 35/111/77 -f 43/70/78 50/112/78 51/110/78 -f 44/69/79 49/113/79 50/112/79 -f 45/72/80 48/125/80 78/114/80 -f 46/117/81 47/115/81 48/116/81 -f 44/69/82 77/73/82 78/114/82 -f 49/113/83 78/114/83 82/107/83 -f 82/107/84 83/100/84 74/105/84 -f 83/100/85 79/93/85 54/92/85 -f 79/93/86 80/86/86 59/119/86 -f 80/86/87 81/85/87 64/82/87 -f 64/120/88 81/71/88 77/73/88 diff --git a/examples/shaders/resources/model/lowpoly-tower.png b/examples/shaders/resources/model/lowpoly-tower.png Binary files differdeleted file mode 100644 index 7c9239e2..00000000 --- a/examples/shaders/resources/model/lowpoly-tower.png +++ /dev/null diff --git a/examples/shaders/resources/sonic.png b/examples/shaders/resources/sonic.png Binary files differdeleted file mode 100644 index 7a096847..00000000 --- a/examples/shaders/resources/sonic.png +++ /dev/null diff --git a/examples/shaders/shaders_shapes_textures.c b/examples/shaders/shaders_shapes_textures.c index 0a14469f..40e99a8f 100644 --- a/examples/shaders/shaders_shapes_textures.c +++ b/examples/shaders/shaders_shapes_textures.c @@ -9,7 +9,7 @@ * on OpenGL ES 2.0 platforms (Android, Raspberry Pi, HTML5), use #version 100 shaders * raylib comes with shaders ready for both versions, check raylib/shaders install folder * -* This example has been created using raylib 1.3 (www.raylib.com) +* This example has been created using raylib 1.7 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * * Copyright (c) 2015 Ramon Santamaria (@raysan5) @@ -18,9 +18,6 @@ #include "raylib.h" -#include <stdio.h> -#include <stdlib.h> - int main() { // Initialization @@ -30,14 +27,12 @@ int main() InitWindow(screenWidth, screenHeight, "raylib [shaders] example - shapes and texture shaders"); - Texture2D sonic = LoadTexture("resources/texture_formats/sonic.png"); + Texture2D fudesumi = LoadTexture("resources/fudesumi.png"); // NOTE: Using GLSL 330 shader version, on OpenGL ES 2.0 use GLSL 100 shader version Shader shader = LoadShader("resources/shaders/glsl330/base.vs", "resources/shaders/glsl330/grayscale.fs"); - - // Shader usage is also different than models/postprocessing, shader is just activated when required - + SetTargetFPS(60); //-------------------------------------------------------------------------------------- @@ -91,21 +86,23 @@ int main() // Activate our custom shader to be applied on next shapes/textures drawings BeginShaderMode(shader); - DrawTexture(sonic, 380, -10, WHITE); // Using custom shader + DrawTexture(fudesumi, 500, -30, WHITE); // Using custom shader // Activate our default shader for next drawings EndShaderMode(); + DrawText("(c) Fudesumi sprite by Eiden Marsal", 380, screenHeight - 20, 10, GRAY); + EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- - UnloadShader(shader); // Unload shader - UnloadTexture(sonic); // Unload texture + UnloadShader(shader); // Unload shader + UnloadTexture(fudesumi); // Unload texture - CloseWindow(); // Close window and OpenGL context + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; diff --git a/examples/shaders/shaders_shapes_textures.png b/examples/shaders/shaders_shapes_textures.png Binary files differindex ee5fed42..63a2283c 100644 --- a/examples/shaders/shaders_shapes_textures.png +++ b/examples/shaders/shaders_shapes_textures.png diff --git a/examples/shaders/shaders_standard_lighting.png b/examples/shaders/shaders_standard_lighting.png Binary files differdeleted file mode 100644 index 65efe47f..00000000 --- a/examples/shaders/shaders_standard_lighting.png +++ /dev/null diff --git a/examples/shapes/shapes_lines_bezier.c b/examples/shapes/shapes_lines_bezier.c new file mode 100644 index 00000000..f4133459 --- /dev/null +++ b/examples/shapes/shapes_lines_bezier.c @@ -0,0 +1,59 @@ +/******************************************************************************************* +* +* raylib [shapes] example - Cubic-bezier lines +* +* This example has been created using raylib 1.7 (www.raylib.com) +* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) +* +* Copyright (c) 2017 Ramon Santamaria (@raysan5) +* +********************************************************************************************/ + +#include "raylib.h" + +int main() +{ + // Initialization + //-------------------------------------------------------------------------------------- + int screenWidth = 800; + int screenHeight = 450; + + SetConfigFlags(FLAG_MSAA_4X_HINT); + InitWindow(screenWidth, screenHeight, "raylib [shapes] example - cubic-bezier lines"); + + Vector2 start = { 0, 0 }; + Vector2 end = { screenWidth, screenHeight }; + + SetTargetFPS(60); + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) start = GetMousePosition(); + else if (IsMouseButtonDown(MOUSE_RIGHT_BUTTON)) end = GetMousePosition(); + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + DrawText("USE MOUSE LEFT-RIGHT CLICK to DEFINE LINE START and END POINTS", 15, 20, 20, GRAY); + + DrawLineBezier(start, end, 2.0f, RED); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} diff --git a/examples/shapes/shapes_lines_bezier.png b/examples/shapes/shapes_lines_bezier.png Binary files differnew file mode 100644 index 00000000..390a49ad --- /dev/null +++ b/examples/shapes/shapes_lines_bezier.png diff --git a/examples/text/resources/fonts/KAISG.ttf b/examples/text/resources/KAISG.ttf Binary files differindex 04478b25..04478b25 100644 --- a/examples/text/resources/fonts/KAISG.ttf +++ b/examples/text/resources/KAISG.ttf diff --git a/examples/text/resources/fonts/bmfont.fnt b/examples/text/resources/bmfont.fnt index 372c2c88..372c2c88 100644 --- a/examples/text/resources/fonts/bmfont.fnt +++ b/examples/text/resources/bmfont.fnt diff --git a/examples/text/resources/fonts/bmfont.png b/examples/text/resources/bmfont.png Binary files differindex 9d621594..9d621594 100644 --- a/examples/text/resources/fonts/bmfont.png +++ b/examples/text/resources/bmfont.png diff --git a/examples/text/resources/fonts/custom_alagard.png b/examples/text/resources/custom_alagard.png Binary files differindex c3eb63b7..c3eb63b7 100644 --- a/examples/text/resources/fonts/custom_alagard.png +++ b/examples/text/resources/custom_alagard.png diff --git a/examples/text/resources/fonts/custom_jupiter_crash.png b/examples/text/resources/custom_jupiter_crash.png Binary files differindex 451b591f..451b591f 100644 --- a/examples/text/resources/fonts/custom_jupiter_crash.png +++ b/examples/text/resources/custom_jupiter_crash.png diff --git a/examples/text/resources/fonts/custom_mecha.png b/examples/text/resources/custom_mecha.png Binary files differindex 59caab2c..59caab2c 100644 --- a/examples/text/resources/fonts/custom_mecha.png +++ b/examples/text/resources/custom_mecha.png diff --git a/examples/text/resources/fonts/alagard.png b/examples/text/resources/fonts/alagard.png Binary files differnew file mode 100644 index 00000000..3ac4bf1c --- /dev/null +++ b/examples/text/resources/fonts/alagard.png diff --git a/examples/text/resources/fonts/alagard.rbmf b/examples/text/resources/fonts/alagard.rbmf Binary files differdeleted file mode 100644 index 8c9b68d3..00000000 --- a/examples/text/resources/fonts/alagard.rbmf +++ /dev/null diff --git a/examples/text/resources/fonts/alpha_beta.png b/examples/text/resources/fonts/alpha_beta.png Binary files differnew file mode 100644 index 00000000..c362bfb1 --- /dev/null +++ b/examples/text/resources/fonts/alpha_beta.png diff --git a/examples/text/resources/fonts/alpha_beta.rbmf b/examples/text/resources/fonts/alpha_beta.rbmf Binary files differdeleted file mode 100644 index bdb2e752..00000000 --- a/examples/text/resources/fonts/alpha_beta.rbmf +++ /dev/null diff --git a/examples/text/resources/fonts/jupiter_crash.png b/examples/text/resources/fonts/jupiter_crash.png Binary files differnew file mode 100644 index 00000000..1f5172fb --- /dev/null +++ b/examples/text/resources/fonts/jupiter_crash.png diff --git a/examples/text/resources/fonts/jupiter_crash.rbmf b/examples/text/resources/fonts/jupiter_crash.rbmf Binary files differdeleted file mode 100644 index d797e0d6..00000000 --- a/examples/text/resources/fonts/jupiter_crash.rbmf +++ /dev/null diff --git a/examples/text/resources/fonts/mecha.png b/examples/text/resources/fonts/mecha.png Binary files differnew file mode 100644 index 00000000..8022d18c --- /dev/null +++ b/examples/text/resources/fonts/mecha.png diff --git a/examples/text/resources/fonts/mecha.rbmf b/examples/text/resources/fonts/mecha.rbmf Binary files differdeleted file mode 100644 index 0266a065..00000000 --- a/examples/text/resources/fonts/mecha.rbmf +++ /dev/null diff --git a/examples/text/resources/fonts/pixantiqua.png b/examples/text/resources/fonts/pixantiqua.png Binary files differnew file mode 100644 index 00000000..ce422e7e --- /dev/null +++ b/examples/text/resources/fonts/pixantiqua.png diff --git a/examples/text/resources/fonts/pixantiqua.rbmf b/examples/text/resources/fonts/pixantiqua.rbmf Binary files differdeleted file mode 100644 index 04ef0e25..00000000 --- a/examples/text/resources/fonts/pixantiqua.rbmf +++ /dev/null diff --git a/examples/text/resources/fonts/pixelplay.png b/examples/text/resources/fonts/pixelplay.png Binary files differnew file mode 100644 index 00000000..bf8f8818 --- /dev/null +++ b/examples/text/resources/fonts/pixelplay.png diff --git a/examples/text/resources/fonts/pixelplay.rbmf b/examples/text/resources/fonts/pixelplay.rbmf Binary files differdeleted file mode 100644 index 31d14038..00000000 --- a/examples/text/resources/fonts/pixelplay.rbmf +++ /dev/null diff --git a/examples/text/resources/fonts/romulus.png b/examples/text/resources/fonts/romulus.png Binary files differnew file mode 100644 index 00000000..46ccc327 --- /dev/null +++ b/examples/text/resources/fonts/romulus.png diff --git a/examples/text/resources/fonts/romulus.rbmf b/examples/text/resources/fonts/romulus.rbmf Binary files differdeleted file mode 100644 index be9da01a..00000000 --- a/examples/text/resources/fonts/romulus.rbmf +++ /dev/null diff --git a/examples/text/resources/fonts/setback.png b/examples/text/resources/fonts/setback.png Binary files differnew file mode 100644 index 00000000..086f3e27 --- /dev/null +++ b/examples/text/resources/fonts/setback.png diff --git a/examples/text/resources/fonts/setback.rbmf b/examples/text/resources/fonts/setback.rbmf Binary files differdeleted file mode 100644 index 09572215..00000000 --- a/examples/text/resources/fonts/setback.rbmf +++ /dev/null diff --git a/examples/text/resources/fonts/pixantiqua.fnt b/examples/text/resources/pixantiqua.fnt index 971b9b0b..971b9b0b 100644 --- a/examples/text/resources/fonts/pixantiqua.fnt +++ b/examples/text/resources/pixantiqua.fnt diff --git a/examples/text/resources/fonts/pixantiqua.ttf b/examples/text/resources/pixantiqua.ttf Binary files differindex e012875d..e012875d 100644 --- a/examples/text/resources/fonts/pixantiqua.ttf +++ b/examples/text/resources/pixantiqua.ttf diff --git a/examples/text/resources/fonts/pixantiqua_0.png b/examples/text/resources/pixantiqua_0.png Binary files differindex 2aa2870f..2aa2870f 100644 --- a/examples/text/resources/fonts/pixantiqua_0.png +++ b/examples/text/resources/pixantiqua_0.png diff --git a/examples/text/text_bmfont_ttf.c b/examples/text/text_bmfont_ttf.c index 4d060915..0778fd11 100644 --- a/examples/text/text_bmfont_ttf.c +++ b/examples/text/text_bmfont_ttf.c @@ -24,8 +24,8 @@ int main() const char msgTtf[64] = "THIS SPRITE FONT has been GENERATED from a TTF"; // NOTE: Textures/Fonts MUST be loaded after Window initialization (OpenGL context is required) - SpriteFont fontBm = LoadSpriteFont("resources/fonts/bmfont.fnt"); // BMFont (AngelCode) - SpriteFont fontTtf = LoadSpriteFont("resources/fonts/pixantiqua.ttf"); // TTF font + SpriteFont fontBm = LoadSpriteFont("resources/bmfont.fnt"); // BMFont (AngelCode) + SpriteFont fontTtf = LoadSpriteFont("resources/pixantiqua.ttf"); // TTF font Vector2 fontPosition; diff --git a/examples/text/text_bmfont_unordered.c b/examples/text/text_bmfont_unordered.c index 6fec3256..01561bec 100644 --- a/examples/text/text_bmfont_unordered.c +++ b/examples/text/text_bmfont_unordered.c @@ -25,7 +25,7 @@ int main() const char msg[256] = "ASCII extended characters:\n¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆ\nÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæ\nçèéêëìíîïðñòóôõö÷øùúûüýþÿ"; // NOTE: Loaded font has an unordered list of characters (chars in the range 32..255) - SpriteFont font = LoadSpriteFont("resources/fonts/pixantiqua.fnt"); // BMFont (AngelCode) + SpriteFont font = LoadSpriteFont("resources/pixantiqua.fnt"); // BMFont (AngelCode) SetTargetFPS(60); //-------------------------------------------------------------------------------------- diff --git a/examples/text/text_font_select.c b/examples/text/text_font_select.c deleted file mode 100644 index 5891bef7..00000000 --- a/examples/text/text_font_select.c +++ /dev/null @@ -1,158 +0,0 @@ -/******************************************************************************************* -* -* raylib [text] example - Font selector -* -* This example has been created using raylib 1.3 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Copyright (c) 2015 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -int main() -{ - // Initialization - //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [text] example - font selector"); - - // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - SpriteFont fonts[8]; // SpriteFont array - - fonts[0] = LoadSpriteFont("resources/fonts/alagard.rbmf"); // SpriteFont loading - fonts[1] = LoadSpriteFont("resources/fonts/pixelplay.rbmf"); // SpriteFont loading - fonts[2] = LoadSpriteFont("resources/fonts/mecha.rbmf"); // SpriteFont loading - fonts[3] = LoadSpriteFont("resources/fonts/setback.rbmf"); // SpriteFont loading - fonts[4] = LoadSpriteFont("resources/fonts/romulus.rbmf"); // SpriteFont loading - fonts[5] = LoadSpriteFont("resources/fonts/pixantiqua.rbmf"); // SpriteFont loading - fonts[6] = LoadSpriteFont("resources/fonts/alpha_beta.rbmf"); // SpriteFont loading - fonts[7] = LoadSpriteFont("resources/fonts/jupiter_crash.rbmf"); // SpriteFont loading - - int currentFont = 0; // Selected font - - Color colors[8] = { MAROON, ORANGE, DARKGREEN, DARKBLUE, DARKPURPLE, LIME, GOLD, RED }; - - const char fontNames[8][20] = { "[0] Alagard", "[1] PixelPlay", "[2] MECHA", "[3] Setback", - "[4] Romulus", "[5] PixAntiqua", "[6] Alpha Beta", "[7] Jupiter Crash" }; - - const char text[50] = "THIS is THE FONT you SELECTED!"; // Main text - - Vector2 textSize = MeasureTextEx(fonts[currentFont], text, fonts[currentFont].baseSize*3, 1); - - Vector2 mousePoint; - - Color btnNextOutColor = DARKBLUE; // Button color (outside line) - Color btnNextInColor = SKYBLUE; // Button color (inside) - - int framesCounter = 0; // Useful to count frames button is 'active' = clicked - - int positionY = 180; // Text selector and button Y position - - Rectangle btnNextRec = { 673, positionY, 109, 44 }; // Button rectangle (useful for collision) - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - - // Keyboard-based font selection (easy) - if (IsKeyPressed(KEY_RIGHT)) - { - if (currentFont < 7) currentFont++; - } - - if (IsKeyPressed(KEY_LEFT)) - { - if (currentFont > 0) currentFont--; - } - - if (IsKeyPressed('0')) currentFont = 0; - else if (IsKeyPressed('1')) currentFont = 1; - else if (IsKeyPressed('2')) currentFont = 2; - else if (IsKeyPressed('3')) currentFont = 3; - else if (IsKeyPressed('4')) currentFont = 4; - else if (IsKeyPressed('5')) currentFont = 5; - else if (IsKeyPressed('6')) currentFont = 6; - else if (IsKeyPressed('7')) currentFont = 7; - - // Mouse-based font selection (NEXT button logic) - mousePoint = GetMousePosition(); - - if (CheckCollisionPointRec(mousePoint, btnNextRec)) - { - // Mouse hover button logic - if (framesCounter == 0) - { - btnNextOutColor = DARKPURPLE; - btnNextInColor = PURPLE; - } - - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - { - framesCounter = 20; // Frames button is 'active' - btnNextOutColor = MAROON; - btnNextInColor = RED; - } - } - else - { - // Mouse not hover button - btnNextOutColor = DARKBLUE; - btnNextInColor = SKYBLUE; - } - - if (framesCounter > 0) framesCounter--; - - if (framesCounter == 1) // We change font on frame 1 - { - currentFont++; - if (currentFont > 7) currentFont = 0; - } - - // Text measurement for better positioning on screen - textSize = MeasureTextEx(fonts[currentFont], text, fonts[currentFont].baseSize*3, 1); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawText("font selector - use arroys, button or numbers", 160, 80, 20, DARKGRAY); - DrawLine(120, 120, 680, 120, DARKGRAY); - - DrawRectangle(18, positionY, 644, 44, DARKGRAY); - DrawRectangle(20, positionY + 2, 640, 40, LIGHTGRAY); - DrawText(fontNames[currentFont], 30, positionY + 13, 20, BLACK); - DrawText("< >", 610, positionY + 8, 30, BLACK); - - DrawRectangleRec(btnNextRec, btnNextOutColor); - DrawRectangle(675, positionY + 2, 105, 40, btnNextInColor); - DrawText("NEXT", 700, positionY + 13, 20, btnNextOutColor); - - DrawTextEx(fonts[currentFont], text, (Vector2){ screenWidth/2 - textSize.x/2, - 260 + (70 - textSize.y)/2 }, fonts[currentFont].baseSize*3, - 1, colors[currentFont]); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - for (int i = 0; i < 8; i++) UnloadSpriteFont(fonts[i]); // SpriteFont(s) unloading - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -}
\ No newline at end of file diff --git a/examples/text/text_font_select.png b/examples/text/text_font_select.png Binary files differdeleted file mode 100644 index 65040df6..00000000 --- a/examples/text/text_font_select.png +++ /dev/null diff --git a/examples/text/text_input_box.c b/examples/text/text_input_box.c new file mode 100644 index 00000000..54eebf40 --- /dev/null +++ b/examples/text/text_input_box.c @@ -0,0 +1,116 @@ +/******************************************************************************************* +* +* raylib [text] example - Input Box +* +* This example has been created using raylib 1.7 (www.raylib.com) +* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) +* +* Copyright (c) 2017 Ramon Santamaria (@raysan5) +* +********************************************************************************************/ + +#include "raylib.h" + +#define MAX_INPUT_CHARS 9 + +int main() +{ + // Initialization + //-------------------------------------------------------------------------------------- + int screenWidth = 800; + int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [text] example - input box"); + + char name[MAX_INPUT_CHARS + 1] = "\0"; // NOTE: One extra space required for line ending char '\0' + int letterCount = 0; + + Rectangle textBox = { screenWidth/2 - 100, 180, 225, 50 }; + bool mouseOnText = false; + + int framesCounter = 0; + + SetTargetFPS(60); + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + if (CheckCollisionPointRec(GetMousePosition(), textBox)) mouseOnText = true; + else mouseOnText = false; + + if (mouseOnText) + { + int key = GetKeyPressed(); + + // NOTE: Only allow keys in range [32..125] + if ((key >= 32) && (key <= 125) && (letterCount < MAX_INPUT_CHARS)) + { + name[letterCount] = (char)key; + letterCount++; + } + + if (key == KEY_BACKSPACE) + { + letterCount--; + name[letterCount] = '\0'; + + if (letterCount < 0) letterCount = 0; + } + } + + if (mouseOnText) framesCounter++; + else framesCounter = 0; + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + DrawText("PLACE MOUSE OVER INPUT BOX!", 240, 140, 20, GRAY); + + DrawRectangleRec(textBox, LIGHTGRAY); + if (mouseOnText) DrawRectangleLines(textBox.x, textBox.y, textBox.width, textBox.height, RED); + else DrawRectangleLines(textBox.x, textBox.y, textBox.width, textBox.height, DARKGRAY); + + DrawText(name, textBox.x + 5, textBox.y + 8, 40, MAROON); + + DrawText(FormatText("INPUT CHARS: %i/%i", letterCount, MAX_INPUT_CHARS), 315, 250, 20, DARKGRAY); + + if (mouseOnText) + { + if (letterCount < MAX_INPUT_CHARS) + { + // Draw blinking underscore char + if (((framesCounter/20)%2) == 0) DrawText("_", textBox.x + 8 + MeasureText(name, 40), textBox.y + 12, 40, MAROON); + } + else DrawText("Press BACKSPACE to delete chars...", 230, 300, 20, GRAY); + } + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} + +// Check if any key is pressed +// NOTE: We limit keys check to keys between 32 (KEY_SPACE) and 126 +bool IsAnyKeyPressed() +{ + bool keyPressed = false; + int key = GetKeyPressed(); + + if ((key >= 32) && (key <= 126)) keyPressed = true; + + return keyPressed; +}
\ No newline at end of file diff --git a/examples/text/text_input_box.png b/examples/text/text_input_box.png Binary files differnew file mode 100644 index 00000000..42f9d73a --- /dev/null +++ b/examples/text/text_input_box.png diff --git a/examples/text/text_rbmf_fonts.c b/examples/text/text_raylib_fonts.c index cd5da1fe..6d8ef2b6 100644 --- a/examples/text/text_rbmf_fonts.c +++ b/examples/text/text_raylib_fonts.c @@ -1,19 +1,21 @@ /******************************************************************************************* * -* raylib [text] example - raylib bitmap font (rbmf) loading and usage +* raylib [text] example - raylib font loading and usage * * NOTE: raylib is distributed with some free to use fonts (even for commercial pourposes!) * To view details and credits for those fonts, check raylib license file * -* This example has been created using raylib 1.3 (www.raylib.com) +* This example has been created using raylib 1.7 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * -* Copyright (c) 2015 Ramon Santamaria (@raysan5) +* Copyright (c) 2017 Ramon Santamaria (@raysan5) * ********************************************************************************************/ #include "raylib.h" +#define MAX_FONTS 8 + int main() { // Initialization @@ -21,21 +23,21 @@ int main() int screenWidth = 800; int screenHeight = 450; - InitWindow(screenWidth, screenHeight, "raylib [text] example - rBMF fonts"); + InitWindow(screenWidth, screenHeight, "raylib [text] example - raylib fonts"); // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - SpriteFont fonts[8]; + SpriteFont fonts[MAX_FONTS]; - fonts[0] = LoadSpriteFont("resources/fonts/alagard.rbmf"); // rBMF font loading - fonts[1] = LoadSpriteFont("resources/fonts/pixelplay.rbmf"); // rBMF font loading - fonts[2] = LoadSpriteFont("resources/fonts/mecha.rbmf"); // rBMF font loading - fonts[3] = LoadSpriteFont("resources/fonts/setback.rbmf"); // rBMF font loading - fonts[4] = LoadSpriteFont("resources/fonts/romulus.rbmf"); // rBMF font loading - fonts[5] = LoadSpriteFont("resources/fonts/pixantiqua.rbmf"); // rBMF font loading - fonts[6] = LoadSpriteFont("resources/fonts/alpha_beta.rbmf"); // rBMF font loading - fonts[7] = LoadSpriteFont("resources/fonts/jupiter_crash.rbmf"); // rBMF font loading + fonts[0] = LoadSpriteFont("resources/fonts/alagard.png"); + fonts[1] = LoadSpriteFont("resources/fonts/pixelplay.png"); + fonts[2] = LoadSpriteFont("resources/fonts/mecha.png"); + fonts[3] = LoadSpriteFont("resources/fonts/setback.png"); + fonts[4] = LoadSpriteFont("resources/fonts/romulus.png"); + fonts[5] = LoadSpriteFont("resources/fonts/pixantiqua.png"); + fonts[6] = LoadSpriteFont("resources/fonts/alpha_beta.png"); + fonts[7] = LoadSpriteFont("resources/fonts/jupiter_crash.png"); - const char *messages[8] = { "ALAGARD FONT designed by Hewett Tsoi", + const char *messages[MAX_FONTS] = { "ALAGARD FONT designed by Hewett Tsoi", "PIXELPLAY FONT designed by Aleksander Shevchuk", "MECHA FONT designed by Captain Falcon", "SETBACK FONT designed by Brian Kent (AEnigma)", @@ -44,17 +46,22 @@ int main() "ALPHA_BETA FONT designed by Brian Kent (AEnigma)", "JUPITER_CRASH FONT designed by Brian Kent (AEnigma)" }; - const int spacings[8] = { 2, 4, 8, 4, 3, 4, 4, 1 }; + const int spacings[MAX_FONTS] = { 2, 4, 8, 4, 3, 4, 4, 1 }; - Vector2 positions[8]; + Vector2 positions[MAX_FONTS]; - for (int i = 0; i < 8; i++) + for (int i = 0; i < MAX_FONTS; i++) { positions[i].x = screenWidth/2 - MeasureTextEx(fonts[i], messages[i], fonts[i].baseSize*2, spacings[i]).x/2; - positions[i].y = 60 + fonts[i].baseSize + 50*i; + positions[i].y = 60 + fonts[i].baseSize + 45*i; } - Color colors[8] = { MAROON, ORANGE, DARKGREEN, DARKBLUE, DARKPURPLE, LIME, GOLD }; + // Small Y position corrections + positions[3].y += 8; + positions[4].y += 2; + positions[7].y -= 8; + + Color colors[MAX_FONTS] = { MAROON, ORANGE, DARKGREEN, DARKBLUE, DARKPURPLE, LIME, GOLD, RED }; //-------------------------------------------------------------------------------------- // Main game loop @@ -74,7 +81,7 @@ int main() DrawText("free fonts included with raylib", 250, 20, 20, DARKGRAY); DrawLine(220, 50, 590, 50, DARKGRAY); - for (int i = 0; i < 8; i++) + for (int i = 0; i < MAX_FONTS; i++) { DrawTextEx(fonts[i], messages[i], positions[i], fonts[i].baseSize*2, spacings[i], colors[i]); } @@ -85,10 +92,9 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- - for (int i = 0; i < 8; i++) - { - UnloadSpriteFont(fonts[i]); // SpriteFont unloading - } + + // SpriteFonts unloading + for (int i = 0; i < MAX_FONTS; i++) UnloadSpriteFont(fonts[i]); CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/text/text_raylib_fonts.png b/examples/text/text_raylib_fonts.png Binary files differnew file mode 100644 index 00000000..8f428a67 --- /dev/null +++ b/examples/text/text_raylib_fonts.png diff --git a/examples/text/text_rbmf_fonts.png b/examples/text/text_rbmf_fonts.png Binary files differdeleted file mode 100644 index c047c503..00000000 --- a/examples/text/text_rbmf_fonts.png +++ /dev/null diff --git a/examples/text/text_sprite_fonts.c b/examples/text/text_sprite_fonts.c index bded266e..aefbfd1f 100644 --- a/examples/text/text_sprite_fonts.c +++ b/examples/text/text_sprite_fonts.c @@ -25,9 +25,9 @@ int main() const char msg3[50] = "...and a THIRD one! GREAT! :D"; // NOTE: Textures/Fonts MUST be loaded after Window initialization (OpenGL context is required) - SpriteFont font1 = LoadSpriteFont("resources/fonts/custom_mecha.png"); // SpriteFont loading - SpriteFont font2 = LoadSpriteFont("resources/fonts/custom_alagard.png"); // SpriteFont loading - SpriteFont font3 = LoadSpriteFont("resources/fonts/custom_jupiter_crash.png"); // SpriteFont loading + SpriteFont font1 = LoadSpriteFont("resources/custom_mecha.png"); // SpriteFont loading + SpriteFont font2 = LoadSpriteFont("resources/custom_alagard.png"); // SpriteFont loading + SpriteFont font3 = LoadSpriteFont("resources/custom_jupiter_crash.png"); // SpriteFont loading Vector2 fontPosition1, fontPosition2, fontPosition3; diff --git a/examples/text/text_ttf_loading.c b/examples/text/text_ttf_loading.c index 4aa0bef4..4e490399 100644 --- a/examples/text/text_ttf_loading.c +++ b/examples/text/text_ttf_loading.c @@ -25,7 +25,7 @@ int main() // NOTE: Textures/Fonts MUST be loaded after Window initialization (OpenGL context is required) // TTF SpriteFont loading with custom generation parameters - SpriteFont font = LoadSpriteFontTTF("resources/fonts/KAISG.ttf", 96, 0, 0); + SpriteFont font = LoadSpriteFontTTF("resources/KAISG.ttf", 96, 0, 0); // Generate mipmap levels to use trilinear filtering // NOTE: On 2D drawing it won't be noticeable, it looks like FILTER_BILINEAR diff --git a/examples/textures/resources/fudesumi.png b/examples/textures/resources/fudesumi.png Binary files differnew file mode 100644 index 00000000..8ba983dc --- /dev/null +++ b/examples/textures/resources/fudesumi.png diff --git a/examples/textures/resources/fudesumi.raw b/examples/textures/resources/fudesumi.raw Binary files differnew file mode 100644 index 00000000..e05fa0e1 --- /dev/null +++ b/examples/textures/resources/fudesumi.raw diff --git a/examples/textures/resources/guybrush.png b/examples/textures/resources/guybrush.png Binary files differdeleted file mode 100644 index 32c9dced..00000000 --- a/examples/textures/resources/guybrush.png +++ /dev/null diff --git a/examples/textures/resources/heightmap.png b/examples/textures/resources/heightmap.png Binary files differdeleted file mode 100644 index fe30f679..00000000 --- a/examples/textures/resources/heightmap.png +++ /dev/null diff --git a/examples/textures/resources/scarfy.png b/examples/textures/resources/scarfy.png Binary files differnew file mode 100644 index 00000000..a377a712 --- /dev/null +++ b/examples/textures/resources/scarfy.png diff --git a/examples/textures/resources/texture_formats/sonic.png b/examples/textures/resources/texture_formats/sonic.png Binary files differdeleted file mode 100644 index 7a096847..00000000 --- a/examples/textures/resources/texture_formats/sonic.png +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_A1R5G5B5.dds b/examples/textures/resources/texture_formats/sonic_A1R5G5B5.dds Binary files differdeleted file mode 100644 index 5e2347db..00000000 --- a/examples/textures/resources/texture_formats/sonic_A1R5G5B5.dds +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_A4R4G4B4.dds b/examples/textures/resources/texture_formats/sonic_A4R4G4B4.dds Binary files differdeleted file mode 100644 index c5ccaf0c..00000000 --- a/examples/textures/resources/texture_formats/sonic_A4R4G4B4.dds +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_A8R8G8B8.dds b/examples/textures/resources/texture_formats/sonic_A8R8G8B8.dds Binary files differdeleted file mode 100644 index fb71b7be..00000000 --- a/examples/textures/resources/texture_formats/sonic_A8R8G8B8.dds +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_ASTC_4x4_ldr.astc b/examples/textures/resources/texture_formats/sonic_ASTC_4x4_ldr.astc Binary files differdeleted file mode 100644 index 9a98d9a0..00000000 --- a/examples/textures/resources/texture_formats/sonic_ASTC_4x4_ldr.astc +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_ASTC_8x8_ldr.astc b/examples/textures/resources/texture_formats/sonic_ASTC_8x8_ldr.astc Binary files differdeleted file mode 100644 index 360a264a..00000000 --- a/examples/textures/resources/texture_formats/sonic_ASTC_8x8_ldr.astc +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_DXT1_RGB.dds b/examples/textures/resources/texture_formats/sonic_DXT1_RGB.dds Binary files differdeleted file mode 100644 index 9d0b4598..00000000 --- a/examples/textures/resources/texture_formats/sonic_DXT1_RGB.dds +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_DXT1_RGBA.dds b/examples/textures/resources/texture_formats/sonic_DXT1_RGBA.dds Binary files differdeleted file mode 100644 index 102bae7f..00000000 --- a/examples/textures/resources/texture_formats/sonic_DXT1_RGBA.dds +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_DXT3_RGBA.dds b/examples/textures/resources/texture_formats/sonic_DXT3_RGBA.dds Binary files differdeleted file mode 100644 index 46d965cb..00000000 --- a/examples/textures/resources/texture_formats/sonic_DXT3_RGBA.dds +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_DXT5_RGBA.dds b/examples/textures/resources/texture_formats/sonic_DXT5_RGBA.dds Binary files differdeleted file mode 100644 index b3a59a79..00000000 --- a/examples/textures/resources/texture_formats/sonic_DXT5_RGBA.dds +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_ETC1_RGB.ktx b/examples/textures/resources/texture_formats/sonic_ETC1_RGB.ktx Binary files differdeleted file mode 100644 index 66241b9d..00000000 --- a/examples/textures/resources/texture_formats/sonic_ETC1_RGB.ktx +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_ETC1_RGB.pkm b/examples/textures/resources/texture_formats/sonic_ETC1_RGB.pkm Binary files differdeleted file mode 100644 index c6fc6df4..00000000 --- a/examples/textures/resources/texture_formats/sonic_ETC1_RGB.pkm +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_ETC2_EAC_RGBA.ktx b/examples/textures/resources/texture_formats/sonic_ETC2_EAC_RGBA.ktx Binary files differdeleted file mode 100644 index b01812cb..00000000 --- a/examples/textures/resources/texture_formats/sonic_ETC2_EAC_RGBA.ktx +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_ETC2_EAC_RGBA.old.pkm b/examples/textures/resources/texture_formats/sonic_ETC2_EAC_RGBA.old.pkm Binary files differdeleted file mode 100644 index 61ac48ce..00000000 --- a/examples/textures/resources/texture_formats/sonic_ETC2_EAC_RGBA.old.pkm +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_ETC2_EAC_RGBA.pkm b/examples/textures/resources/texture_formats/sonic_ETC2_EAC_RGBA.pkm Binary files differdeleted file mode 100644 index 61ac48ce..00000000 --- a/examples/textures/resources/texture_formats/sonic_ETC2_EAC_RGBA.pkm +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_ETC2_RGB.ktx b/examples/textures/resources/texture_formats/sonic_ETC2_RGB.ktx Binary files differdeleted file mode 100644 index 7f1207f7..00000000 --- a/examples/textures/resources/texture_formats/sonic_ETC2_RGB.ktx +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_ETC2_RGB.pkm b/examples/textures/resources/texture_formats/sonic_ETC2_RGB.pkm Binary files differdeleted file mode 100644 index f290f019..00000000 --- a/examples/textures/resources/texture_formats/sonic_ETC2_RGB.pkm +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_GRAYSCALE.pvr b/examples/textures/resources/texture_formats/sonic_GRAYSCALE.pvr Binary files differdeleted file mode 100644 index d31e2651..00000000 --- a/examples/textures/resources/texture_formats/sonic_GRAYSCALE.pvr +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_L8A8.pvr b/examples/textures/resources/texture_formats/sonic_L8A8.pvr Binary files differdeleted file mode 100644 index ccf5932e..00000000 --- a/examples/textures/resources/texture_formats/sonic_L8A8.pvr +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_PVRT_RGB.pvr b/examples/textures/resources/texture_formats/sonic_PVRT_RGB.pvr Binary files differdeleted file mode 100644 index 22f3f66a..00000000 --- a/examples/textures/resources/texture_formats/sonic_PVRT_RGB.pvr +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_PVRT_RGBA.pvr b/examples/textures/resources/texture_formats/sonic_PVRT_RGBA.pvr Binary files differdeleted file mode 100644 index feb9aeaf..00000000 --- a/examples/textures/resources/texture_formats/sonic_PVRT_RGBA.pvr +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_PVRT_RGBA_2bpp.pvr b/examples/textures/resources/texture_formats/sonic_PVRT_RGBA_2bpp.pvr Binary files differdeleted file mode 100644 index 9147e1bb..00000000 --- a/examples/textures/resources/texture_formats/sonic_PVRT_RGBA_2bpp.pvr +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_PVRT_RGB_2bpp.pvr b/examples/textures/resources/texture_formats/sonic_PVRT_RGB_2bpp.pvr Binary files differdeleted file mode 100644 index 2a8aea8c..00000000 --- a/examples/textures/resources/texture_formats/sonic_PVRT_RGB_2bpp.pvr +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_R4G4B4A4.pvr b/examples/textures/resources/texture_formats/sonic_R4G4B4A4.pvr Binary files differdeleted file mode 100644 index 3f7368a3..00000000 --- a/examples/textures/resources/texture_formats/sonic_R4G4B4A4.pvr +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_R5G5B5A1.pvr b/examples/textures/resources/texture_formats/sonic_R5G5B5A1.pvr Binary files differdeleted file mode 100644 index c7fa098d..00000000 --- a/examples/textures/resources/texture_formats/sonic_R5G5B5A1.pvr +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_R5G6B5.dds b/examples/textures/resources/texture_formats/sonic_R5G6B5.dds Binary files differdeleted file mode 100644 index 217da954..00000000 --- a/examples/textures/resources/texture_formats/sonic_R5G6B5.dds +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_R5G6B5.pvr b/examples/textures/resources/texture_formats/sonic_R5G6B5.pvr Binary files differdeleted file mode 100644 index 9bb8320e..00000000 --- a/examples/textures/resources/texture_formats/sonic_R5G6B5.pvr +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_R8G8B8.pvr b/examples/textures/resources/texture_formats/sonic_R8G8B8.pvr Binary files differdeleted file mode 100644 index 072cf3ef..00000000 --- a/examples/textures/resources/texture_formats/sonic_R8G8B8.pvr +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_R8G8B8A8.pvr b/examples/textures/resources/texture_formats/sonic_R8G8B8A8.pvr Binary files differdeleted file mode 100644 index f82534f9..00000000 --- a/examples/textures/resources/texture_formats/sonic_R8G8B8A8.pvr +++ /dev/null diff --git a/examples/textures/resources/texture_formats/sonic_R8G8B8A8.raw b/examples/textures/resources/texture_formats/sonic_R8G8B8A8.raw Binary files differdeleted file mode 100644 index fc5858e7..00000000 --- a/examples/textures/resources/texture_formats/sonic_R8G8B8A8.raw +++ /dev/null diff --git a/examples/textures/textures_formats_loading.c b/examples/textures/textures_formats_loading.c deleted file mode 100644 index f416ce38..00000000 --- a/examples/textures/textures_formats_loading.c +++ /dev/null @@ -1,244 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - texture formats loading (compressed and uncompressed) -* -* NOTE: This example requires raylib OpenGL 3.3+ or ES2 versions for compressed textures, -* OpenGL 1.1 does not support compressed textures, only uncompressed ones. -* -* This example has been created using raylib 1.3 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Copyright (c) 2015 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#define NUM_TEXTURES 24 - -typedef enum { - PNG_R8G8B8A8 = 0, - PVR_GRAYSCALE, - PVR_GRAY_ALPHA, - PVR_R5G6B5, - PVR_R5G5B5A1, - PVR_R4G4B4A4, - DDS_R5G6B5, - DDS_R5G5B5A1, - DDS_R4G4B4A4, - DDS_R8G8B8A8, - DDS_DXT1_RGB, - DDS_DXT1_RGBA, - DDS_DXT3_RGBA, - DDS_DXT5_RGBA, - PKM_ETC1_RGB, - PKM_ETC2_RGB, - PKM_ETC2_EAC_RGBA, - KTX_ETC1_RGB, - KTX_ETC2_RGB, - KTX_ETC2_EAC_RGBA, - ASTC_4x4_LDR, - ASTC_8x8_LDR, - PVR_PVRT_RGB, - PVR_PVRT_RGBA - -} TextureFormats; - -static const char *formatText[] = { - "PNG_R8G8B8A8", - "PVR_GRAYSCALE", - "PVR_GRAY_ALPHA", - "PVR_R5G6B5", - "PVR_R5G5B5A1", - "PVR_R4G4B4A4", - "DDS_R5G6B5", - "DDS_R5G5B5A1", - "DDS_R4G4B4A4", - "DDS_R8G8B8A8", - "DDS_DXT1_RGB", - "DDS_DXT1_RGBA", - "DDS_DXT3_RGBA", - "DDS_DXT5_RGBA", - "PKM_ETC1_RGB", - "PKM_ETC2_RGB", - "PKM_ETC2_EAC_RGBA", - "KTX_ETC1_RGB", - "KTX_ETC2_RGB", - "KTX_ETC2_EAC_RGBA", - "ASTC_4x4_LDR", - "ASTC_8x8_LDR", - "PVR_PVRT_RGB", - "PVR_PVRT_RGBA" -}; - -int main() -{ - // Initialization - //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - texture formats loading"); - - // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - - Texture2D sonic[NUM_TEXTURES]; - - sonic[PNG_R8G8B8A8] = LoadTexture("resources/texture_formats/sonic.png"); - - // Load UNCOMPRESSED PVR texture data - sonic[PVR_GRAYSCALE] = LoadTexture("resources/texture_formats/sonic_GRAYSCALE.pvr"); - sonic[PVR_GRAY_ALPHA] = LoadTexture("resources/texture_formats/sonic_L8A8.pvr"); - sonic[PVR_R5G6B5] = LoadTexture("resources/texture_formats/sonic_R5G6B5.pvr"); - sonic[PVR_R5G5B5A1] = LoadTexture("resources/texture_formats/sonic_R5G5B5A1.pvr"); - sonic[PVR_R4G4B4A4] = LoadTexture("resources/texture_formats/sonic_R4G4B4A4.pvr"); - - // Load UNCOMPRESSED DDS texture data - sonic[DDS_R5G6B5] = LoadTexture("resources/texture_formats/sonic_R5G6B5.dds"); - sonic[DDS_R5G5B5A1] = LoadTexture("resources/texture_formats/sonic_A1R5G5B5.dds"); - sonic[DDS_R4G4B4A4] = LoadTexture("resources/texture_formats/sonic_A4R4G4B4.dds"); - sonic[DDS_R8G8B8A8] = LoadTexture("resources/texture_formats/sonic_A8R8G8B8.dds"); - - // Load COMPRESSED DXT DDS texture data (if supported) - sonic[DDS_DXT1_RGB] = LoadTexture("resources/texture_formats/sonic_DXT1_RGB.dds"); - sonic[DDS_DXT1_RGBA] = LoadTexture("resources/texture_formats/sonic_DXT1_RGBA.dds"); - sonic[DDS_DXT3_RGBA] = LoadTexture("resources/texture_formats/sonic_DXT3_RGBA.dds"); - sonic[DDS_DXT5_RGBA] = LoadTexture("resources/texture_formats/sonic_DXT5_RGBA.dds"); - - // Load COMPRESSED ETC texture data (if supported) - sonic[PKM_ETC1_RGB] = LoadTexture("resources/texture_formats/sonic_ETC1_RGB.pkm"); - sonic[PKM_ETC2_RGB] = LoadTexture("resources/texture_formats/sonic_ETC2_RGB.pkm"); - sonic[PKM_ETC2_EAC_RGBA] = LoadTexture("resources/texture_formats/sonic_ETC2_EAC_RGBA.pkm"); - - sonic[KTX_ETC1_RGB] = LoadTexture("resources/texture_formats/sonic_ETC1_RGB.ktx"); - sonic[KTX_ETC2_RGB] = LoadTexture("resources/texture_formats/sonic_ETC2_RGB.ktx"); - sonic[KTX_ETC2_EAC_RGBA] = LoadTexture("resources/texture_formats/sonic_ETC2_EAC_RGBA.ktx"); - - // Load COMPRESSED ASTC texture data (if supported) - sonic[ASTC_4x4_LDR] = LoadTexture("resources/texture_formats/sonic_ASTC_4x4_ldr.astc"); - sonic[ASTC_8x8_LDR] = LoadTexture("resources/texture_formats/sonic_ASTC_8x8_ldr.astc"); - - // Load COMPRESSED PVR texture data (if supported) - sonic[PVR_PVRT_RGB] = LoadTexture("resources/texture_formats/sonic_PVRT_RGB.pvr"); - sonic[PVR_PVRT_RGBA] = LoadTexture("resources/texture_formats/sonic_PVRT_RGBA.pvr"); - - int selectedFormat = PNG_R8G8B8A8; - - Rectangle selectRecs[NUM_TEXTURES]; - - for (int i = 0; i < NUM_TEXTURES; i++) - { - if (i < NUM_TEXTURES/2) selectRecs[i] = (Rectangle){ 40, 30 + 32*i, 150, 30 }; - else selectRecs[i] = (Rectangle){ 40 + 152, 30 + 32*(i - NUM_TEXTURES/2), 150, 30 }; - } - - // Texture sizes in KB - float textureSizes[NUM_TEXTURES] = { - 512*512*32/8/1024, //PNG_R8G8B8A8 (32 bpp) - 512*512*8/8/1024, //PVR_GRAYSCALE (8 bpp) - 512*512*16/8/1024, //PVR_GRAY_ALPHA (16 bpp) - 512*512*16/8/1024, //PVR_R5G6B5 (16 bpp) - 512*512*16/8/1024, //PVR_R5G5B5A1 (16 bpp) - 512*512*16/8/1024, //PVR_R4G4B4A4 (16 bpp) - 512*512*16/8/1024, //DDS_R5G6B5 (16 bpp) - 512*512*16/8/1024, //DDS_R5G5B5A1 (16 bpp) - 512*512*16/8/1024, //DDS_R4G4B4A4 (16 bpp) - 512*512*32/8/1024, //DDS_R8G8B8A8 (32 bpp) - 512*512*4/8/1024, //DDS_DXT1_RGB (4 bpp) -Compressed- - 512*512*4/8/1024, //DDS_DXT1_RGBA (4 bpp) -Compressed- - 512*512*8/8/1024, //DDS_DXT3_RGBA (8 bpp) -Compressed- - 512*512*8/8/1024, //DDS_DXT5_RGBA (8 bpp) -Compressed- - 512*512*4/8/1024, //PKM_ETC1_RGB (4 bpp) -Compressed- - 512*512*4/8/1024, //PKM_ETC2_RGB (4 bpp) -Compressed- - 512*512*8/8/1024, //PKM_ETC2_EAC_RGBA (8 bpp) -Compressed- - 512*512*4/8/1024, //KTX_ETC1_RGB (4 bpp) -Compressed- - 512*512*4/8/1024, //KTX_ETC2_RGB (4 bpp) -Compressed- - 512*512*8/8/1024, //KTX_ETC2_EAC_RGBA (8 bpp) -Compressed- - 512*512*8/8/1024, //ASTC_4x4_LDR (8 bpp) -Compressed- - 512*512*2/8/1024, //ASTC_8x8_LDR (2 bpp) -Compressed- - 512*512*4/8/1024, //PVR_PVRT_RGB (4 bpp) -Compressed- - 512*512*4/8/1024, //PVR_PVRT_RGBA (4 bpp) -Compressed- - }; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //--------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - if (IsKeyPressed(KEY_DOWN)) - { - selectedFormat++; - if (selectedFormat >= NUM_TEXTURES) selectedFormat = 0; - } - else if (IsKeyPressed(KEY_UP)) - { - selectedFormat--; - if (selectedFormat < 0) selectedFormat = NUM_TEXTURES - 1; - } - else if (IsKeyPressed(KEY_RIGHT)) - { - if (selectedFormat < NUM_TEXTURES/2) selectedFormat += NUM_TEXTURES/2; - } - else if (IsKeyPressed(KEY_LEFT)) - { - if (selectedFormat >= NUM_TEXTURES/2) selectedFormat -= NUM_TEXTURES/2; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - - BeginDrawing(); - - ClearBackground(RAYWHITE); - - // Draw rectangles - for (int i = 0; i < NUM_TEXTURES; i++) - { - if (i == selectedFormat) - { - DrawRectangleRec(selectRecs[i], SKYBLUE); - DrawRectangleLines(selectRecs[i].x, selectRecs[i].y, selectRecs[i].width, selectRecs[i].height, BLUE); - DrawText(formatText[i], selectRecs[i].x + selectRecs[i].width/2 - MeasureText(formatText[i], 10)/2, selectRecs[i].y + 11, 10, DARKBLUE); - } - else - { - DrawRectangleRec(selectRecs[i], LIGHTGRAY); - DrawRectangleLines(selectRecs[i].x, selectRecs[i].y, selectRecs[i].width, selectRecs[i].height, GRAY); - DrawText(formatText[i], selectRecs[i].x + selectRecs[i].width/2 - MeasureText(formatText[i], 10)/2, selectRecs[i].y + 11, 10, DARKGRAY); - } - } - - // Draw selected texture - if (sonic[selectedFormat].id != 0) - { - DrawTexture(sonic[selectedFormat], 350, -10, WHITE); - } - else - { - DrawRectangleLines(488, 165, 200, 110, DARKGRAY); - DrawText("FORMAT", 550, 180, 20, MAROON); - DrawText("NOT SUPPORTED", 500, 210, 20, MAROON); - DrawText("ON YOUR GPU", 520, 240, 20, MAROON); - } - - DrawText("Select texture format (use cursor keys):", 40, 10, 10, DARKGRAY); - DrawText("Required GPU memory size (VRAM):", 40, 427, 10, DARKGRAY); - DrawText(FormatText("%4.0f KB", textureSizes[selectedFormat]), 240, 420, 20, DARKBLUE); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - for (int i = 0; i < NUM_TEXTURES; i++) UnloadTexture(sonic[i]); - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -}
\ No newline at end of file diff --git a/examples/textures/textures_formats_loading.png b/examples/textures/textures_formats_loading.png Binary files differdeleted file mode 100644 index 6778080f..00000000 --- a/examples/textures/textures_formats_loading.png +++ /dev/null diff --git a/examples/textures/textures_particles_trail_blending.c b/examples/textures/textures_particles_blending.c index 0b47c790..842ac77d 100644 --- a/examples/textures/textures_particles_trail_blending.c +++ b/examples/textures/textures_particles_blending.c @@ -1,11 +1,11 @@ /******************************************************************************************* * -* raylib example - particles trail blending +* raylib example - particles blending * -* This example has been created using raylib 1.3 (www.raylib.com) +* This example has been created using raylib 1.7 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * -* Copyright (c) 2015 Ramon Santamaria (@raysan5) +* Copyright (c) 2017 Ramon Santamaria (@raysan5) * ********************************************************************************************/ @@ -30,7 +30,7 @@ int main() int screenWidth = 800; int screenHeight = 450; - InitWindow(screenWidth, screenHeight, "raylib [textures] example - particles trail blending"); + InitWindow(screenWidth, screenHeight, "raylib [textures] example - particles blending"); // Particles pool, reuse them! Particle mouseTail[MAX_PARTICLES]; diff --git a/examples/textures/textures_particles_blending.png b/examples/textures/textures_particles_blending.png Binary files differnew file mode 100644 index 00000000..f90a87fd --- /dev/null +++ b/examples/textures/textures_particles_blending.png diff --git a/examples/textures/textures_particles_trail_blending.png b/examples/textures/textures_particles_trail_blending.png Binary files differdeleted file mode 100644 index b0c40fd2..00000000 --- a/examples/textures/textures_particles_trail_blending.png +++ /dev/null diff --git a/examples/textures/textures_raw_data.c b/examples/textures/textures_raw_data.c index d1922180..b038792b 100644 --- a/examples/textures/textures_raw_data.c +++ b/examples/textures/textures_raw_data.c @@ -27,9 +27,9 @@ int main() // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) // Load RAW image data (512x512, 32bit RGBA, no file header) - Image sonicRaw = LoadImageRaw("resources/texture_formats/sonic_R8G8B8A8.raw", 512, 512, UNCOMPRESSED_R8G8B8A8, 0); - Texture2D sonic = LoadTextureFromImage(sonicRaw); // Upload CPU (RAM) image to GPU (VRAM) - UnloadImage(sonicRaw); // Unload CPU (RAM) image data + Image fudesumiRaw = LoadImageRaw("resources/fudesumi.raw", 384, 512, UNCOMPRESSED_R8G8B8A8, 0); + Texture2D fudesumi = LoadTextureFromImage(fudesumiRaw); // Upload CPU (RAM) image to GPU (VRAM) + UnloadImage(fudesumiRaw); // Unload CPU (RAM) image data // Generate a checked texture by code (1024x1024 pixels) int width = 1024; @@ -42,8 +42,8 @@ int main() { for (int x = 0; x < width; x++) { - if (((x/32+y/32)/1)%2 == 0) pixels[y*height + x] = DARKBLUE; - else pixels[y*height + x] = SKYBLUE; + if (((x/32+y/32)/1)%2 == 0) pixels[y*height + x] = ORANGE; + else pixels[y*height + x] = GOLD; } } @@ -70,12 +70,14 @@ int main() ClearBackground(RAYWHITE); - DrawTexture(checked, screenWidth/2 - checked.width/2, screenHeight/2 - checked.height/2, Fade(WHITE, 0.3f)); - DrawTexture(sonic, 330, -20, WHITE); + DrawTexture(checked, screenWidth/2 - checked.width/2, screenHeight/2 - checked.height/2, Fade(WHITE, 0.5f)); + DrawTexture(fudesumi, 430, -30, WHITE); - DrawText("CHECKED TEXTURE ", 84, 100, 30, DARKBLUE); - DrawText("GENERATED by CODE", 72, 164, 30, DARKBLUE); - DrawText("and RAW IMAGE LOADING", 46, 226, 30, DARKBLUE); + DrawText("CHECKED TEXTURE ", 84, 100, 30, BROWN); + DrawText("GENERATED by CODE", 72, 164, 30, BROWN); + DrawText("and RAW IMAGE LOADING", 46, 226, 30, BROWN); + + DrawText("(c) Fudesumi sprite by Eiden Marsal", 310, screenHeight - 20, 10, BROWN); EndDrawing(); //---------------------------------------------------------------------------------- @@ -83,7 +85,7 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- - UnloadTexture(sonic); // Texture unloading + UnloadTexture(fudesumi); // Texture unloading UnloadTexture(checked); // Texture unloading CloseWindow(); // Close window and OpenGL context diff --git a/examples/textures/textures_raw_data.png b/examples/textures/textures_raw_data.png Binary files differindex 374d2266..437e4b53 100644 --- a/examples/textures/textures_raw_data.png +++ b/examples/textures/textures_raw_data.png diff --git a/examples/textures/textures_rectangle.c b/examples/textures/textures_rectangle.c index cca5b216..c90db8ac 100644 --- a/examples/textures/textures_rectangle.c +++ b/examples/textures/textures_rectangle.c @@ -11,6 +11,9 @@ #include "raylib.h" +#define MAX_FRAME_SPEED 15 +#define MIN_FRAME_SPEED 1 + int main() { // Initialization @@ -21,11 +24,16 @@ int main() InitWindow(screenWidth, screenHeight, "raylib [texture] example - texture rectangle"); // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - Texture2D guybrush = LoadTexture("resources/guybrush.png"); // Texture loading + Texture2D scarfy = LoadTexture("resources/scarfy.png"); // Texture loading - Vector2 position = { 350.0f, 240.0f }; - Rectangle frameRec = { 0, 0, guybrush.width/7, guybrush.height }; + Vector2 position = { 350.0f, 280.0f }; + Rectangle frameRec = { 0, 0, scarfy.width/6, scarfy.height }; int currentFrame = 0; + + int framesCounter = 0; + int framesSpeed = 8; // Number of spritesheet frames shown by second + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -33,14 +41,23 @@ int main() { // Update //---------------------------------------------------------------------------------- - if (IsKeyPressed(KEY_RIGHT)) + framesCounter++; + + if (framesCounter >= (60/framesSpeed)) { + framesCounter = 0; currentFrame++; - if (currentFrame > 6) currentFrame = 0; + if (currentFrame > 5) currentFrame = 0; - frameRec.x = currentFrame*guybrush.width/7; + frameRec.x = currentFrame*scarfy.width/6; } + + if (IsKeyPressed(KEY_RIGHT)) framesSpeed++; + else if (IsKeyPressed(KEY_LEFT)) framesSpeed--; + + if (framesSpeed > MAX_FRAME_SPEED) framesSpeed = MAX_FRAME_SPEED; + else if (framesSpeed < MIN_FRAME_SPEED) framesSpeed = MIN_FRAME_SPEED; //---------------------------------------------------------------------------------- // Draw @@ -49,19 +66,23 @@ int main() ClearBackground(RAYWHITE); - DrawTexture(guybrush, 35, 40, WHITE); - DrawRectangleLines(35, 40, guybrush.width, guybrush.height, LIME); - - DrawTextureRec(guybrush, frameRec, position, WHITE); // Draw part of the texture + DrawTexture(scarfy, 15, 40, WHITE); + DrawRectangleLines(15, 40, scarfy.width, scarfy.height, LIME); + DrawRectangleLines(15 + frameRec.x, 40 + frameRec.y, frameRec.width, frameRec.height, RED); - DrawRectangleLines(35 + frameRec.x, 40 + frameRec.y, frameRec.width, frameRec.height, RED); + DrawText("FRAME SPEED: ", 165, 210, 10, DARKGRAY); + DrawText(FormatText("%02i FPS", framesSpeed), 575, 210, 10, DARKGRAY); + DrawText("PRESS RIGHT/LEFT KEYS to CHANGE SPEED!", 290, 240, 10, DARKGRAY); - DrawText("PRESS RIGHT KEY to", 540, 310, 10, GRAY); - DrawText("CHANGE DRAWING RECTANGLE", 520, 330, 10, GRAY); + for (int i = 0; i < MAX_FRAME_SPEED; i++) + { + if (i < framesSpeed) DrawRectangle(250 + 21*i, 205, 20, 20, RED); + DrawRectangleLines(250 + 21*i, 205, 20, 20, MAROON); + } - DrawText("Guybrush Ulysses Threepwood,", 100, 300, 10, GRAY); - DrawText("main character of the Monkey Island series", 80, 320, 10, GRAY); - DrawText("of computer adventure games by LucasArts.", 80, 340, 10, GRAY); + DrawTextureRec(scarfy, frameRec, position, WHITE); // Draw part of the texture + + DrawText("(c) Scarfy sprite by Eiden Marsal", screenWidth - 200, screenHeight - 20, 10, GRAY); EndDrawing(); //---------------------------------------------------------------------------------- @@ -69,7 +90,7 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- - UnloadTexture(guybrush); // Texture unloading + UnloadTexture(scarfy); // Texture unloading CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/textures/textures_rectangle.png b/examples/textures/textures_rectangle.png Binary files differindex d89404ab..aa66464e 100644 --- a/examples/textures/textures_rectangle.png +++ b/examples/textures/textures_rectangle.png diff --git a/examples/textures/textures_srcrec_dstrec.c b/examples/textures/textures_srcrec_dstrec.c index 6d824ce6..53ffd1d0 100644 --- a/examples/textures/textures_srcrec_dstrec.c +++ b/examples/textures/textures_srcrec_dstrec.c @@ -21,10 +21,10 @@ int main() InitWindow(screenWidth, screenHeight, "raylib [textures] examples - texture source and destination rectangles"); // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - Texture2D guybrush = LoadTexture("resources/guybrush.png"); // Texture loading + Texture2D scarfy = LoadTexture("resources/scarfy.png"); // Texture loading - int frameWidth = guybrush.width/7; - int frameHeight = guybrush.height; + int frameWidth = scarfy.width/6; + int frameHeight = scarfy.height; // NOTE: Source rectangle (part of the texture to use for drawing) Rectangle sourceRec = { 0, 0, frameWidth, frameHeight }; @@ -59,10 +59,12 @@ int main() // destRec defines the rectangle where our texture part will fit (scaling it to fit) // origin defines the point of the texture used as reference for rotation and scaling // rotation defines the texture rotation (using origin as rotation point) - DrawTexturePro(guybrush, sourceRec, destRec, origin, rotation, WHITE); + DrawTexturePro(scarfy, sourceRec, destRec, origin, rotation, WHITE); DrawLine(destRec.x, 0, destRec.x, screenHeight, GRAY); DrawLine(0, destRec.y, screenWidth, destRec.y, GRAY); + + DrawText("(c) Scarfy sprite by Eiden Marsal", screenWidth - 200, screenHeight - 20, 10, GRAY); EndDrawing(); //---------------------------------------------------------------------------------- @@ -70,7 +72,7 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- - UnloadTexture(guybrush); // Texture unloading + UnloadTexture(scarfy); // Texture unloading CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/textures/textures_srcrec_dstrec.png b/examples/textures/textures_srcrec_dstrec.png Binary files differindex 9ea00fe4..7691ff2e 100644 --- a/examples/textures/textures_srcrec_dstrec.png +++ b/examples/textures/textures_srcrec_dstrec.png |
