summaryrefslogtreecommitdiffhomepage
path: root/examples
diff options
context:
space:
mode:
authorvictorfisac <[email protected]>2018-03-10 19:10:37 +0100
committervictorfisac <[email protected]>2018-03-10 19:10:37 +0100
commit8f1d6f38506ff6449866913c6d88b0f25ca2d8f4 (patch)
tree659719ef12dbdedd9a51c85af0e43ac327c84b40 /examples
parentdd50348b4dffe59be03538bdbaf2a3d084426e1f (diff)
parentdf50eada531b54d6771eff81cbe140f9453d54d9 (diff)
downloadraylib-8f1d6f38506ff6449866913c6d88b0f25ca2d8f4.tar.gz
raylib-8f1d6f38506ff6449866913c6d88b0f25ca2d8f4.zip
Merge branch 'master' of github.com:raysan5/raylib into fork/master
Diffstat (limited to 'examples')
-rw-r--r--examples/CMakeLists.txt21
-rw-r--r--examples/Makefile673
-rw-r--r--examples/core/core_basic_window.c2
-rw-r--r--examples/core/core_vr_simulator.c3
-rw-r--r--examples/models/models_cubicmap.c2
-rw-r--r--examples/models/models_heightmap.c2
-rw-r--r--examples/models/models_material_pbr.c12
-rw-r--r--examples/models/models_material_pbr.pngbin193874 -> 324224 bytes
-rw-r--r--examples/models/models_mesh_generation.c113
-rw-r--r--examples/models/models_mesh_generation.pngbin0 -> 27504 bytes
-rw-r--r--examples/models/models_mesh_picking.c4
-rw-r--r--examples/models/models_yaw_pitch_roll.c (renamed from examples/models/models_plane_rotations.c)36
-rw-r--r--examples/models/models_yaw_pitch_roll.png (renamed from examples/models/models_plane_rotations.png)bin183992 -> 183992 bytes
-rw-r--r--examples/models/resources/angle_gauge.pngbin11761 -> 12919 bytes
-rw-r--r--examples/models/resources/plane.pngbin4872 -> 4810 bytes
-rw-r--r--examples/models/resources/shaders/pbr.vs6
-rw-r--r--examples/others/audio_standalone.c16
-rw-r--r--examples/others/resources/shaders/glsl100/standard.vs4
-rw-r--r--examples/others/resources/shaders/glsl330/standard.vs4
-rw-r--r--examples/shaders/resources/shaders/glsl120/base.fs22
-rw-r--r--examples/shaders/resources/shaders/glsl120/base.vs26
-rw-r--r--examples/shaders/resources/shaders/glsl120/bloom.fs37
-rw-r--r--examples/shaders/resources/shaders/glsl120/blur.fs32
-rw-r--r--examples/shaders/resources/shaders/glsl120/cross_hatching.fs45
-rw-r--r--examples/shaders/resources/shaders/glsl120/cross_stitching.fs55
-rw-r--r--examples/shaders/resources/shaders/glsl120/distortion.fs52
-rw-r--r--examples/shaders/resources/shaders/glsl120/dream_vision.fs35
-rw-r--r--examples/shaders/resources/shaders/glsl120/fisheye.fs41
-rw-r--r--examples/shaders/resources/shaders/glsl120/grayscale.fs23
-rw-r--r--examples/shaders/resources/shaders/glsl120/pixelizer.fs30
-rw-r--r--examples/shaders/resources/shaders/glsl120/posterization.fs27
-rw-r--r--examples/shaders/resources/shaders/glsl120/predator.fs29
-rw-r--r--examples/shaders/resources/shaders/glsl120/scanlines.fs42
-rw-r--r--examples/shaders/resources/shaders/glsl120/sobel.fs38
-rw-r--r--examples/shaders/resources/shaders/glsl120/swirl.fs44
-rw-r--r--examples/shaders/shaders_postprocessing.c31
-rw-r--r--examples/shaders/shaders_shapes_textures.c2
-rw-r--r--examples/shapes/shapes_basic_shapes.c2
-rw-r--r--examples/text/text_input_box.c2
-rw-r--r--examples/text/text_ttf_loading.c2
-rw-r--r--examples/textures/resources/KAISG.ttfbin0 -> 79912 bytes
-rw-r--r--examples/textures/resources/custom_jupiter_crash.pngbin0 -> 23596 bytes
-rw-r--r--examples/textures/textures_image_drawing.c8
-rw-r--r--examples/textures/textures_image_generation.c48
-rw-r--r--examples/textures/textures_image_generation.pngbin222595 -> 225357 bytes
-rw-r--r--examples/textures/textures_image_text.c83
-rw-r--r--examples/textures/textures_image_text.pngbin0 -> 556322 bytes
47 files changed, 1166 insertions, 488 deletions
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index 354a1373..1f05d529 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -7,9 +7,20 @@ include("../utils.cmake")
# TODO `build` directory should maybe be something else...
# TODO place somewhere else?
include_directories("../build/release")
+include_directories("../src/external")
+include_directories("../src/external/glfw/include")
# Get the sources together
-set(example_dirs audio core models others physac shaders text texutures)
+set(example_dirs audio core models others shaders shapes text textures)
+set(CMAKE_REQUIRED_DEFINITIONS -D_POSIX_C_SOURCE=199309L)
+ include(CheckSymbolExists)
+ check_symbol_exists(CLOCK_MONOTONIC time.h HAVE_CLOCK_MONOTONIC)
+ check_symbol_exists(QueryPerformanceCounter windows.h HAVE_QPC)
+set(CMAKE_REQUIRED_DEFINITIONS)
+if(HAVE_QPC OR HAVE_CLOCK_MONOTONIC)
+ set(example_dirs ${example_dirs} physac)
+endif()
+
set(example_sources)
set(example_resources)
foreach(example_dir ${example_dirs})
@@ -22,6 +33,14 @@ foreach(example_dir ${example_dirs})
list(APPEND example_resources ${resources})
endforeach()
+include(CheckIncludeFiles)
+check_include_files(OVR_CAPI_GL.h HAVE_OCULUS_CAPI)
+if(NOT HAVE_OCULUS_CAPI)
+ list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/oculus_rift.c)
+endif()
+list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/standard_lighting.c)
+
+
# Do each example
foreach(example_source ${example_sources})
# Create the basename for the example
diff --git a/examples/Makefile b/examples/Makefile
index e6ae80f7..6902803e 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -1,10 +1,8 @@
#**************************************************************************************************
#
-# raylib makefile for desktop platforms, Raspberry Pi and HTML5 (emscripten)
+# raylib makefile for Desktop platforms, Raspberry Pi, Android and HTML5
#
-# NOTE: By default examples are compiled using raylib static library and OpenAL Soft shared library
-#
-# Copyright (c) 2013-2017 Ramon Santamaria (@raysan5)
+# Copyright (c) 2013-2018 Ramon Santamaria (@raysan5)
#
# This software is provided "as-is", without any express or implied warranty. In no event
# will the authors be held liable for any damages arising from the use of this software.
@@ -25,217 +23,322 @@
.PHONY: all clean
-# define raylib platform to compile for
-# possible platforms: PLATFORM_DESKTOP PLATFORM_RPI PLATFORM_WEB
-# WARNING: To compile to HTML5, code must be redesigned to use emscripten.h and emscripten_set_main_loop()
-PLATFORM ?= PLATFORM_DESKTOP
+# Define required raylib variables
+PROJECT_NAME ?= raylib_examples
+RAYLIB_VERSION ?= 1.9.4
+RAYLIB_API_VERSION ?= 1
+RAYLIB_PATH ?= ..
+
+# Define default options
+
+# One of PLATFORM_DESKTOP, PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
+PLATFORM ?= PLATFORM_DESKTOP
+
+# Locations of your newly installed library and associated headers. See ../src/Makefile
+# On Linux, if you have installed raylib but cannot compile the examples, check that
+# the *_INSTALL_PATH values here are the same as those in src/Makefile or point to known locations.
+# To enable system-wide compile-time and runtime linking to libraylib.so, run ../src/$ sudo make install RAYLIB_LIBTYPE_SHARED.
+# To enable compile-time linking to a special version of libraylib.so, change these variables here.
+# To enable runtime linking to a special version of libraylib.so, see EXAMPLE_RUNTIME_PATH below.
+# If there is a libraylib in both EXAMPLE_RUNTIME_PATH and RAYLIB_INSTALL_PATH, at runtime,
+# the library at EXAMPLE_RUNTIME_PATH, if present, will take precedence over the one at RAYLIB_INSTALL_PATH.
+# RAYLIB_INSTALL_PATH should be the desired full path to libraylib. No relative paths.
+DESTDIR ?= /usr/local
+RAYLIB_INSTALL_PATH ?= $(DESTDIR)/lib
+# RAYLIB_H_INSTALL_PATH locates the installed raylib header and associated source files.
+RAYLIB_H_INSTALL_PATH ?= $(DESTDIR)/include
+
+# Library type used for raylib: STATIC (.a) or SHARED (.so/.dll)
+RAYLIB_LIBTYPE ?= STATIC
+
+# Build mode for project: DEBUG or RELEASE
+RAYLIB_BUILD_MODE ?= RELEASE
+
+# Use external GLFW library instead of rglfw module
+# TODO: Review usage on Linux. Target version of choice. Switch on -lglfw or -lglfw3
+USE_EXTERNAL_GLFW ?= FALSE
+
+# Use Wayland display server protocol on Linux desktop
+# by default it uses X11 windowing system
+USE_WAYLAND_DISPLAY ?= FALSE
-# determine PLATFORM_OS in case PLATFORM_DESKTOP selected
+# NOTE: On PLATFORM_WEB OpenAL Soft backend is used by default (check raylib/src/Makefile)
+
+# 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
+ # No uname.exe on MinGW!, but OS=Windows_NT on Windows!
+ # ifeq ($(UNAME),Msys) -> Windows
ifeq ($(OS),Windows_NT)
PLATFORM_OS=WINDOWS
- LIBPATH=win32
else
- UNAMEOS:=$(shell uname)
+ UNAMEOS=$(shell uname)
ifeq ($(UNAMEOS),Linux)
PLATFORM_OS=LINUX
- LIBPATH=linux
- else
+ endif
+ ifeq ($(UNAMEOS),FreeBSD)
+ PLATFORM_OS=FREEBSD
+ endif
ifeq ($(UNAMEOS),Darwin)
PLATFORM_OS=OSX
- LIBPATH=osx
- endif
endif
endif
endif
+ifeq ($(PLATFORM),PLATFORM_RPI)
+ UNAMEOS=$(shell uname)
+ ifeq ($(UNAMEOS),Linux)
+ PLATFORM_OS=LINUX
+ endif
+endif
-# define default raylib path for include and library search
+# RAYLIB_PATH adjustment for different platforms.
+# If using GNU make, we can get the full path to the top of the tree. Windows? BSD?
+# Required for ldconfig or other tools that do not perform path expansion.
+ifeq ($(PLATFORM),PLATFORM_DESKTOP)
+ ifeq ($(PLATFORM_OS),LINUX)
+ RAYLIB_PREFIX ?= ..
+ RAYLIB_PATH = $(realpath $(RAYLIB_PREFIX))
+ endif
+endif
+# Default path for raylib on Raspberry Pi, if installed in different path, update it!
+# This is not currently used by src/Makefile. Not sure of its origin or usage. Refer to wiki.
+# TODO: update install: target in src/Makefile for RPI, consider relation to LINUX.
+ifeq ($(PLATFORM),PLATFORM_RPI)
+ RAYLIB_PATH ?= /home/pi/raylib
+endif
+
+ifeq ($(PLATFORM),PLATFORM_WEB)
+ # Emscripten required variables
+ EMSDK_PATH = C:/emsdk
+ EMSCRIPTEN_VERSION = 1.37.28
+ CLANG_VERSION=e1.37.28_64bit
+ PYTHON_VERSION=2.7.5.3_64bit
+ NODE_VERSION=4.1.1_64bit
+ export PATH=$(EMSDK_PATH);$(EMSDK_PATH)\clang\$(CLANG_VERSION);$(EMSDK_PATH)\node\$(NODE_VERSION)\bin;$(EMSDK_PATH)\python\$(PYTHON_VERSION);$(EMSDK_PATH)\emscripten\$(EMSCRIPTEN_VERSION);C:\raylib\MinGW\bin:$$(PATH)
+ EMSCRIPTEN=$(EMSDK_PATH)\emscripten\$(EMSCRIPTEN_VERSION)
+endif
+
+# Define raylib release directory for compiled library.
+# RAYLIB_RELEASE_PATH points to provided binaries or your freshly built version.
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
ifeq ($(PLATFORM_OS),WINDOWS)
- RAYLIB_PATH ?= C:\raylib\raylib
+ RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/win32/mingw32
endif
ifeq ($(PLATFORM_OS),LINUX)
- RAYLIB_PATH ?= ..
+ RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/linux
endif
ifeq ($(PLATFORM_OS),OSX)
- RAYLIB_PATH ?= ..
+ RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/osx
+ endif
+ ifeq ($(PLATFORM_OS),FREEBSD)
+ RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/freebsd
endif
endif
-
ifeq ($(PLATFORM),PLATFORM_RPI)
- RAYLIB_PATH ?= /home/pi/raylib
+ RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/rpi
endif
-
-# define NO to use OpenAL Soft as static library (shared by default)
-SHARED_OPENAL ?= NO
-
ifeq ($(PLATFORM),PLATFORM_WEB)
- SHARED_OPENAL = NO
+ RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/html5
endif
-# define compiler: gcc for C program, define as g++ for C++
+# EXAMPLE_RUNTIME_PATH embeds a custom runtime location of libraylib.so or other desired libraries
+# into each example binary compiled with RAYLIB_LIBTYPE=SHARED. It defaults to RAYLIB_RELEASE_PATH
+# so that these examples link at runtime with your version of libraylib.so in ../release/libs/linux
+# without formal installation from ../src/Makefile. It aids portability and is useful if you have
+# multiple versions of raylib, have raylib installed to a non-standard location, or want to
+# bundle libraylib.so with your game. Change it to your liking.
+# Note: If, at runtime, there is a libraylib.so at both EXAMPLE_RUNTIME_PATH and RAYLIB_INSTALL_PATH,
+# The library at EXAMPLE_RUNTIME_PATH, if present, will take precedence over RAYLIB_INSTALL_PATH,
+# Implemented for LINUX below with CFLAGS += -Wl,-rpath,$(EXAMPLE_RUNTIME_PATH)
+# To see the result, run readelf -d core/core_basic_window; looking at the RPATH or RUNPATH attribute.
+# To see which libraries a built example is linking to, ldd core/core_basic_window;
+# Look for libraylib.so.1 => $(RAYLIB_INSTALL_PATH)/libraylib.so.1 or similar listing.
+EXAMPLE_RUNTIME_PATH ?= $(RAYLIB_RELEASE_PATH)
+
+# Define default C compiler: gcc
+# NOTE: define g++ compiler if using C++
+CC = gcc
+
+ifeq ($(PLATFORM),PLATFORM_DESKTOP)
+ ifeq ($(PLATFORM_OS),OSX)
+ # OSX default compiler
+ CC = clang
+ endif
+ ifeq ($(PLATFORM_OS),FREEBSD)
+ # FreeBSD default compiler
+ CC = clang
+ endif
+endif
+ifeq ($(PLATFORM),PLATFORM_RPI)
+ ifeq ($(USE_RPI_CROSS_COMPILER),TRUE)
+ # Define RPI cross-compiler
+ #CC = armv6j-hardfloat-linux-gnueabi-gcc
+ CC = $(RPI_TOOLCHAIN)/bin/arm-linux-gnueabihf-gcc
+ endif
+endif
ifeq ($(PLATFORM),PLATFORM_WEB)
- # define emscripten compiler
+ # WARNING: To compile to HTML5, code must be redesigned to use emscripten.h and emscripten_set_main_loop()
+ # HTML5 emscripten compiler
CC = emcc
-else
-ifeq ($(PLATFORM_OS),OSX)
- # define llvm compiler for mac
- CC = clang
-else
- # define default gcc compiler
- CC = gcc
endif
+
+# Define default make program: Mingw32-make
+MAKE = mingw32-make
+
+ifeq ($(PLATFORM),PLATFORM_DESKTOP)
+ ifeq ($(PLATFORM_OS),LINUX)
+ MAKE = make
+ endif
endif
-# define compiler flags:
-# -O2 defines optimization level
-# -Og enable debugging
+# Define compiler flags:
+# -O1 defines optimization level
+# -g enable debugging
# -s strip unnecessary data from build
# -Wall turns on most, but not all, compiler warnings
# -std=c99 defines C language mode (standard C from 1999 revision)
# -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 and PLATFORM_WEB, required for timespec
+CFLAGS += -O1 -s -Wall -std=c99 -D_DEFAULT_SOURCE -Wno-missing-braces
+
+# Additional flags for compiler (if desired)
+#CFLAGS += -Wextra -Wmissing-prototypes -Wstrict-prototypes
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
ifeq ($(PLATFORM_OS),WINDOWS)
- CFLAGS = -O2 -s -Wall -std=c99
+ # resources file contains windows exe icon
+ # -Wl,--subsystem,windows hides the console window
+ CFLAGS += $(RAYLIB_PATH)/src/resources -Wl,--subsystem,windows
endif
ifeq ($(PLATFORM_OS),LINUX)
- CFLAGS = -O2 -s -Wall -std=c99 -no-pie -D_DEFAULT_SOURCE
- endif
- ifeq ($(PLATFORM_OS),OSX)
- CFLAGS = -O2 -s -Wall -std=c99
+ ifeq ($(RAYLIB_BUILD_MODE),DEBUG)
+ CFLAGS += -g
+ #CC = clang
+ endif
+ ifeq ($(RAYLIB_LIBTYPE),STATIC)
+ CFLAGS += -no-pie -D_DEFAULT_SOURCE
+ endif
+ ifeq ($(RAYLIB_LIBTYPE),SHARED)
+ # Explicitly enable runtime link to libraylib.so
+ CFLAGS += -Wl,-rpath,$(EXAMPLE_RUNTIME_PATH)
+ endif
endif
endif
+ifeq ($(PLATFORM),PLATFORM_RPI)
+ CFLAGS += -std=gnu99
+endif
ifeq ($(PLATFORM),PLATFORM_WEB)
- 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
+ # -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)
+ # -s USE_PTHREADS=1 # multithreading support
+ # -s WASM=1 # support Web Assembly (https://github.com/kripken/emscripten/wiki/WebAssembly)
+ # --preload-file resources # specify a resources folder for data compilation
+ CFLAGS += -s USE_GLFW=3 -s ASSERTIONS=1 -s WASM=1 --profiling --preload-file resources
+
+ # Define a custom shell .html and output extension
+ CFLAGS += --shell-file $(RAYLIB_PATH)\templates\web_shell\shell.html
+ EXT = .html
endif
+
+# Define include paths for required headers.
+# Precedence: immediately local, raysan5 provided sources
+# NOTE: Several external required libraries (stb and others)
+INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/release/include -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external
+
+# Define additional directories containing required header files
ifeq ($(PLATFORM),PLATFORM_RPI)
- CFLAGS = -O2 -s -Wall -std=gnu99 -fgnu89-inline
+ # RPI required libraries
+ INCLUDE_PATHS += -I/opt/vc/include
+ INCLUDE_PATHS += -I/opt/vc/include/interface/vmcs_host/linux
+ INCLUDE_PATHS += -I/opt/vc/include/interface/vcos/pthreads
endif
-#CFLAGSEXTRA = -Wextra -Wmissing-prototypes -Wstrict-prototypes
-
-# define raylib release directory for compiled library
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
- ifeq ($(PLATFORM_OS),WINDOWS)
- RAYLIB_RELEASE = $(RAYLIB_PATH)/release/win32/mingw32
+ ifeq ($(PLATFORM_OS),FREEBSD)
+ # Consider -L$(RAYLIB_H_INSTALL_PATH)
+ INCLUDE_PATHS += -I/usr/local/include
endif
ifeq ($(PLATFORM_OS),LINUX)
- RAYLIB_RELEASE = $(RAYLIB_PATH)/release/linux
+ # Reset everything.
+ # Precedence: immediately local, installed version, raysan5 provided libs -I$(RAYLIB_H_INSTALL_PATH) -I$(RAYLIB_PATH)/release/include
+ INCLUDE_PATHS = -I$(RAYLIB_H_INSTALL_PATH) -isystem. -isystem$(RAYLIB_PATH)/src -isystem$(RAYLIB_PATH)/release/include -isystem$(RAYLIB_PATH)/src/external
endif
- ifeq ($(PLATFORM_OS),OSX)
- RAYLIB_RELEASE = $(RAYLIB_PATH)/release/osx
- endif
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
- RAYLIB_RELEASE = $(RAYLIB_PATH)/release/html5
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
- RAYLIB_RELEASE = $(RAYLIB_PATH)/release/rpi
endif
-# define any directories containing required header files
-INCLUDES = -I. -I$(RAYLIB_RELEASE) -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external
+# Define library paths containing required libs.
+# Precedence: immediately local, then raysan5 provided libs
+LDFLAGS = -L. -L$(RAYLIB_RELEASE_PATH) -L$(RAYLIB_PATH)/src
-ifeq ($(PLATFORM),PLATFORM_RPI)
- INCLUDES += -I../src -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads
-endif
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
- ifeq ($(PLATFORM_OS),WINDOWS)
- # external libraries headers
- # GLFW3
- INCLUDES += -I$(RAYLIB_PATH)/src/external/glfw3/include
- # OpenAL Soft
- INCLUDES += -I$(RAYLIB_PATH)/src/external/openal_soft/include
+ ifeq ($(PLATFORM_OS),FREEBSD)
+ # Consider -L$(RAYLIB_INSTALL_PATH)
+ LDFLAGS += -L. -Lsrc -L/usr/local/lib
endif
ifeq ($(PLATFORM_OS),LINUX)
- # you may optionally create this directory and install raylib
- # and related headers there. Edit ../src/Makefile appropriately.
- INCLUDES += -I/usr/local/include/raylib
- endif
- ifeq ($(PLATFORM_OS),OSX)
- # additional directories for MacOS
+ # Reset everything.
+ # Precedence: immediately local, installed version, raysan5 provided libs
+ LDFLAGS = -L. -L$(RAYLIB_INSTALL_PATH) -L$(RAYLIB_RELEASE_PATH) -L$(RAYLIB_PATH)/src
endif
endif
-# define library paths containing required libs
-LFLAGS = -L. -L$(RAYLIB_RELEASE) -L$(RAYLIB_PATH)/src
-
ifeq ($(PLATFORM),PLATFORM_RPI)
- LFLAGS += -L/opt/vc/lib
-endif
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
- # add standard directories for GNU/Linux
- ifeq ($(PLATFORM_OS),WINDOWS)
- # external libraries to link with
- # GLFW3
- LFLAGS += -L$(RAYLIB_PATH)/src/external/glfw3/lib/$(LIBPATH)
- # OpenAL Soft
- LFLAGS += -L$(RAYLIB_PATH)/src/external/openal_soft/lib/$(LIBPATH)
- endif
+ LDFLAGS += -L/opt/vc/lib
endif
-# define any libraries to link into executable
+# Define any libraries required on linking
# if you want to link libraries (libname.so or libname.a), use the -lname
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
+ ifeq ($(PLATFORM_OS),WINDOWS)
+ # Libraries for Windows desktop compilation
+ LDLIBS = -lraylib -lopengl32 -lgdi32
+ # Required for physac examples
+ LDLIBS += -static -lpthread
+ endif
ifeq ($(PLATFORM_OS),LINUX)
- # libraries for Debian GNU/Linux desktop compiling
- # requires the following packages:
- # libglfw3-dev libopenal-dev libegl1-mesa-dev
- LIBS = -lraylib -lglfw -lGL -lopenal -lm -lpthread -ldl
- # on XWindow requires also below libraries
- LIBS += -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
- else
- ifeq ($(PLATFORM_OS),OSX)
- # libraries for OS X 10.9 desktop compiling
- # requires the following packages:
- # libglfw3-dev libopenal-dev libegl1-mesa-dev
- LIBS = -lraylib -lglfw -framework OpenGL -framework OpenAL -framework Cocoa
- else
- # libraries for Windows desktop compiling
- # NOTE: GLFW3 and OpenAL Soft libraries should be installed
- LIBS = -lraylib -lglfw3 -lopengl32 -lgdi32
- # if static OpenAL Soft required, define the corresponding libs
- ifeq ($(SHARED_OPENAL),NO)
- LIBS += -lopenal32 -lwinmm
- CFLAGS += -Wl,-allow-multiple-definition
- else
- LIBS += -lopenal32dll
+ # Libraries for Debian GNU/Linux desktop compiling
+ # NOTE: Required packages: libegl1-mesa-dev
+ LDLIBS = -lraylib -lGL -lm -lpthread -ldl -lrt
+ # On X11 requires also below libraries
+ LDLIBS += -lX11
+ # NOTE: It seems additional libraries are not required any more, latest GLFW just dlopen them
+ #LDLIBS += -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
+ # On Wayland windowing system, additional libraries requires
+ ifeq ($(USE_WAYLAND_DISPLAY),TRUE)
+ LDLIBS += -lwayland-client -lwayland-cursor -lwayland-egl -lxkbcommon
+ endif
+ # Explicit link to libc
+ ifeq ($(RAYLIB_LIBTYPE),SHARED)
+ LDLIBS += -lc
endif
- PHYSAC_LIBS = -static -lpthread
endif
+ ifeq ($(PLATFORM_OS),OSX)
+ # Libraries for OSX 10.9 desktop compiling
+ # NOTE: Required packages: libopenal-dev libegl1-mesa-dev
+ LDLIBS = -lraylib -framework OpenGL -framework OpenAL -framework Cocoa
+ endif
+ ifeq ($(PLATFORM_OS),FREEBSD)
+ # Libraries for FreeBSD desktop compiling
+ # NOTE: Required packages: mesa-libs
+ LDLIBS = -lraylib -lGL -lpthread -lm
+ # On XWindow requires also below libraries
+ LDLIBS += -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
+ endif
+ ifeq ($(USE_EXTERNAL_GLFW),TRUE)
+ # NOTE: It could require additional packages installed: libglfw3-dev
+ LDLIBS += -lglfw
endif
endif
ifeq ($(PLATFORM),PLATFORM_RPI)
- # libraries for Raspberry Pi compiling
- # NOTE: OpenAL Soft library should be installed (libopenal1 package)
- LIBS = -lraylib -lGLESv2 -lEGL -lpthread -lrt -lm -lbcm_host -lopenal
+ # Libraries for Raspberry Pi compiling
+ # NOTE: Required packages: libasound2-dev (ALSA)
+ LDLIBS = -lraylib -lbrcmGLESv2 -lbrcmEGL -lpthread -lrt -lm -lbcm_host -ldl
endif
ifeq ($(PLATFORM),PLATFORM_WEB)
- # NOTE: Set the correct path to 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 = $(RAYLIB_PATH)/src/resources -Wl,--subsystem,windows
+ # Libraries for web (HTML5) compiling
+ LDLIBS = $(RAYLIB_RELEASE_PATH)/libraylib.bc
endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
- EXT = .html
- WEB_SHELL = --shell-file $(RAYLIB_PATH)\templates\web_shell\shell.html
-endif
-
-# define all object files required
+# Define all object files required
EXAMPLES = \
core/core_basic_window \
core/core_input_keys \
@@ -268,6 +371,8 @@ EXAMPLES = \
textures/textures_particles_blending \
textures/textures_image_processing \
textures/textures_image_drawing \
+ textures/textures_image_generation \
+ textures/textures_image_text \
text/text_sprite_fonts \
text/text_bmfont_ttf \
text/text_raylib_fonts \
@@ -283,6 +388,10 @@ EXAMPLES = \
models/models_heightmap \
models/models_cubicmap \
models/models_mesh_picking \
+ models/models_mesh_generation \
+ models/models_material_pbr \
+ models/models_skybox \
+ models/models_yaw_pitch_roll \
shaders/shaders_model_shader \
shaders/shaders_shapes_textures \
shaders/shaders_custom_uniform \
@@ -296,270 +405,20 @@ EXAMPLES = \
physac/physics_movement \
physac/physics_restitution \
physac/physics_shatter \
- fix_dylib \
-
-
-# typing 'make' will invoke the default target entry
-all: examples
-
-# generic compilation pattern
-%: %.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile all examples
-examples: $(EXAMPLES)
-
-# compile [core] example - basic window
-core/core_basic_window: core/core_basic_window.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [core] example - keyboard input
-core/core_input_keys: core/core_input_keys.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-# compile [core] example - mouse input
-core/core_input_mouse: core/core_input_mouse.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-# compile [core] example - mouse wheel
-core/core_mouse_wheel: core/core_mouse_wheel.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
+CURRENT_MAKEFILE = $(lastword $(MAKEFILE_LIST))
-# compile [core] example - gamepad input
-core/core_input_gamepad: core/core_input_gamepad.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
+# Default target entry
+all: $(EXAMPLES)
-# compile [core] example - generate random values
-core/core_random_values: core/core_random_values.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [core] example - color selection (collision detection)
-core/core_color_select: core/core_color_select.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [core] example - drop files
-core/core_drop_files: core/core_drop_files.c
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-else
- @echo core_drop_files: Example not supported on PLATFORM_ANDROID or PLATFORM_WEB or PLATFORM_RPI
-endif
-
-# compile [core] example - storage values
-core/core_storage_values: core/core_storage_values.c
-ifeq ($(PLATFORM), $(filter $(PLATFORM),PLATFORM_DESKTOP PLATFORM_RPI))
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-else
- @echo core_storage_values: Example not supported on PLATFORM_ANDROID or PLATFORM_WEB
-endif
-
-# compile [core] example - gestures detection
-core/core_gestures_detection: core/core_gestures_detection.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [core] example - 3d mode
-core/core_3d_mode: core/core_3d_mode.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [core] example - 3d picking
-core/core_3d_picking: core/core_3d_picking.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [core] example - 3d camera free
-core/core_3d_camera_free: core/core_3d_camera_free.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [core] example - 3d camera first person
-core/core_3d_camera_first_person: core/core_3d_camera_first_person.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [core] example - 2d camera
-core/core_2d_camera: core/core_2d_camera.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [core] example - world screen
-core/core_world_screen: core/core_world_screen.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [core] example - vr simulator
-core/core_vr_simulator: core/core_vr_simulator.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [shapes] example - raylib logo (with basic shapes)
-shapes/shapes_logo_raylib: shapes/shapes_logo_raylib.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [shapes] example - basic shapes usage (rectangle, circle, ...)
-shapes/shapes_basic_shapes: shapes/shapes_basic_shapes.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [shapes] example - raylib color palette
-shapes/shapes_colors_palette: shapes/shapes_colors_palette.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# 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
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [textures] example - image loading and conversion to texture
-textures/textures_image_loading: textures/textures_image_loading.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [textures] example - texture rectangle drawing
-textures/textures_rectangle: textures/textures_rectangle.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [textures] example - texture source and destination rectangles
-textures/textures_srcrec_dstrec: textures/textures_srcrec_dstrec.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [textures] example - texture to image
-textures/textures_to_image: textures/textures_to_image.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# 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 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
-textures/textures_image_processing: textures/textures_image_processing.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [textures] example - texture image drawing
-textures/textures_image_drawing: textures/textures_image_drawing.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [text] example - sprite fonts loading
-text/text_sprite_fonts: text/text_sprite_fonts.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [text] example - bmfonts and ttf loading
-text/text_bmfont_ttf: text/text_bmfont_ttf.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# 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 - text writing animation
-text/text_writing_anim: text/text_writing_anim.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [text] example - text ttf loading
-text/text_ttf_loading: text/text_ttf_loading.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# 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
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [models] example - box collisions
-models/models_box_collisions: models/models_box_collisions.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [models] example - basic window
-models/models_planes: models/models_planes.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [models] example - billboard usage
-models/models_billboard: models/models_billboard.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [models] example - OBJ model loading
-models/models_obj_loading: models/models_obj_loading.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [models] example - heightmap loading
-models/models_heightmap: models/models_heightmap.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [models] example - cubesmap loading
-models/models_cubicmap: models/models_cubicmap.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# 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
-shaders/shaders_model_shader: shaders/shaders_model_shader.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [shaders] example - shapes texture shader
-shaders/shaders_shapes_textures: shaders/shaders_shapes_textures.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [shaders] example - custom uniform in shader
-shaders/shaders_custom_uniform: shaders/shaders_custom_uniform.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [shaders] example - postprocessing shader
-shaders/shaders_postprocessing: shaders/shaders_postprocessing.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)
-
-# compile [audio] example - music stream playing (OGG)
-audio/audio_music_stream: audio/audio_music_stream.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [audio] example - module playing (XM)
-audio/audio_module_playing: audio/audio_module_playing.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [audio] example - raw audio streaming
-audio/audio_raw_stream: audio/audio_raw_stream.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [physac] example - physics demo
-physac/physics_demo: physac/physics_demo.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) $(PHYSAC_LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [physac] example - physics friction
-physac/physics_friction: physac/physics_friction.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) $(PHYSAC_LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [physac] example - physics movement
-physac/physics_movement: physac/physics_movement.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) $(PHYSAC_LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [physac] example - physics restitution
-physac/physics_restitution: physac/physics_restitution.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) $(PHYSAC_LIBS) -D$(PLATFORM) $(WINFLAGS)
-
-# compile [physac] example - physics shatter
-physac/physics_shatter: physac/physics_shatter.c
- $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) $(PHYSAC_LIBS) -D$(PLATFORM) $(WINFLAGS)
-
+# Generic compilation pattern
+# NOTE: Examples must be ready for Android compilation!
+%: %.c
ifeq ($(PLATFORM),PLATFORM_ANDROID)
-external/native_app_glue.o : native_app_glue.c native_app_glue.h
- $(CC) -c $< $(CFLAGS) $(INCLUDES) -D$(PLATFORM) -D$(SHAREDFLAG)
+ $(MAKE) -f Makefile.Android PROJECT_NAME=$@ PROJECT_SOURCE_FILES=$<
+else
+ $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM)
endif
# fix dylib install path name for each executable (MAC)
@@ -568,23 +427,23 @@ ifeq ($(PLATFORM_OS),OSX)
find . -type f -perm +ugo+x -print0 | xargs -t -0 -R 1 -I file install_name_tool -change libglfw.3.0.dylib ../external/glfw3/lib/osx/libglfw.3.0.dylib file
endif
-# clean everything
+# Clean everything
clean:
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
+ ifeq ($(PLATFORM_OS),WINDOWS)
+ del *.o *.exe /s
+ endif
+ 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 -fv
+ endif
ifeq ($(PLATFORM_OS),OSX)
find . -type f -perm +ugo+x -delete
rm -f *.o
- else
- 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 /s
- endif
endif
endif
ifeq ($(PLATFORM),PLATFORM_RPI)
find . -type f -executable -delete
- rm -f *.o
+ rm -fv *.o
endif
ifeq ($(PLATFORM),PLATFORM_WEB)
del *.o *.html *.js
diff --git a/examples/core/core_basic_window.c b/examples/core/core_basic_window.c
index fb83400a..b30f05de 100644
--- a/examples/core/core_basic_window.c
+++ b/examples/core/core_basic_window.c
@@ -15,7 +15,7 @@
* This example has been created using raylib 1.0 (www.raylib.com)
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
*
-* Copyright (c) 2014 Ramon Santamaria (@raysan5)
+* Copyright (c) 2013-2016 Ramon Santamaria (@raysan5)
*
********************************************************************************************/
diff --git a/examples/core/core_vr_simulator.c b/examples/core/core_vr_simulator.c
index 69e0f849..d919c410 100644
--- a/examples/core/core_vr_simulator.c
+++ b/examples/core/core_vr_simulator.c
@@ -22,7 +22,8 @@ int main()
InitWindow(screenWidth, screenHeight, "raylib [core] example - vr simulator");
- InitVrSimulator(HMD_OCULUS_RIFT_CV1); // Init VR simulator (Oculus Rift CV1 parameters)
+ // Init VR simulator (Oculus Rift CV1 parameters)
+ InitVrSimulator(GetVrDeviceInfo(HMD_OCULUS_RIFT_CV1));
// Define the camera to look into our 3d world
Camera camera;
diff --git a/examples/models/models_cubicmap.c b/examples/models/models_cubicmap.c
index a8faa7c0..d8be9329 100644
--- a/examples/models/models_cubicmap.c
+++ b/examples/models/models_cubicmap.c
@@ -2,7 +2,7 @@
*
* raylib [models] example - Cubicmap loading and drawing
*
-* This example has been created using raylib 1.3 (www.raylib.com)
+* This example has been created using raylib 1.8 (www.raylib.com)
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
*
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
diff --git a/examples/models/models_heightmap.c b/examples/models/models_heightmap.c
index e887cea7..e476d1b7 100644
--- a/examples/models/models_heightmap.c
+++ b/examples/models/models_heightmap.c
@@ -2,7 +2,7 @@
*
* raylib [models] example - Heightmap loading and drawing
*
-* This example has been created using raylib 1.3 (www.raylib.com)
+* This example has been created using raylib 1.8 (www.raylib.com)
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
*
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
diff --git a/examples/models/models_material_pbr.c b/examples/models/models_material_pbr.c
index 1f069468..9f576348 100644
--- a/examples/models/models_material_pbr.c
+++ b/examples/models/models_material_pbr.c
@@ -41,10 +41,13 @@ int main()
model.material = LoadMaterialPBR((Color){ 255, 255, 255, 255 }, 1.0f, 1.0f);
// Define lights attributes
- Light lights[MAX_LIGHTS] = { CreateLight(LIGHT_POINT, (Vector3){ LIGHT_DISTANCE, LIGHT_HEIGHT, 0.0f }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 255, 0, 0, 255 }, model.material.shader),
- CreateLight(LIGHT_POINT, (Vector3){ 0.0f, LIGHT_HEIGHT, LIGHT_DISTANCE }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 0, 255, 0, 255 }, model.material.shader),
- CreateLight(LIGHT_POINT, (Vector3){ -LIGHT_DISTANCE, LIGHT_HEIGHT, 0.0f }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 0, 0, 255, 255 }, model.material.shader),
- CreateLight(LIGHT_DIRECTIONAL, (Vector3){ 0.0f, LIGHT_HEIGHT*2.0f, -LIGHT_DISTANCE }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 255, 0, 255, 255 }, model.material.shader) };
+ // NOTE: Shader is passed to every light on creation to define shader bindings internally
+ Light lights[MAX_LIGHTS] = {
+ CreateLight(LIGHT_POINT, (Vector3){ LIGHT_DISTANCE, LIGHT_HEIGHT, 0.0f }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 255, 0, 0, 255 }, model.material.shader),
+ CreateLight(LIGHT_POINT, (Vector3){ 0.0f, LIGHT_HEIGHT, LIGHT_DISTANCE }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 0, 255, 0, 255 }, model.material.shader),
+ CreateLight(LIGHT_POINT, (Vector3){ -LIGHT_DISTANCE, LIGHT_HEIGHT, 0.0f }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 0, 0, 255, 255 }, model.material.shader),
+ CreateLight(LIGHT_DIRECTIONAL, (Vector3){ 0.0f, LIGHT_HEIGHT*2.0f, -LIGHT_DISTANCE }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 255, 0, 255, 255 }, model.material.shader)
+ };
SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode
@@ -156,6 +159,7 @@ static Material LoadMaterialPBR(Color albedo, float metalness, float roughness)
UnloadTexture(cubemap);
UnloadTexture(texHDR);
+ // Unload already used shaders (to create specific textures)
UnloadShader(shdrCubemap);
UnloadShader(shdrIrradiance);
UnloadShader(shdrPrefilter);
diff --git a/examples/models/models_material_pbr.png b/examples/models/models_material_pbr.png
index cde171b9..86ba01b0 100644
--- a/examples/models/models_material_pbr.png
+++ b/examples/models/models_material_pbr.png
Binary files differ
diff --git a/examples/models/models_mesh_generation.c b/examples/models/models_mesh_generation.c
new file mode 100644
index 00000000..72222156
--- /dev/null
+++ b/examples/models/models_mesh_generation.c
@@ -0,0 +1,113 @@
+/*******************************************************************************************
+*
+* raylib example - procedural mesh generation
+*
+* This example has been created using raylib 1.8 (www.raylib.com)
+* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
+*
+* Copyright (c) 2017 Ramon Santamaria (Ray San)
+*
+********************************************************************************************/
+
+#include "raylib.h"
+
+#define NUM_MODELS 7 // We generate 7 parametric 3d shapes
+
+int main()
+{
+ // Initialization
+ //--------------------------------------------------------------------------------------
+ int screenWidth = 800;
+ int screenHeight = 450;
+
+ InitWindow(screenWidth, screenHeight, "raylib [models] example - mesh generation");
+
+ // We generate a checked image for texturing
+ Image checked = GenImageChecked(2, 2, 1, 1, RED, GREEN);
+ Texture2D texture = LoadTextureFromImage(checked);
+ UnloadImage(checked);
+
+ Model models[NUM_MODELS];
+
+ models[0] = LoadModelFromMesh(GenMeshPlane(2, 2, 5, 5));
+ models[1] = LoadModelFromMesh(GenMeshCube(2.0f, 1.0f, 2.0f));
+ models[2] = LoadModelFromMesh(GenMeshSphere(2, 32, 32));
+ models[3] = LoadModelFromMesh(GenMeshHemiSphere(2, 16, 16));
+ models[4] = LoadModelFromMesh(GenMeshCylinder(1, 2, 16));
+ models[5] = LoadModelFromMesh(GenMeshTorus(0.25f, 4.0f, 16, 32));
+ models[6] = LoadModelFromMesh(GenMeshKnot(1.0f, 2.0f, 16, 128));
+
+ // Set checked texture as default diffuse component for all models material
+ for (int i = 0; i < NUM_MODELS; i++) models[i].material.maps[MAP_DIFFUSE].texture = texture;
+
+ // Define the camera to look into our 3d world
+ Camera camera = {{ 5.0f, 5.0f, 5.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f };
+
+ // Model drawing position
+ Vector3 position = { 0.0f, 0.0f, 0.0f };
+
+ int currentModel = 0;
+
+ SetCameraMode(camera, CAMERA_ORBITAL); // Set a orbital camera mode
+
+ 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
+ //----------------------------------------------------------------------------------
+ UpdateCamera(&camera); // Update internal camera and our camera
+
+ if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
+ {
+ currentModel = (currentModel + 1)%NUM_MODELS; // Cycle between the textures
+ }
+ //----------------------------------------------------------------------------------
+
+ // Draw
+ //----------------------------------------------------------------------------------
+ BeginDrawing();
+
+ ClearBackground(RAYWHITE);
+
+ Begin3dMode(camera);
+
+ DrawModel(models[currentModel], position, 1.0f, WHITE);
+
+ DrawGrid(10, 1.0);
+
+ End3dMode();
+
+ DrawRectangle(30, 400, 310, 30, Fade(SKYBLUE, 0.5f));
+ DrawRectangleLines(30, 400, 310, 30, Fade(DARKBLUE, 0.5f));
+ DrawText("MOUSE LEFT BUTTON to CYCLE PROCEDURAL MODELS", 40, 410, 10, BLUE);
+
+ switch(currentModel)
+ {
+ case 0: DrawText("PLANE", 680, 10, 20, DARKBLUE); break;
+ case 1: DrawText("CUBE", 680, 10, 20, DARKBLUE); break;
+ case 2: DrawText("SPHERE", 680, 10, 20, DARKBLUE); break;
+ case 3: DrawText("HEMISPHERE", 640, 10, 20, DARKBLUE); break;
+ case 4: DrawText("CYLINDER", 680, 10, 20, DARKBLUE); break;
+ case 5: DrawText("TORUS", 680, 10, 20, DARKBLUE); break;
+ case 6: DrawText("KNOT", 680, 10, 20, DARKBLUE); break;
+ default: break;
+ }
+
+ EndDrawing();
+ //----------------------------------------------------------------------------------
+ }
+
+ // De-Initialization
+ //--------------------------------------------------------------------------------------
+
+ // Unload models data (GPU VRAM)
+ for (int i = 0; i < NUM_MODELS; i++) UnloadModel(models[i]);
+
+ CloseWindow(); // Close window and OpenGL context
+ //--------------------------------------------------------------------------------------
+
+ return 0;
+} \ No newline at end of file
diff --git a/examples/models/models_mesh_generation.png b/examples/models/models_mesh_generation.png
new file mode 100644
index 00000000..d8eb3646
--- /dev/null
+++ b/examples/models/models_mesh_generation.png
Binary files differ
diff --git a/examples/models/models_mesh_picking.c b/examples/models/models_mesh_picking.c
index 2f54468a..1cc38b45 100644
--- a/examples/models/models_mesh_picking.c
+++ b/examples/models/models_mesh_picking.c
@@ -38,7 +38,7 @@ int main()
tower.material.maps[MAP_DIFFUSE].texture = texture; // Set model diffuse texture
Vector3 towerPos = { 0.0f, 0.0f, 0.0f }; // Set model position
- BoundingBox towerBBox = CalculateBoundingBox(tower.mesh);
+ BoundingBox towerBBox = MeshBoundingBox(tower.mesh); // Get mesh bounding box
bool hitMeshBBox = false;
bool hitTriangle = false;
@@ -89,7 +89,7 @@ int main()
cursorColor = PURPLE;
hitObjectName = "Triangle";
- bary = VectorBarycenter(nearestHit.position, ta, tb, tc);
+ bary = Vector3Barycenter(nearestHit.position, ta, tb, tc);
hitTriangle = true;
}
else hitTriangle = false;
diff --git a/examples/models/models_plane_rotations.c b/examples/models/models_yaw_pitch_roll.c
index 8178a5e8..625fc554 100644
--- a/examples/models/models_plane_rotations.c
+++ b/examples/models/models_yaw_pitch_roll.c
@@ -1,6 +1,6 @@
/*******************************************************************************************
*
-* raylib [models] example - Plane rotations (pitch, roll, yaw)
+* raylib [models] example - Plane rotations (yaw, pitch, roll)
*
* This example has been created using raylib 1.8 (www.raylib.com)
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
@@ -28,7 +28,7 @@ int main()
const int screenWidth = 800;
const int screenHeight = 450;
- InitWindow(screenWidth, screenHeight, "raylib [models] example - plane rotations (pitch, roll, yaw)");
+ InitWindow(screenWidth, screenHeight, "raylib [models] example - plane rotations (yaw, pitch, roll)");
Texture2D texAngleGauge = LoadTexture("resources/angle_gauge.png");
Texture2D texBackground = LoadTexture("resources/background.png");
@@ -71,6 +71,15 @@ int main()
else if (roll < 0.0f) roll += 0.5f;
}
+ // Plane yaw (y-axis) controls
+ if (IsKeyDown(KEY_S)) yaw += 1.0f;
+ else if (IsKeyDown(KEY_A)) yaw -= 1.0f;
+ else
+ {
+ if (yaw > 0.0f) yaw -= 0.5f;
+ else if (yaw < 0.0f) yaw += 0.5f;
+ }
+
// Plane pitch (z-axis) controls
if (IsKeyDown(KEY_DOWN)) pitch += 0.6f;
else if (IsKeyDown(KEY_UP)) pitch -= 0.6f;
@@ -85,15 +94,6 @@ int main()
while (pitchOffset > 180) pitchOffset -= 360;
while (pitchOffset < -180) pitchOffset += 360;
pitchOffset *= 10;
-
- // Plane yaw (y-axis) controls
- if (IsKeyDown(KEY_S)) yaw += 1.0f;
- else if (IsKeyDown(KEY_A)) yaw -= 1.0f;
- else
- {
- if (yaw > 0.0f) yaw -= 0.5f;
- else if (yaw < 0.0f) yaw += 0.5f;
- }
Matrix transform = MatrixIdentity();
@@ -119,17 +119,17 @@ int main()
BeginBlendMode(BLEND_ALPHA);
- DrawTexturePro(texBackground, (Rectangle){0,0,texBackground.width, texBackground.height},
+ DrawTexturePro(texBackground, (Rectangle){ 0, 0, texBackground.width, texBackground.height },
(Rectangle){ centerX, centerY, texBackground.width*scaleFactor, texBackground.height*scaleFactor},
- (Vector2){texBackground.width/2*scaleFactor, texBackground.height/2*scaleFactor + pitchOffset*scaleFactor}, roll, WHITE);
+ (Vector2){ texBackground.width/2*scaleFactor, texBackground.height/2*scaleFactor + pitchOffset*scaleFactor }, roll, WHITE);
DrawTexturePro(texPitch, (Rectangle){ 0, 0, texPitch.width, texPitch.height },
(Rectangle){ centerX, centerY, texPitch.width*scaleFactor, texPitch.height*scaleFactor },
(Vector2){ texPitch.width/2*scaleFactor, texPitch.height/2*scaleFactor + pitchOffset*scaleFactor }, roll, WHITE);
- DrawTexturePro(texPlane, (Rectangle){0,0,texPlane.width, texPlane.height },
+ DrawTexturePro(texPlane, (Rectangle){ 0, 0, texPlane.width, texPlane.height },
(Rectangle){ centerX, centerY, texPlane.width*scaleFactor, texPlane.height*scaleFactor },
- (Vector2){texPlane.width/2*scaleFactor, texPlane.height/2*scaleFactor }, 0, WHITE);
+ (Vector2){ texPlane.width/2*scaleFactor, texPlane.height/2*scaleFactor }, 0, WHITE);
EndBlendMode();
@@ -144,9 +144,9 @@ int main()
End3dMode();
// Draw 2D GUI stuff
- DrawAngleGauge(texAngleGauge, 80, 80, roll, "roll", RED);
- DrawAngleGauge(texAngleGauge, 190, 80, pitch, "pitch", GREEN);
- DrawAngleGauge(texAngleGauge, 300, 80, yaw, "yaw", SKYBLUE);
+ DrawAngleGauge(texAngleGauge, 80, 70, roll, "roll", RED);
+ DrawAngleGauge(texAngleGauge, 190, 70, pitch, "pitch", GREEN);
+ DrawAngleGauge(texAngleGauge, 300, 70, yaw, "yaw", SKYBLUE);
DrawRectangle(30, 360, 260, 70, Fade(SKYBLUE, 0.5f));
DrawRectangleLines(30, 360, 260, 70, Fade(DARKBLUE, 0.5f));
diff --git a/examples/models/models_plane_rotations.png b/examples/models/models_yaw_pitch_roll.png
index 5400304d..5400304d 100644
--- a/examples/models/models_plane_rotations.png
+++ b/examples/models/models_yaw_pitch_roll.png
Binary files differ
diff --git a/examples/models/resources/angle_gauge.png b/examples/models/resources/angle_gauge.png
index 120f3601..f7871de6 100644
--- a/examples/models/resources/angle_gauge.png
+++ b/examples/models/resources/angle_gauge.png
Binary files differ
diff --git a/examples/models/resources/plane.png b/examples/models/resources/plane.png
index 9f28ddb0..58951ea3 100644
--- a/examples/models/resources/plane.png
+++ b/examples/models/resources/plane.png
Binary files differ
diff --git a/examples/models/resources/shaders/pbr.vs b/examples/models/resources/shaders/pbr.vs
index e852ac1a..885cb199 100644
--- a/examples/models/resources/shaders/pbr.vs
+++ b/examples/models/resources/shaders/pbr.vs
@@ -12,7 +12,7 @@
in vec3 vertexPosition;
in vec2 vertexTexCoord;
in vec3 vertexNormal;
-in vec3 vertexTangent;
+in vec4 vertexTangent;
// Input uniform values
uniform mat4 mvp;
@@ -28,7 +28,7 @@ out vec3 fragBinormal;
void main()
{
// Calculate binormal from vertex normal and tangent
- vec3 vertexBinormal = cross(vertexNormal, vertexTangent);
+ vec3 vertexBinormal = cross(vertexNormal, vec3(vertexTangent));
// Calculate fragment normal based on normal transformations
mat3 normalMatrix = transpose(inverse(mat3(mMatrix)));
@@ -39,7 +39,7 @@ void main()
// Send vertex attributes to fragment shader
fragTexCoord = vertexTexCoord;
fragNormal = normalize(normalMatrix*vertexNormal);
- fragTangent = normalize(normalMatrix*vertexTangent);
+ fragTangent = normalize(normalMatrix*vec3(vertexTangent));
fragTangent = normalize(fragTangent - dot(fragTangent, fragNormal)*fragNormal);
fragBinormal = normalize(normalMatrix*vertexBinormal);
fragBinormal = cross(fragNormal, fragTangent);
diff --git a/examples/others/audio_standalone.c b/examples/others/audio_standalone.c
index 6d7fe1f0..97c3fd0d 100644
--- a/examples/others/audio_standalone.c
+++ b/examples/others/audio_standalone.c
@@ -6,16 +6,17 @@
*
* [audio] module requires some external libs:
* OpenAL Soft - Audio device management lib (http://kcat.strangesoft.net/openal.html)
-* stb_vorbis - Ogg audio files loading (http://www.nothings.org/stb_vorbis/)
-* jar_xm - XM module file loading
-* jar_mod - MOD audio file loading
+* stb_vorbis - Ogg audio files loading (http://www.nothings.org/stb_vorbis/)
+* jar_xm - XM module file loading
+* jar_mod - MOD audio file loading
+* dr_flac - FLAC audio file loading
*
* Compile audio module using:
* gcc -c audio.c stb_vorbis.c -Wall -std=c99 -DAUDIO_STANDALONE -DAL_LIBTYPE_STATIC
*
* Compile example using:
* gcc -o audio_standalone.exe audio_standalone.c audio.o stb_vorbis.o -lopenal32 -lwinmm /
-* -Wall -std=c99 -Wl,-allow-multiple-definition
+* -s -Wall -std=c99 -Wl,-allow-multiple-definition
*
* 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)
@@ -25,14 +26,11 @@
********************************************************************************************/
#include <stdio.h>
+#include "audio.h"
#if defined(_WIN32)
#include <conio.h> // Windows only, no stardard library
-#endif
-
-#include "audio.h"
-
-#if defined(__linux__)
+#else
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
diff --git a/examples/others/resources/shaders/glsl100/standard.vs b/examples/others/resources/shaders/glsl100/standard.vs
index 49c5a3eb..2b958938 100644
--- a/examples/others/resources/shaders/glsl100/standard.vs
+++ b/examples/others/resources/shaders/glsl100/standard.vs
@@ -10,7 +10,7 @@ varying vec2 fragTexCoord;
varying vec4 fragColor;
varying vec3 fragNormal;
-uniform mat4 mvpMatrix;
+uniform mat4 mvp;
void main()
{
@@ -19,5 +19,5 @@ void main()
fragColor = vertexColor;
fragNormal = vertexNormal;
- gl_Position = mvpMatrix*vec4(vertexPosition, 1.0);
+ gl_Position = mvp*vec4(vertexPosition, 1.0);
} \ No newline at end of file
diff --git a/examples/others/resources/shaders/glsl330/standard.vs b/examples/others/resources/shaders/glsl330/standard.vs
index fc0a5ff4..7fbdbf5e 100644
--- a/examples/others/resources/shaders/glsl330/standard.vs
+++ b/examples/others/resources/shaders/glsl330/standard.vs
@@ -10,7 +10,7 @@ out vec2 fragTexCoord;
out vec4 fragColor;
out vec3 fragNormal;
-uniform mat4 mvpMatrix;
+uniform mat4 mvp;
void main()
{
@@ -19,5 +19,5 @@ void main()
fragColor = vertexColor;
fragNormal = vertexNormal;
- gl_Position = mvpMatrix*vec4(vertexPosition, 1.0);
+ gl_Position = mvp*vec4(vertexPosition, 1.0);
} \ No newline at end of file
diff --git a/examples/shaders/resources/shaders/glsl120/base.fs b/examples/shaders/resources/shaders/glsl120/base.fs
new file mode 100644
index 00000000..18799f95
--- /dev/null
+++ b/examples/shaders/resources/shaders/glsl120/base.fs
@@ -0,0 +1,22 @@
+#version 120
+
+// Input vertex attributes (from vertex shader)
+varying vec2 fragTexCoord;
+varying vec4 fragColor;
+
+// Input uniform values
+uniform sampler2D texture0;
+uniform vec4 colDiffuse;
+
+// NOTE: Add here your custom variables
+uniform vec2 resolution = vec2(800, 450);
+
+void main()
+{
+ // Texel color fetching from texture sampler
+ vec4 texelColor = texture2D(texture0, fragTexCoord);
+
+ // NOTE: Implement here your fragment shader code
+
+ gl_FragColor = texelColor*colDiffuse;
+} \ No newline at end of file
diff --git a/examples/shaders/resources/shaders/glsl120/base.vs b/examples/shaders/resources/shaders/glsl120/base.vs
new file mode 100644
index 00000000..674153d8
--- /dev/null
+++ b/examples/shaders/resources/shaders/glsl120/base.vs
@@ -0,0 +1,26 @@
+#version 120
+
+// Input vertex attributes
+attribute vec3 vertexPosition;
+attribute vec2 vertexTexCoord;
+attribute vec3 vertexNormal;
+attribute vec4 vertexColor;
+
+// Input uniform values
+uniform mat4 mvp;
+
+// Output vertex attributes (to fragment shader)
+varying vec2 fragTexCoord;
+varying vec4 fragColor;
+
+// NOTE: Add here your custom variables
+
+void main()
+{
+ // Send vertex attributes to fragment shader
+ fragTexCoord = vertexTexCoord;
+ fragColor = vertexColor;
+
+ // Calculate final vertex position
+ gl_Position = mvp*vec4(vertexPosition, 1.0);
+} \ No newline at end of file
diff --git a/examples/shaders/resources/shaders/glsl120/bloom.fs b/examples/shaders/resources/shaders/glsl120/bloom.fs
new file mode 100644
index 00000000..c28836b0
--- /dev/null
+++ b/examples/shaders/resources/shaders/glsl120/bloom.fs
@@ -0,0 +1,37 @@
+#version 120
+
+// Input vertex attributes (from vertex shader)
+varying vec2 fragTexCoord;
+varying vec4 fragColor;
+
+// Input uniform values
+uniform sampler2D texture0;
+uniform vec4 colDiffuse;
+
+// NOTE: Add here your custom variables
+
+const vec2 size = vec2(800, 450); // render size
+const float samples = 5.0; // pixels per axis; higher = bigger glow, worse performance
+const float quality = 2.5; // lower = smaller glow, better quality
+
+void main()
+{
+ vec4 sum = vec4(0);
+ vec2 sizeFactor = vec2(1)/size*quality;
+
+ // Texel color fetching from texture sampler
+ vec4 source = texture2D(texture0, fragTexCoord);
+
+ const int range = 2; // should be = (samples - 1)/2;
+
+ for (int x = -range; x <= range; x++)
+ {
+ for (int y = -range; y <= range; y++)
+ {
+ sum += texture2D(texture0, fragTexCoord + vec2(x, y)*sizeFactor);
+ }
+ }
+
+ // Calculate final fragment color
+ gl_FragColor = ((sum/(samples*samples)) + source)*colDiffuse;
+} \ No newline at end of file
diff --git a/examples/shaders/resources/shaders/glsl120/blur.fs b/examples/shaders/resources/shaders/glsl120/blur.fs
new file mode 100644
index 00000000..99cddfc9
--- /dev/null
+++ b/examples/shaders/resources/shaders/glsl120/blur.fs
@@ -0,0 +1,32 @@
+#version 120
+
+// Input vertex attributes (from vertex shader)
+varying vec2 fragTexCoord;
+varying vec4 fragColor;
+
+// Input uniform values
+uniform sampler2D texture0;
+uniform vec4 colDiffuse;
+
+// NOTE: Add here your custom variables
+
+// NOTE: Render size values must be passed from code
+const float renderWidth = 800.0;
+const float renderHeight = 450.0;
+
+vec3 offset = vec3(0.0, 1.3846153846, 3.2307692308);
+vec3 weight = vec3(0.2270270270, 0.3162162162, 0.0702702703);
+
+void main()
+{
+ // Texel color fetching from texture sampler
+ vec3 tc = texture2D(texture0, fragTexCoord).rgb*weight.x;
+
+ tc += texture2D(texture0, fragTexCoord + vec2(offset.y)/renderWidth, 0.0).rgb*weight.y;
+ tc += texture2D(texture0, fragTexCoord - vec2(offset.y)/renderWidth, 0.0).rgb*weight.y;
+
+ tc += texture2D(texture0, fragTexCoord + vec2(offset.z)/renderWidth, 0.0).rgb*weight.z;
+ tc += texture2D(texture0, fragTexCoord - vec2(offset.z)/renderWidth, 0.0).rgb*weight.z;
+
+ gl_FragColor = vec4(tc, 1.0);
+} \ No newline at end of file
diff --git a/examples/shaders/resources/shaders/glsl120/cross_hatching.fs b/examples/shaders/resources/shaders/glsl120/cross_hatching.fs
new file mode 100644
index 00000000..46514120
--- /dev/null
+++ b/examples/shaders/resources/shaders/glsl120/cross_hatching.fs
@@ -0,0 +1,45 @@
+# version 120
+
+// Input vertex attributes (from vertex shader)
+varying vec2 fragTexCoord;
+varying vec4 fragColor;
+
+// Input uniform values
+uniform sampler2D texture0;
+uniform vec4 colDiffuse;
+
+// NOTE: Add here your custom variables
+
+float hatchOffsetY = 5.0;
+float lumThreshold01 = 0.9;
+float lumThreshold02 = 0.7;
+float lumThreshold03 = 0.5;
+float lumThreshold04 = 0.3;
+
+void main()
+{
+ vec3 tc = vec3(1.0, 1.0, 1.0);
+ float lum = length(texture2D(texture0, fragTexCoord).rgb);
+
+ if (lum < lumThreshold01)
+ {
+ if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0);
+ }
+
+ if (lum < lumThreshold02)
+ {
+ if (mod(gl_FragCoord .x - gl_FragCoord .y, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0);
+ }
+
+ if (lum < lumThreshold03)
+ {
+ if (mod(gl_FragCoord .x + gl_FragCoord .y - hatchOffsetY, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0);
+ }
+
+ if (lum < lumThreshold04)
+ {
+ if (mod(gl_FragCoord .x - gl_FragCoord .y - hatchOffsetY, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0);
+ }
+
+ gl_FragColor = vec4(tc, 1.0);
+} \ No newline at end of file
diff --git a/examples/shaders/resources/shaders/glsl120/cross_stitching.fs b/examples/shaders/resources/shaders/glsl120/cross_stitching.fs
new file mode 100644
index 00000000..dee4617e
--- /dev/null
+++ b/examples/shaders/resources/shaders/glsl120/cross_stitching.fs
@@ -0,0 +1,55 @@
+# version 120
+
+// Input vertex attributes (from vertex shader)
+varying vec2 fragTexCoord;
+varying vec4 fragColor;
+
+// Input uniform values
+uniform sampler2D texture0;
+uniform vec4 colDiffuse;
+
+// NOTE: Add here your custom variables
+
+// NOTE: Render size values must be passed from code
+const float renderWidth = 800.0;
+const float renderHeight = 450.0;
+
+float stitchingSize = 6.0;
+int invert = 0;
+
+vec4 PostFX(sampler2D tex, vec2 uv)
+{
+ vec4 c = vec4(0.0);
+ float size = stitchingSize;
+ vec2 cPos = uv * vec2(renderWidth, renderHeight);
+ vec2 tlPos = floor(cPos / vec2(size, size));
+ tlPos *= size;
+
+ int remX = int(mod(cPos.x, size));
+ int remY = int(mod(cPos.y, size));
+
+ if (remX == 0 && remY == 0) tlPos = cPos;
+
+ vec2 blPos = tlPos;
+ blPos.y += (size - 1.0);
+
+ if ((remX == remY) || (((int(cPos.x) - int(blPos.x)) == (int(blPos.y) - int(cPos.y)))))
+ {
+ if (invert == 1) c = vec4(0.2, 0.15, 0.05, 1.0);
+ else c = texture2D(tex, tlPos * vec2(1.0/renderWidth, 1.0/renderHeight)) * 1.4;
+ }
+ else
+ {
+ if (invert == 1) c = texture2D(tex, tlPos * vec2(1.0/renderWidth, 1.0/renderHeight)) * 1.4;
+ else c = vec4(0.0, 0.0, 0.0, 1.0);
+ }
+
+ return c;
+}
+
+void main()
+{
+ vec3 tc = PostFX(texture0, fragTexCoord).rgb;
+
+ gl_FragColor = vec4(tc, 1.0);
+} \ No newline at end of file
diff --git a/examples/shaders/resources/shaders/glsl120/distortion.fs b/examples/shaders/resources/shaders/glsl120/distortion.fs
new file mode 100644
index 00000000..f9d7f1e5
--- /dev/null
+++ b/examples/shaders/resources/shaders/glsl120/distortion.fs
@@ -0,0 +1,52 @@
+#version 120
+
+// Input vertex attributes (from vertex shader)
+varying vec2 fragTexCoord;
+
+// Input uniform values
+uniform sampler2D texture0;
+
+// NOTE: Default parameters for Oculus Rift DK2 device
+const vec2 LeftLensCenter = vec2(0.2863248, 0.5);
+const vec2 RightLensCenter = vec2(0.7136753, 0.5);
+const vec2 LeftScreenCenter = vec2(0.25, 0.5);
+const vec2 RightScreenCenter = vec2(0.75, 0.5);
+const vec2 Scale = vec2(0.25, 0.45);
+const vec2 ScaleIn = vec2(4.0, 2.5);
+const vec4 HmdWarpParam = vec4(1.0, 0.22, 0.24, 0.0);
+const vec4 ChromaAbParam = vec4(0.996, -0.004, 1.014, 0.0);
+
+void main()
+{
+ // The following two variables need to be set per eye
+ vec2 LensCenter = fragTexCoord.x < 0.5 ? LeftLensCenter : RightLensCenter;
+ vec2 ScreenCenter = fragTexCoord.x < 0.5 ? LeftScreenCenter : RightScreenCenter;
+
+ // Scales input texture coordinates for distortion: vec2 HmdWarp(vec2 fragTexCoord, vec2 LensCenter)
+ vec2 theta = (fragTexCoord - LensCenter)*ScaleIn; // Scales to [-1, 1]
+ float rSq = theta.x*theta.x + theta.y*theta.y;
+ vec2 theta1 = theta*(HmdWarpParam.x + HmdWarpParam.y*rSq + HmdWarpParam.z*rSq*rSq + HmdWarpParam.w*rSq*rSq*rSq);
+ //vec2 tc = LensCenter + Scale*theta1;
+
+ // Detect whether blue texture coordinates are out of range since these will scaled out the furthest
+ vec2 thetaBlue = theta1*(ChromaAbParam.z + ChromaAbParam.w*rSq);
+ vec2 tcBlue = LensCenter + Scale*thetaBlue;
+
+ if (any(bvec2(clamp(tcBlue, ScreenCenter - vec2(0.25, 0.5), ScreenCenter + vec2(0.25, 0.5)) - tcBlue))) gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
+ else
+ {
+ // Do blue texture lookup
+ float blue = texture2D(texture0, tcBlue).b;
+
+ // Do green lookup (no scaling)
+ vec2 tcGreen = LensCenter + Scale*theta1;
+ float green = texture2D(texture0, tcGreen).g;
+
+ // Do red scale and lookup
+ vec2 thetaRed = theta1*(ChromaAbParam.x + ChromaAbParam.y*rSq);
+ vec2 tcRed = LensCenter + Scale*thetaRed;
+ float red = texture2D(texture0, tcRed).r;
+
+ gl_FragColor = vec4(red, green, blue, 1.0);
+ }
+}
diff --git a/examples/shaders/resources/shaders/glsl120/dream_vision.fs b/examples/shaders/resources/shaders/glsl120/dream_vision.fs
new file mode 100644
index 00000000..4ca2a863
--- /dev/null
+++ b/examples/shaders/resources/shaders/glsl120/dream_vision.fs
@@ -0,0 +1,35 @@
+#version 120
+
+// Input vertex attributes (from vertex shader)
+varying vec2 fragTexCoord;
+varying vec4 fragColor;
+
+// Input uniform values
+uniform sampler2D texture0;
+uniform vec4 colDiffuse;
+
+// NOTE: Add here your custom variables
+
+void main()
+{
+ vec4 color = texture2D(texture0, fragTexCoord);
+
+ color += texture2D(texture0, fragTexCoord + 0.001);
+ color += texture2D(texture0, fragTexCoord + 0.003);
+ color += texture2D(texture0, fragTexCoord + 0.005);
+ color += texture2D(texture0, fragTexCoord + 0.007);
+ color += texture2D(texture0, fragTexCoord + 0.009);
+ color += texture2D(texture0, fragTexCoord + 0.011);
+
+ color += texture2D(texture0, fragTexCoord - 0.001);
+ color += texture2D(texture0, fragTexCoord - 0.003);
+ color += texture2D(texture0, fragTexCoord - 0.005);
+ color += texture2D(texture0, fragTexCoord - 0.007);
+ color += texture2D(texture0, fragTexCoord - 0.009);
+ color += texture2D(texture0, fragTexCoord - 0.011);
+
+ color.rgb = vec3((color.r + color.g + color.b)/3.0);
+ color = color/9.5;
+
+ gl_FragColor = color;
+} \ No newline at end of file
diff --git a/examples/shaders/resources/shaders/glsl120/fisheye.fs b/examples/shaders/resources/shaders/glsl120/fisheye.fs
new file mode 100644
index 00000000..6f376ba3
--- /dev/null
+++ b/examples/shaders/resources/shaders/glsl120/fisheye.fs
@@ -0,0 +1,41 @@
+#version 120
+
+// Input vertex attributes (from vertex shader)
+varying vec2 fragTexCoord;
+varying vec4 fragColor;
+
+// Input uniform values
+uniform sampler2D texture0;
+uniform vec4 colDiffuse;
+
+// NOTE: Add here your custom variables
+
+const float PI = 3.1415926535;
+
+void main()
+{
+ float aperture = 178.0;
+ float apertureHalf = 0.5 * aperture * (PI / 180.0);
+ float maxFactor = sin(apertureHalf);
+
+ vec2 uv = vec2(0.0);
+ vec2 xy = 2.0 * fragTexCoord.xy - 1.0;
+ float d = length(xy);
+
+ if (d < (2.0 - maxFactor))
+ {
+ d = length(xy * maxFactor);
+ float z = sqrt(1.0 - d * d);
+ float r = atan(d, z) / PI;
+ float phi = atan(xy.y, xy.x);
+
+ uv.x = r * cos(phi) + 0.5;
+ uv.y = r * sin(phi) + 0.5;
+ }
+ else
+ {
+ uv = fragTexCoord.xy;
+ }
+
+ gl_FragColor = texture2D(texture0, uv);
+} \ No newline at end of file
diff --git a/examples/shaders/resources/shaders/glsl120/grayscale.fs b/examples/shaders/resources/shaders/glsl120/grayscale.fs
new file mode 100644
index 00000000..4de60d22
--- /dev/null
+++ b/examples/shaders/resources/shaders/glsl120/grayscale.fs
@@ -0,0 +1,23 @@
+#version 120
+
+// Input vertex attributes (from vertex shader)
+varying vec2 fragTexCoord;
+varying vec4 fragColor;
+
+// Input uniform values
+uniform sampler2D texture0;
+uniform vec4 colDiffuse;
+
+// NOTE: Add here your custom variables
+
+void main()
+{
+ // Texel color fetching from texture sampler
+ vec4 texelColor = texture2D(texture0, fragTexCoord)*colDiffuse*fragColor;
+
+ // Convert texel color to grayscale using NTSC conversion weights
+ float gray = dot(texelColor.rgb, vec3(0.299, 0.587, 0.114));
+
+ // Calculate final fragment color
+ gl_FragColor = vec4(gray, gray, gray, texelColor.a);
+} \ No newline at end of file
diff --git a/examples/shaders/resources/shaders/glsl120/pixelizer.fs b/examples/shaders/resources/shaders/glsl120/pixelizer.fs
new file mode 100644
index 00000000..6f741faf
--- /dev/null
+++ b/examples/shaders/resources/shaders/glsl120/pixelizer.fs
@@ -0,0 +1,30 @@
+#version 120
+
+// Input vertex attributes (from vertex shader)
+varying vec2 fragTexCoord;
+varying vec4 fragColor;
+
+// Input uniform values
+uniform sampler2D texture0;
+uniform vec4 colDiffuse;
+
+// NOTE: Add here your custom variables
+
+// NOTE: Render size values must be passed from code
+const float renderWidth = 800.0;
+const float renderHeight = 450.0;
+
+float pixelWidth = 5.0;
+float pixelHeight = 5.0;
+
+void main()
+{
+ float dx = pixelWidth*(1.0/renderWidth);
+ float dy = pixelHeight*(1.0/renderHeight);
+
+ vec2 coord = vec2(dx*floor(fragTexCoord.x/dx), dy*floor(fragTexCoord.y/dy));
+
+ vec3 tc = texture2D(texture0, coord).rgb;
+
+ gl_FragColor = vec4(tc, 1.0);
+} \ No newline at end of file
diff --git a/examples/shaders/resources/shaders/glsl120/posterization.fs b/examples/shaders/resources/shaders/glsl120/posterization.fs
new file mode 100644
index 00000000..475b93a1
--- /dev/null
+++ b/examples/shaders/resources/shaders/glsl120/posterization.fs
@@ -0,0 +1,27 @@
+#version 120
+
+// Input vertex attributes (from vertex shader)
+varying vec2 fragTexCoord;
+varying vec4 fragColor;
+
+// Input uniform values
+uniform sampler2D texture0;
+uniform vec4 colDiffuse;
+
+// NOTE: Add here your custom variables
+
+float gamma = 0.6;
+float numColors = 8.0;
+
+void main()
+{
+ vec3 color = texture2D(texture0, fragTexCoord.xy).rgb;
+
+ color = pow(color, vec3(gamma, gamma, gamma));
+ color = color*numColors;
+ color = floor(color);
+ color = color/numColors;
+ color = pow(color, vec3(1.0/gamma));
+
+ gl_FragColor = vec4(color, 1.0);
+} \ No newline at end of file
diff --git a/examples/shaders/resources/shaders/glsl120/predator.fs b/examples/shaders/resources/shaders/glsl120/predator.fs
new file mode 100644
index 00000000..2999cc8d
--- /dev/null
+++ b/examples/shaders/resources/shaders/glsl120/predator.fs
@@ -0,0 +1,29 @@
+#version 120
+
+// Input vertex attributes (from vertex shader)
+varying vec2 fragTexCoord;
+varying vec4 fragColor;
+
+// Input uniform values
+uniform sampler2D texture0;
+uniform vec4 colDiffuse;
+
+// NOTE: Add here your custom variables
+
+void main()
+{
+ vec3 color = texture2D(texture0, fragTexCoord).rgb;
+ vec3 colors[3];
+ colors[0] = vec3(0.0, 0.0, 1.0);
+ colors[1] = vec3(1.0, 1.0, 0.0);
+ colors[2] = vec3(1.0, 0.0, 0.0);
+
+ float lum = (color.r + color.g + color.b)/3.0;
+
+ vec3 tc = vec3(0.0, 0.0, 0.0);
+
+ if (lum < 0.5) tc = mix(colors[0], colors[1], lum/0.5);
+ else tc = mix(colors[1], colors[2], (lum - 0.5)/0.5);
+
+ gl_FragColor = vec4(tc, 1.0);
+} \ No newline at end of file
diff --git a/examples/shaders/resources/shaders/glsl120/scanlines.fs b/examples/shaders/resources/shaders/glsl120/scanlines.fs
new file mode 100644
index 00000000..929c79eb
--- /dev/null
+++ b/examples/shaders/resources/shaders/glsl120/scanlines.fs
@@ -0,0 +1,42 @@
+#version 120
+
+// Input vertex attributes (from vertex shader)
+varying vec2 fragTexCoord;
+varying vec4 fragColor;
+
+// Input uniform values
+uniform sampler2D texture0;
+uniform vec4 colDiffuse;
+
+// NOTE: Add here your custom variables
+
+float offset = 0.0;
+float frequency = 450.0/3.0;
+
+uniform float time;
+
+void main()
+{
+/*
+ // Scanlines method 1
+ float tval = 0; //time
+ vec2 uv = 0.5 + (fragTexCoord - 0.5)*(0.9 + 0.01*sin(0.5*tval));
+
+ vec4 color = texture2D(texture0, fragTexCoord);
+
+ color = clamp(color*0.5 + 0.5*color*color*1.2, 0.0, 1.0);
+ color *= 0.5 + 0.5*16.0*uv.x*uv.y*(1.0 - uv.x)*(1.0 - uv.y);
+ color *= vec4(0.8, 1.0, 0.7, 1);
+ color *= 0.9 + 0.1*sin(10.0*tval + uv.y*1000.0);
+ color *= 0.97 + 0.03*sin(110.0*tval);
+
+ fragColor = color;
+*/
+ // Scanlines method 2
+ float globalPos = (fragTexCoord.y + offset) * frequency;
+ float wavePos = cos((fract(globalPos) - 0.5)*3.14);
+
+ vec4 color = texture2D(texture0, fragTexCoord);
+
+ gl_FragColor = mix(vec4(0.0, 0.3, 0.0, 0.0), color, wavePos);
+} \ No newline at end of file
diff --git a/examples/shaders/resources/shaders/glsl120/sobel.fs b/examples/shaders/resources/shaders/glsl120/sobel.fs
new file mode 100644
index 00000000..a3f3f2bf
--- /dev/null
+++ b/examples/shaders/resources/shaders/glsl120/sobel.fs
@@ -0,0 +1,38 @@
+#version 120
+
+// Input vertex attributes (from vertex shader)
+varying vec2 fragTexCoord;
+varying vec4 fragColor;
+
+// Input uniform values
+uniform sampler2D texture0;
+uniform vec4 colDiffuse;
+
+// NOTE: Add here your custom variables
+vec2 resolution = vec2(800.0, 450.0);
+
+void main()
+{
+ float x = 1.0/resolution.x;
+ float y = 1.0/resolution.y;
+
+ vec4 horizEdge = vec4(0.0);
+ horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0;
+ horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y ))*2.0;
+ horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0;
+ horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0;
+ horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y ))*2.0;
+ horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y + y))*1.0;
+
+ vec4 vertEdge = vec4(0.0);
+ vertEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0;
+ vertEdge -= texture2D(texture0, vec2(fragTexCoord.x , fragTexCoord.y - y))*2.0;
+ vertEdge -= texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0;
+ vertEdge += texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0;
+ vertEdge += texture2D(texture0, vec2(fragTexCoord.x , fragTexCoord.y + y))*2.0;
+ vertEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y + y))*1.0;
+
+ vec3 edge = sqrt((horizEdge.rgb*horizEdge.rgb) + (vertEdge.rgb*vertEdge.rgb));
+
+ gl_FragColor = vec4(edge, texture2D(texture0, fragTexCoord).a);
+} \ No newline at end of file
diff --git a/examples/shaders/resources/shaders/glsl120/swirl.fs b/examples/shaders/resources/shaders/glsl120/swirl.fs
new file mode 100644
index 00000000..0618e013
--- /dev/null
+++ b/examples/shaders/resources/shaders/glsl120/swirl.fs
@@ -0,0 +1,44 @@
+#version 120
+
+// Input vertex attributes (from vertex shader)
+varying vec2 fragTexCoord;
+varying vec4 fragColor;
+
+// Input uniform values
+uniform sampler2D texture0;
+uniform vec4 colDiffuse;
+
+// NOTE: Add here your custom variables
+
+// NOTE: Render size values should be passed from code
+const float renderWidth = 800;
+const float renderHeight = 450;
+
+float radius = 250.0;
+float angle = 0.8;
+
+uniform vec2 center;
+
+void main()
+{
+ vec2 texSize = vec2(renderWidth, renderHeight);
+ vec2 tc = fragTexCoord*texSize;
+ tc -= center;
+
+ float dist = length(tc);
+
+ if (dist < radius)
+ {
+ float percent = (radius - dist)/radius;
+ float theta = percent*percent*angle*8.0;
+ float s = sin(theta);
+ float c = cos(theta);
+
+ tc = vec2(dot(tc, vec2(c, -s)), dot(tc, vec2(s, c)));
+ }
+
+ tc += center;
+ vec4 color = texture2D(texture0, tc/texSize)*colDiffuse*fragColor;;
+
+ gl_FragColor = vec4(color.rgb, 1.0);;
+} \ No newline at end of file
diff --git a/examples/shaders/shaders_postprocessing.c b/examples/shaders/shaders_postprocessing.c
index ae77a723..b8b5f6ae 100644
--- a/examples/shaders/shaders_postprocessing.c
+++ b/examples/shaders/shaders_postprocessing.c
@@ -20,10 +20,8 @@
#if defined(PLATFORM_DESKTOP)
#define GLSL_VERSION 330
- #define DEFAULT_VERTEX_SHADER "resources/shaders/glsl330/base.vs"
#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
#define GLSL_VERSION 100
- #define DEFAULT_VERTEX_SHADER "resources/shaders/glsl100/base.vs"
#endif
#define MAX_POSTPRO_SHADERS 12
@@ -76,7 +74,7 @@ int main()
Model dwarf = LoadModel("resources/model/dwarf.obj"); // Load OBJ model
Texture2D texture = LoadTexture("resources/model/dwarf_diffuse.png"); // Load model texture (diffuse map)
- dwarf.material.maps[MAP_DIFFUSE].texture = texture; // Set dwarf model diffuse texture
+ dwarf.material.maps[MAP_DIFFUSE].texture = texture; // Set dwarf model diffuse texture
Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position
@@ -85,18 +83,19 @@ int main()
// NOTE 2: We load the correct shader depending on GLSL version
Shader shaders[MAX_POSTPRO_SHADERS];
- shaders[FX_GRAYSCALE] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/grayscale.fs", GLSL_VERSION));
- shaders[FX_POSTERIZATION] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/posterization.fs", GLSL_VERSION));
- shaders[FX_DREAM_VISION] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/dream_vision.fs", GLSL_VERSION));
- shaders[FX_PIXELIZER] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/pixelizer.fs", GLSL_VERSION));
- shaders[FX_CROSS_HATCHING] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/cross_hatching.fs", GLSL_VERSION));
- shaders[FX_CROSS_STITCHING] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/cross_stitching.fs", GLSL_VERSION));
- shaders[FX_PREDATOR_VIEW] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/predator.fs", GLSL_VERSION));
- shaders[FX_SCANLINES] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/scanlines.fs", GLSL_VERSION));
- shaders[FX_FISHEYE] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/fisheye.fs", GLSL_VERSION));
- shaders[FX_SOBEL] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/sobel.fs", GLSL_VERSION));
- shaders[FX_BLOOM] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/bloom.fs", GLSL_VERSION));
- shaders[FX_BLUR] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/blur.fs", GLSL_VERSION));
+ // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader
+ shaders[FX_GRAYSCALE] = LoadShader(0, FormatText("resources/shaders/glsl%i/grayscale.fs", GLSL_VERSION));
+ shaders[FX_POSTERIZATION] = LoadShader(0, FormatText("resources/shaders/glsl%i/posterization.fs", GLSL_VERSION));
+ shaders[FX_DREAM_VISION] = LoadShader(0, FormatText("resources/shaders/glsl%i/dream_vision.fs", GLSL_VERSION));
+ shaders[FX_PIXELIZER] = LoadShader(0, FormatText("resources/shaders/glsl%i/pixelizer.fs", GLSL_VERSION));
+ shaders[FX_CROSS_HATCHING] = LoadShader(0, FormatText("resources/shaders/glsl%i/cross_hatching.fs", GLSL_VERSION));
+ shaders[FX_CROSS_STITCHING] = LoadShader(0, FormatText("resources/shaders/glsl%i/cross_stitching.fs", GLSL_VERSION));
+ shaders[FX_PREDATOR_VIEW] = LoadShader(0, FormatText("resources/shaders/glsl%i/predator.fs", GLSL_VERSION));
+ shaders[FX_SCANLINES] = LoadShader(0, FormatText("resources/shaders/glsl%i/scanlines.fs", GLSL_VERSION));
+ shaders[FX_FISHEYE] = LoadShader(0, FormatText("resources/shaders/glsl%i/fisheye.fs", GLSL_VERSION));
+ shaders[FX_SOBEL] = LoadShader(0, FormatText("resources/shaders/glsl%i/sobel.fs", GLSL_VERSION));
+ shaders[FX_BLOOM] = LoadShader(0, FormatText("resources/shaders/glsl%i/bloom.fs", GLSL_VERSION));
+ shaders[FX_BLUR] = LoadShader(0, FormatText("resources/shaders/glsl%i/blur.fs", GLSL_VERSION));
int currentShader = FX_GRAYSCALE;
@@ -177,4 +176,4 @@ int main()
//--------------------------------------------------------------------------------------
return 0;
-} \ No newline at end of file
+}
diff --git a/examples/shaders/shaders_shapes_textures.c b/examples/shaders/shaders_shapes_textures.c
index 40e99a8f..e8c36a19 100644
--- a/examples/shaders/shaders_shapes_textures.c
+++ b/examples/shaders/shaders_shapes_textures.c
@@ -65,7 +65,7 @@ int main()
DrawText("USING CUSTOM SHADER", 190, 40, 10, RED);
DrawRectangle(250 - 60, 90, 120, 60, RED);
- DrawRectangleGradient(250 - 90, 170, 180, 130, MAROON, GOLD);
+ DrawRectangleGradientH(250 - 90, 170, 180, 130, MAROON, GOLD);
DrawRectangleLines(250 - 40, 320, 80, 60, ORANGE);
// Activate our default shader for next drawings
diff --git a/examples/shapes/shapes_basic_shapes.c b/examples/shapes/shapes_basic_shapes.c
index 6b2719fc..4b7cc261 100644
--- a/examples/shapes/shapes_basic_shapes.c
+++ b/examples/shapes/shapes_basic_shapes.c
@@ -46,7 +46,7 @@ int main()
DrawCircleLines(screenWidth/4, 340, 80, DARKBLUE);
DrawRectangle(screenWidth/4*2 - 60, 100, 120, 60, RED);
- DrawRectangleGradient(screenWidth/4*2 - 90, 170, 180, 130, MAROON, GOLD);
+ DrawRectangleGradientH(screenWidth/4*2 - 90, 170, 180, 130, MAROON, GOLD);
DrawRectangleLines(screenWidth/4*2 - 40, 320, 80, 60, ORANGE);
DrawTriangle((Vector2){screenWidth/4*3, 80},
diff --git a/examples/text/text_input_box.c b/examples/text/text_input_box.c
index 54eebf40..5f8d1c01 100644
--- a/examples/text/text_input_box.c
+++ b/examples/text/text_input_box.c
@@ -52,7 +52,7 @@ int main()
letterCount++;
}
- if (key == KEY_BACKSPACE)
+ if (IsKeyPressed(KEY_BACKSPACE))
{
letterCount--;
name[letterCount] = '\0';
diff --git a/examples/text/text_ttf_loading.c b/examples/text/text_ttf_loading.c
index c9c2fb27..fedfbfb8 100644
--- a/examples/text/text_ttf_loading.c
+++ b/examples/text/text_ttf_loading.c
@@ -32,7 +32,7 @@ int main()
GenTextureMipmaps(&font.texture);
float fontSize = font.baseSize;
- Vector2 fontPosition = { 40, screenHeight/2 + 50 };
+ Vector2 fontPosition = { 40, screenHeight/2 - 50 };
Vector2 textSize;
SetTextureFilter(font.texture, FILTER_POINT);
diff --git a/examples/textures/resources/KAISG.ttf b/examples/textures/resources/KAISG.ttf
new file mode 100644
index 00000000..04478b25
--- /dev/null
+++ b/examples/textures/resources/KAISG.ttf
Binary files differ
diff --git a/examples/textures/resources/custom_jupiter_crash.png b/examples/textures/resources/custom_jupiter_crash.png
new file mode 100644
index 00000000..451b591f
--- /dev/null
+++ b/examples/textures/resources/custom_jupiter_crash.png
Binary files differ
diff --git a/examples/textures/textures_image_drawing.c b/examples/textures/textures_image_drawing.c
index 1c6a1fb9..ac128af9 100644
--- a/examples/textures/textures_image_drawing.c
+++ b/examples/textures/textures_image_drawing.c
@@ -36,6 +36,14 @@ int main()
ImageCrop(&parrots, (Rectangle){ 0, 50, parrots.width, parrots.height - 100 }); // Crop resulting image
UnloadImage(cat); // Unload image from RAM
+
+ // Load custom font for frawing on image
+ SpriteFont font = LoadSpriteFont("resources/custom_jupiter_crash.png");
+
+ // Draw over image using custom font
+ ImageDrawTextEx(&parrots, (Vector2){ 300, 230 }, font, "PARROTS & CAT", font.baseSize, -2, WHITE);
+
+ UnloadSpriteFont(font); // Unload custom spritefont (already drawn used on image)
Texture2D texture = LoadTextureFromImage(parrots); // Image converted to texture, uploaded to GPU memory (VRAM)
UnloadImage(parrots); // Once image has been converted to texture and uploaded to VRAM, it can be unloaded from RAM
diff --git a/examples/textures/textures_image_generation.c b/examples/textures/textures_image_generation.c
index 8f87e689..790c34f1 100644
--- a/examples/textures/textures_image_generation.c
+++ b/examples/textures/textures_image_generation.c
@@ -11,7 +11,7 @@
#include "raylib.h"
-#define TEXTURES_NUM 7 // for now we have 7 generation algorithms
+#define NUM_TEXTURES 7 // Currently we have 7 generation algorithms
int main()
{
@@ -24,13 +24,13 @@ int main()
Image verticalGradient = GenImageGradientV(screenWidth, screenHeight, RED, BLUE);
Image horizontalGradient = GenImageGradientH(screenWidth, screenHeight, RED, BLUE);
- Image radialGradient = GenImageGradientRadial(screenWidth, screenHeight, 0.f, WHITE, BLACK);
+ Image radialGradient = GenImageGradientRadial(screenWidth, screenHeight, 0.0f, WHITE, BLACK);
Image checked = GenImageChecked(screenWidth, screenHeight, 32, 32, RED, BLUE);
Image whiteNoise = GenImageWhiteNoise(screenWidth, screenHeight, 0.5f);
- Image perlinNoise = GenImagePerlinNoise(screenWidth, screenHeight, 8.f);
+ Image perlinNoise = GenImagePerlinNoise(screenWidth, screenHeight, 50, 50, 4.0f);
Image cellular = GenImageCellular(screenWidth, screenHeight, 32);
- Texture2D textures[TEXTURES_NUM];
+ Texture2D textures[NUM_TEXTURES];
textures[0] = LoadTextureFromImage(verticalGradient);
textures[1] = LoadTextureFromImage(horizontalGradient);
textures[2] = LoadTextureFromImage(radialGradient);
@@ -38,6 +38,15 @@ int main()
textures[4] = LoadTextureFromImage(whiteNoise);
textures[5] = LoadTextureFromImage(perlinNoise);
textures[6] = LoadTextureFromImage(cellular);
+
+ // Unload image data (CPU RAM)
+ UnloadImage(verticalGradient);
+ UnloadImage(horizontalGradient);
+ UnloadImage(radialGradient);
+ UnloadImage(checked);
+ UnloadImage(whiteNoise);
+ UnloadImage(perlinNoise);
+ UnloadImage(cellular);
int currentTexture = 0;
@@ -51,7 +60,7 @@ int main()
//----------------------------------------------------------------------------------
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
{
- currentTexture = (currentTexture + 1) % TEXTURES_NUM; // cycle between the 5 textures
+ currentTexture = (currentTexture + 1)%NUM_TEXTURES; // Cycle between the textures
}
//----------------------------------------------------------------------------------
@@ -63,24 +72,31 @@ int main()
DrawTexture(textures[currentTexture], 0, 0, WHITE);
+ DrawRectangle(30, 400, 325, 30, Fade(SKYBLUE, 0.5f));
+ DrawRectangleLines(30, 400, 325, 30, Fade(WHITE, 0.5f));
+ DrawText("MOUSE LEFT BUTTON to CYCLE PROCEDURAL TEXTURES", 40, 410, 10, WHITE);
+
+ switch(currentTexture)
+ {
+ case 0: DrawText("VERTICAL GRADIENT", 560, 10, 20, RAYWHITE); break;
+ case 1: DrawText("HORIZONTAL GRADIENT", 540, 10, 20, RAYWHITE); break;
+ case 2: DrawText("RADIAL GRADIENT", 580, 10, 20, LIGHTGRAY); break;
+ case 3: DrawText("CHECKED", 680, 10, 20, RAYWHITE); break;
+ case 4: DrawText("WHITE NOISE", 640, 10, 20, RED); break;
+ case 5: DrawText("PERLIN NOISE", 630, 10, 20, RAYWHITE); break;
+ case 6: DrawText("CELLULAR", 670, 10, 20, RAYWHITE); break;
+ default: break;
+ }
+
EndDrawing();
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
-
- // Unload image data (CPU RAM)
- UnloadImage(verticalGradient);
- UnloadImage(horizontalGradient);
- UnloadImage(radialGradient);
- UnloadImage(checked);
- UnloadImage(whiteNoise);
- UnloadImage(perlinNoise);
- UnloadImage(cellular);
-
+
// Unload textures data (GPU VRAM)
- for (int i = 0; i < TEXTURES_NUM; i++) UnloadTexture(textures[i]);
+ for (int i = 0; i < NUM_TEXTURES; i++) UnloadTexture(textures[i]);
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
diff --git a/examples/textures/textures_image_generation.png b/examples/textures/textures_image_generation.png
index a272b405..398b0462 100644
--- a/examples/textures/textures_image_generation.png
+++ b/examples/textures/textures_image_generation.png
Binary files differ
diff --git a/examples/textures/textures_image_text.c b/examples/textures/textures_image_text.c
new file mode 100644
index 00000000..1d4231f7
--- /dev/null
+++ b/examples/textures/textures_image_text.c
@@ -0,0 +1,83 @@
+/*******************************************************************************************
+*
+* raylib [texture] example - Image text drawing using TTF generated spritefont
+*
+* This example has been created using raylib 1.8 (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;
+
+ InitWindow(screenWidth, screenHeight, "raylib [texture] example - image text drawing");
+
+ // TTF SpriteFont loading with custom generation parameters
+ SpriteFont font = LoadSpriteFontEx("resources/KAISG.ttf", 64, 0, 0);
+
+ Image parrots = LoadImage("resources/parrots.png"); // Load image in CPU memory (RAM)
+
+ // Draw over image using custom font
+ ImageDrawTextEx(&parrots, (Vector2){ 20, 20 }, font, "[Parrots font drawing]", font.baseSize, 0, WHITE);
+
+ Texture2D texture = LoadTextureFromImage(parrots); // Image converted to texture, uploaded to GPU memory (VRAM)
+ UnloadImage(parrots); // Once image has been converted to texture and uploaded to VRAM, it can be unloaded from RAM
+
+ Vector2 position = { screenWidth/2 - texture.width/2, screenHeight/2 - texture.height/2 - 20 };
+
+ bool showFont = false;
+
+ SetTargetFPS(60);
+ //--------------------------------------------------------------------------------------
+
+ // Main game loop
+ while (!WindowShouldClose()) // Detect window close button or ESC key
+ {
+ // Update
+ //----------------------------------------------------------------------------------
+ if (IsKeyDown(KEY_SPACE)) showFont = true;
+ else showFont = false;
+ //----------------------------------------------------------------------------------
+
+ // Draw
+ //----------------------------------------------------------------------------------
+ BeginDrawing();
+
+ ClearBackground(RAYWHITE);
+
+ if (!showFont)
+ {
+ // Draw texture with text already drawn inside
+ DrawTextureV(texture, position, WHITE);
+
+ // Draw text directly using sprite font
+ DrawTextEx(font, "[Parrots font drawing]", (Vector2){ position.x + 20,
+ position.y + 20 + 280 }, font.baseSize, 0, WHITE);
+ }
+ else DrawTexture(font.texture, screenWidth/2 - font.texture.width/2, 50, BLACK);
+
+ DrawText("PRESS SPACE to SEE USED SPRITEFONT ", 290, 420, 10, DARKGRAY);
+
+ EndDrawing();
+ //----------------------------------------------------------------------------------
+ }
+
+ // De-Initialization
+ //--------------------------------------------------------------------------------------
+ UnloadTexture(texture); // Texture unloading
+
+ UnloadSpriteFont(font); // Unload custom spritefont
+
+ CloseWindow(); // Close window and OpenGL context
+ //--------------------------------------------------------------------------------------
+
+ return 0;
+} \ No newline at end of file
diff --git a/examples/textures/textures_image_text.png b/examples/textures/textures_image_text.png
new file mode 100644
index 00000000..dafbabfb
--- /dev/null
+++ b/examples/textures/textures_image_text.png
Binary files differ