Merge branch 'master' of git://github.com/raysan5/raylib
10
.github/workflows/android.yml
vendored
|
|
@ -16,7 +16,7 @@ jobs:
|
||||||
ARCH: ["arm64", "x86_64"]
|
ARCH: ["arm64", "x86_64"]
|
||||||
|
|
||||||
env:
|
env:
|
||||||
RELEASE_NAME: raylib-dev_android_api28_${{ matrix.ARCH }}
|
RELEASE_NAME: raylib-dev_android_api29_${{ matrix.ARCH }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
|
|
@ -24,7 +24,7 @@ jobs:
|
||||||
|
|
||||||
- name: Setup Release Version
|
- name: Setup Release Version
|
||||||
run: |
|
run: |
|
||||||
echo "::set-env name=RELEASE_NAME::raylib-${{ github.event.release.tag_name }}_android_api28_${{ matrix.ARCH }}"
|
echo "RELEASE_NAME=raylib-${{ github.event.release.tag_name }}_android_api29_${{ matrix.ARCH }}" >> $GITHUB_ENV
|
||||||
shell: bash
|
shell: bash
|
||||||
if: github.event_name == 'release' && github.event.action == 'published'
|
if: github.event_name == 'release' && github.event.action == 'published'
|
||||||
|
|
||||||
|
|
@ -38,12 +38,12 @@ jobs:
|
||||||
mkdir lib
|
mkdir lib
|
||||||
cd ../..
|
cd ../..
|
||||||
|
|
||||||
# Generating static + shared library for 64bit arquitectures and API version 28
|
# Generating static + shared library for 64bit arquitectures and API version 29
|
||||||
- name: Build Library
|
- name: Build Library
|
||||||
run: |
|
run: |
|
||||||
cd src
|
cd src
|
||||||
make PLATFORM=PLATFORM_ANDROID ANDROID_ARCH=${{ matrix.ARCH }} ANDROID_API_VERSION=28 ANDROID_NDK="C:\PROGRA~2\Android\android-sdk\ndk-bundle" RAYLIB_LIBTYPE=STATIC RAYLIB_RELEASE_PATH="../build/${{ env.RELEASE_NAME }}/lib"
|
make PLATFORM=PLATFORM_ANDROID ANDROID_ARCH=${{ matrix.ARCH }} ANDROID_API_VERSION=29 ANDROID_NDK="C:\PROGRA~2\Android\android-sdk\ndk-bundle" RAYLIB_LIBTYPE=STATIC RAYLIB_RELEASE_PATH="../build/${{ env.RELEASE_NAME }}/lib"
|
||||||
make PLATFORM=PLATFORM_ANDROID ANDROID_ARCH=${{ matrix.ARCH }} ANDROID_API_VERSION=28 ANDROID_NDK="C:\PROGRA~2\Android\android-sdk\ndk-bundle" RAYLIB_LIBTYPE=SHARED RAYLIB_RELEASE_PATH="../build/${{ env.RELEASE_NAME }}/lib" -B
|
make PLATFORM=PLATFORM_ANDROID ANDROID_ARCH=${{ matrix.ARCH }} ANDROID_API_VERSION=29 ANDROID_NDK="C:\PROGRA~2\Android\android-sdk\ndk-bundle" RAYLIB_LIBTYPE=SHARED RAYLIB_RELEASE_PATH="../build/${{ env.RELEASE_NAME }}/lib" -B
|
||||||
cd ..
|
cd ..
|
||||||
shell: cmd
|
shell: cmd
|
||||||
|
|
||||||
|
|
|
||||||
93
.github/workflows/cmake.yml
vendored
Normal file
|
|
@ -0,0 +1,93 @@
|
||||||
|
name: CMake Builds
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
env:
|
||||||
|
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
|
||||||
|
BUILD_TYPE: Release
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build_windows:
|
||||||
|
name: Windows Build
|
||||||
|
# The CMake configure and build commands are platform agnostic and should work equally
|
||||||
|
# well on Windows or Mac. You can convert this to a matrix build if you need
|
||||||
|
# cross-platform coverage.
|
||||||
|
# See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
|
||||||
|
runs-on: windows-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Create Build Environment
|
||||||
|
# Some projects don't allow in-source building, so create a separate build directory
|
||||||
|
# We'll use this as our working directory for all subsequent commands
|
||||||
|
run: cmake -E make_directory ${{github.workspace}}/build
|
||||||
|
|
||||||
|
- name: Configure CMake
|
||||||
|
# Use a bash shell so we can use the same syntax for environment variable
|
||||||
|
# access regardless of the host operating system
|
||||||
|
shell: powershell
|
||||||
|
working-directory: ${{github.workspace}}/build
|
||||||
|
# Note the current convention is to use the -S and -B options here to specify source
|
||||||
|
# and build directories, but this is only available with CMake 3.13 and higher.
|
||||||
|
# The CMake binaries on the Github Actions machines are (as of this writing) 3.12
|
||||||
|
run: cmake $env:GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$env:BUILD_TYPE -DPLATFORM=Desktop
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
working-directory: ${{github.workspace}}/build
|
||||||
|
shell: powershell
|
||||||
|
# Execute the build. You can specify a specific target with "--target <NAME>"
|
||||||
|
run: cmake --build . --config $env:BUILD_TYPE
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
working-directory: ${{github.workspace}}/build
|
||||||
|
shell: powershell
|
||||||
|
# Execute tests defined by the CMake configuration.
|
||||||
|
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
|
||||||
|
run: ctest -C $env:BUILD_TYPE
|
||||||
|
|
||||||
|
build_linux:
|
||||||
|
name: Linux Build
|
||||||
|
# The CMake configure and build commands are platform agnostic and should work equally
|
||||||
|
# well on Windows or Mac. You can convert this to a matrix build if you need
|
||||||
|
# cross-platform coverage.
|
||||||
|
# See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Create Build Environment
|
||||||
|
# Some projects don't allow in-source building, so create a separate build directory
|
||||||
|
# We'll use this as our working directory for all subsequent commands
|
||||||
|
run: cmake -E make_directory ${{github.workspace}}/build
|
||||||
|
|
||||||
|
- name: Setup Environment
|
||||||
|
run: |
|
||||||
|
sudo apt-get update -qq
|
||||||
|
sudo apt-get install gcc-multilib
|
||||||
|
sudo apt-get install -y --no-install-recommends libglfw3 libglfw3-dev libx11-dev libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libxext-dev libxfixes-dev
|
||||||
|
- name: Configure CMake
|
||||||
|
# Use a bash shell so we can use the same syntax for environment variable
|
||||||
|
# access regardless of the host operating system
|
||||||
|
shell: bash
|
||||||
|
working-directory: ${{github.workspace}}/build
|
||||||
|
# Note the current convention is to use the -S and -B options here to specify source
|
||||||
|
# and build directories, but this is only available with CMake 3.13 and higher.
|
||||||
|
# The CMake binaries on the Github Actions machines are (as of this writing) 3.12
|
||||||
|
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DPLATFORM=Desktop
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
working-directory: ${{github.workspace}}/build
|
||||||
|
shell: bash
|
||||||
|
# Execute the build. You can specify a specific target with "--target <NAME>"
|
||||||
|
run: cmake --build . --config $BUILD_TYPE
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
working-directory: ${{github.workspace}}/build
|
||||||
|
shell: bash
|
||||||
|
# Execute tests defined by the CMake configuration.
|
||||||
|
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
|
||||||
|
run: ctest -C $BUILD_TYPE
|
||||||
2
.github/workflows/linux.yml
vendored
|
|
@ -33,7 +33,7 @@ jobs:
|
||||||
|
|
||||||
- name: Setup Release Version
|
- name: Setup Release Version
|
||||||
run: |
|
run: |
|
||||||
echo "::set-env name=RELEASE_NAME::raylib-${{ github.event.release.tag_name }}_linux_${{ matrix.ARCH_NAME }}"
|
echo "RELEASE_NAME=raylib-${{ github.event.release.tag_name }}_linux_${{ matrix.ARCH_NAME }}" >> $GITHUB_ENV
|
||||||
shell: bash
|
shell: bash
|
||||||
if: github.event_name == 'release' && github.event.action == 'published'
|
if: github.event_name == 'release' && github.event.action == 'published'
|
||||||
|
|
||||||
|
|
|
||||||
2
.github/workflows/macos.yml
vendored
|
|
@ -19,7 +19,7 @@ jobs:
|
||||||
|
|
||||||
- name: Setup Release Version
|
- name: Setup Release Version
|
||||||
run: |
|
run: |
|
||||||
echo "::set-env name=RELEASE_NAME::raylib-${{ github.event.release.tag_name }}_macos"
|
echo "RELEASE_NAME=raylib-${{ github.event.release.tag_name }}_macos" >> $GITHUB_ENV
|
||||||
shell: bash
|
shell: bash
|
||||||
if: github.event_name == 'release' && github.event.action == 'published'
|
if: github.event_name == 'release' && github.event.action == 'published'
|
||||||
|
|
||||||
|
|
|
||||||
4
.github/workflows/webassembly.yml
vendored
|
|
@ -18,14 +18,14 @@ jobs:
|
||||||
uses: actions/checkout@master
|
uses: actions/checkout@master
|
||||||
|
|
||||||
- name: Setup emsdk
|
- name: Setup emsdk
|
||||||
uses: mymindstorm/setup-emsdk@v6
|
uses: mymindstorm/setup-emsdk@v7
|
||||||
with:
|
with:
|
||||||
version: 2.0.0
|
version: 2.0.0
|
||||||
actions-cache-folder: 'emsdk-cache'
|
actions-cache-folder: 'emsdk-cache'
|
||||||
|
|
||||||
- name: Setup Release Version
|
- name: Setup Release Version
|
||||||
run: |
|
run: |
|
||||||
echo "::set-env name=RELEASE_NAME::raylib-${{ github.event.release.tag_name }}_webassembly"
|
echo "RELEASE_NAME=raylib-${{ github.event.release.tag_name }}_webassembly" >> $GITHUB_ENV
|
||||||
shell: bash
|
shell: bash
|
||||||
if: github.event_name == 'release' && github.event.action == 'published'
|
if: github.event_name == 'release' && github.event.action == 'published'
|
||||||
|
|
||||||
|
|
|
||||||
4
.github/workflows/windows.yml
vendored
|
|
@ -45,7 +45,7 @@ jobs:
|
||||||
|
|
||||||
- name: Setup Release Version
|
- name: Setup Release Version
|
||||||
run: |
|
run: |
|
||||||
echo "::set-env name=RELEASE_NAME::raylib-${{ github.event.release.tag_name }}_win${{ matrix.bits }}_${{ matrix.compiler }}"
|
echo "RELEASE_NAME=raylib-${{ github.event.release.tag_name }}_win${{ matrix.bits }}_${{ matrix.compiler }}" >> $GITHUB_ENV
|
||||||
shell: bash
|
shell: bash
|
||||||
if: github.event_name == 'release' && github.event.action == 'published'
|
if: github.event_name == 'release' && github.event.action == 'published'
|
||||||
|
|
||||||
|
|
@ -62,7 +62,7 @@ jobs:
|
||||||
|
|
||||||
# Setup MSBuild.exe path if required
|
# Setup MSBuild.exe path if required
|
||||||
- name: Setup MSBuild
|
- name: Setup MSBuild
|
||||||
uses: microsoft/setup-msbuild@v1.0.1
|
uses: microsoft/setup-msbuild@v1.0.2
|
||||||
if: matrix.compiler == 'msvc16'
|
if: matrix.compiler == 'msvc16'
|
||||||
|
|
||||||
- name: Build Library (MinGW-w64)
|
- name: Build Library (MinGW-w64)
|
||||||
|
|
|
||||||
2
.gitignore
vendored
|
|
@ -82,7 +82,7 @@ DerivedData/
|
||||||
|
|
||||||
# Jetbrains project
|
# Jetbrains project
|
||||||
.idea/
|
.idea/
|
||||||
cmake-build-debug/
|
cmake-build-*/
|
||||||
|
|
||||||
# CMake stuff
|
# CMake stuff
|
||||||
CMakeCache.txt
|
CMakeCache.txt
|
||||||
|
|
|
||||||
129
.travis.yml
|
|
@ -1,129 +0,0 @@
|
||||||
language: c
|
|
||||||
dist: trusty
|
|
||||||
|
|
||||||
git:
|
|
||||||
depth: 3
|
|
||||||
|
|
||||||
# TODO we could use a 32 bit Docker container for running true 32-bit tests
|
|
||||||
services:
|
|
||||||
- docker
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- os: linux
|
|
||||||
env: ARCH=i386
|
|
||||||
sudo: required
|
|
||||||
- os: linux
|
|
||||||
env: ARCH=amd64 INSTALL_GLFW=YES USE_EXTERNAL_GLFW=OFF
|
|
||||||
sudo: required
|
|
||||||
- os: linux
|
|
||||||
env: ARCH=amd64 INSTALL_GLFW=YES STATIC=OFF RELEASE=NO
|
|
||||||
sudo: required
|
|
||||||
- os: linux
|
|
||||||
env: WAYLAND=ON ARCH=amd64 RELEASE=NO
|
|
||||||
sudo: required
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- libwayland-dev
|
|
||||||
- libxkbcommon-dev
|
|
||||||
- libegl1-mesa-dev
|
|
||||||
- os: osx
|
|
||||||
env: ARCH=universal
|
|
||||||
- os: osx
|
|
||||||
osx_image: xcode9.4
|
|
||||||
env: ARCH=universal SHARED=OFF RELEASE=NO
|
|
||||||
- os: windows
|
|
||||||
compiler: gcc
|
|
||||||
env: ARCH=i386 SHARED=OFF RELEASE=NO
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- if [ -z "$USE_EXTERNAL_GLFW" ]; then export USE_EXTERNAL_GLFW=IF_POSSIBLE; fi
|
|
||||||
- if [ -z "$SHARED" ]; then export SHARED=ON ; fi
|
|
||||||
- if [ -z "$STATIC" ]; then export STATIC=ON ; fi
|
|
||||||
- if [[ "$INSTALL_GLFW" == "YES" && "$USE_EXTERNAL_GLFW" != "OFF" ]]; then
|
|
||||||
export DONT_TEST=1;
|
|
||||||
fi
|
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then
|
|
||||||
sudo apt-get install -y gcc-multilib
|
|
||||||
libasound2-dev:$ARCH
|
|
||||||
libxcursor-dev:$ARCH libxinerama-dev:$ARCH mesa-common-dev:$ARCH
|
|
||||||
libx11-dev:$ARCH libxrandr-dev:$ARCH libxrandr2:$ARCH libxi-dev:$ARCH
|
|
||||||
libgl1-mesa-dev:$ARCH libglu1-mesa-dev:$ARCH;
|
|
||||||
|
|
||||||
if [ "$ARCH" == "i386" ]; then export CMAKE_ARCH_ARGS='-DCMAKE_C_FLAGS=-m32 -DCMAKE_SYSTEM_LIBRARY_PATH=/usr/lib/i386-linux-gnu -DSUPPORT_FILEFORMAT_FLAC=OFF'; fi;
|
|
||||||
|
|
||||||
export RAYLIB_PACKAGE_SUFFIX="-Linux-$ARCH";
|
|
||||||
if [ "$INSTALL_GLFW" == "YES" ]; then
|
|
||||||
pushd src/external/glfw;
|
|
||||||
cmake . -DGLFW_BUILD_DOCS=OFF
|
|
||||||
-DGLFW_BUILD_TESTS=OFF
|
|
||||||
-DGLFW_BUILD_EXAMPLES=OFF
|
|
||||||
-DGLFW_INSTALL=ON
|
|
||||||
-DBUILD_SHARED_LIBS=ON
|
|
||||||
-DGLFW_USE_WAYLAND=$WAYLAND;
|
|
||||||
make;
|
|
||||||
sudo make install;
|
|
||||||
popd;
|
|
||||||
fi;
|
|
||||||
fi
|
|
||||||
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then
|
|
||||||
export RAYLIB_PACKAGE_SUFFIX="-macOS";
|
|
||||||
if [ "$INSTALL_GLFW" == "YES" ]; then brew update; brew install glfw; fi;
|
|
||||||
fi
|
|
||||||
- if [ "$TRAVIS_OS_NAME" == "windows" ]; then
|
|
||||||
export DONT_TEST=1;
|
|
||||||
export RAYLIB_PACKAGE_SUFFIX="-windows";
|
|
||||||
export CMAKE_ARCH_ARGS='-DPLATFORM=Desktop';
|
|
||||||
fi
|
|
||||||
- mkdir build
|
|
||||||
- $RUNNER $CC --version
|
|
||||||
|
|
||||||
script:
|
|
||||||
- cd build
|
|
||||||
- if test -n "$WAYLAND"; then
|
|
||||||
wget https://mirrors.edge.kernel.org/ubuntu/pool/universe/e/extra-cmake-modules/extra-cmake-modules_5.44.0-0ubuntu1_amd64.deb;
|
|
||||||
sudo apt-get clean;
|
|
||||||
sudo apt-get update;
|
|
||||||
sudo apt-get install dpkg;
|
|
||||||
sudo dpkg -i extra-cmake-modules_5.44.0-0ubuntu1_amd64.deb;
|
|
||||||
git clone git://anongit.freedesktop.org/wayland/wayland-protocols;
|
|
||||||
pushd wayland-protocols;
|
|
||||||
git checkout 1.15 && ./autogen.sh --prefix=/usr && make && sudo make install;
|
|
||||||
popd;
|
|
||||||
fi
|
|
||||||
- $RUNNER cmake $CMAKE_ARCH_ARGS
|
|
||||||
-DMACOS_FATLIB=ON
|
|
||||||
-DSTATIC=$STATIC -DSHARED=$SHARED
|
|
||||||
-DBUILD_EXAMPLES=ON
|
|
||||||
-DUSE_EXTERNAL_GLFW=$USE_EXTERNAL_GLFW
|
|
||||||
-DUSE_WAYLAND=$WAYLAND
|
|
||||||
-DINCLUDE_EVERYTHING=ON
|
|
||||||
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON
|
|
||||||
..
|
|
||||||
- $RUNNER cmake --build . --target
|
|
||||||
- if [ "$RELEASE" != "NO" ]; then $RUNNER cmake --build . --target package; fi
|
|
||||||
- if [ -n "$RUNNER" ]; then
|
|
||||||
sudo $RUNNER cmake --build . --target install;
|
|
||||||
else
|
|
||||||
$(which sudo) $RUNNER "$(which cmake)" --build . --target install;
|
|
||||||
fi
|
|
||||||
- if [ ! "$DONT_TEST" ]; then
|
|
||||||
pkg-config --static --libs raylib;
|
|
||||||
nm -g release/libraylib.a | grep glfwGetProcAddress || (echo "libraylib.a doesn't contain GLFW symbols! Aborting..." && false);
|
|
||||||
ctest --output-on-failure;
|
|
||||||
fi
|
|
||||||
|
|
||||||
deploy:
|
|
||||||
provider: releases
|
|
||||||
api_key:
|
|
||||||
secure: LvqUIAN/3dJul+Ra2iK3tSaNG5IwsNMmGIwVMy0DK5IBCxiQPBc9pWGiE30RTBPt6Z+N4BhMEE8DtUl+vnISlMoHWNIIhF2zwC66hs/F7zY7qEITMRSmfiLcqxQysknFOnJB06CATgXcFqlEo9j+t4abrG/f3qcb92J4O2uNz336Au2myTx93Q5MxbyA7KiUuEutFnb2dWiPCY4d+sGeXEfsiD2R7aj/8MaWOkoGdZVrTkI9juMgvpImkjQBArvqdjUMeT3MsRrwgOIq5v2GFV9dOl8k1WzPeT8B2JHh00ed/o1/wuFq/cLLOxtYo2+Pv3+xatOrlexoX0WkDm7C9/L1W5U4rLexU3CQ9mMBmHPnp6k/WXZ5QXEE4uUF0+LpN3XlIXzFpdZmZiVV8VLxg2WvyncMmivYiu7/MTkyfZxyKkzwl7sZZslzHA9kOGedGaN7b7/2B77OFHoQK8lKfdFml7jJnarh+89nenNZYMab0E8qkOJOyb2bYlDTa0/2nyxGiyymYgq6YHLNrDbhqB/1LzdgzjMliQ8ri5q9Ux2vjfcqOzhfAmcwFwnY/D6yXJWYi0DWpHZdpKl3du6dYDrypW91/yDWbwiJ/YhrE7ZunzrcB6GH/QkbuzWxdCth39rQAHih8DG01co/K3Gvi4yGjvIH5tFUpyEolMnpMiA=
|
|
||||||
file_glob: true
|
|
||||||
file: raylib-*.tar.gz
|
|
||||||
skip_cleanup: true
|
|
||||||
on:
|
|
||||||
repo: raysan5/raylib
|
|
||||||
branch: master
|
|
||||||
tags: true
|
|
||||||
46
BINDINGS.md
|
|
@ -6,11 +6,11 @@ Here it is a list with the ones I'm aware of:
|
||||||
|
|
||||||
| name | raylib version | language | repo |
|
| name | raylib version | language | repo |
|
||||||
|:------------------:|:-------------: | :--------:|----------------------------------------------------------------------|
|
|:------------------:|:-------------: | :--------:|----------------------------------------------------------------------|
|
||||||
| raylib | **3.1-dev** | [C](https://en.wikipedia.org/wiki/C_(programming_language)) | https://github.com/raysan5/raylib |
|
| raylib | **3.5** | [C](https://en.wikipedia.org/wiki/C_(programming_language)) | https://github.com/raysan5/raylib |
|
||||||
| raylib-cpp | 3.1-dev | [C++](https://en.wikipedia.org/wiki/C%2B%2B) | https://github.com/robloach/raylib-cpp |
|
| raylib-cpp | 3.5 | [C++](https://en.wikipedia.org/wiki/C%2B%2B) | https://github.com/robloach/raylib-cpp |
|
||||||
| Raylib-cs | 3.0 | [C#](https://en.wikipedia.org/wiki/C_Sharp_(programming_language)) | https://github.com/ChrisDill/Raylib-cs |
|
| Raylib-cs | 3.5 | [C#](https://en.wikipedia.org/wiki/C_Sharp_(programming_language)) | https://github.com/ChrisDill/Raylib-cs |
|
||||||
| raylib-cppsharp | 2.5 | [C#](https://en.wikipedia.org/wiki/C_Sharp_(programming_language)) | https://github.com/phxvyper/raylib-cppsharp |
|
| raylib-cppsharp | 2.5 | [C#](https://en.wikipedia.org/wiki/C_Sharp_(programming_language)) | https://github.com/phxvyper/raylib-cppsharp |
|
||||||
| raylib-boo | 3.0 | [Boo](http://boo-language.github.io/) | https://github.com/Rabios/raylib-boo |
|
| raylib-boo | 3.5 | [Boo](http://boo-language.github.io/) | https://github.com/Rabios/raylib-boo |
|
||||||
| RaylibFS | 2.5 | [F#](https://fsharp.org/) | https://github.com/dallinbeutler/RaylibFS |
|
| RaylibFS | 2.5 | [F#](https://fsharp.org/) | https://github.com/dallinbeutler/RaylibFS |
|
||||||
| raylib_d | 2.5 | [D](https://dlang.org/) | https://github.com/Sepheus/raylib_d |
|
| raylib_d | 2.5 | [D](https://dlang.org/) | https://github.com/Sepheus/raylib_d |
|
||||||
| raylib-d | 3.0 | [D](https://dlang.org/) | https://github.com/onroundit/raylib-d |
|
| raylib-d | 3.0 | [D](https://dlang.org/) | https://github.com/onroundit/raylib-d |
|
||||||
|
|
@ -19,37 +19,39 @@ Here it is a list with the ones I'm aware of:
|
||||||
| raylib-go | 3.0 | [Go](https://golang.org/) | https://github.com/gen2brain/raylib-go |
|
| raylib-go | 3.0 | [Go](https://golang.org/) | https://github.com/gen2brain/raylib-go |
|
||||||
| raylib-goplus | 2.6-dev | [Go](https://golang.org/) | https://github.com/Lachee/raylib-goplus |
|
| raylib-goplus | 2.6-dev | [Go](https://golang.org/) | https://github.com/Lachee/raylib-goplus |
|
||||||
| ray-go | 2.6-dev | [Go](https://golang.org/) | https://github.com/hecate-tech/ray-go |
|
| ray-go | 2.6-dev | [Go](https://golang.org/) | https://github.com/hecate-tech/ray-go |
|
||||||
| go-raylib | 3.1-dev | [Go](https://golang.org/) | https://github.com/chunqian/go-raylib |
|
| go-raylib | 3.5 | [Go](https://golang.org/) | https://github.com/chunqian/go-raylib |
|
||||||
| raylib-rs | 3.0 | [Rust](https://www.rust-lang.org/) | https://github.com/deltaphc/raylib-rs |
|
| raylib-rs | 3.0 | [Rust](https://www.rust-lang.org/) | https://github.com/deltaphc/raylib-rs |
|
||||||
| raylib-lua | 1.7 | [Lua](http://www.lua.org/) | https://github.com/raysan5/raylib-lua |
|
| raylib-lua | 1.7 | [Lua](http://www.lua.org/) | https://github.com/raysan5/raylib-lua |
|
||||||
| raylib-lua-ffi | 2.0 | [Lua](http://www.lua.org/) | https://github.com/raysan5/raylib/issues/693 |
|
| raylib-lua-ffi | 2.0 | [Lua](http://www.lua.org/) | https://github.com/raysan5/raylib/issues/693 |
|
||||||
| raylib-lua-sol | 2.5 | [Lua](http://www.lua.org/) | https://github.com/RobLoach/raylib-lua-sol |
|
| raylib-lua-sol | 2.5 | [Lua](http://www.lua.org/) | https://github.com/RobLoach/raylib-lua-sol |
|
||||||
| raylib-lua | 3.0 | [Lua](http://www.lua.org/) | https://github.com/TSnake41/raylib-lua |
|
| raylib-lua | 3.5 | [Lua](http://www.lua.org/) | https://github.com/TSnake41/raylib-lua |
|
||||||
| raylib-luamore | 3.0 | [Lua](http://www.lua.org/) | https://github.com/HDPLocust/raylib-luamore |
|
| raylib-luamore | 3.0 | [Lua](http://www.lua.org/) | https://github.com/HDPLocust/raylib-luamore |
|
||||||
| raylua | 3.0 | [Lua](http://www.lua.org/) | https://github.com/Rabios/raylua |
|
| raylua | 3.5 | [Lua](http://www.lua.org/) | https://github.com/Rabios/raylua |
|
||||||
| LuaJIT-Raylib | 2.6 | [Lua](http://www.lua.org/) | https://github.com/Bambofy/LuaJIT-Raylib |
|
| LuaJIT-Raylib | 2.6 | [Lua](http://www.lua.org/) | https://github.com/Bambofy/LuaJIT-Raylib |
|
||||||
| raylib-nelua | 3.0 | [Nelua](https://nelua.io/) | https://github.com/Andre-LA/raylib-nelua |
|
| raylib-nelua | 3.0 | [Nelua](https://nelua.io/) | https://github.com/Andre-LA/raylib-nelua |
|
||||||
| raylib-Nim | ? | [Nim](https://nim-lang.org/) | https://gitlab.com/define-private-public/raylib-Nim |
|
| raylib-Nim | 1.7 | [Nim](https://nim-lang.org/) | https://gitlab.com/define-private-public/raylib-Nim |
|
||||||
| raylib-nim | 2.0 | [Nim](https://nim-lang.org/) | https://github.com/Skrylar/raylib-nim |
|
| raylib-nim | 2.0 | [Nim](https://nim-lang.org/) | https://github.com/Skrylar/raylib-nim |
|
||||||
| raylib-Forever | 3.1-dev | [Nim](https://nim-lang.org/) | https://github.com/Guevara-chan/Raylib-Forever |
|
| raylib-Forever | 3.1-dev | [Nim](https://nim-lang.org/) | https://github.com/Guevara-chan/Raylib-Forever |
|
||||||
| nim-raylib | 3.1-dev | [Nim](https://nim-lang.org/) | https://github.com/tomc1998/nim-raylib |
|
| nim-raylib | 3.1-dev | [Nim](https://nim-lang.org/) | https://github.com/tomc1998/nim-raylib |
|
||||||
|
| NimraylibNow! | 3.5-dev | [Nim](https://nim-lang.org/) | https://github.com/greenfork/nimraylib_now |
|
||||||
| raylib-haskell | 2.0 | [Haskell](https://www.haskell.org/) | https://github.com/DevJac/raylib-haskell |
|
| raylib-haskell | 2.0 | [Haskell](https://www.haskell.org/) | https://github.com/DevJac/raylib-haskell |
|
||||||
| raylib-cr | ? | [Crystal](https://crystal-lang.org/) | https://github.com/AregevDev/raylib-cr |
|
| raylib-cr | 2.5-dev | [Crystal](https://crystal-lang.org/) | https://github.com/AregevDev/raylib-cr |
|
||||||
| cray | 1.8 | [Crystal](https://crystal-lang.org/) | https://gitlab.com/Zatherz/cray |
|
| cray | 1.8 | [Crystal](https://crystal-lang.org/) | https://gitlab.com/Zatherz/cray |
|
||||||
| raylib.cr | ? | [Crystal](https://crystal-lang.org/) | https://github.com/sam0x17/raylib.cr |
|
| raylib.cr | 2.0 | [Crystal](https://crystal-lang.org/) | https://github.com/sam0x17/raylib.cr |
|
||||||
| raylib-pascal | 2.0 | [Pascal](https://en.wikipedia.org/wiki/Pascal_(programming_language)) | https://github.com/drezgames/raylib-pascal |
|
| raylib-pascal | 2.0 | [Pascal](https://en.wikipedia.org/wiki/Pascal_(programming_language)) | https://github.com/drezgames/raylib-pascal |
|
||||||
| raylib-pas | 3.0 | [Pascal](https://en.wikipedia.org/wiki/Pascal_(programming_language)) | https://github.com/tazdij/raylib-pas |
|
| raylib-pas | 3.0 | [Pascal](https://en.wikipedia.org/wiki/Pascal_(programming_language)) | https://github.com/tazdij/raylib-pas |
|
||||||
| Graphics-Raylib | ? | [Perl](https://www.perl.org/) | https://github.com/athreef/Graphics-Raylib |
|
| Ray4Laz | 3.5 | [Pascal](https://en.wikipedia.org/wiki/Pascal_(programming_language)) | https://github.com/GuvaCode/Ray4Laz |
|
||||||
| raylib-ruby-ffi | ? | [Ruby](https://www.ruby-lang.org/en/) | https://github.com/D3nX/raylib-ruby-ffi |
|
| Graphics-Raylib | 1.4 | [Perl](https://www.perl.org/) | https://github.com/athreef/Graphics-Raylib |
|
||||||
|
| raylib-ruby-ffi | 2.0 | [Ruby](https://www.ruby-lang.org/en/) | https://github.com/D3nX/raylib-ruby-ffi |
|
||||||
| raylib-ruby | 2.6 | [Ruby](https://www.ruby-lang.org/en/) | https://github.com/a0/raylib-ruby |
|
| raylib-ruby | 2.6 | [Ruby](https://www.ruby-lang.org/en/) | https://github.com/a0/raylib-ruby |
|
||||||
| raylib-mruby | ? | [mruby](https://github.com/mruby/mruby) | https://github.com/lihaochen910/raylib-mruby |
|
| raylib-mruby | 2.5-dev | [mruby](https://github.com/mruby/mruby) | https://github.com/lihaochen910/raylib-mruby |
|
||||||
| raylib-py | 2.0 | [Python](https://www.python.org/) | https://github.com/overdev/raylib-py |
|
| raylib-py | 2.0 | [Python](https://www.python.org/) | https://github.com/overdev/raylib-py |
|
||||||
| raylib-python-cffi | 2.6 | [Python](https://www.python.org/) | https://github.com/electronstudio/raylib-python-cffi |
|
| raylib-python-cffi | 3.5 | [Python](https://www.python.org/) | https://github.com/electronstudio/raylib-python-cffi |
|
||||||
| raylib-py-ctbg | 2.6 | [Python](https://www.python.org/) | https://github.com/overdev/raylib-py-ctbg |
|
| raylib-py-ctbg | 2.6 | [Python](https://www.python.org/) | https://github.com/overdev/raylib-py-ctbg |
|
||||||
| jaylib | 3.0 | [Java](https://en.wikipedia.org/wiki/Java_(programming_language)) | https://github.com/electronstudio/jaylib/ |
|
| jaylib | 3.0 | [Java](https://en.wikipedia.org/wiki/Java_(programming_language)) | https://github.com/electronstudio/jaylib/ |
|
||||||
| raylib-java | 2.0 | [Java](https://en.wikipedia.org/wiki/Java_(programming_language)) | https://github.com/XoanaIO/raylib-java |
|
| raylib-java | 2.0 | [Java](https://en.wikipedia.org/wiki/Java_(programming_language)) | https://github.com/XoanaIO/raylib-java |
|
||||||
| clj-raylib | ? | [Clojure](https://clojure.org/) | https://github.com/lsevero/clj-raylib |
|
| clj-raylib | 3.0 | [Clojure](https://clojure.org/) | https://github.com/lsevero/clj-raylib |
|
||||||
| node-raylib | 3.0 | [Node.js](https://nodejs.org/en/) | https://github.com/RobLoach/node-raylib |
|
| node-raylib | 3.5 | [Node.js](https://nodejs.org/en/) | https://github.com/RobLoach/node-raylib |
|
||||||
| QuickJS-raylib | 3.0 | [QuickJS](https://bellard.org/quickjs/) | https://github.com/sntg-p/QuickJS-raylib |
|
| QuickJS-raylib | 3.0 | [QuickJS](https://bellard.org/quickjs/) | https://github.com/sntg-p/QuickJS-raylib |
|
||||||
| raylib-js | 2.6 | [JavaScript](https://en.wikipedia.org/wiki/JavaScript) | https://github.com/RobLoach/raylib-js |
|
| raylib-js | 2.6 | [JavaScript](https://en.wikipedia.org/wiki/JavaScript) | https://github.com/RobLoach/raylib-js |
|
||||||
| raylib-chaiscript | 2.6 | [ChaiScript](http://chaiscript.com/) | https://github.com/RobLoach/raylib-chaiscript |
|
| raylib-chaiscript | 2.6 | [ChaiScript](http://chaiscript.com/) | https://github.com/RobLoach/raylib-chaiscript |
|
||||||
|
|
@ -58,13 +60,13 @@ Here it is a list with the ones I'm aware of:
|
||||||
| raylib-php | 3.0 | [PHP](https://en.wikipedia.org/wiki/PHP) | https://github.com/joseph-montanez/raylib-php |
|
| raylib-php | 3.0 | [PHP](https://en.wikipedia.org/wiki/PHP) | https://github.com/joseph-montanez/raylib-php |
|
||||||
| raylib-php-ffi | 2.4-dev | [PHP](https://en.wikipedia.org/wiki/PHP) | https://github.com/oraoto/raylib-php-ffi |
|
| raylib-php-ffi | 2.4-dev | [PHP](https://en.wikipedia.org/wiki/PHP) | https://github.com/oraoto/raylib-php-ffi |
|
||||||
| raylib-phpcpp | 3.0 | [PHP](https://en.wikipedia.org/wiki/PHP) | https://github.com/oraoto/raylib-phpcpp |
|
| raylib-phpcpp | 3.0 | [PHP](https://en.wikipedia.org/wiki/PHP) | https://github.com/oraoto/raylib-phpcpp |
|
||||||
| raylib-factor | 2.5 | [Factor](https://factorcode.org/) | https://github.com/ArnautDaniel/raylib-factor |
|
| raylib-factor | 3.5 | [Factor](https://factorcode.org/) | https://github.com/ArnautDaniel/raylib-factor |
|
||||||
| gforth-raylib | 3.0 | [Gforth](https://gforth.org/) | https://github.com/ArnautDaniel/gforth-raylib |
|
| gforth-raylib | 3.5 | [Gforth](https://gforth.org/) | https://github.com/ArnautDaniel/gforth-raylib |
|
||||||
| raylib-haxe | 2.4 | [Haxe](https://haxe.org/) | https://github.com/ibilon/raylib-haxe |
|
| raylib-haxe | 2.4 | [Haxe](https://haxe.org/) | https://github.com/ibilon/raylib-haxe |
|
||||||
| ringraylib | 2.6 | [Ring](http://ring-lang.sourceforge.net/) | https://github.com/ringpackages/ringraylib |
|
| ringraylib | 2.6 | [Ring](http://ring-lang.sourceforge.net/) | https://github.com/ringpackages/ringraylib |
|
||||||
| cl-raylib | 3.0 | [Common Lisp](https://common-lisp.net/) | https://github.com/longlene/cl-raylib |
|
| cl-raylib | 3.0 | [Common Lisp](https://common-lisp.net/) | https://github.com/longlene/cl-raylib |
|
||||||
| raylib-scm | 2.5 | [Chicken Scheme](https://www.call-cc.org/) | https://github.com/yashrk/raylib-scm |
|
| raylib-scm | 2.5 | [Chicken Scheme](https://www.call-cc.org/) | https://github.com/yashrk/raylib-scm |
|
||||||
| raylib-chibi | ? | [Chibi-Scheme](https://github.com/ashinn/chibi-scheme) | https://github.com/VincentToups/raylib-chibi |
|
| raylib-chibi | 2.5 | [Chibi-Scheme](https://github.com/ashinn/chibi-scheme) | https://github.com/VincentToups/raylib-chibi |
|
||||||
| raylib-gambit-scheme | 3.1-dev | [Gambit Scheme](https://github.com/gambit/gambit) | https://github.com/georgjz/raylib-gambit-scheme |
|
| raylib-gambit-scheme | 3.1-dev | [Gambit Scheme](https://github.com/gambit/gambit) | https://github.com/georgjz/raylib-gambit-scheme |
|
||||||
| Euraylib | 3.0 | [Euphoria](https://openeuphoria.org/) | https://github.com/gAndy50/Euraylib |
|
| Euraylib | 3.0 | [Euphoria](https://openeuphoria.org/) | https://github.com/gAndy50/Euraylib |
|
||||||
| raylib-wren | 3.0 | [Wren](http://wren.io/) | https://github.com/TSnake41/raylib-wren |
|
| raylib-wren | 3.0 | [Wren](http://wren.io/) | https://github.com/TSnake41/raylib-wren |
|
||||||
|
|
@ -76,6 +78,7 @@ Here it is a list with the ones I'm aware of:
|
||||||
| jaylib | 3.0 | [Janet](https://janet-lang.org/) | https://github.com/janet-lang/jaylib |
|
| jaylib | 3.0 | [Janet](https://janet-lang.org/) | https://github.com/janet-lang/jaylib |
|
||||||
| raykit | ? | [Kit](https://www.kitlang.org/) | https://github.com/Gamerfiend/raykit |
|
| raykit | ? | [Kit](https://www.kitlang.org/) | https://github.com/Gamerfiend/raykit |
|
||||||
| vraylib | 2.5 | [V](https://vlang.io/) | https://github.com/MajorHard/vraylib |
|
| vraylib | 2.5 | [V](https://vlang.io/) | https://github.com/MajorHard/vraylib |
|
||||||
|
| hb-raylib | 3.0 | [Harbour](https://harbour.github.io/) | https://github.com/rjopek/hb-raylib |
|
||||||
| ray.mod | 3.0 | [BlitzMax](https://blitzmax.org/) | https://github.com/bmx-ng/ray.mod |
|
| ray.mod | 3.0 | [BlitzMax](https://blitzmax.org/) | https://github.com/bmx-ng/ray.mod |
|
||||||
| ray-ocaml | 3.0 | [OCaml](https://ocaml.org/) | https://github.com/tjammer/raylib-ocaml |
|
| ray-ocaml | 3.0 | [OCaml](https://ocaml.org/) | https://github.com/tjammer/raylib-ocaml |
|
||||||
| raylib-mosaic | 3.0 | [Mosaic](https://github.com/sal55/langs/tree/master/Mosaic) | https://github.com/pluckyporcupine/raylib-mosaic |
|
| raylib-mosaic | 3.0 | [Mosaic](https://github.com/sal55/langs/tree/master/Mosaic) | https://github.com/pluckyporcupine/raylib-mosaic |
|
||||||
|
|
@ -83,10 +86,11 @@ Here it is a list with the ones I'm aware of:
|
||||||
| raylib-carp | 3.0 | [Carp](https://github.com/carp-lang/Carp) | https://github.com/pluckyporcupine/raylib-carp |
|
| raylib-carp | 3.0 | [Carp](https://github.com/carp-lang/Carp) | https://github.com/pluckyporcupine/raylib-carp |
|
||||||
| raylib-fb | 3.0 | [FreeBasic](https://www.freebasic.net/) | https://github.com/IchMagBier/raylib-fb |
|
| raylib-fb | 3.0 | [FreeBasic](https://www.freebasic.net/) | https://github.com/IchMagBier/raylib-fb |
|
||||||
| raylib-purebasic | 3.0 | [PureBasic](https://www.purebasic.com/) | https://github.com/D-a-n-i-l-o/raylib-purebasic |
|
| raylib-purebasic | 3.0 | [PureBasic](https://www.purebasic.com/) | https://github.com/D-a-n-i-l-o/raylib-purebasic |
|
||||||
| raylib-ats2 | ? | [ATS2](http://www.ats-lang.org/) | https://github.com/mephistopheles-8/raylib-ats2 |
|
| raylib-smallBasic | 3.1-dev | [SmallBASIC](https://github.com/smallbasic/SmallBASIC) | https://github.com/smallbasic/smallbasic.plugins/tree/master/raylib |
|
||||||
|
| raylib-ats2 | 3.0 | [ATS2](http://www.ats-lang.org/) | https://github.com/mephistopheles-8/raylib-ats2 |
|
||||||
| raylib-beef | 3.0 | [Beef](https://www.beeflang.org/) | https://github.com/M0n7y5/raylib-beef |
|
| raylib-beef | 3.0 | [Beef](https://www.beeflang.org/) | https://github.com/M0n7y5/raylib-beef |
|
||||||
| raylib-never | 3.0 | [Never](https://github.com/never-lang/never) | https://github.com/never-lang/raylib-never |
|
| raylib-never | 3.0 | [Never](https://github.com/never-lang/never) | https://github.com/never-lang/raylib-never |
|
||||||
| raylib.cbl | ? | [COBOL](https://en.wikipedia.org/wiki/COBOL) | *[code examples](https://github.com/Martinfx/Cobol/tree/master/OpenCobol/Games/raylib)* |
|
| raylib.cbl | 2.0 | [COBOL](https://en.wikipedia.org/wiki/COBOL) | *[code examples](https://github.com/Martinfx/Cobol/tree/master/OpenCobol/Games/raylib)* |
|
||||||
|
|
||||||
|
|
||||||
Missing some language? Feel free to create a new binding! :)
|
Missing some language? Feel free to create a new binding! :)
|
||||||
|
|
|
||||||
67
CHANGELOG
|
|
@ -1,26 +1,30 @@
|
||||||
changelog
|
changelog
|
||||||
---------
|
---------
|
||||||
|
|
||||||
Current Release: raylib 3.0.0 (01 April 2020)
|
Current Release: raylib 3.5.0 (25 December 2020)
|
||||||
|
|
||||||
-------------------------------------------------------------------------
|
-------------------------------------------------------------------------
|
||||||
Release: raylib 3.5 - 7th Anniversary Edition (November 2020) -WIP-
|
Release: raylib 3.5 - 7th Anniversary Edition (25 December 2020)
|
||||||
-------------------------------------------------------------------------
|
-------------------------------------------------------------------------
|
||||||
KEY CHANGES:
|
KEY CHANGES:
|
||||||
- [core] NEW platform supported: PLATFORM_DRM (#1388) by @kernelkinetic
|
- [core] ADDED: PLATFORM_DRM to support RPI4 and other devices (#1388) by @kernelkinetic
|
||||||
- [rlgl] ADDED RenderBatch type and related functions to allow custom batching
|
- [core] REDESIGNED: Window states management system through FLAGS
|
||||||
- [rlgl] REDESIGN framebuffers API to support multiple attachment types (#721)
|
- [rlgl] ADDED: RenderBatch type and related functions to allow custom batching (internal only)
|
||||||
- [textures] REDESIGNED Image*() functions, big performance improvements (software rendering)
|
- [rlgl] REDESIGNED: Framebuffers API to support multiple attachment types (#721)
|
||||||
- [*] REVIEWED multiple functions to replace file accesses by memory accesses
|
- [textures] REDESIGNED: Image*() functions, big performance improvements (software rendering)
|
||||||
- [*] NEW GitHub Actions CI to support multiple raylib build configurations
|
- [*] REVIEWED: Multiple functions to replace file accesses by memory accesses
|
||||||
|
- [*] ADDED: GitHub Actions CI to support multiple raylib build configurations
|
||||||
|
|
||||||
Detailed changes:
|
Detailed changes:
|
||||||
|
[core] ADDED: SetWindowState() / ClearWindowState() -> New flags added!
|
||||||
[core] ADDED: IsWindowFocused()
|
[core] ADDED: IsWindowFocused()
|
||||||
[core] ADDED: GetWindowScaleDPI()
|
[core] ADDED: GetWindowScaleDPI()
|
||||||
[core] ADDED: GetMonitorRefreshRate() (#1289) by @Shylie
|
[core] ADDED: GetMonitorRefreshRate() (#1289) by @Shylie
|
||||||
[core] ADDED: IsCursorOnScreen() (#1262) by @ChrisDill
|
[core] ADDED: IsCursorOnScreen() (#1262) by @ChrisDill
|
||||||
[core] ADDED: SetMouseCursor() and GetMouseCursor() for standard Desktop cursors (#1407) by @chances
|
[core] ADDED: SetMouseCursor() and GetMouseCursor() for standard Desktop cursors (#1407) by @chances
|
||||||
[core] REMOVED: struct RenderTexture2D: depthTexture variable
|
[core] REMOVED: struct RenderTexture2D: depthTexture variable
|
||||||
|
[core] REMOVED: HideWindow() / UnhideWindow() -> Use SetWindowState()
|
||||||
|
[core] REMOVED: DecorateWindow() / UndecorateWindow() -> Use SetWindowState()
|
||||||
[core] RENAMED: GetExtension() to GetFileExtension()
|
[core] RENAMED: GetExtension() to GetFileExtension()
|
||||||
[core] REVIEWED: Several structs to reduce size and padding
|
[core] REVIEWED: Several structs to reduce size and padding
|
||||||
[core] REVIEWED: struct Texture maps to Texture2D and TextureCubemap
|
[core] REVIEWED: struct Texture maps to Texture2D and TextureCubemap
|
||||||
|
|
@ -28,7 +32,9 @@ Detailed changes:
|
||||||
[core] REVIEWED: InitWindow(), support empty title for window (#1323)
|
[core] REVIEWED: InitWindow(), support empty title for window (#1323)
|
||||||
[core] REVIEWED: RPI: Mouse movements are bound to the screen resolution (#1392) (#1410) by @kernelkinetic
|
[core] REVIEWED: RPI: Mouse movements are bound to the screen resolution (#1392) (#1410) by @kernelkinetic
|
||||||
[core] REVIEWED: GetPrevDirectoryPath() fixes on Unix-like systems (#1246) by @ivan-cx
|
[core] REVIEWED: GetPrevDirectoryPath() fixes on Unix-like systems (#1246) by @ivan-cx
|
||||||
[core] REDESIGNED: GetMouseWheelMove() to return float movement for precise scrolling (#1397) by @Doy-lee
|
[core] REPLACED: rgif.h by msf_gif.h for automatic gif recording
|
||||||
|
[core] REDESIGNED: GetMouseWheelMove() to return float movement for precise scrolling (#1397) by @Doy-lee
|
||||||
|
[core] REDESIGNED: GetKeyPressed(), and added GetCharPressed() (#1336)
|
||||||
[core] UWP rework with improvements (#1231) by @Rover656
|
[core] UWP rework with improvements (#1231) by @Rover656
|
||||||
[core] Gamepad axis bug fixes and improvement (#1228) by @mmalecot
|
[core] Gamepad axis bug fixes and improvement (#1228) by @mmalecot
|
||||||
[core] Updated joystick mappings with latest version of gamecontrollerdb (#1381) by @coderoth
|
[core] Updated joystick mappings with latest version of gamecontrollerdb (#1381) by @coderoth
|
||||||
|
|
@ -36,12 +42,14 @@ Detailed changes:
|
||||||
[rlgl] ADDED: rlDrawMeshInstanced() (#1318) by @seanpringle
|
[rlgl] ADDED: rlDrawMeshInstanced() (#1318) by @seanpringle
|
||||||
[rlgl] ADDED: rlCheckErrors (#1321) by @seanpringle
|
[rlgl] ADDED: rlCheckErrors (#1321) by @seanpringle
|
||||||
[rlgl] ADDED: BLEND_SET blending mode (#1251) by @RandomErrorMessage
|
[rlgl] ADDED: BLEND_SET blending mode (#1251) by @RandomErrorMessage
|
||||||
|
[rlgl] ADDED: rlSetLineWidth(), rlGetLineWidth(), rlEnableSmoothLines(), rlDisableSmoothLines() (#1457) by @JeffM2501
|
||||||
[rlgl] RENAMED: rlUnproject() to Vector3Unproject() [raymath]
|
[rlgl] RENAMED: rlUnproject() to Vector3Unproject() [raymath]
|
||||||
[rlgl] REVIEWED: Replace rlglDraw() calls by DrawRenderBatch() internal calls
|
[rlgl] REVIEWED: Replace rlglDraw() calls by DrawRenderBatch() internal calls
|
||||||
[rlgl] REVIEWED: GenTextureCubemap(), use rlgl functionality only
|
[rlgl] REVIEWED: GenTextureCubemap(), use rlgl functionality only
|
||||||
[rlgl] REVIEWED: rlFramebufferAttach() to support texture layers
|
[rlgl] REVIEWED: rlFramebufferAttach() to support texture layers
|
||||||
[rlgl] REVIEWED: GenDrawCube() and GenDrawQuad()
|
[rlgl] REVIEWED: GenDrawCube() and GenDrawQuad()
|
||||||
[rlgl] REVIEWED: Issues with vertex batch overflow (#1223)
|
[rlgl] REVIEWED: Issues with vertex batch overflow (#1223)
|
||||||
|
[rlgl] REVIEWED: rlUpdateTexture(), issue with offsets
|
||||||
[rlgl] REDESIGNED: GenTexture*() to use the new fbo API (#721)
|
[rlgl] REDESIGNED: GenTexture*() to use the new fbo API (#721)
|
||||||
[raymath] ADDED: Normalize() and Remap() functions (#1247) by @NoorWachid
|
[raymath] ADDED: Normalize() and Remap() functions (#1247) by @NoorWachid
|
||||||
[raymath] ADDED: Vector2Reflect() (#1400) by @daniel-junior-dube
|
[raymath] ADDED: Vector2Reflect() (#1400) by @daniel-junior-dube
|
||||||
|
|
@ -49,15 +57,19 @@ Detailed changes:
|
||||||
[raymath] ADDED: Vector2MoveTowards() function (#1233) by @anatagawa
|
[raymath] ADDED: Vector2MoveTowards() function (#1233) by @anatagawa
|
||||||
[raymath] REVIEWED: Some functions consistency (#1197) by @Not-Nik
|
[raymath] REVIEWED: Some functions consistency (#1197) by @Not-Nik
|
||||||
[raymath] REVIEWED: QuaternionFromVector3ToVector3() (#1263) by @jvocaturo
|
[raymath] REVIEWED: QuaternionFromVector3ToVector3() (#1263) by @jvocaturo
|
||||||
|
[raymath] REVIEWED: MatrixLookAt(), optimized (#1442) by @RandomErrorMessage
|
||||||
|
[shapes] ADDED: CheckCollisionLines(), by @Elkantor
|
||||||
[text] Avoid [textures] functions dependencies
|
[text] Avoid [textures] functions dependencies
|
||||||
[text] ADDED: Config flag: SUPPORT_TEXT_MANIPULATION
|
[text] ADDED: Config flag: SUPPORT_TEXT_MANIPULATION
|
||||||
[text] ADDED: LoadFontFromMemory() (TTF only) (#1327)
|
[text] ADDED: LoadFontFromMemory() (TTF only) (#1327)
|
||||||
|
[text] ADDED: UnloadFontData()
|
||||||
[text] RENAMED: FormatText() -> TextFormat()
|
[text] RENAMED: FormatText() -> TextFormat()
|
||||||
|
[text] REVIEWED: Font struct, added charsPadding (#1432)
|
||||||
[text] REVIEWED: TextJoin()
|
[text] REVIEWED: TextJoin()
|
||||||
[text] REVIEWED: TextReplace() (#1172)
|
[text] REVIEWED: TextReplace() (#1172)
|
||||||
[text] REVIEWED: LoadBMFont() to load data from memory (#1232)
|
[text] REVIEWED: LoadBMFont() to load data from memory (#1232)
|
||||||
[text] REVIEWED: GenImageFontAtlas(), fixed offset (#1171)
|
[text] REVIEWED: GenImageFontAtlas(), fixed offset (#1171)
|
||||||
[text] REDESIGNED: LoadFontData()
|
[text] REDESIGNED: LoadFontData(), reviewed input parameters
|
||||||
[text] REDESIGNED: LoadFontDefault(), some code simplifications
|
[text] REDESIGNED: LoadFontDefault(), some code simplifications
|
||||||
[text] REDESIGNED: LoadFontFromImage(), avoid LoadImageEx()
|
[text] REDESIGNED: LoadFontFromImage(), avoid LoadImageEx()
|
||||||
[text] REDESIGNED: LoadFontData(), avoid GenImageColor(), ImageFormat()
|
[text] REDESIGNED: LoadFontData(), avoid GenImageColor(), ImageFormat()
|
||||||
|
|
@ -70,11 +82,16 @@ Detailed changes:
|
||||||
[textures] ADDED: LoadImageAnim() to load animated sequence of images
|
[textures] ADDED: LoadImageAnim() to load animated sequence of images
|
||||||
[textures] ADDED: DrawTextureTiled() (#1291) - @Demizdor
|
[textures] ADDED: DrawTextureTiled() (#1291) - @Demizdor
|
||||||
[textures] ADDED: UpdateTextureRec()
|
[textures] ADDED: UpdateTextureRec()
|
||||||
|
[textures] ADDED: UnloadImageColors(), UnloadImagePalette(), UnloadWaveSamples()
|
||||||
[textures] REMOVED: Config flag: SUPPORT_IMAGE_DRAWING
|
[textures] REMOVED: Config flag: SUPPORT_IMAGE_DRAWING
|
||||||
[textures] REMOVED: LoadImageEx()
|
[textures] REMOVED: LoadImageEx()
|
||||||
[textures] REMOVED: LoadImagePro()
|
[textures] REMOVED: LoadImagePro()
|
||||||
|
[textures] REMOVED: GetImageDataNormalized(), not exposed in the API
|
||||||
[textures] RENAMED: ImageExtractPalette() to GetImagePalette()
|
[textures] RENAMED: ImageExtractPalette() to GetImagePalette()
|
||||||
[textures] RENAMED: Fade() to ColorAlpha(), added #define for compatibility
|
[textures] RENAMED: Fade() to ColorAlpha(), added #define for compatibility
|
||||||
|
[textures] RENAMED: GetImageData() -> LoadImageColors()
|
||||||
|
[textures] RENAMED: GetImagePalette() -> LoadImagePalette()
|
||||||
|
[textures] RENAMED: GetWaveData() -> LoadWaveSamples()
|
||||||
[textures] REVIEWED: GetPixelDataSize() to consider compressed data properly
|
[textures] REVIEWED: GetPixelDataSize() to consider compressed data properly
|
||||||
[textures] REVIEWED: GetTextureData(), allow retrieving 32bit float data
|
[textures] REVIEWED: GetTextureData(), allow retrieving 32bit float data
|
||||||
[textures] REVIEWED: ImageDrawText*() params order
|
[textures] REVIEWED: ImageDrawText*() params order
|
||||||
|
|
@ -107,6 +124,7 @@ Detailed changes:
|
||||||
[textures] REDESIGNED: ExportImageAsCode() to use memory buffer (#1232)
|
[textures] REDESIGNED: ExportImageAsCode() to use memory buffer (#1232)
|
||||||
[textures] REDESIGNED: ColorFromHSV()
|
[textures] REDESIGNED: ColorFromHSV()
|
||||||
[models] ADDED: DrawTriangle3D() and DrawTriangleStrip3D()
|
[models] ADDED: DrawTriangle3D() and DrawTriangleStrip3D()
|
||||||
|
[models] ADDED: UnloadModelKeepMeshes()
|
||||||
[models] REVIEWED: LoadModel(), avoid loading texcoords and normals from model if not existent
|
[models] REVIEWED: LoadModel(), avoid loading texcoords and normals from model if not existent
|
||||||
[models] REVIEWED: GenMeshCubicmap(), added comments and simplification
|
[models] REVIEWED: GenMeshCubicmap(), added comments and simplification
|
||||||
[models] REVIEWED: GenMeshCubicmap(), fixed generated normals (#1244) by @GoldenThumbs
|
[models] REVIEWED: GenMeshCubicmap(), fixed generated normals (#1244) by @GoldenThumbs
|
||||||
|
|
@ -116,37 +134,50 @@ Detailed changes:
|
||||||
[models] REVIEWED: LoadGLTF() to read from memory buffer
|
[models] REVIEWED: LoadGLTF() to read from memory buffer
|
||||||
[models] REVIEWED: UpdateMesh(), fix extra memory allocated when updating color buffer (#1271) by @4yn
|
[models] REVIEWED: UpdateMesh(), fix extra memory allocated when updating color buffer (#1271) by @4yn
|
||||||
[models] REVIEWED: MeshNormalsSmooth() (#1317) by @seanpringle
|
[models] REVIEWED: MeshNormalsSmooth() (#1317) by @seanpringle
|
||||||
|
[models] REVIEWED: DrawGrid() (#1417)
|
||||||
[models] REDESIGNED: ExportMesh() to use memory buffer (#1232)
|
[models] REDESIGNED: ExportMesh() to use memory buffer (#1232)
|
||||||
[models] REDESIGNED: LoadIQM() and LoadModelAnimations() to use memory buffers
|
[models] REDESIGNED: LoadIQM() and LoadModelAnimations() to use memory buffers
|
||||||
[audio] ADDED: LoadWaveFromMemory() (#1327)
|
[audio] ADDED: LoadWaveFromMemory() (#1327)
|
||||||
[audio] REMOVED: SetMusicLoopCount()
|
[audio] REMOVED: SetMusicLoopCount()
|
||||||
|
[audio] REVIEWED: Several functions, sampleCount vs frameCount (#1423)
|
||||||
[audio] REVIEWED: SaveWAV() to use memory write insted of file
|
[audio] REVIEWED: SaveWAV() to use memory write insted of file
|
||||||
[audio] REVIEWED: LoadMusicStream(), support WAV music streaming (#1198)
|
[audio] REVIEWED: LoadMusicStream(), support WAV music streaming (#1198)
|
||||||
[audio] REVIEWED: Support multiple WAV sampleSize for MusicStream (#1340)
|
[audio] REVIEWED: Support multiple WAV sampleSize for MusicStream (#1340)
|
||||||
|
[audio] REVIEWED: SetAudioBufferPitch()
|
||||||
[audio] REDESIGNED: Audio looping system
|
[audio] REDESIGNED: Audio looping system
|
||||||
[audio] REDESIGNED: LoadSound(): Use memory loading (WAV, OGG, MP3, FLAC) (#1312)
|
[audio] REDESIGNED: LoadSound(): Use memory loading (WAV, OGG, MP3, FLAC) (#1312)
|
||||||
[audio] REDESIGNED: ExportWaveAsCode() to use memory buffers
|
[audio] REDESIGNED: ExportWaveAsCode() to use memory buffers
|
||||||
|
[utils] ADDED: MemAlloc() / MemFree() (#1440)
|
||||||
|
[utils] ADDED: UnloadFileData() / UnloadFileText()
|
||||||
[utils] REVIEWED: android_fopen() to support SDCard access
|
[utils] REVIEWED: android_fopen() to support SDCard access
|
||||||
|
[utils] REDESIGNED: SaveFile*() functions to expose file access results (#1420)
|
||||||
[rmem] REVIEWED: MemPool and other allocators optimization (#1211) by @assyrianic
|
[rmem] REVIEWED: MemPool and other allocators optimization (#1211) by @assyrianic
|
||||||
[examples] ADDED: others/embedded_files_loading
|
[examples] ADDED: core/core_window_flags
|
||||||
[examples] ADDED: shaders/shaders_hot_reloading (#1198)
|
[examples] ADDED: core/core_quat_conversion by @chriscamacho and @codifies
|
||||||
[examples] ADDED: textures/textures_blend_modes (#1261) by @accidentalrebel
|
[examples] ADDED: textures/textures_blend_modes (#1261) by @accidentalrebel
|
||||||
[examples] REVIEWED: models/models_skybox to work on OpenGL ES 2.0
|
[examples] ADDED: textures/textures_draw_tiled (#1291) by @Demizdor
|
||||||
|
[examples] ADDED: shaders/shaders_hot_reloading (#1198)
|
||||||
|
[examples] ADDED: shaders/shaders_rlgl_mesh_instanced (#1318) by @seanpringle
|
||||||
|
[examples] ADDED: shaders/shaders_multi_sampler2d
|
||||||
|
[examples] ADDED: others/embedded_files_loading
|
||||||
[examples] REVIEWED: textures/textures_raw_data (#1286)
|
[examples] REVIEWED: textures/textures_raw_data (#1286)
|
||||||
[examples] REVIEWED: others/raudio_standalone.c
|
|
||||||
[examples] REVIEWED: audio/resources, use open license resources
|
|
||||||
[examples] REVIEWED: textures/textures_sprite_explosion, replace resources
|
[examples] REVIEWED: textures/textures_sprite_explosion, replace resources
|
||||||
[examples] REVIEWED: textures/textures_particles_blending, replace resources
|
[examples] REVIEWED: textures/textures_particles_blending, replace resources
|
||||||
|
[examples] REVIEWED: textures/textures_image_processing, support mouse
|
||||||
|
[examples] REVIEWED: models/models_skybox to work on OpenGL ES 2.0
|
||||||
|
[examples] REVIEWED: audio/resources, use open license resources
|
||||||
|
[examples] REVIEWED: others/raudio_standalone.c
|
||||||
|
[build] ADDED: New config.h configuration options exposing multiple #define values
|
||||||
[build] REMOVED: ANGLE VS2017 template project
|
[build] REMOVED: ANGLE VS2017 template project
|
||||||
[build] Avoided all MSVC compile warnings
|
[build] REVIEWED: All MSVC compile warnings
|
||||||
[build] Additional config.h configuration options exposing multiple #define values
|
|
||||||
[build] Updated Makefile for web (#1332) by @rfaile313
|
[build] Updated Makefile for web (#1332) by @rfaile313
|
||||||
[build] Updated build pipelines to use latest emscripten and android ndk
|
[build] Updated build pipelines to use latest emscripten and Android NDK
|
||||||
[build] Updated emscriptem build script to generate .a on WebAssembly
|
[build] Updated emscriptem build script to generate .a on WebAssembly
|
||||||
[build] Updated Android build for Linux, supporting ANDROID_NDK at compile time by @branlix3000
|
[build] Updated Android build for Linux, supporting ANDROID_NDK at compile time by @branlix3000
|
||||||
[build] Updated VSCode project template tasks
|
[build] Updated VSCode project template tasks
|
||||||
[build] Updated VS2017.UWP project template by @Rover656
|
[build] Updated VS2017.UWP project template by @Rover656
|
||||||
[build] Updated Android build pipeline
|
[build] Updated Android build pipeline
|
||||||
|
[build] REMOVED: AppVeyor and Travis CI build systems
|
||||||
[*] Moved raysan5/raylib/games to independent repo: raysan5/raylib-games
|
[*] Moved raysan5/raylib/games to independent repo: raysan5/raylib-games
|
||||||
[*] Replaced several examples resources with more open licensed alternatives
|
[*] Replaced several examples resources with more open licensed alternatives
|
||||||
[*] Updated BINDINGS.md with NEW bindings and added raylib version binding!
|
[*] Updated BINDINGS.md with NEW bindings and added raylib version binding!
|
||||||
|
|
|
||||||
|
|
@ -1,46 +1,32 @@
|
||||||
cmake_minimum_required(VERSION 3.0)
|
cmake_minimum_required(VERSION 3.0)
|
||||||
|
project(raylib)
|
||||||
|
|
||||||
|
# Directory for easier includes
|
||||||
|
# Anywhere you see include(...) you can check <root>/cmake for that file
|
||||||
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
||||||
|
|
||||||
# Config options
|
# RAYLIB_IS_MAIN determines whether the project is being used from root
|
||||||
option(BUILD_EXAMPLES "Build the examples." ON)
|
# or if it is added as a dependency (through add_subdirectory for example).
|
||||||
option(ENABLE_ASAN "Enable AddressSanitizer (ASAN) for debugging (degrades performance)" OFF)
|
if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
option(ENABLE_UBSAN "Enable UndefinedBehaviorSanitizer (UBSan) for debugging" OFF)
|
set(RAYLIB_IS_MAIN TRUE)
|
||||||
option(ENABLE_MSAN "Enable MemorySanitizer (MSan) for debugging (not recommended to run with ASAN)" OFF)
|
|
||||||
|
|
||||||
if(CMAKE_VERSION VERSION_LESS "3.1")
|
|
||||||
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
|
||||||
set(CMAKE_C_FLAGS "-std=gnu99 ${CMAKE_C_FLAGS}")
|
|
||||||
endif()
|
|
||||||
else()
|
else()
|
||||||
set (CMAKE_C_STANDARD 99)
|
set(RAYLIB_IS_MAIN FALSE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(AddIfFlagCompiles)
|
# Sets compiler flags and language standard
|
||||||
add_if_flag_compiles(-Werror=pointer-arith CMAKE_C_FLAGS)
|
include(CompilerFlags)
|
||||||
add_if_flag_compiles(-Werror=implicit-function-declaration CMAKE_C_FLAGS)
|
|
||||||
# src/external/jar_xm.h does shady stuff
|
|
||||||
add_if_flag_compiles(-fno-strict-aliasing CMAKE_C_FLAGS)
|
|
||||||
|
|
||||||
if (ENABLE_ASAN)
|
# Registers build options that are exposed to cmake
|
||||||
add_if_flag_compiles(-fno-omit-frame-pointer CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
include(CMakeOptions.txt)
|
||||||
add_if_flag_compiles(-fsanitize=address CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
|
||||||
endif()
|
|
||||||
if (ENABLE_UBSAN)
|
|
||||||
add_if_flag_compiles(-fno-omit-frame-pointer CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
|
||||||
add_if_flag_compiles(-fsanitize=undefined CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
|
||||||
endif()
|
|
||||||
if (ENABLE_MSAN)
|
|
||||||
add_if_flag_compiles(-fno-omit-frame-pointer CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
|
||||||
add_if_flag_compiles(-fsanitize=memory CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (ENABLE_MSAN AND ENABLE_ASAN)
|
# Enforces a few environment and compiler configurations
|
||||||
MESSAGE(WARNING "Compiling with both AddressSanitizer and MemorySanitizer is not recommended")
|
include(BuildOptions)
|
||||||
endif()
|
|
||||||
|
|
||||||
add_subdirectory(src)
|
# Main sources directory (the second parameter sets the output directory name to raylib)
|
||||||
|
add_subdirectory(src raylib)
|
||||||
|
|
||||||
if (${BUILD_EXAMPLES})
|
if (${BUILD_EXAMPLES})
|
||||||
|
MESSAGE(STATUS "Building examples is enabled")
|
||||||
add_subdirectory(examples)
|
add_subdirectory(examples)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
|
||||||
89
CMakeOptions.txt
Normal file
|
|
@ -0,0 +1,89 @@
|
||||||
|
### Config options ###
|
||||||
|
include(CMakeDependentOption)
|
||||||
|
include(EnumOption)
|
||||||
|
|
||||||
|
enum_option(PLATFORM "Desktop;Web;Android;Raspberry Pi;DRM" "Platform to build for.")
|
||||||
|
|
||||||
|
enum_option(OPENGL_VERSION "OFF;3.3;2.1;1.1;ES 2.0" "Force a specific OpenGL Version?")
|
||||||
|
|
||||||
|
# Configuration options
|
||||||
|
option(BUILD_EXAMPLES "Build the examples." ${RAYLIB_IS_MAIN})
|
||||||
|
option(CUSTOMIZE_BUILD "Show options for customizing your Raylib library build." OFF)
|
||||||
|
option(ENABLE_ASAN "Enable AddressSanitizer (ASAN) for debugging (degrades performance)" OFF)
|
||||||
|
option(ENABLE_UBSAN "Enable UndefinedBehaviorSanitizer (UBSan) for debugging" OFF)
|
||||||
|
option(ENABLE_MSAN "Enable MemorySanitizer (MSan) for debugging (not recommended to run with ASAN)" OFF)
|
||||||
|
|
||||||
|
# Shared library is always PIC. Static library should be PIC too if linked into a shared library
|
||||||
|
option(WITH_PIC "Compile static library as position-independent code" OFF)
|
||||||
|
option(BUILD_SHARED_LIBS "Build raylib as a shared library" OFF)
|
||||||
|
option(MACOS_FATLIB "Build fat library for both i386 and x86_64 on macOS" OFF)
|
||||||
|
cmake_dependent_option(USE_AUDIO "Build raylib with audio module" ON CUSTOMIZE_BUILD ON)
|
||||||
|
|
||||||
|
enum_option(USE_EXTERNAL_GLFW "OFF;IF_POSSIBLE;ON" "Link raylib against system GLFW instead of embedded one")
|
||||||
|
if(UNIX AND NOT APPLE)
|
||||||
|
option(USE_WAYLAND "Use Wayland for window creation" OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(INCLUDE_EVERYTHING "Include everything disabled by default (for CI usage" OFF)
|
||||||
|
set(OFF ${INCLUDE_EVERYTHING} CACHE INTERNAL "Replace any OFF by default with \${OFF} to have it covered by this option")
|
||||||
|
|
||||||
|
# core.c
|
||||||
|
cmake_dependent_option(SUPPORT_CAMERA_SYSTEM "Provide camera module (camera.h) with multiple predefined cameras: free, 1st/3rd person, orbital" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_GESTURES_SYSTEM "Gestures module is included (gestures.h) to support gestures detection: tap, hold, swipe, drag" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_MOUSE_GESTURES "Mouse gestures are directly mapped like touches and processed by gestures system" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_SSH_KEYBOARD_RPI "Reconfigure standard input to receive key inputs, works with SSH connection" OFF CUSTOMIZE_BUILD OFF)
|
||||||
|
cmake_dependent_option(SUPPORT_DEFAULT_FONT "Default font is loaded on window initialization to be available for the user to render simple text. If enabled, uses external module functions to load default raylib font (module: text)" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_SCREEN_CAPTURE "Allow automatic screen capture of current screen pressing F12, defined in KeyCallback()" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_GIF_RECORDING "Allow automatic gif recording of current screen pressing CTRL+F12, defined in KeyCallback()" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_BUSY_WAIT_LOOP "Use busy wait loop for timing sync instead of a high-resolution timer" OFF CUSTOMIZE_BUILD OFF)
|
||||||
|
cmake_dependent_option(SUPPORT_EVENTS_WAITING "Wait for events passively (sleeping while no events) instead of polling them actively every frame" OFF CUSTOMIZE_BUILD OFF)
|
||||||
|
cmake_dependent_option(SUPPORT_HIGH_DPI "Support high DPI displays" OFF CUSTOMIZE_BUILD OFF)
|
||||||
|
cmake_dependent_option(SUPPORT_DATA_STORAGE "Support for persistent data storage" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_COMPRESSION_API "Support for compression API" ON CUSTOMIZE_BUILD ON)
|
||||||
|
|
||||||
|
# rlgl.h
|
||||||
|
cmake_dependent_option(SUPPORT_VR_SIMULATOR "Support VR simulation functionality (stereo rendering)" ON CUSTOMIZE_BUILD ON)
|
||||||
|
|
||||||
|
# shapes.c
|
||||||
|
cmake_dependent_option(SUPPORT_FONT_TEXTURE "Draw rectangle shapes using font texture white character instead of default white texture. Allows drawing rectangles and text with a single draw call, very useful for GUI systems!" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_QUADS_DRAW_MODE "Use QUADS instead of TRIANGLES for drawing when possible. Some lines-based shapes could still use lines" ON CUSTOMIZE_BUILD ON)
|
||||||
|
|
||||||
|
# textures.c
|
||||||
|
cmake_dependent_option(SUPPORT_IMAGE_EXPORT "Support image exporting to file" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_IMAGE_GENERATION "Support procedural image generation functionality (gradient, spot, perlin-noise, cellular)" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_IMAGE_MANIPULATION "Support multiple image editing functions to scale, adjust colors, flip, draw on images, crop... If not defined only three image editing functions supported: ImageFormat(), ImageAlphaMask(), ImageToPOT()" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_PNG "Support loading PNG as textures" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_DDS "Support loading DDS as textures" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_HDR "Support loading HDR as textures" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_KTX "Support loading KTX as textures" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_ASTC "Support loading ASTC as textures" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_BMP "Support loading BMP as textures" ${OFF} CUSTOMIZE_BUILD OFF)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_TGA "Support loading TGA as textures" ${OFF} CUSTOMIZE_BUILD OFF)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_JPG "Support loading JPG as textures" ${OFF} CUSTOMIZE_BUILD OFF)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_GIF "Support loading GIF as textures" ${OFF} CUSTOMIZE_BUILD OFF)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_PSD "Support loading PSD as textures" ${OFF} CUSTOMIZE_BUILD OFF)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_PKM "Support loading PKM as textures" ${OFF} CUSTOMIZE_BUILD OFF)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_PVR "Support loading PVR as textures" ${OFF} CUSTOMIZE_BUILD OFF)
|
||||||
|
|
||||||
|
# text.c
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_FNT "Support loading fonts in FNT format" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_TTF "Support loading font in TTF/OTF format" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_TEXT_MANIPULATION "Support text manipulation functions" ON CUSTOMIZE_BUILD ON)
|
||||||
|
|
||||||
|
# models.c
|
||||||
|
cmake_dependent_option(SUPPORT_MESH_GENERATION "Support procedural mesh generation functions, uses external par_shapes.h library. NOTE: Some generated meshes DO NOT include generated texture coordinates" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_OBJ "Support loading OBJ file format" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_MTL "Support loading MTL file format" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_IQM "Support loading IQM file format" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_GLTF "Support loading GLTF file format" ON CUSTOMIZE_BUILD ON)
|
||||||
|
|
||||||
|
# raudio.c
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_WAV "Support loading WAV for sound" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_OGG "Support loading OGG for sound" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_XM "Support loading XM for sound" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_MOD "Support loading MOD for sound" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_MP3 "Support loading MP3 for sound" ON CUSTOMIZE_BUILD ON)
|
||||||
|
cmake_dependent_option(SUPPORT_FILEFORMAT_FLAC "Support loading FLAC for sound" ${OFF} CUSTOMIZE_BUILD OFF)
|
||||||
|
|
||||||
|
# utils.c
|
||||||
|
cmake_dependent_option(SUPPORT_TRACELOG "Show TraceLog() output messages. NOTE: By default LOG_DEBUG traces not shown" ON CUSTOMIZE_BUILD ON)
|
||||||
37
HISTORY.md
|
|
@ -254,3 +254,40 @@ Note that only key changes are listed here but there is way more! About **30 new
|
||||||
It has been **10 months of improvements** to create the best raylib ever.
|
It has been **10 months of improvements** to create the best raylib ever.
|
||||||
|
|
||||||
Welcome to **raylib 3.0**.
|
Welcome to **raylib 3.0**.
|
||||||
|
|
||||||
|
notes on raylib 3.5
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
It's December 25th... this crazy 2020 is about to finish and finally the holidays gave me some time to put a new version of raylib. It's been **9 months since last release** and last November raylib become 7 years old... I was not able to release this new version back then but here it is. Many changes and improvements have happened in those months and, even, last August, raylib was awarded with an [Epic Megagrant](https://www.unrealengine.com/en-US/blog/epic-megagrants-fall-2020-update)! Bindings list kept growing to [+50 programming languages](BINDINGS.md) and some new platforms have been supported. Let's see this new version details:
|
||||||
|
|
||||||
|
First, some general numbers of this new update:
|
||||||
|
|
||||||
|
- **+650** commits since previous RELEASE
|
||||||
|
- **+30** functions ADDED (for a TOTAL of **475**!)
|
||||||
|
- **+90** functions REVIEWED/REDESIGNED
|
||||||
|
- **+30** contributors (for a TOTAL of **170**!)
|
||||||
|
- **+8** new examples (for a TOTAL of **+120**!)
|
||||||
|
|
||||||
|
Here the list with some highlights for `raylib 3.5`.
|
||||||
|
|
||||||
|
- NEW **Platform** supported: **Raspberry Pi 4 native mode** (no X11 windows) through [DRM](https://en.wikipedia.org/wiki/Direct_Rendering_Manager) subsystem and GBM API. Actually this is a really interesting improvement because it opens the door to raylib to support other embedded platforms (Odroid, GameShell, NanoPi...). Also worth mentioning the un-official homebrew ports of raylib for [PS4](https://github.com/orbisdev/orbisdev-orbisGl2) and [PSVita](https://github.com/psp2dev/raylib4Vita).
|
||||||
|
|
||||||
|
- NEW **configuration options** exposed: For custom raylib builds, `config.h` now exposes **more than 150 flags and defines** to build raylib with only the desired features, for example, it allows to build a minimal raylib library in just some KB removing all external data filetypes supported, very useful to generate **small executables or embedded devices**.
|
||||||
|
|
||||||
|
- NEW **automatic GIF recording** feature: Actually, automatic GIF recording (**CTRL+F12**) for any raylib application has been available for some versions but this feature was really slow and low-performant using an old gif library with many file-accesses. It has been replaced by a **high-performant alternative** (`msf_gif.h`) that operates directly on memory... and actually works very well! Try it out!
|
||||||
|
|
||||||
|
- NEW **RenderBatch** system: `rlgl` module has been redesigned to support custom **render batches** to allow grouping draw calls as desired, previous implementation just had one default render batch. This feature has not been exposed to raylib API yet but it can be used by advance users dealing with `rlgl` directly. For example, multiple `RenderBatch` can be created for 2D sprites and 3D geometry independently.
|
||||||
|
|
||||||
|
- NEW **Framebuffer** system: `rlgl` module now exposes an API for custom **Framebuffer attachments** (including cubemaps!). raylib `RenderTexture` is a basic use-case, just allowing color and depth textures, but this new API allows the creation of more advance Framebuffers with multiple attachments, like the **G-Buffers**. `GenTexture*()` functions have been redesigned to use this new API.
|
||||||
|
|
||||||
|
- Improved **software rendering**: raylib `Image*()` API is intended for software rendering, for those cases when **no GPU or no Window is available**. Those functions operate directly with **multi-format** pixel data on RAM and they have been completely redesigned to be way faster, specially for small resolutions and retro-gaming. Low-end embedded devices like **microcontrollers with custom displays** could benefit of this raylib functionality!
|
||||||
|
|
||||||
|
- File **loading from memory**: Multiple functions have been redesigned to load data from memory buffers **instead of directly accessing the files**, now all raylib file loading/saving goes through a couple of functions that load data into memory. This feature allows **custom virtual-file-systems** and it gives more control to the user to access data already loaded in memory (i.e. images, fonts, sounds...).
|
||||||
|
|
||||||
|
- NEW **Window states** management system: raylib `core` module has been redesigned to support Window **state check and setup more easily** and also **before/after Window initialization**, `SetConfigFlags()` has been reviewed and `SetWindowState()` has been added to control Window minification, maximization, hidding, focusing, topmost and more.
|
||||||
|
|
||||||
|
- NEW **GitHub Actions** CI/CD system: Previous CI implementation has been reviewed and improved a lot to support **multiple build configurations** (platforms, compilers, static/shared build) and also an **automatic deploy system** has been implemented to automatically attach the diferent generated artifacts to every new release. As the system seems to work very good, previous CI platforms (AppVeyor/TravisCI) have been removed.
|
||||||
|
|
||||||
|
A part of those changes, many new functions have been added, some redundant functions removed and many functions have been reviewed for consistency with the full API (function name, parameters name and order, code formatting...). Again, this release represents is a **great improvement for raylib and marks the way forward** for the library. Make sure to check [CHANGELOG](CHANGELOG) for details! Hope you enjoy it!
|
||||||
|
|
||||||
|
Happy holidays! :)
|
||||||
|
|
|
||||||
2
LICENSE
|
|
@ -1,4 +1,4 @@
|
||||||
Copyright (c) 2013-2020 Ramon Santamaria (@raysan5)
|
Copyright (c) 2013-2021 Ramon Santamaria (@raysan5)
|
||||||
|
|
||||||
This software is provided "as-is", without any express or implied warranty. In no event
|
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.
|
will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
|
|
||||||
21
README.md
|
|
@ -12,7 +12,7 @@ Ready to learn? Jump to [code examples!](http://www.raylib.com/examples.html)
|
||||||
|
|
||||||
[](https://github.com/raysan5/raylib/graphs/contributors)
|
[](https://github.com/raysan5/raylib/graphs/contributors)
|
||||||
[](https://github.com/raysan5/raylib/releases)
|
[](https://github.com/raysan5/raylib/releases)
|
||||||
[](https://github.com/raysan5/raylib/commits/master)
|
[](https://github.com/raysan5/raylib/commits/master)
|
||||||
[](LICENSE)
|
[](LICENSE)
|
||||||
|
|
||||||
[](https://discord.gg/VkzNHUE)
|
[](https://discord.gg/VkzNHUE)
|
||||||
|
|
@ -20,7 +20,6 @@ Ready to learn? Jump to [code examples!](http://www.raylib.com/examples.html)
|
||||||
[](https://twitter.com/raysan5)
|
[](https://twitter.com/raysan5)
|
||||||
[](https://www.reddit.com/r/raylib/)
|
[](https://www.reddit.com/r/raylib/)
|
||||||
|
|
||||||
[](https://travis-ci.org/raysan5/raylib)
|
|
||||||
[](https://github.com/raysan5/raylib/actions?query=workflow%3AWindows)
|
[](https://github.com/raysan5/raylib/actions?query=workflow%3AWindows)
|
||||||
[](https://github.com/raysan5/raylib/actions?query=workflow%3ALinux)
|
[](https://github.com/raysan5/raylib/actions?query=workflow%3ALinux)
|
||||||
[](https://github.com/raysan5/raylib/actions?query=workflow%3AmacOS)
|
[](https://github.com/raysan5/raylib/actions?query=workflow%3AmacOS)
|
||||||
|
|
@ -30,7 +29,7 @@ Ready to learn? Jump to [code examples!](http://www.raylib.com/examples.html)
|
||||||
features
|
features
|
||||||
--------
|
--------
|
||||||
- **NO external dependencies**, all required libraries are bundled into raylib
|
- **NO external dependencies**, all required libraries are bundled into raylib
|
||||||
- Multiple platforms supported: **Windows, Linux, MacOS, Android, HTML5... and more!**
|
- Multiple platforms supported: **Windows, Linux, MacOS, RPI, Android, HTML5... and more!**
|
||||||
- Written in plain C code (C99) in PascalCase/camelCase notation
|
- Written in plain C code (C99) in PascalCase/camelCase notation
|
||||||
- Hardware accelerated with OpenGL (**1.1, 2.1, 3.3 or ES 2.0**)
|
- Hardware accelerated with OpenGL (**1.1, 2.1, 3.3 or ES 2.0**)
|
||||||
- **Unique OpenGL abstraction layer** (usable as standalone module): [rlgl](https://github.com/raysan5/raylib/blob/master/src/rlgl.h)
|
- **Unique OpenGL abstraction layer** (usable as standalone module): [rlgl](https://github.com/raysan5/raylib/blob/master/src/rlgl.h)
|
||||||
|
|
@ -43,8 +42,8 @@ features
|
||||||
- **Powerful math module** for Vector, Matrix and Quaternion operations: [raymath](https://github.com/raysan5/raylib/blob/master/src/raymath.h)
|
- **Powerful math module** for Vector, Matrix and Quaternion operations: [raymath](https://github.com/raysan5/raylib/blob/master/src/raymath.h)
|
||||||
- Audio loading and playing with streaming support (WAV, OGG, MP3, FLAC, XM, MOD)
|
- Audio loading and playing with streaming support (WAV, OGG, MP3, FLAC, XM, MOD)
|
||||||
- **VR stereo rendering** support with configurable HMD device parameters
|
- **VR stereo rendering** support with configurable HMD device parameters
|
||||||
- Huge examples collection with [+115 code examples](https://github.com/raysan5/raylib/tree/master/examples)!
|
- Huge examples collection with [+120 code examples](https://github.com/raysan5/raylib/tree/master/examples)!
|
||||||
- Bindings to [+40 programming languages](https://github.com/raysan5/raylib/blob/master/BINDINGS.md)!
|
- Bindings to [+50 programming languages](https://github.com/raysan5/raylib/blob/master/BINDINGS.md)!
|
||||||
- Free and open source.
|
- Free and open source.
|
||||||
|
|
||||||
raylib uses on its [core](https://github.com/raysan5/raylib/blob/master/src/core.c) module the outstanding [GLFW3](http://www.glfw.org/) library, embedded in the form of [rglfw](https://github.com/raysan5/raylib/blob/master/src/rglfw.c) module, to avoid external dependencies.
|
raylib uses on its [core](https://github.com/raysan5/raylib/blob/master/src/core.c) module the outstanding [GLFW3](http://www.glfw.org/) library, embedded in the form of [rglfw](https://github.com/raysan5/raylib/blob/master/src/rglfw.c) module, to avoid external dependencies.
|
||||||
|
|
@ -55,7 +54,9 @@ raylib uses internally several single-file header-only libraries to support diff
|
||||||
|
|
||||||
*On Android platform, `native_app_glue` module (provided by Android NDK) and native Android libraries are used to manage window/context, inputs and activity life cycle.*
|
*On Android platform, `native_app_glue` module (provided by Android NDK) and native Android libraries are used to manage window/context, inputs and activity life cycle.*
|
||||||
|
|
||||||
*On Raspberry Pi platform (native mode), `Videocore API` and `EGL` libraries are used for window/context management. Inputs are processed using `evdev` Linux libraries*
|
*On Raspberry Pi 0,1,2,3 platform (native mode), `Videocore API` and `EGL` libraries are used for window/context management. Inputs are processed using `evdev` Linux libraries*
|
||||||
|
|
||||||
|
*On Raspberry Pi 4 platform (native mode), `DRM subsystem` and `GBM API` libraries are used for window/context management. Inputs are processed using `evdev` Linux libraries*
|
||||||
|
|
||||||
*On Web platform, raylib uses `emscripten` provided libraries for several input events management, specially noticeable the touch events support.*
|
*On Web platform, raylib uses `emscripten` provided libraries for several input events management, specially noticeable the touch events support.*
|
||||||
|
|
||||||
|
|
@ -78,6 +79,14 @@ You can download and install raylib using the [vcpkg](https://github.com/Microso
|
||||||
|
|
||||||
*The raylib port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.*
|
*The raylib port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.*
|
||||||
|
|
||||||
|
#### Installing and building raylib via conan
|
||||||
|
|
||||||
|
You can download and install raylib using the [conan](https://conan.io) dependency manager:
|
||||||
|
|
||||||
|
https://docs.conan.io/en/latest/getting_started.html
|
||||||
|
|
||||||
|
*The raylib recipe in conan is kept up to date by conan team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/conan-io/conan-center-index) on the conan-center-index repository.*
|
||||||
|
|
||||||
#### Building raylib on multiple platforms
|
#### Building raylib on multiple platforms
|
||||||
|
|
||||||
[raylib Wiki](https://github.com/raysan5/raylib/wiki#development-platforms) contains detailed instructions on building and usage on multiple platforms.
|
[raylib Wiki](https://github.com/raysan5/raylib/wiki#development-platforms) contains detailed instructions on building and usage on multiple platforms.
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ Here it is a wish-list with features and ideas to improve the library. Note that
|
||||||
- [ ] Network module (UDP): `rnet` ([info](https://github.com/raysan5/raylib/issues/753))
|
- [ ] Network module (UDP): `rnet` ([info](https://github.com/raysan5/raylib/issues/753))
|
||||||
- [ ] Custom raylib resource packer: `rres` ([info](https://github.com/raysan5/rres))
|
- [ ] Custom raylib resource packer: `rres` ([info](https://github.com/raysan5/rres))
|
||||||
- [ ] Basic CPU/GPU stats system (memory, draws, time...)
|
- [ ] Basic CPU/GPU stats system (memory, draws, time...)
|
||||||
- [ ] Continuous Deployment using GitHub Actions
|
- [x] Continuous Deployment using GitHub Actions
|
||||||
|
|
||||||
**raylib 3.0**
|
**raylib 3.0**
|
||||||
- [x] Custom memory allocators support
|
- [x] Custom memory allocators support
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ The following people has contributed with a generous donation to the raylib proj
|
||||||
- Rudy Faile ([@rfaile313](https://github.com/rfaile313)) - https://rudyfaile.com/
|
- Rudy Faile ([@rfaile313](https://github.com/rfaile313)) - https://rudyfaile.com/
|
||||||
- devdad ([@devdad](https://github.com/devdad))
|
- devdad ([@devdad](https://github.com/devdad))
|
||||||
- frithrah ([@frithrah](https://github.com/frithrah))
|
- frithrah ([@frithrah](https://github.com/frithrah))
|
||||||
|
- Zach Geis ([@zacgeis](https://github.com/zacgeis))
|
||||||
|
|
||||||
## 🥉 Bronze Contributors
|
## 🥉 Bronze Contributors
|
||||||
|
|
||||||
|
|
@ -39,4 +40,8 @@ The following people has contributed with a generous donation to the raylib proj
|
||||||
- Samuel Batista ([@gamedevsam](https://github.com/gamedevsam))
|
- Samuel Batista ([@gamedevsam](https://github.com/gamedevsam))
|
||||||
- Alexandre Chêne ([@kooparse](https://github.com/kooparse))
|
- Alexandre Chêne ([@kooparse](https://github.com/kooparse))
|
||||||
- daddio69 ([@daddio69](https://github.com/daddio69))
|
- daddio69 ([@daddio69](https://github.com/daddio69))
|
||||||
|
- James Ghawaly ([@jghawaly](https://github.com/jghawaly))
|
||||||
|
- jack ([@Jack-Ji](https://github.com/Jack-Ji))
|
||||||
|
- Merlyn Morgan-Graham ([@kavika13](https://github.com/kavika13))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
18
cmake/BuildOptions.cmake
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
if(${PLATFORM} MATCHES "Desktop" AND APPLE)
|
||||||
|
if(MACOS_FATLIB)
|
||||||
|
if (CMAKE_OSX_ARCHITECTURES)
|
||||||
|
message(FATAL_ERROR "User supplied -DCMAKE_OSX_ARCHITECTURES overrides -DMACOS_FATLIB=ON")
|
||||||
|
else()
|
||||||
|
set(CMAKE_OSX_ARCHITECTURES "x86_64;i386")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# This helps support the case where emsdk toolchain file is used
|
||||||
|
# either by setting it with -DCMAKE_TOOLCHAIN_FILE=<path_to_emsdk>/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake
|
||||||
|
# or by using "emcmake cmake -B build -S ." as described in https://emscripten.org/docs/compiling/Building-Projects.html
|
||||||
|
if(EMSCRIPTEN)
|
||||||
|
SET(PLATFORM Web CACHE STRING "Forcing PLATFORM_WEB because EMSCRIPTEN was detected")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# vim: ft=cmake
|
||||||
|
|
@ -1,43 +0,0 @@
|
||||||
# Set a default build type if none was specified
|
|
||||||
set(default_build_type "Release")
|
|
||||||
if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
|
|
||||||
set(default_build_type "Debug")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
||||||
message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
|
|
||||||
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
|
|
||||||
STRING "Choose the type of build." FORCE)
|
|
||||||
# Set the possible values of build type for cmake-gui
|
|
||||||
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
|
|
||||||
"MinSizeRel" "RelWithDebInfo")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Taken from the https://github.com/OpenChemistry/tomviz project
|
|
||||||
# Copyright (c) 2014-2017, Kitware, Inc.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions are met:
|
|
||||||
#
|
|
||||||
# 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
# list of conditions and the following disclaimer.
|
|
||||||
#
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
# this list of conditions and the following disclaimer in the documentation
|
|
||||||
# and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# 3. Neither the name of the copyright holder nor the names of its contributors
|
|
||||||
# may be used to endorse or promote products derived from this software
|
|
||||||
# without specific prior written permission.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
||||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
|
||||||
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
109
cmake/CompileDefinitions.cmake
Normal file
|
|
@ -0,0 +1,109 @@
|
||||||
|
# Adding compile definitions
|
||||||
|
target_compile_definitions("raylib" PUBLIC "${PLATFORM_CPP}")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "${GRAPHICS}")
|
||||||
|
|
||||||
|
function(define_if target variable)
|
||||||
|
if (${${variable}})
|
||||||
|
target_compile_definitions(${target} PUBLIC "${variable}")
|
||||||
|
endif ()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
if (${CUSTOMIZE_BUILD})
|
||||||
|
target_compile_definitions("raylib" PUBLIC EXTERNAL_CONFIG_FLAGS)
|
||||||
|
define_if("raylib" SUPPORT_CAMERA_SYSTEM)
|
||||||
|
define_if("raylib" SUPPORT_GESTURES_SYSTEM)
|
||||||
|
define_if("raylib" SUPPORT_MOUSE_GESTURES)
|
||||||
|
define_if("raylib" SUPPORT_SSH_KEYBOARD_RPI)
|
||||||
|
define_if("raylib" SUPPORT_BUSY_WAIT_LOOP)
|
||||||
|
define_if("raylib" SUPPORT_EVENTS_WAITING)
|
||||||
|
define_if("raylib" SUPPORT_SCREEN_CAPTURE)
|
||||||
|
define_if("raylib" SUPPORT_GIF_RECORDING)
|
||||||
|
define_if("raylib" SUPPORT_HIGH_DPI)
|
||||||
|
define_if("raylib" SUPPORT_COMPRESSION_API)
|
||||||
|
define_if("raylib" SUPPORT_DATA_STORAGE)
|
||||||
|
define_if("raylib" SUPPORT_VR_SIMULATOR)
|
||||||
|
define_if("raylib" SUPPORT_FONT_TEXTURE)
|
||||||
|
define_if("raylib" SUPPORT_QUADS_DRAW_MODE)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_PNG)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_DDS)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_HDR)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_KTX)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_ASTC)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_BMP)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_TGA)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_JPG)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_GIF)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_PSD)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_PKM)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_PVR)
|
||||||
|
define_if("raylib" ORT_IMAGE_EXPORT)
|
||||||
|
define_if("raylib" SUPPORT_IMAGE_MANIPULATION)
|
||||||
|
define_if("raylib" SUPPORT_IMAGE_GENERATION)
|
||||||
|
define_if("raylib" SUPPORT_DEFAULT_FONT)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_FNT)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_TTF)
|
||||||
|
define_if("raylib" SUPPORT_TEXT_MANIPULATION)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_OBJ)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_MTL)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_IQM)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_GLTF)
|
||||||
|
define_if("raylib" SUPPORT_MESH_GENERATION)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_WAV)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_OGG)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_XM)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_MOD)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_FLAC)
|
||||||
|
define_if("raylib" SUPPORT_FILEFORMAT_MP3)
|
||||||
|
define_if("raylib" SUPPORT_TRACELOG)
|
||||||
|
define_if("raylib" SUPPORT_COMPRESSION_API)
|
||||||
|
|
||||||
|
|
||||||
|
if (UNIX AND NOT APPLE)
|
||||||
|
target_compile_definitions("raylib" PUBLIC "MAX_FILEPATH_LENGTH=4096")
|
||||||
|
else ()
|
||||||
|
target_compile_definitions("raylib" PUBLIC "MAX_FILEPATH_LENGTH=512")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
target_compile_definitions("raylib" PUBLIC "MAX_GAMEPADS=4")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "MAX_GAMEPAD_AXIS=8")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "MAX_GAMEPAD_BUTTONS=32")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "MAX_TOUCH_POINTS=10")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "MAX_KEY_PRESSED_QUEUE=16")
|
||||||
|
|
||||||
|
target_compile_definitions("raylib" PUBLIC "STORAGE_DATA_FILE=\"storage.data\"")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "MAX_KEY_PRESSED_QUEUE=16")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "MAX_DECOMPRESSION_SIZE=64")
|
||||||
|
|
||||||
|
if (${GRAPHICS} MATCHES "GRAPHICS_API_OPENGL_33" OR ${GRAPHICS} MATCHES "GRAPHICS_API_OPENGL_11")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "DEFAULT_BATCH_BUFFER_ELEMENTS=8192")
|
||||||
|
elseif (${GRAPHICS} MATCHES "GRAPHICS_API_OPENGL_ES2")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "DEFAULT_BATCH_BUFFER_ELEMENTS=2048")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
target_compile_definitions("raylib" PUBLIC "DEFAULT_BATCH_DRAWCALLS=256")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "MAX_MATRIX_STACK_SIZE=32")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "MAX_SHADER_LOCATIONS=32")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "MAX_MATERIAL_MAPS=12")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "RL_CULL_DISTANCE_NEAR=0.01")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "RL_CULL_DISTANCE_FAR=1000.0")
|
||||||
|
|
||||||
|
target_compile_definitions("raylib" PUBLIC "DEFAULT_SHADER_ATTRIB_NAME_POSITION=\"vertexPosition\"")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD=\"vertexTexCoord\"")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "DEFAULT_SHADER_ATTRIB_NAME_NORMAL=\"vertexNormal\"")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "DEFAULT_SHADER_ATTRIB_NAME_COLOR=\"vertexColor\"")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "DEFAULT_SHADER_ATTRIB_NAME_TANGENT=\"vertexTangent\"")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2=\"vertexTexCoord2\"")
|
||||||
|
|
||||||
|
target_compile_definitions("raylib" PUBLIC "MAX_TEXT_BUFFER_LENGTH=1024")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "MAX_TEXT_UNICODE_CHARS=512")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "MAX_TEXTSPLIT_COUNT=128")
|
||||||
|
|
||||||
|
target_compile_definitions("raylib" PUBLIC "AUDIO_DEVICE_FORMAT=ma_format_f32")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "AUDIO_DEVICE_CHANNELS=2")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "AUDIO_DEVICE_SAMPLE_RATE=44100")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "DEFAULT_AUDIO_BUFFER_SIZE=4096")
|
||||||
|
|
||||||
|
target_compile_definitions("raylib" PUBLIC "MAX_TRACELOG_MSG_LENGTH=128")
|
||||||
|
target_compile_definitions("raylib" PUBLIC "MAX_UWP_MESSAGES=512")
|
||||||
|
endif ()
|
||||||
|
|
||||||
79
cmake/CompilerFlags.cmake
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
include(AddIfFlagCompiles)
|
||||||
|
|
||||||
|
# Makes +/- operations on void pointers be considered an error
|
||||||
|
# https://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html
|
||||||
|
add_if_flag_compiles(-Werror=pointer-arith CMAKE_C_FLAGS)
|
||||||
|
|
||||||
|
# Generates error whenever a function is used before being declared
|
||||||
|
# https://gcc.gnu.org/onlinedocs/gcc-4.0.1/gcc/Warning-Options.html
|
||||||
|
add_if_flag_compiles(-Werror=implicit-function-declaration CMAKE_C_FLAGS)
|
||||||
|
|
||||||
|
# Allows some casting of pointers without generating a warning
|
||||||
|
add_if_flag_compiles(-fno-strict-aliasing CMAKE_C_FLAGS)
|
||||||
|
|
||||||
|
if (ENABLE_MSAN AND ENABLE_ASAN)
|
||||||
|
# MSAN and ASAN both work on memory - ASAN does more things
|
||||||
|
MESSAGE(WARNING "Compiling with both AddressSanitizer and MemorySanitizer is not recommended")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (ENABLE_ASAN)
|
||||||
|
|
||||||
|
# If enabled it would generate errors/warnings for all kinds of memory errors
|
||||||
|
# (like returning a stack variable by reference)
|
||||||
|
# https://clang.llvm.org/docs/AddressSanitizer.html
|
||||||
|
|
||||||
|
add_if_flag_compiles(-fno-omit-frame-pointer CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
||||||
|
add_if_flag_compiles(-fsanitize=address CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (ENABLE_UBSAN)
|
||||||
|
|
||||||
|
# If enabled this will generate errors for undefined behavior points
|
||||||
|
# (like adding +1 to the maximum int value)
|
||||||
|
# https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
|
||||||
|
|
||||||
|
add_if_flag_compiles(-fno-omit-frame-pointer CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
||||||
|
add_if_flag_compiles(-fsanitize=undefined CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (ENABLE_MSAN)
|
||||||
|
|
||||||
|
# If enabled this will generate warnings for places where uninitialized memory is used
|
||||||
|
# https://clang.llvm.org/docs/MemorySanitizer.html
|
||||||
|
|
||||||
|
add_if_flag_compiles(-fno-omit-frame-pointer CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
||||||
|
add_if_flag_compiles(-fsanitize=memory CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_VERSION VERSION_LESS "3.1")
|
||||||
|
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
||||||
|
add_if_flag_compiles(-std=gnu99 CMAKE_C_FLAGS)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set (CMAKE_C_STANDARD 99)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(${PLATFORM} MATCHES "Android")
|
||||||
|
|
||||||
|
# If enabled will remove dead code during the linking process
|
||||||
|
# https://gcc.gnu.org/onlinedocs/gnat_ugn/Compilation-options.html
|
||||||
|
add_if_flag_compiles(-ffunction-sections CMAKE_C_FLAGS)
|
||||||
|
|
||||||
|
# If enabled will generate some exception data (usually disabled for C programs)
|
||||||
|
# https://gcc.gnu.org/onlinedocs/gcc-4.2.4/gcc/Code-Gen-Options.html
|
||||||
|
add_if_flag_compiles(-funwind-tables CMAKE_C_FLAGS)
|
||||||
|
|
||||||
|
# If enabled adds stack protection guards around functions that allocate memory
|
||||||
|
# https://www.keil.com/support/man/docs/armclang_ref/armclang_ref_cjh1548250046139.htm
|
||||||
|
add_if_flag_compiles(-fstack-protector-strong CMAKE_C_FLAGS)
|
||||||
|
|
||||||
|
# Marks that the library will not be compiled with an executable stack
|
||||||
|
add_if_flag_compiles(-Wa,--noexecstack CMAKE_C_FLAGS)
|
||||||
|
|
||||||
|
# Do not expand symbolic links or resolve paths like "/./" or "/../", etc.
|
||||||
|
# https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html
|
||||||
|
add_if_flag_compiles(-no-canonical-prefixes CMAKE_C_FLAGS)
|
||||||
|
endif()
|
||||||
34
cmake/GlfwImport.cmake
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
|
||||||
|
if(USE_EXTERNAL_GLFW STREQUAL "ON")
|
||||||
|
find_package(glfw3 3.2.1 REQUIRED)
|
||||||
|
elseif(USE_EXTERNAL_GLFW STREQUAL "IF_POSSIBLE")
|
||||||
|
find_package(glfw3 3.2.1 QUIET)
|
||||||
|
endif()
|
||||||
|
if (glfw3_FOUND)
|
||||||
|
set(LIBS_PRIVATE ${LIBS_PRIVATE} glfw)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Explicitly check against "ON", because USE_EXTERNAL_GLFW is a tristate option
|
||||||
|
# Also adding only on desktop (web also uses glfw but it is more limited and is added using an emcc linker flag)
|
||||||
|
if(NOT glfw3_FOUND AND NOT USE_EXTERNAL_GLFW STREQUAL "ON" AND "${PLATFORM}" MATCHES "Desktop")
|
||||||
|
MESSAGE(STATUS "Using raylib's GLFW")
|
||||||
|
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
|
||||||
|
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
||||||
|
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
|
||||||
|
set(GLFW_INSTALL OFF CACHE BOOL "" FORCE)
|
||||||
|
set(GLFW_USE_WAYLAND ${USE_WAYLAND} CACHE BOOL "" FORCE)
|
||||||
|
|
||||||
|
set(WAS_SHARED ${BUILD_SHARED_LIBS})
|
||||||
|
set(BUILD_SHARED_LIBS OFF CACHE BOOL " " FORCE)
|
||||||
|
|
||||||
|
add_subdirectory(external/glfw)
|
||||||
|
|
||||||
|
set(BUILD_SHARED_LIBS ${WAS_SHARED} CACHE BOOL " " FORCE)
|
||||||
|
unset(WAS_SHARED)
|
||||||
|
|
||||||
|
list(APPEND raylib_sources $<TARGET_OBJECTS:glfw_objlib>)
|
||||||
|
include_directories(BEFORE SYSTEM external/glfw/include)
|
||||||
|
else()
|
||||||
|
MESSAGE(STATUS "Using external GLFW")
|
||||||
|
set(GLFW_PKG_DEPS glfw3)
|
||||||
|
endif()
|
||||||
29
cmake/InstallConfigurations.cmake
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
install(
|
||||||
|
TARGETS raylib EXPORT raylib-targets
|
||||||
|
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
||||||
|
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
||||||
|
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
||||||
|
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
||||||
|
)
|
||||||
|
|
||||||
|
# PKG_CONFIG_LIBS_PRIVATE is used in raylib.pc.in
|
||||||
|
if (NOT BUILD_SHARED_LIBS)
|
||||||
|
include(LibraryPathToLinkerFlags)
|
||||||
|
library_path_to_linker_flags(__PKG_CONFIG_LIBS_PRIVATE "${LIBS_PRIVATE}")
|
||||||
|
set(PKG_CONFIG_LIBS_PRIVATE ${__PKG_CONFIG_LIBS_PRIVATE} ${GLFW_PKG_LIBS})
|
||||||
|
string(REPLACE ";" " " PKG_CONFIG_LIBS_PRIVATE "${PKG_CONFIG_LIBS_PRIVATE}")
|
||||||
|
elseif (BUILD_SHARED_LIBS)
|
||||||
|
set(PKG_CONFIG_LIBS_EXTRA "")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
join_paths(libdir_for_pc_file "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}")
|
||||||
|
join_paths(includedir_for_pc_file "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
|
||||||
|
configure_file(../raylib.pc.in raylib.pc @ONLY)
|
||||||
|
configure_file(../cmake/raylib-config-version.cmake raylib-config-version.cmake @ONLY)
|
||||||
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/raylib.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
||||||
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/raylib-config-version.cmake DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/raylib")
|
||||||
|
install(FILES ${PROJECT_SOURCE_DIR}/../cmake/raylib-config.cmake DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/raylib")
|
||||||
|
|
||||||
|
# populates raylib_{FOUND, INCLUDE_DIRS, LIBRARIES, LDFLAGS, DEFINITIONS}
|
||||||
|
include(PopulateConfigVariablesLocally)
|
||||||
|
populate_config_variables_locally(raylib)
|
||||||
105
cmake/LibraryConfigurations.cmake
Normal file
|
|
@ -0,0 +1,105 @@
|
||||||
|
if (${PLATFORM} MATCHES "Desktop")
|
||||||
|
set(PLATFORM_CPP "PLATFORM_DESKTOP")
|
||||||
|
|
||||||
|
if (APPLE)
|
||||||
|
# Need to force OpenGL 3.3 on OS X
|
||||||
|
# See: https://github.com/raysan5/raylib/issues/341
|
||||||
|
set(GRAPHICS "GRAPHICS_API_OPENGL_33")
|
||||||
|
find_library(OPENGL_LIBRARY OpenGL)
|
||||||
|
set(LIBS_PRIVATE ${OPENGL_LIBRARY})
|
||||||
|
link_libraries("${LIBS_PRIVATE}")
|
||||||
|
if (NOT CMAKE_SYSTEM STRLESS "Darwin-18.0.0")
|
||||||
|
add_definitions(-DGL_SILENCE_DEPRECATION)
|
||||||
|
MESSAGE(AUTHOR_WARNING "OpenGL is deprecated starting with macOS 10.14 (Mojave)!")
|
||||||
|
endif ()
|
||||||
|
elseif (WIN32)
|
||||||
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
||||||
|
set(LIBS_PRIVATE ${LIBS_PRIVATE} winmm)
|
||||||
|
else ()
|
||||||
|
find_library(pthread NAMES pthread)
|
||||||
|
find_package(OpenGL QUIET)
|
||||||
|
if ("${OPENGL_LIBRARIES}" STREQUAL "")
|
||||||
|
set(OPENGL_LIBRARIES "GL")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if ("${CMAKE_SYSTEM_NAME}" MATCHES "(Net|Open)BSD")
|
||||||
|
find_library(OSS_LIBRARY ossaudio)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
set(LIBS_PRIVATE m pthread ${OPENGL_LIBRARIES} ${OSS_LIBRARY})
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
elseif (${PLATFORM} MATCHES "Web")
|
||||||
|
set(PLATFORM_CPP "PLATFORM_WEB")
|
||||||
|
set(GRAPHICS "GRAPHICS_API_OPENGL_ES2")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s USE_GLFW=3 -s ASSERTIONS=1 --profiling")
|
||||||
|
set(CMAKE_STATIC_LIBRARY_SUFFIX ".a")
|
||||||
|
|
||||||
|
elseif (${PLATFORM} MATCHES "Android")
|
||||||
|
set(PLATFORM_CPP "PLATFORM_ANDROID")
|
||||||
|
set(GRAPHICS "GRAPHICS_API_OPENGL_ES2")
|
||||||
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||||
|
|
||||||
|
add_definitions(-DANDROID -D__ANDROID_API__=21)
|
||||||
|
include_directories(external/android/native_app_glue)
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--exclude-libs,libatomic.a -Wl,--build-id -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings -uANativeActivity_onCreate")
|
||||||
|
|
||||||
|
find_library(OPENGL_LIBRARY OpenGL)
|
||||||
|
set(LIBS_PRIVATE m log android EGL GLESv2 OpenSLES atomic c)
|
||||||
|
|
||||||
|
elseif (${PLATFORM} MATCHES "Raspberry Pi")
|
||||||
|
set(PLATFORM_CPP "PLATFORM_RPI")
|
||||||
|
set(GRAPHICS "GRAPHICS_API_OPENGL_ES2")
|
||||||
|
|
||||||
|
add_definitions(-D_DEFAULT_SOURCE)
|
||||||
|
|
||||||
|
find_library(GLESV2 brcmGLESv2 HINTS /opt/vc/lib)
|
||||||
|
find_library(EGL brcmEGL HINTS /opt/vc/lib)
|
||||||
|
find_library(BCMHOST bcm_host HINTS /opt/vc/lib)
|
||||||
|
include_directories(/opt/vc/include /opt/vc/include/interface/vmcs_host/linux /opt/vc/include/interface/vcos/pthreads)
|
||||||
|
link_directories(/opt/vc/lib)
|
||||||
|
set(LIBS_PRIVATE ${GLESV2} ${EGL} ${BCMHOST} pthread rt m dl)
|
||||||
|
|
||||||
|
elseif (${PLATFORM} MATCHES "DRM")
|
||||||
|
set(PLATFORM_CPP "PLATFORM_DRM")
|
||||||
|
set(GRAPHICS "GRAPHICS_API_OPENGL_ES2")
|
||||||
|
|
||||||
|
add_definitions(-D_DEFAULT_SOURCE)
|
||||||
|
add_definitions(-DEGL_NO_X11)
|
||||||
|
add_definitions(-DPLATFORM_DRM)
|
||||||
|
|
||||||
|
find_library(GLESV2 GLESv2)
|
||||||
|
find_library(EGL EGL)
|
||||||
|
find_library(DRM drm)
|
||||||
|
find_library(GBM gbm)
|
||||||
|
|
||||||
|
include_directories(/usr/include/libdrm)
|
||||||
|
set(LIBS_PRIVATE ${GLESV2} ${EGL} ${DRM} ${GBM} pthread m dl)
|
||||||
|
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (${OPENGL_VERSION})
|
||||||
|
set(${SUGGESTED_GRAPHICS} "${GRAPHICS}")
|
||||||
|
if (${OPENGL_VERSION} MATCHES "3.3")
|
||||||
|
set(GRAPHICS "GRAPHICS_API_OPENGL_33")
|
||||||
|
elseif (${OPENGL_VERSION} MATCHES "2.1")
|
||||||
|
set(GRAPHICS "GRAPHICS_API_OPENGL_21")
|
||||||
|
elseif (${OPENGL_VERSION} MATCHES "1.1")
|
||||||
|
set(GRAPHICS "GRAPHICS_API_OPENGL_11")
|
||||||
|
elseif (${OPENGL_VERSION} MATCHES "ES 2.0")
|
||||||
|
set(GRAPHICS "GRAPHICS_API_OPENGL_ES2")
|
||||||
|
endif ()
|
||||||
|
if ("${SUGGESTED_GRAPHICS}" AND NOT "${SUGGESTED_GRAPHICS}" STREQUAL "${GRAPHICS}")
|
||||||
|
message(WARNING "You are overriding the suggested GRAPHICS=${SUGGESTED_GRAPHICS} with ${GRAPHICS}! This may fail")
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (NOT GRAPHICS)
|
||||||
|
set(GRAPHICS "GRAPHICS_API_OPENGL_33")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
set(LIBS_PRIVATE ${LIBS_PRIVATE} ${OPENAL_LIBRARY})
|
||||||
|
|
||||||
|
if (${PLATFORM} MATCHES "Desktop")
|
||||||
|
set(LIBS_PRIVATE ${LIBS_PRIVATE} glfw)
|
||||||
|
endif ()
|
||||||
13
cmake/PackConfigurations.cmake
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
# Packaging
|
||||||
|
SET(CPACK_PACKAGE_NAME "raylib")
|
||||||
|
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Simple and easy-to-use library to enjoy videogames programming")
|
||||||
|
SET(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
|
||||||
|
SET(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}")
|
||||||
|
SET(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
|
||||||
|
SET(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}")
|
||||||
|
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/../README.md")
|
||||||
|
SET(CPACK_RESOURCE_FILE_WELCOME "${PROJECT_SOURCE_DIR}/../README.md")
|
||||||
|
SET(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/../LICENSE")
|
||||||
|
SET(CPACK_PACKAGE_FILE_NAME "raylib-${PROJECT_VERSION}$ENV{RAYLIB_PACKAGE_SUFFIX}")
|
||||||
|
SET(CPACK_GENERATOR "ZIP;TGZ") # Remove this, if you want the NSIS installer on Windows
|
||||||
|
include(CPack)
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
SET(CMAKE_SYSTEM_NAME Linux)
|
|
||||||
|
|
||||||
SET(CMAKE_C_COMPILER emcc)
|
|
||||||
SET(CMAKE_CXX_COMPILER em++)
|
|
||||||
if(NOT DEFINED CMAKE_AR)
|
|
||||||
find_program(CMAKE_AR NAMES emar)
|
|
||||||
endif()
|
|
||||||
if(NOT DEFINED CMAKE_RANLIB)
|
|
||||||
find_program(CMAKE_RANLIB NAMES emranlib)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
|
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
# Test if including/linking/running an installed raylib works
|
|
||||||
|
|
||||||
set -x
|
|
||||||
export LD_RUN_PATH=/usr/local/lib
|
|
||||||
|
|
||||||
CFLAGS="-Wall -Wextra -Werror $CFLAGS"
|
|
||||||
if [ "$ARCH" = "i386" ]; then
|
|
||||||
CFLAGS="-m32 $CLFAGS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat << EOF | ${CC:-cc} -otest -xc - $(pkg-config --libs --cflags $@ raylib.pc) $CFLAGS && exec ./test
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <raylib.h>
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
int num = GetRandomValue(42, 1337);
|
|
||||||
return 42 <= num && num <= 1337 ? EXIT_SUCCESS : EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
|
|
@ -1,138 +1,138 @@
|
||||||
# Setup the project and settings
|
# Setup the project and settings
|
||||||
project(examples)
|
project(examples)
|
||||||
|
|
||||||
# Get the sources together
|
# Directories that contain examples
|
||||||
set(example_dirs audio core models others shaders shapes text textures)
|
set(example_dirs
|
||||||
|
audio
|
||||||
|
core
|
||||||
|
models
|
||||||
|
others
|
||||||
|
shaders
|
||||||
|
shapes
|
||||||
|
text
|
||||||
|
textures
|
||||||
|
)
|
||||||
|
|
||||||
|
# Next few lines will check for existence of symbols or header files
|
||||||
|
# They are needed for the physac example and threads examples
|
||||||
set(CMAKE_REQUIRED_DEFINITIONS -D_POSIX_C_SOURCE=199309L)
|
set(CMAKE_REQUIRED_DEFINITIONS -D_POSIX_C_SOURCE=199309L)
|
||||||
include(CheckSymbolExists)
|
include(CheckSymbolExists)
|
||||||
check_symbol_exists(CLOCK_MONOTONIC time.h HAVE_CLOCK_MONOTONIC)
|
check_symbol_exists(CLOCK_MONOTONIC time.h HAVE_CLOCK_MONOTONIC)
|
||||||
check_symbol_exists(QueryPerformanceCounter windows.h HAVE_QPC)
|
check_symbol_exists(QueryPerformanceCounter windows.h HAVE_QPC)
|
||||||
set(CMAKE_REQUIRED_DEFINITIONS)
|
set(CMAKE_REQUIRED_DEFINITIONS)
|
||||||
if(HAVE_QPC OR HAVE_CLOCK_MONOTONIC)
|
|
||||||
set(example_dirs ${example_dirs} physac)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(example_sources)
|
if (HAVE_QPC OR HAVE_CLOCK_MONOTONIC)
|
||||||
set(example_resources)
|
set(example_dirs ${example_dirs} physac)
|
||||||
foreach(example_dir ${example_dirs})
|
endif ()
|
||||||
# Get the .c files
|
|
||||||
file(GLOB sources ${example_dir}/*.c)
|
|
||||||
list(APPEND example_sources ${sources})
|
|
||||||
|
|
||||||
# Any any resources
|
|
||||||
file(GLOB resources ${example_dir}/resources/*)
|
|
||||||
list(APPEND example_resources ${resources})
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
if (APPLE AND NOT CMAKE_SYSTEM STRLESS "Darwin-18.0.0")
|
|
||||||
add_definitions(-DGL_SILENCE_DEPRECATION)
|
|
||||||
MESSAGE(AUTHOR_WARNING "OpenGL is deprecated starting with macOS 10.14 (Mojave)!")
|
|
||||||
endif()
|
|
||||||
set(OUTPUT_EXT)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/rlgl_standalone.c)
|
|
||||||
|
|
||||||
include(CheckIncludeFile)
|
include(CheckIncludeFile)
|
||||||
CHECK_INCLUDE_FILE("stdatomic.h" HAVE_STDATOMIC_H)
|
CHECK_INCLUDE_FILE("stdatomic.h" HAVE_STDATOMIC_H)
|
||||||
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
|
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
|
||||||
find_package(Threads)
|
find_package(Threads)
|
||||||
if (CMAKE_USE_PTHREADS_INIT AND HAVE_STDATOMIC_H)
|
if (CMAKE_USE_PTHREADS_INIT AND HAVE_STDATOMIC_H)
|
||||||
add_if_flag_compiles("-std=c11" CMAKE_C_FLAGS)
|
add_if_flag_compiles("-std=c11" CMAKE_C_FLAGS)
|
||||||
if(THREADS_HAVE_PTHREAD_ARG)
|
if (THREADS_HAVE_PTHREAD_ARG)
|
||||||
add_if_flag_compiles("-pthread" CMAKE_C_FLAGS)
|
add_if_flag_compiles("-pthread" CMAKE_C_FLAGS)
|
||||||
endif()
|
endif ()
|
||||||
if(CMAKE_THREAD_LIBS_INIT)
|
if (CMAKE_THREAD_LIBS_INIT)
|
||||||
link_libraries("${CMAKE_THREAD_LIBS_INIT}")
|
link_libraries("${CMAKE_THREAD_LIBS_INIT}")
|
||||||
endif()
|
endif ()
|
||||||
else()
|
endif ()
|
||||||
# Items requiring pthreads
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_loading_thread.c)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
|
if (APPLE AND NOT CMAKE_SYSTEM STRLESS "Darwin-18.0.0")
|
||||||
|
add_definitions(-DGL_SILENCE_DEPRECATION)
|
||||||
|
MESSAGE(AUTHOR_WARNING "OpenGL is deprecated starting with macOS 10.14 (Mojave)!")
|
||||||
|
endif ()
|
||||||
|
|
||||||
if(${PLATFORM} MATCHES "Android")
|
# Collect all source files and resource files
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/rlgl_standalone.c)
|
# into a CMake variable
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/standard_lighting.c)
|
set(example_sources)
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_3d_picking.c)
|
set(example_resources)
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_vr_simulator.c)
|
foreach (example_dir ${example_dirs})
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_3d_camera_free.c)
|
# Get the .c files
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_3d_camera_first_person.c)
|
file(GLOB sources ${example_dir}/*.c)
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_world_screen.c)
|
list(APPEND example_sources ${sources})
|
||||||
|
|
||||||
|
# Any any resources
|
||||||
|
file(GLOB resources ${example_dir}/resources/*)
|
||||||
|
list(APPEND example_resources ${resources})
|
||||||
|
endforeach ()
|
||||||
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_mesh_picking.c)
|
if(NOT CMAKE_USE_PTHREADS_INIT OR NOT HAVE_STDATOMIC_H)
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_material_pbr.c)
|
# Items requiring pthreads
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_cubicmap.c)
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_loading_thread.c)
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_skybox.c)
|
endif ()
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_mesh_picking.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_mesh_generation.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_heightmap.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_billboard.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_rlgl_solar_system.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_rlgl_full_solar_system.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_solar_system.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_obj_viewer.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_animation.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_first_person_maze.c)
|
|
||||||
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_custom_uniform.c)
|
if (${PLATFORM} MATCHES "Android")
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_model_shader.c)
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/rlgl_standalone.c)
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_postprocessing.c)
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/standard_lighting.c)
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_raymarching.c)
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_3d_picking.c)
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_palette_switch.c)
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_vr_simulator.c)
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_basic_lighting.c)
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_3d_camera_free.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_3d_camera_first_person.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_world_screen.c)
|
||||||
|
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_mesh_picking.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_material_pbr.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_cubicmap.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_skybox.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_mesh_picking.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_mesh_generation.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_heightmap.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_billboard.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_rlgl_solar_system.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_rlgl_full_solar_system.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_solar_system.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_obj_viewer.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_animation.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_first_person_maze.c)
|
||||||
|
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_custom_uniform.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_model_shader.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_postprocessing.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_raymarching.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_palette_switch.c)
|
||||||
|
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_basic_lighting.c)
|
||||||
|
|
||||||
elseif(${PLATFORM} MATCHES "Web")
|
elseif (${PLATFORM} MATCHES "Web")
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os -s USE_GLFW=3 -s ASSERTIONS=1 -s WASM=1 -s ASYNCIFY")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os -s USE_GLFW=3 -s ASSERTIONS=1 -s WASM=1 -s ASYNCIFY")
|
||||||
# Since WASM is used, ALLOW_MEMORY_GROWTH has no extra overheads
|
# Since WASM is used, ALLOW_MEMORY_GROWTH has no extra overheads
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s ALLOW_MEMORY_GROWTH=1 --no-heap-copy")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s ALLOW_MEMORY_GROWTH=1 --no-heap-copy")
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --shell-file ${CMAKE_SOURCE_DIR}/src/shell.html")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --shell-file ${CMAKE_SOURCE_DIR}/src/shell.html")
|
||||||
set(OUTPUT_EXT ".html")
|
set(CMAKE_EXECUTABLE_SUFFIX ".html")
|
||||||
|
|
||||||
# Remove the -rdynamic flag because otherwise emscripten
|
# Remove the -rdynamic flag because otherwise emscripten
|
||||||
# does not generate HTML+JS+WASM files, only a non-working
|
# does not generate HTML+JS+WASM files, only a non-working
|
||||||
# and fat HTML
|
# and fat HTML
|
||||||
string(REPLACE "-rdynamic" "" CMAKE_SHARED_LIBRARY_LINK_C_FLAGS ${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS})
|
string(REPLACE "-rdynamic" "" CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS}")
|
||||||
endif()
|
endif ()
|
||||||
|
|
||||||
include_directories(BEFORE SYSTEM others/external/include)
|
include_directories(BEFORE SYSTEM others/external/include)
|
||||||
|
|
||||||
if (NOT TARGET raylib)
|
if (NOT TARGET raylib)
|
||||||
find_package(raylib 2.0 REQUIRED)
|
find_package(raylib 2.0 REQUIRED)
|
||||||
endif()
|
endif ()
|
||||||
|
|
||||||
# Do each example
|
# Do each example
|
||||||
foreach(example_source ${example_sources})
|
foreach (example_source ${example_sources})
|
||||||
# Create the basename for the example
|
|
||||||
get_filename_component(example_name ${example_source} NAME)
|
|
||||||
string(REPLACE ".c" "${OUTPUT_EXT}" example_name ${example_name})
|
|
||||||
|
|
||||||
# Setup the example
|
|
||||||
add_executable(${example_name} ${example_source})
|
|
||||||
|
|
||||||
target_link_libraries(${example_name} raylib)
|
|
||||||
|
|
||||||
string(REGEX MATCH ".*/.*/" resources_dir ${example_source})
|
|
||||||
string(APPEND resources_dir "resources")
|
|
||||||
|
|
||||||
if(${PLATFORM} MATCHES "Web" AND EXISTS ${resources_dir})
|
|
||||||
# The local resources path needs to be mapped to /resources virtual path
|
|
||||||
string(APPEND resources_dir "@resources")
|
|
||||||
set_target_properties(${example_name} PROPERTIES LINK_FLAGS "--preload-file ${resources_dir}")
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
if (${PLATFORM} MATCHES "Desktop")
|
|
||||||
# rlgl_standalone can't be linked with raylib because of duplicate rlgl symbols
|
|
||||||
foreach (example_source "others/rlgl_standalone.c")
|
|
||||||
# Create the basename for the example
|
# Create the basename for the example
|
||||||
get_filename_component(example_name ${example_source} NAME)
|
get_filename_component(example_name ${example_source} NAME)
|
||||||
string(REPLACE ".c" "${OUTPUT_EXT}" example_name ${example_name})
|
string(REPLACE ".c" "" example_name ${example_name})
|
||||||
|
|
||||||
|
# Setup the example
|
||||||
add_executable(${example_name} ${example_source})
|
add_executable(${example_name} ${example_source})
|
||||||
add_dependencies(${example_name} raylib)
|
|
||||||
target_link_libraries(${example_name} ${raylib_LDFLAGS})
|
target_link_libraries(${example_name} raylib)
|
||||||
target_include_directories(${example_name} PRIVATE ${raylib_INCLUDE_DIRS})
|
|
||||||
|
string(REGEX MATCH ".*/.*/" resources_dir ${example_source})
|
||||||
endforeach()
|
string(APPEND resources_dir "resources")
|
||||||
endif()
|
|
||||||
|
if (${PLATFORM} MATCHES "Web" AND EXISTS ${resources_dir})
|
||||||
|
# The local resources path needs to be mapped to /resources virtual path
|
||||||
|
string(APPEND resources_dir "@resources")
|
||||||
|
set_target_properties(${example_name} PROPERTIES LINK_FLAGS "--preload-file ${resources_dir}")
|
||||||
|
endif ()
|
||||||
|
endforeach ()
|
||||||
|
|
||||||
# Copy all of the resource files to the destination
|
# Copy all of the resource files to the destination
|
||||||
file(COPY ${example_resources} DESTINATION "resources/")
|
file(COPY ${example_resources} DESTINATION "resources/")
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
#
|
#
|
||||||
# raylib makefile for Desktop platforms, Raspberry Pi, Android and HTML5
|
# raylib makefile for Desktop platforms, Raspberry Pi, Android and HTML5
|
||||||
#
|
#
|
||||||
# Copyright (c) 2013-2020 Ramon Santamaria (@raysan5)
|
# Copyright (c) 2013-2021 Ramon Santamaria (@raysan5)
|
||||||
#
|
#
|
||||||
# This software is provided "as-is", without any express or implied warranty. In no event
|
# 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.
|
# will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
|
@ -25,8 +25,7 @@
|
||||||
|
|
||||||
# Define required raylib variables
|
# Define required raylib variables
|
||||||
PROJECT_NAME ?= raylib_examples
|
PROJECT_NAME ?= raylib_examples
|
||||||
RAYLIB_VERSION ?= 3.0.0
|
RAYLIB_VERSION ?= 3.5.0
|
||||||
RAYLIB_API_VERSION ?= 3
|
|
||||||
RAYLIB_PATH ?= ..
|
RAYLIB_PATH ?= ..
|
||||||
|
|
||||||
# Define default options
|
# Define default options
|
||||||
|
|
@ -116,10 +115,10 @@ endif
|
||||||
# This is not currently used by src/Makefile. Not sure of its origin or usage. Refer to wiki.
|
# 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.
|
# TODO: update install: target in src/Makefile for RPI, consider relation to LINUX.
|
||||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||||
RAYLIB_PATH ?= /home/pi/raylib
|
RAYLIB_PATH ?= /home/pi/raylib
|
||||||
endif
|
endif
|
||||||
ifeq ($(PLATFORM),PLATFORM_DRM)
|
ifeq ($(PLATFORM),PLATFORM_DRM)
|
||||||
RAYLIB_PATH ?= /home/pi/raylib
|
RAYLIB_PATH ?= /home/pi/raylib
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||||
|
|
@ -241,16 +240,16 @@ ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||||
# -s TOTAL_MEMORY=16777216 # to specify heap memory size (default = 16MB)
|
# -s TOTAL_MEMORY=16777216 # to specify heap memory size (default = 16MB)
|
||||||
# -s USE_PTHREADS=1 # multithreading support
|
# -s USE_PTHREADS=1 # multithreading support
|
||||||
# -s WASM=0 # disable Web Assembly, emitted by default
|
# -s WASM=0 # disable Web Assembly, emitted by default
|
||||||
# -s EMTERPRETIFY=1 # enable emscripten code interpreter (very slow)
|
# -s ASYNCIFY # lets synchronous C/C++ code interact with asynchronous JS
|
||||||
# -s EMTERPRETIFY_ASYNC=1 # support synchronous loops by emterpreter
|
|
||||||
# -s FORCE_FILESYSTEM=1 # force filesystem to load/save files data
|
# -s FORCE_FILESYSTEM=1 # force filesystem to load/save files data
|
||||||
# -s ASSERTIONS=1 # enable runtime checks for common memory allocation errors (-O1 and above turn it off)
|
# -s ASSERTIONS=1 # enable runtime checks for common memory allocation errors (-O1 and above turn it off)
|
||||||
# --profiling # include information for code profiling
|
# --profiling # include information for code profiling
|
||||||
# --memory-init-file 0 # to avoid an external memory initialization code file (.mem)
|
# --memory-init-file 0 # to avoid an external memory initialization code file (.mem)
|
||||||
# --preload-file resources # specify a resources folder for data compilation
|
# --preload-file resources # specify a resources folder for data compilation
|
||||||
CFLAGS += -s USE_GLFW=3 -s FORCE_FILESYSTEM=1 -s ASYNCIFY -s TOTAL_MEMORY=67108864 $(dir $<)resources@resources
|
# --source-map-base # allow debugging in browser with source map
|
||||||
|
CFLAGS += -s USE_GLFW=3 -s ASYNCIFY -s TOTAL_MEMORY=67108864 -s FORCE_FILESYSTEM=1 $(dir $<)resources@resources
|
||||||
|
|
||||||
# NOTE: Simple raylib examples are compiled to be interpreter by emterpreter, that way,
|
# NOTE: Simple raylib examples are compiled to be interpreter with asyncify, that way,
|
||||||
# we can compile same code for ALL platforms with no change required, but, working on bigger
|
# we can compile same code for ALL platforms with no change required, but, working on bigger
|
||||||
# projects, code needs to be refactored to avoid a blocking while() loop, moving Update and Draw
|
# projects, code needs to be refactored to avoid a blocking while() loop, moving Update and Draw
|
||||||
# logic to a self contained function: UpdateDrawFrame(), check core_basic_window_web.c for reference.
|
# logic to a self contained function: UpdateDrawFrame(), check core_basic_window_web.c for reference.
|
||||||
|
|
@ -281,10 +280,7 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
INCLUDE_PATHS += -I/usr/local/include
|
INCLUDE_PATHS += -I/usr/local/include
|
||||||
endif
|
endif
|
||||||
ifeq ($(PLATFORM_OS),LINUX)
|
ifeq ($(PLATFORM_OS),LINUX)
|
||||||
# Reset everything.
|
INCLUDE_PATHS = -I$(RAYLIB_H_INSTALL_PATH) -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external
|
||||||
# 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
|
|
||||||
INCLUDE_PATHS = -I$(RAYLIB_H_INSTALL_PATH) -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/release/include -I$(RAYLIB_PATH)/src/external
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
@ -294,7 +290,7 @@ LDFLAGS = -L. -L$(RAYLIB_RELEASE_PATH) -L$(RAYLIB_PATH)/src
|
||||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
ifeq ($(PLATFORM_OS),WINDOWS)
|
ifeq ($(PLATFORM_OS),WINDOWS)
|
||||||
# resource file contains windows executable icon and properties
|
# resource file contains windows executable icon and properties
|
||||||
LDFLAGS += $(RAYLIB_PATH)/src/raylib.rc.data
|
LDFLAGS += $(RAYLIB_PATH)/src/raylib.rc.data
|
||||||
# -Wl,--subsystem,windows hides the console window
|
# -Wl,--subsystem,windows hides the console window
|
||||||
ifeq ($(BUILD_MODE), RELEASE)
|
ifeq ($(BUILD_MODE), RELEASE)
|
||||||
LDFLAGS += -Wl,--subsystem,windows
|
LDFLAGS += -Wl,--subsystem,windows
|
||||||
|
|
@ -351,7 +347,7 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
ifeq ($(PLATFORM_OS),OSX)
|
ifeq ($(PLATFORM_OS),OSX)
|
||||||
# Libraries for OSX 10.9 desktop compiling
|
# Libraries for OSX 10.9 desktop compiling
|
||||||
# NOTE: Required packages: libopenal-dev libegl1-mesa-dev
|
# NOTE: Required packages: libopenal-dev libegl1-mesa-dev
|
||||||
LDLIBS = -lraylib -framework OpenGL -framework Cocoa -framework IOKit -framework CoreAudio -framework CoreVideo
|
LDLIBS = -lraylib -framework OpenGL -framework Cocoa -framework IOKit -framework CoreAudio -framework CoreVideo
|
||||||
endif
|
endif
|
||||||
ifeq ($(PLATFORM_OS),BSD)
|
ifeq ($(PLATFORM_OS),BSD)
|
||||||
# Libraries for FreeBSD, OpenBSD, NetBSD, DragonFly desktop compiling
|
# Libraries for FreeBSD, OpenBSD, NetBSD, DragonFly desktop compiling
|
||||||
|
|
@ -405,7 +401,8 @@ CORE = \
|
||||||
core/core_storage_values \
|
core/core_storage_values \
|
||||||
core/core_vr_simulator \
|
core/core_vr_simulator \
|
||||||
core/core_loading_thread \
|
core/core_loading_thread \
|
||||||
core/core_quat_conversion
|
core/core_quat_conversion \
|
||||||
|
core/core_window_flags
|
||||||
|
|
||||||
SHAPES = \
|
SHAPES = \
|
||||||
shapes/shapes_basic_shapes \
|
shapes/shapes_basic_shapes \
|
||||||
|
|
@ -423,7 +420,7 @@ SHAPES = \
|
||||||
shapes/shapes_draw_ring \
|
shapes/shapes_draw_ring \
|
||||||
shapes/shapes_draw_circle_sector \
|
shapes/shapes_draw_circle_sector \
|
||||||
shapes/shapes_draw_rectangle_rounded
|
shapes/shapes_draw_rectangle_rounded
|
||||||
|
|
||||||
TEXTURES = \
|
TEXTURES = \
|
||||||
textures/textures_logo_raylib \
|
textures/textures_logo_raylib \
|
||||||
textures/textures_mouse_painting \
|
textures/textures_mouse_painting \
|
||||||
|
|
@ -442,8 +439,9 @@ TEXTURES = \
|
||||||
textures/textures_sprite_button \
|
textures/textures_sprite_button \
|
||||||
textures/textures_sprite_explosion \
|
textures/textures_sprite_explosion \
|
||||||
textures/textures_bunnymark \
|
textures/textures_bunnymark \
|
||||||
textures/textures_blend_modes
|
textures/textures_blend_modes \
|
||||||
|
textures/textures_draw_tiled
|
||||||
|
|
||||||
TEXT = \
|
TEXT = \
|
||||||
text/text_raylib_fonts \
|
text/text_raylib_fonts \
|
||||||
text/text_font_spritefont \
|
text/text_font_spritefont \
|
||||||
|
|
@ -455,7 +453,7 @@ TEXT = \
|
||||||
text/text_writing_anim \
|
text/text_writing_anim \
|
||||||
text/text_rectangle_bounds \
|
text/text_rectangle_bounds \
|
||||||
text/text_unicode
|
text/text_unicode
|
||||||
|
|
||||||
MODELS = \
|
MODELS = \
|
||||||
models/models_animation \
|
models/models_animation \
|
||||||
models/models_billboard \
|
models/models_billboard \
|
||||||
|
|
@ -473,7 +471,7 @@ MODELS = \
|
||||||
models/models_yaw_pitch_roll \
|
models/models_yaw_pitch_roll \
|
||||||
models/models_heightmap \
|
models/models_heightmap \
|
||||||
models/models_waving_cubes
|
models/models_waving_cubes
|
||||||
|
|
||||||
SHADERS = \
|
SHADERS = \
|
||||||
shaders/shaders_model_shader \
|
shaders/shaders_model_shader \
|
||||||
shaders/shaders_shapes_textures \
|
shaders/shaders_shapes_textures \
|
||||||
|
|
@ -489,15 +487,17 @@ SHADERS = \
|
||||||
shaders/shaders_fog \
|
shaders/shaders_fog \
|
||||||
shaders/shaders_simple_mask \
|
shaders/shaders_simple_mask \
|
||||||
shaders/shaders_spotlight \
|
shaders/shaders_spotlight \
|
||||||
shaders/shaders_rlgl_mesh_instanced
|
shaders/shaders_hot_reloading \
|
||||||
|
shaders/shaders_rlgl_mesh_instanced \
|
||||||
|
shaders/shaders_multi_sample2d
|
||||||
|
|
||||||
AUDIO = \
|
AUDIO = \
|
||||||
audio/audio_module_playing \
|
audio/audio_module_playing \
|
||||||
audio/audio_music_stream \
|
audio/audio_music_stream \
|
||||||
audio/audio_raw_stream \
|
audio/audio_raw_stream \
|
||||||
audio/audio_sound_loading \
|
audio/audio_sound_loading \
|
||||||
audio/audio_multichannel_sound
|
audio/audio_multichannel_sound
|
||||||
|
|
||||||
PHYSICS = \
|
PHYSICS = \
|
||||||
physics/physics_demo \
|
physics/physics_demo \
|
||||||
physics/physics_friction \
|
physics/physics_friction \
|
||||||
|
|
@ -513,8 +513,8 @@ all: $(CORE) $(SHAPES) $(TEXT) $(TEXTURES) $(MODELS) $(SHADERS) $(AUDIO) $(PHYSI
|
||||||
|
|
||||||
core: $(CORE)
|
core: $(CORE)
|
||||||
shapes: $(SHAPES)
|
shapes: $(SHAPES)
|
||||||
text: $(TEXT)
|
|
||||||
textures: $(TEXTURES)
|
textures: $(TEXTURES)
|
||||||
|
text: $(TEXT)
|
||||||
models: $(MODELS)
|
models: $(MODELS)
|
||||||
shaders: $(SHADERS)
|
shaders: $(SHADERS)
|
||||||
audio: $(AUDIO)
|
audio: $(AUDIO)
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
#
|
#
|
||||||
# raylib makefile for Android project (APK building)
|
# raylib makefile for Android project (APK building)
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 Ramon Santamaria (@raysan5)
|
# Copyright (c) 2017-2021 Ramon Santamaria (@raysan5)
|
||||||
#
|
#
|
||||||
# This software is provided "as-is", without any express or implied warranty. In no event
|
# 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.
|
# will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
|
@ -27,21 +27,38 @@ RAYLIB_PATH ?= ..\..
|
||||||
|
|
||||||
# Define Android architecture (armeabi-v7a, arm64-v8a, x86, x86-64) and API version
|
# Define Android architecture (armeabi-v7a, arm64-v8a, x86, x86-64) and API version
|
||||||
# Starting in 2019 using ARM64 is mandatory for published apps,
|
# Starting in 2019 using ARM64 is mandatory for published apps,
|
||||||
# and minimum required target API is Android 9 (API level 28)
|
# Starting on August 2020, minimum required target API is Android 10 (API level 29)
|
||||||
ANDROID_ARCH ?= ARM
|
ANDROID_ARCH ?= ARM64
|
||||||
ANDROID_API_VERSION = 28
|
ANDROID_API_VERSION = 29
|
||||||
|
|
||||||
|
# Android required path variables
|
||||||
|
# NOTE: Starting with Android NDK r21, no more toolchain generation is required, NDK is the toolchain on itself
|
||||||
|
ifeq ($(OS),Windows_NT)
|
||||||
|
ANDROID_NDK = C:/android-ndk
|
||||||
|
ANDROID_TOOLCHAIN = $(ANDROID_NDK)/toolchains/llvm/prebuilt/windows-x86_64
|
||||||
|
else
|
||||||
|
ANDROID_NDK ?= /usr/lib/android/ndk
|
||||||
|
ANDROID_TOOLCHAIN = $(ANDROID_NDK)/toolchains/llvm/prebuilt/linux-x86_64
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(ANDROID_ARCH),ARM)
|
ifeq ($(ANDROID_ARCH),ARM)
|
||||||
ANDROID_ARCH_NAME = armeabi-v7a
|
ANDROID_ARCH_NAME = armeabi-v7a
|
||||||
endif
|
endif
|
||||||
ifeq ($(ANDROID_ARCH),ARM64)
|
ifeq ($(ANDROID_ARCH),ARM64)
|
||||||
ANDROID_ARCH_NAME = arm64-v8a
|
ANDROID_ARCH_NAME = arm64-v8a
|
||||||
|
endif
|
||||||
|
ifeq ($(ANDROID_ARCH),x86)
|
||||||
|
ANDROID_ARCH_NAME = i686
|
||||||
|
endif
|
||||||
|
ifeq ($(ANDROID_ARCH),x86_64)
|
||||||
|
ANDROID_ARCH_NAME = x86_64
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Required path variables
|
# Required path variables
|
||||||
# NOTE: JAVA_HOME must be set to JDK (using OpenJDK 13)
|
# NOTE: JAVA_HOME must be set to JDK (using OpenJDK 13)
|
||||||
JAVA_HOME ?= C:/open-jdk
|
JAVA_HOME ?= C:/open-jdk
|
||||||
ANDROID_HOME = C:/android-sdk
|
ANDROID_HOME = C:/android-sdk
|
||||||
ANDROID_TOOLCHAIN = C:/android-ndk-r21/toolchains/llvm/prebuilt/windows-x86_64
|
ANDROID_TOOLCHAIN = C:/android-ndk/toolchains/llvm/prebuilt/windows-x86_64
|
||||||
ANDROID_BUILD_TOOLS = $(ANDROID_HOME)/build-tools/29.0.3
|
ANDROID_BUILD_TOOLS = $(ANDROID_HOME)/build-tools/29.0.3
|
||||||
ANDROID_PLATFORM_TOOLS = $(ANDROID_HOME)/platform-tools
|
ANDROID_PLATFORM_TOOLS = $(ANDROID_HOME)/platform-tools
|
||||||
|
|
||||||
|
|
@ -288,7 +305,7 @@ logcat:
|
||||||
|
|
||||||
# Install and monitorize $(PROJECT_NAME).apk to default emulator/device
|
# Install and monitorize $(PROJECT_NAME).apk to default emulator/device
|
||||||
deploy:
|
deploy:
|
||||||
$(ANDROID_PLATFORM_TOOLS)/adb install -r $(PROJECT_NAME).apk
|
$(ANDROID_PLATFORM_TOOLS)/adb install $(PROJECT_NAME).apk
|
||||||
$(ANDROID_PLATFORM_TOOLS)/adb logcat -c
|
$(ANDROID_PLATFORM_TOOLS)/adb logcat -c
|
||||||
$(ANDROID_PLATFORM_TOOLS)/adb logcat raylib:V *:S
|
$(ANDROID_PLATFORM_TOOLS)/adb logcat raylib:V *:S
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,10 +24,12 @@ Examples using raylib core platform functionality like window creation, inputs,
|
||||||
| 16 | [core_window_letterbox](core/core_window_letterbox.c) | <img src="core/core_window_letterbox.png" alt="core_window_letterbox" width="200"> | [Anata](https://github.com/anatagawa) | |
|
| 16 | [core_window_letterbox](core/core_window_letterbox.c) | <img src="core/core_window_letterbox.png" alt="core_window_letterbox" width="200"> | [Anata](https://github.com/anatagawa) | |
|
||||||
| 17 | [core_drop_files](core/core_drop_files.c) | <img src="core/core_drop_files.png" alt="core_drop_files" width="200"> | ray | |
|
| 17 | [core_drop_files](core/core_drop_files.c) | <img src="core/core_drop_files.png" alt="core_drop_files" width="200"> | ray | |
|
||||||
| 18 | [core_random_values](core/core_random_values.c) | <img src="core/core_random_values.png" alt="core_random_values" width="200"> | ray | |
|
| 18 | [core_random_values](core/core_random_values.c) | <img src="core/core_random_values.png" alt="core_random_values" width="200"> | ray | |
|
||||||
| 19 | [core_storage_values](core/core_storage_values.c) | <img src="core/core_storage_values.png" alt="core_storage_values" width="200"> | ray | |
|
| 19 | [core_scissor_test](core/core_scissor_test.c) | <img src="core/core_scissor_test.png" alt="core_scissor_test" width="200"> | [Chris Dill](https://github.com/MysteriousSpace) | ⭐️ |
|
||||||
| 20 | [core_vr_simulator](core/core_vr_simulator.c) | <img src="core/core_vr_simulator.png" alt="core_vr_simulator" width="200"> | ray | |
|
| 20 | [core_storage_values](core/core_storage_values.c) | <img src="core/core_storage_values.png" alt="core_storage_values" width="200"> | ray | |
|
||||||
| 21 | [core_loading_thread](core/core_loading_thread.c) | <img src="core/core_loading_thread.png" alt="core_loading_thread" width="200"> | ray | ⭐️ |
|
| 21 | [core_vr_simulator](core/core_vr_simulator.c) | <img src="core/core_vr_simulator.png" alt="core_vr_simulator" width="200"> | ray | |
|
||||||
| 22 | [core_scissor_test](core/core_scissor_test.c) | <img src="core/core_scissor_test.png" alt="core_scissor_test" width="200"> | [Chris Dill](https://github.com/MysteriousSpace) | ⭐️ |
|
| 22 | [core_loading_thread](core/core_loading_thread.c) | <img src="core/core_loading_thread.png" alt="core_loading_thread" width="200"> | ray | ⭐️ |
|
||||||
|
| 23 | [core/core_quat_conversion](core/core_quat_conversion.c) | <img src="core/core_quat_conversion.png" alt="core_quat_conversion" width="200"> | [Chris Camacho](https://github.com/codifies) | ⭐️ |
|
||||||
|
| 24 | [core/core_window_flags](core/core_window_flags.c) | <img src="core/core_window_flags.png" alt="core_window_flags" width="200"> | ray | ⭐️ | | ⭐️ |
|
||||||
|
|
||||||
### category: shapes
|
### category: shapes
|
||||||
|
|
||||||
|
|
@ -35,38 +37,21 @@ Examples using raylib shapes drawing functionality, provided by raylib [shapes](
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
| ## | example | image | developer | new |
|
||||||
|----|----------|--------|:----------:|:---:|
|
|----|----------|--------|:----------:|:---:|
|
||||||
| 23 | [shapes_basic_shapes](shapes/shapes_basic_shapes.c) | <img src="shapes/shapes_basic_shapes.png" alt="shapes_basic_shapes" width="200"> | ray | |
|
| 25 | [shapes_basic_shapes](shapes/shapes_basic_shapes.c) | <img src="shapes/shapes_basic_shapes.png" alt="shapes_basic_shapes" width="200"> | ray | |
|
||||||
| 24 | [shapes_bouncing_ball](shapes/shapes_bouncing_ball.c) | <img src="shapes/shapes_bouncing_ball.png" alt="shapes_bouncing_ball" width="200"> | ray | ⭐️ |
|
| 26 | [shapes_bouncing_ball](shapes/shapes_bouncing_ball.c) | <img src="shapes/shapes_bouncing_ball.png" alt="shapes_bouncing_ball" width="200"> | ray | ⭐️ |
|
||||||
| 25 | [shapes_colors_palette](shapes/shapes_colors_palette.c) | <img src="shapes/shapes_colors_palette.png" alt="shapes_colors_palette" width="200"> | ray | |
|
| 27 | [shapes_colors_palette](shapes/shapes_colors_palette.c) | <img src="shapes/shapes_colors_palette.png" alt="shapes_colors_palette" width="200"> | ray | |
|
||||||
| 26 | [shapes_logo_raylib](shapes/shapes_logo_raylib.c) | <img src="shapes/shapes_logo_raylib.png" alt="shapes_logo_raylib" width="200"> | ray | |
|
| 28 | [shapes_logo_raylib](shapes/shapes_logo_raylib.c) | <img src="shapes/shapes_logo_raylib.png" alt="shapes_logo_raylib" width="200"> | ray | |
|
||||||
| 27 | [shapes_logo_raylib_anim](shapes/shapes_logo_raylib_anim.c) | <img src="shapes/shapes_logo_raylib_anim.png" alt="shapes_logo_raylib_anim" width="200"> | ray | |
|
| 29 | [shapes_logo_raylib_anim](shapes/shapes_logo_raylib_anim.c) | <img src="shapes/shapes_logo_raylib_anim.png" alt="shapes_logo_raylib_anim" width="200"> | ray | |
|
||||||
| 28 | [shapes_rectangle_scaling](shapes/shapes_rectangle_scaling.c) | <img src="shapes/shapes_rectangle_scaling.png" alt="shapes_rectangle_scaling" width="200"> | [Vlad Adrian](https://github.com/demizdor) | |
|
| 30 | [shapes_rectangle_scaling](shapes/shapes_rectangle_scaling.c) | <img src="shapes/shapes_rectangle_scaling.png" alt="shapes_rectangle_scaling" width="200"> | [Vlad Adrian](https://github.com/demizdor) | |
|
||||||
| 29 | [shapes_lines_bezier](shapes/shapes_lines_bezier.c) | <img src="shapes/shapes_lines_bezier.png" alt="shapes_lines_bezier" width="200"> | ray | |
|
| 31 | [shapes_lines_bezier](shapes/shapes_lines_bezier.c) | <img src="shapes/shapes_lines_bezier.png" alt="shapes_lines_bezier" width="200"> | ray | |
|
||||||
| 30 | [shapes_collision_area](shapes/shapes_collision_area.c) | <img src="shapes/shapes_collision_area.png" alt="shapes_collision_area" width="200"> | ray | ⭐️ |
|
| 32 | [shapes_collision_area](shapes/shapes_collision_area.c) | <img src="shapes/shapes_collision_area.png" alt="shapes_collision_area" width="200"> | ray | ⭐️ |
|
||||||
| 31 | [shapes_following_eyes](shapes/shapes_following_eyes.c) | <img src="shapes/shapes_following_eyes.png" alt="shapes_following_eyes" width="200"> | ray | ⭐️ |
|
| 33 | [shapes_following_eyes](shapes/shapes_following_eyes.c) | <img src="shapes/shapes_following_eyes.png" alt="shapes_following_eyes" width="200"> | ray | ⭐️ |
|
||||||
| 32 | [shapes_easings_ball_anim](shapes/shapes_easings_ball_anim.c) | <img src="shapes/shapes_easings_ball_anim.png" alt="shapes_easings_ball_anim" width="200"> | ray | ⭐️ |
|
| 34 | [shapes_easings_ball_anim](shapes/shapes_easings_ball_anim.c) | <img src="shapes/shapes_easings_ball_anim.png" alt="shapes_easings_ball_anim" width="200"> | ray | ⭐️ |
|
||||||
| 33 | [shapes_easings_box_anim](shapes/shapes_easings_box_anim.c) | <img src="shapes/shapes_easings_box_anim.png" alt="shapes_easings_box_anim" width="200"> | ray | ⭐️ |
|
| 35 | [shapes_easings_box_anim](shapes/shapes_easings_box_anim.c) | <img src="shapes/shapes_easings_box_anim.png" alt="shapes_easings_box_anim" width="200"> | ray | ⭐️ |
|
||||||
| 34 | [shapes_easings_rectangle_array](shapes/shapes_easings_rectangle_array.c) | <img src="shapes/shapes_easings_rectangle_array.png" alt="shapes_easings_rectangle_array" width="200"> | ray | ⭐️ |
|
| 36 | [shapes_easings_rectangle_array](shapes/shapes_easings_rectangle_array.c) | <img src="shapes/shapes_easings_rectangle_array.png" alt="shapes_easings_rectangle_array" width="200"> | ray | ⭐️ |
|
||||||
| 35 | [shapes_draw_ring](shapes/shapes_draw_ring.c) | <img src="shapes/shapes_draw_ring.png" alt="shapes_draw_ring" width="200"> | [Vlad Adrian](https://github.com/demizdor) | ⭐️ |
|
| 37 | [shapes_draw_ring](shapes/shapes_draw_ring.c) | <img src="shapes/shapes_draw_ring.png" alt="shapes_draw_ring" width="200"> | [Vlad Adrian](https://github.com/demizdor) | ⭐️ |
|
||||||
| 36 | [shapes_draw_circle_sector](shapes/shapes_draw_circle_sector.c) | <img src="shapes/shapes_draw_circle_sector.png" alt="shapes_draw_circle_sector" width="200"> | [Vlad Adrian](https://github.com/demizdor) | |
|
| 38 | [shapes_draw_circle_sector](shapes/shapes_draw_circle_sector.c) | <img src="shapes/shapes_draw_circle_sector.png" alt="shapes_draw_circle_sector" width="200"> | [Vlad Adrian](https://github.com/demizdor) | |
|
||||||
| 37 | [shapes_draw_rectangle_rounded](shapes/shapes_draw_rectangle_rounded.c) | <img src="shapes/shapes_draw_rectangle_rounded.png" alt="shapes_draw_rectangle_rounded" width="200"> | [Vlad Adrian](https://github.com/demizdor) | |
|
| 39 | [shapes_draw_rectangle_rounded](shapes/shapes_draw_rectangle_rounded.c) | <img src="shapes/shapes_draw_rectangle_rounded.png" alt="shapes_draw_rectangle_rounded" width="200"> | [Vlad Adrian](https://github.com/demizdor) | |
|
||||||
|
|
||||||
### category: text
|
|
||||||
|
|
||||||
Examples using raylib text functionality, including sprite fonts loading/generation and text drawing, provided by raylib [text](../src/text.c) module.
|
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
|
||||||
|----|----------|--------|:----------:|:---:|
|
|
||||||
| 38 | [text_raylib_fonts](text/text_raylib_fonts.c) | <img src="text/text_raylib_fonts.png" alt="text_raylib_fonts" width="200"> | ray | |
|
|
||||||
| 39 | [text_font_spritefont](text/text_font_spritefont.c) | <img src="text/text_font_spritefont.png" alt="text_font_spritefont" width="200"> | ray | |
|
|
||||||
| 40 | [text_font_filters](text/text_font_filters.c) | <img src="text/text_font_filters.png" alt="text_font_filters" width="200"> | ray | |
|
|
||||||
| 41 | [text_font_loading](text/text_font_loading.c) | <img src="text/text_font_loading.png" alt="text_font_loading" width="200"> | ray | |
|
|
||||||
| 42 | [text_font_sdf](text/text_font_sdf.c) | <img src="text/text_font_sdf.png" alt="text_font_sdf" width="200"> | ray | ⭐️ |
|
|
||||||
| 43 | [text_format_text](text/text_format_text.c) | <img src="text/text_format_text.png" alt="text_format_text" width="200"> | ray | |
|
|
||||||
| 44 | [text_input_box](text/text_input_box.c) | <img src="text/text_input_box.png" alt="text_input_box" width="200"> | ray | |
|
|
||||||
| 45 | [text_writing_anim](text/text_writing_anim.c) | <img src="text/text_writing_anim.png" alt="text_writing_anim" width="200"> | ray | |
|
|
||||||
| 46 | [text_rectangle_bounds](text/text_rectangle_bounds.c) | <img src="text/text_rectangle_bounds.png" alt="text_rectangle_bounds" width="200"> | [Vlad Adrian](https://github.com/demizdor) | |
|
|
||||||
| 47 | [text_unicode](text/text_unicode.c) | <img src="text/text_unicode.png" alt="text_unicode" width="200"> | [Vlad Adrian](https://github.com/demizdor) | |
|
|
||||||
|
|
||||||
### category: textures
|
### category: textures
|
||||||
|
|
||||||
|
|
@ -74,49 +59,65 @@ Examples using raylib textures functionality, including image/textures loading/g
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
| ## | example | image | developer | new |
|
||||||
|----|---------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|:------------------------------------------------:|:---:|
|
|----|---------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|:------------------------------------------------:|:---:|
|
||||||
| 48 | [textures_logo_raylib](textures/textures_logo_raylib.c) | <img src="textures/textures_logo_raylib.png" alt="textures_logo_raylib" width="200"> | ray | |
|
| 40 | [textures_logo_raylib](textures/textures_logo_raylib.c) | <img src="textures/textures_logo_raylib.png" alt="textures_logo_raylib" width="200"> | ray | |
|
||||||
| 49 | [textures_rectangle](textures/textures_rectangle.c) | <img src="textures/textures_rectangle.png" alt="textures_rectangle" width="200"> | ray | |
|
| 41 | [textures_rectangle](textures/textures_rectangle.c) | <img src="textures/textures_rectangle.png" alt="textures_rectangle" width="200"> | ray | |
|
||||||
| 50 | [textures_srcrec_dstrec](textures/textures_srcrec_dstrec.c) | <img src="textures/textures_srcrec_dstrec.png" alt="textures_srcrec_dstrec" width="200"> | ray | |
|
| 42 | [textures_srcrec_dstrec](textures/textures_srcrec_dstrec.c) | <img src="textures/textures_srcrec_dstrec.png" alt="textures_srcrec_dstrec" width="200"> | ray | |
|
||||||
| 51 | [textures_image_drawing](textures/textures_image_drawing.c) | <img src="textures/textures_image_drawing.png" alt="textures_image_drawing" width="200"> | ray | |
|
| 43 | [textures_image_drawing](textures/textures_image_drawing.c) | <img src="textures/textures_image_drawing.png" alt="textures_image_drawing" width="200"> | ray | |
|
||||||
| 52 | [textures_image_generation](textures/textures_image_generation.c) | <img src="textures/textures_image_generation.png" alt="textures_image_generation" width="200"> | ray | |
|
| 44 | [textures_image_generation](textures/textures_image_generation.c) | <img src="textures/textures_image_generation.png" alt="textures_image_generation" width="200"> | ray | |
|
||||||
| 53 | [textures_image_loading](textures/textures_image_loading.c) | <img src="textures/textures_image_loading.png" alt="textures_image_loading" width="200"> | ray | |
|
| 45 | [textures_image_loading](textures/textures_image_loading.c) | <img src="textures/textures_image_loading.png" alt="textures_image_loading" width="200"> | ray | |
|
||||||
| 54 | [textures_image_processing](textures/textures_image_processing.c) | <img src="textures/textures_image_processing.png" alt="textures_image_processing" width="200"> | ray | |
|
| 46 | [textures_image_processing](textures/textures_image_processing.c) | <img src="textures/textures_image_processing.png" alt="textures_image_processing" width="200"> | ray | |
|
||||||
| 55 | [textures_image_text](textures/textures_image_text.c) | <img src="textures/textures_image_text.png" alt="textures_image_text" width="200"> | ray | ⭐️ |
|
| 47 | [textures_image_text](textures/textures_image_text.c) | <img src="textures/textures_image_text.png" alt="textures_image_text" width="200"> | ray | |
|
||||||
| 56 | [textures_to_image](textures/textures_to_image.c) | <img src="textures/textures_to_image.png" alt="textures_to_image" width="200"> | ray | |
|
| 48 | [textures_to_image](textures/textures_to_image.c) | <img src="textures/textures_to_image.png" alt="textures_to_image" width="200"> | ray | ⭐️ |
|
||||||
| 57 | [textures_raw_data](textures/textures_raw_data.c) | <img src="textures/textures_raw_data.png" alt="textures_raw_data" width="200"> | ray | |
|
| 49 | [textures_raw_data](textures/textures_raw_data.c) | <img src="textures/textures_raw_data.png" alt="textures_raw_data" width="200"> | ray | |
|
||||||
| 58 | [textures_particles_blending](textures/textures_particles_blending.c) | <img src="textures/textures_particles_blending.png" alt="textures_particles_blending" width="200"> | ray | |
|
| 50 | [textures_particles_blending](textures/textures_particles_blending.c) | <img src="textures/textures_particles_blending.png" alt="textures_particles_blending" width="200"> | ray | |
|
||||||
| 59 | [textures_npatch_drawing](textures/textures_npatch_drawing.c) | <img src="textures/textures_npatch_drawing.png" alt="textures_npatch_drawing" width="200"> | [Jorge A. Gomes](https://github.com/overdev) | |
|
| 51 | [textures_npatch_drawing](textures/textures_npatch_drawing.c) | <img src="textures/textures_npatch_drawing.png" alt="textures_npatch_drawing" width="200"> | [Jorge A. Gomes](https://github.com/overdev) | |
|
||||||
| 60 | [textures_background_scrolling](textures/textures_background_scrolling.c) | <img src="textures/textures_background_scrolling.png" alt="textures_background_scrolling" width="200"> | ray | ⭐️ |
|
| 52 | [textures_background_scrolling](textures/textures_background_scrolling.c) | <img src="textures/textures_background_scrolling.png" alt="textures_background_scrolling" width="200"> | ray | ⭐️ |
|
||||||
| 61 | [textures_sprite_button](textures/textures_sprite_button.c) | <img src="textures/textures_sprite_button.png" alt="textures_sprite_button" width="200"> | ray | ⭐️ |
|
| 53 | [textures_sprite_button](textures/textures_sprite_button.c) | <img src="textures/textures_sprite_button.png" alt="textures_sprite_button" width="200"> | ray | ⭐️ |
|
||||||
| 62 | [textures_sprite_explosion](textures/textures_sprite_explosion.c) | <img src="textures/textures_sprite_explosion.png" alt="textures_sprite_explosion" width="200"> | ray | ⭐️ |
|
| 54 | [textures_sprite_explosion](textures/textures_sprite_explosion.c) | <img src="textures/textures_sprite_explosion.png" alt="textures_sprite_explosion" width="200"> | ray | ⭐️ |
|
||||||
| 63 | [textures_bunnymark](textures/textures_bunnymark.c) | <img src="textures/textures_bunnymark.png" alt="textures_bunnymark" width="200"> | ray | ⭐️ |
|
| 55 | [textures_bunnymark](textures/textures_bunnymark.c) | <img src="textures/textures_bunnymark.png" alt="textures_bunnymark" width="200"> | ray | |
|
||||||
| 64 | [textures_mouse_painting](textures/textures_mouse_painting.c) | <img src="textures/textures_mouse_painting.png" alt="textures_mouse_painting" width="200"> | [Chris Dill](https://github.com/MysteriousSpace) | ⭐️ |
|
| 56 | [textures_mouse_painting](textures/textures_mouse_painting.c) | <img src="textures/textures_mouse_painting.png" alt="textures_mouse_painting" width="200"> | [Chris Dill](https://github.com/MysteriousSpace) | |
|
||||||
| 65 | [textures_blend_modes](textures/textures_blend_modes.c) | <img src="textures/textures_blend_modes.png" alt="textures_blend_modes" width="200"> | [Karlo Licudine](https://github.com/accidentalrebel) | ⭐️ |
|
| 57 | [textures_blend_modes](textures/textures_blend_modes.c) | <img src="textures/textures_blend_modes.png" alt="textures_blend_modes" width="200"> | [Karlo Licudine](https://github.com/accidentalrebel) | ⭐️ |
|
||||||
|
| 58 | [textures/textures_draw_tiled](textures/textures_draw_tiled.c) | <img src="textures/textures_draw_tiled.png" alt="textures_draw_tiled" width="200"> | [Vlad Adrian](https://github.com/demizdor) | ⭐️ |
|
||||||
|
|
||||||
|
### category: text
|
||||||
|
|
||||||
|
Examples using raylib text functionality, including sprite fonts loading/generation and text drawing, provided by raylib [text](../src/text.c) module.
|
||||||
|
|
||||||
|
| ## | example | image | developer | new |
|
||||||
|
|----|----------|--------|:----------:|:---:|
|
||||||
|
| 59 | [text_raylib_fonts](text/text_raylib_fonts.c) | <img src="text/text_raylib_fonts.png" alt="text_raylib_fonts" width="200"> | ray | |
|
||||||
|
| 60 | [text_font_spritefont](text/text_font_spritefont.c) | <img src="text/text_font_spritefont.png" alt="text_font_spritefont" width="200"> | ray | |
|
||||||
|
| 61 | [text_font_filters](text/text_font_filters.c) | <img src="text/text_font_filters.png" alt="text_font_filters" width="200"> | ray | |
|
||||||
|
| 62 | [text_font_loading](text/text_font_loading.c) | <img src="text/text_font_loading.png" alt="text_font_loading" width="200"> | ray | |
|
||||||
|
| 63 | [text_font_sdf](text/text_font_sdf.c) | <img src="text/text_font_sdf.png" alt="text_font_sdf" width="200"> | ray | |
|
||||||
|
| 64 | [text_format_text](text/text_format_text.c) | <img src="text/text_format_text.png" alt="text_format_text" width="200"> | ray | |
|
||||||
|
| 65 | [text_input_box](text/text_input_box.c) | <img src="text/text_input_box.png" alt="text_input_box" width="200"> | ray | |
|
||||||
|
| 66 | [text_writing_anim](text/text_writing_anim.c) | <img src="text/text_writing_anim.png" alt="text_writing_anim" width="200"> | ray | |
|
||||||
|
| 67 | [text_rectangle_bounds](text/text_rectangle_bounds.c) | <img src="text/text_rectangle_bounds.png" alt="text_rectangle_bounds" width="200"> | [Vlad Adrian](https://github.com/demizdor) | |
|
||||||
|
| 68 | [text_unicode](text/text_unicode.c) | <img src="text/text_unicode.png" alt="text_unicode" width="200"> | [Vlad Adrian](https://github.com/demizdor) | |
|
||||||
|
|
||||||
### category: models
|
### category: models
|
||||||
|
|
||||||
Examples using raylib models functionality, including models loading/generation and drawing, provided by raylib [models](../src/models.c) module.
|
Examples using raylib models functionality, including models loading/generation and drawing, provided by raylib [models](../src/models.c) module.
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
| ## | example | image | developer | new |
|
||||||
|----|----------|--------|:----------:|:---:|
|
|----|----------|--------|:----------:|:---:|
|
||||||
| 66 | [models_animation](models/models_animation.c) | <img src="models/models_animation.png" alt="models_animation" width="200"> | [culacant](https://github.com/culacant) | ⭐️ |
|
| 69 | [models_animation](models/models_animation.c) | <img src="models/models_animation.png" alt="models_animation" width="200"> | [culacant](https://github.com/culacant) | |
|
||||||
| 67 | [models_billboard](models/models_billboard.c) | <img src="models/models_billboard.png" alt="models_billboard" width="200"> | ray | |
|
| 70 | [models_billboard](models/models_billboard.c) | <img src="models/models_billboard.png" alt="models_billboard" width="200"> | ray | |
|
||||||
| 68 | [models_box_collisions](models/models_box_collisions.c) | <img src="models/models_box_collisions.png" alt="models_box_collisions" width="200"> | ray | |
|
| 71 | [models_box_collisions](models/models_box_collisions.c) | <img src="models/models_box_collisions.png" alt="models_box_collisions" width="200"> | ray | |
|
||||||
| 69 | [models_cubicmap](models/models_cubicmap.c) | <img src="models/models_cubicmap.png" alt="models_cubicmap" width="200"> | ray | |
|
| 72 | [models_cubicmap](models/models_cubicmap.c) | <img src="models/models_cubicmap.png" alt="models_cubicmap" width="200"> | ray | |
|
||||||
| 70 | [models_first_person_maze](models/models_first_person_maze.c) | <img src="models/models_first_person_maze.png" alt="models_first_person_maze" width="200"> | ray | ⭐️ |
|
| 73 | [models_first_person_maze](models/models_first_person_maze.c) | <img src="models/models_first_person_maze.png" alt="models_first_person_maze" width="200"> | ray | |
|
||||||
| 71 | [models_geometric_shapes](models/models_geometric_shapes.c) | <img src="models/models_geometric_shapes.png" alt="models_geometric_shapes" width="200"> | ray | |
|
| 74 | [models_geometric_shapes](models/models_geometric_shapes.c) | <img src="models/models_geometric_shapes.png" alt="models_geometric_shapes" width="200"> | ray | |
|
||||||
| 72 | [models_material_pbr](models/models_material_pbr.c) | <img src="models/models_material_pbr.png" alt="models_material_pbr" width="200"> | ray | |
|
| 75 | [models_material_pbr](models/models_material_pbr.c) | <img src="models/models_material_pbr.png" alt="models_material_pbr" width="200"> | ray | |
|
||||||
| 73 | [models_mesh_generation](models/models_mesh_generation.c) | <img src="models/models_mesh_generation.png" alt="models_mesh_generation" width="200"> | ray | |
|
| 76 | [models_mesh_generation](models/models_mesh_generation.c) | <img src="models/models_mesh_generation.png" alt="models_mesh_generation" width="200"> | ray | |
|
||||||
| 74 | [models_mesh_picking](models/models_mesh_picking.c) | <img src="models/models_mesh_picking.png" alt="models_mesh_picking" width="200"> | [Joel Davis](https://github.com/joeld42) | |
|
| 77 | [models_mesh_picking](models/models_mesh_picking.c) | <img src="models/models_mesh_picking.png" alt="models_mesh_picking" width="200"> | [Joel Davis](https://github.com/joeld42) | |
|
||||||
| 75 | [models_loading](models/models_loading.c) | <img src="models/models_loading.png" alt="models_loading" width="200"> | ray | |
|
| 78 | [models_loading](models/models_loading.c) | <img src="models/models_loading.png" alt="models_loading" width="200"> | ray | |
|
||||||
| 76 | [models_orthographic_projection](models/models_orthographic_projection.c) | <img src="models/models_orthographic_projection.png" alt="models_orthographic_projection" width="200"> | [Max Danielsson](https://github.com/autious) | |
|
| 79 | [models_orthographic_projection](models/models_orthographic_projection.c) | <img src="models/models_orthographic_projection.png" alt="models_orthographic_projection" width="200"> | [Max Danielsson](https://github.com/autious) | |
|
||||||
| 77 | *TODO* | *TODO* | *TODO* | |
|
| 80 | [models_rlgl_solar_system](models/models_rlgl_solar_system.c) | <img src="models/models_rlgl_solar_system.png" alt="models_rlgl_solar_system" width="200"> | ray | |
|
||||||
| 78 | *TODO* | *TODO* | *TODO* | |
|
| 81 | [models_skybox](models/models_skybox.c) | <img src="models/models_skybox.png" alt="models_skybox" width="200"> | ray | |
|
||||||
| 79 | [models_solar_system_rlgl](models/models_rlgl_solar_system.c) | <img src="models/models_rlgl_solar_system.png" alt="models_rlgl_solar_system" width="200"> | ray | ⭐️ |
|
| 82 | [models_yaw_pitch_roll](models/models_yaw_pitch_roll.c) | <img src="models/models_yaw_pitch_roll.png" alt="models_yaw_pitch_roll" width="200"> | [Berni](https://github.com/Berni8k) | |
|
||||||
| 80 | [models_yaw_pitch_roll](models/models_yaw_pitch_roll.c) | <img src="models/models_yaw_pitch_roll.png" alt="models_yaw_pitch_roll" width="200"> | [Berni](https://github.com/Berni8k) | |
|
| 83 | [models_heightmap](models/models_heightmap.c) | <img src="models/models_heightmap.png" alt="models_heightmap" width="200"> | ray | |
|
||||||
| 81 | [models_waving_cubes](models/models_waving_cubes.c) | <img src="models/models_waving_cubes.png" alt="models_waving_cubes" width="200"> | [codecat](https://github.com/codecat) | ⭐️ |
|
| 84 | [models_waving_cubes](models/models_waving_cubes.c) | <img src="models/models_waving_cubes.png" alt="models_waving_cubes" width="200"> | [codecat](https://github.com/codecat) | ⭐️ |
|
||||||
| 82 | [models_heightmap](models/models_heightmap.c) | <img src="models/models_heightmap.png" alt="models_heightmap" width="200"> | ray | |
|
|
||||||
| 83 | [models_skybox](models/models_skybox.c) | <img src="models/models_skybox.png" alt="models_skybox" width="200"> | ray | |
|
|
||||||
|
|
||||||
### category: shaders
|
### category: shaders
|
||||||
|
|
||||||
|
|
@ -124,31 +125,35 @@ Examples using raylib shaders functionality, including shaders loading, paramete
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
| ## | example | image | developer | new |
|
||||||
|----|----------|--------|:----------:|:---:|
|
|----|----------|--------|:----------:|:---:|
|
||||||
| 84 | [shaders_basic_lighting](shaders/shaders_basic_lighting.c) | <img src="shaders/shaders_basic_lighting.png" alt="shaders_basic_lighting" width="200"> | [Chris Camacho](https://github.com/codifies) | ⭐️ |
|
| 85 | [shaders_basic_lighting](shaders/shaders_basic_lighting.c) | <img src="shaders/shaders_basic_lighting.png" alt="shaders_basic_lighting" width="200"> | [Chris Camacho](https://github.com/codifies) | |
|
||||||
| 85 | [shaders_model_shader](shaders/shaders_model_shader.c) | <img src="shaders/shaders_model_shader.png" alt="shaders_model_shader" width="200"> | ray | |
|
| 86 | [shaders_model_shader](shaders/shaders_model_shader.c) | <img src="shaders/shaders_model_shader.png" alt="shaders_model_shader" width="200"> | ray | |
|
||||||
| 86 | [shaders_shapes_textures](shaders/shaders_shapes_textures.c) | <img src="shaders/shaders_shapes_textures.png" alt="shaders_shapes_textures" width="200"> | ray | |
|
| 87 | [shaders_shapes_textures](shaders/shaders_shapes_textures.c) | <img src="shaders/shaders_shapes_textures.png" alt="shaders_shapes_textures" width="200"> | ray | |
|
||||||
| 87 | [shaders_custom_uniform](shaders/shaders_custom_uniform.c) | <img src="shaders/shaders_custom_uniform.png" alt="shaders_custom_uniform" width="200"> | ray | |
|
| 88 | [shaders_custom_uniform](shaders/shaders_custom_uniform.c) | <img src="shaders/shaders_custom_uniform.png" alt="shaders_custom_uniform" width="200"> | ray | |
|
||||||
| 88 | [shaders_postprocessing](shaders/shaders_postprocessing.c) | <img src="shaders/shaders_postprocessing.png" alt="shaders_postprocessing" width="200"> | ray | |
|
| 89 | [shaders_postprocessing](shaders/shaders_postprocessing.c) | <img src="shaders/shaders_postprocessing.png" alt="shaders_postprocessing" width="200"> | ray | |
|
||||||
| 89 | [shaders_palette_switch](shaders/shaders_palette_switch.c) | <img src="shaders/shaders_palette_switch.png" alt="shaders_palette_switch" width="200"> | [Marco Lizza](https://github.com/MarcoLizza) | |
|
| 90 | [shaders_palette_switch](shaders/shaders_palette_switch.c) | <img src="shaders/shaders_palette_switch.png" alt="shaders_palette_switch" width="200"> | [Marco Lizza](https://github.com/MarcoLizza) | |
|
||||||
| 90 | [shaders_raymarching](shaders/shaders_raymarching.c) | <img src="shaders/shaders_raymarching.png" alt="shaders_raymarching" width="200"> | Shader by Iñigo Quilez | ⭐️ |
|
| 91 | [shaders_raymarching](shaders/shaders_raymarching.c) | <img src="shaders/shaders_raymarching.png" alt="shaders_raymarching" width="200"> | Shader by Iñigo Quilez | |
|
||||||
| 91 | [shaders_texture_drawing](shaders/shaders_texture_drawing.c) | <img src="shaders/shaders_texture_drawing.png" alt="shaders_texture_drawing" width="200"> | Michał Ciesielski | ⭐️ |
|
| 92 | [shaders_texture_drawing](shaders/shaders_texture_drawing.c) | <img src="shaders/shaders_texture_drawing.png" alt="shaders_texture_drawing" width="200"> | Michał Ciesielski | |
|
||||||
| 92 | [shaders_texture_waves](shaders/shaders_texture_waves.c) | <img src="shaders/shaders_texture_waves.png" alt="shaders_texture_waves" width="200"> | [Anata](https://github.com/anatagawa) | ⭐️ |
|
| 93 | [shaders_texture_waves](shaders/shaders_texture_waves.c) | <img src="shaders/shaders_texture_waves.png" alt="shaders_texture_waves" width="200"> | [Anata](https://github.com/anatagawa) | |
|
||||||
| 93 | [shaders_julia_set](shaders/shaders_julia_set.c) | <img src="shaders/shaders_julia_set.png" alt="shaders_julia_set" width="200"> | [eggmund](https://github.com/eggmund) | ⭐️ |
|
| 94 | [shaders_julia_set](shaders/shaders_julia_set.c) | <img src="shaders/shaders_julia_set.png" alt="shaders_julia_set" width="200"> | [eggmund](https://github.com/eggmund) | |
|
||||||
| 94 | [shaders_eratosthenes](shaders/shaders_eratosthenes.c) | <img src="shaders/shaders_eratosthenes.png" alt="shaders_eratosthenes" width="200"> | [ProfJski](https://github.com/ProfJski) | ⭐️ |
|
| 95 | [shaders_eratosthenes](shaders/shaders_eratosthenes.c) | <img src="shaders/shaders_eratosthenes.png" alt="shaders_eratosthenes" width="200"> | [ProfJski](https://github.com/ProfJski) | |
|
||||||
| 95 | [shaders_fog](shaders/shaders_fog.c) | <img src="shaders/shaders_fog.png" alt="shaders_fog" width="200"> | [Chris Camacho](https://github.com/codifies) | ⭐️ |
|
| 96 | [shaders_fog](shaders/shaders_fog.c) | <img src="shaders/shaders_fog.png" alt="shaders_fog" width="200"> | [Chris Camacho](https://github.com/codifies) | |
|
||||||
| 96 | [shaders_simple_mask](shaders/shaders_simple_mask.c) | <img src="shaders/shaders_simple_mask.png" alt="shaders_simple_mask" width="200"> | [Chris Camacho](https://github.com/codifies) | ⭐️ |
|
| 97 | [shaders_simple_mask](shaders/shaders_simple_mask.c) | <img src="shaders/shaders_simple_mask.png" alt="shaders_simple_mask" width="200"> | [Chris Camacho](https://github.com/codifies) | |
|
||||||
|
| 98 | [shaders_spotlight](shaders/shaders_spotlight.c) | <img src="shaders/shaders_spotlight.png" alt="shaders_spotlight" width="200"> | [Chris Camacho](https://github.com/codifies) | ⭐️ |
|
||||||
|
| 99 | [shaders_hot_reloading](shaders/shaders_hot_reloading.c) | <img src="shaders/shaders_hot_reloading.png" alt="shaders_hot_reloading" width="200"> | ray | ⭐️ |
|
||||||
|
| 100 | [shaders_rlgl_mesh_instanced](shaders/shaders_rlgl_mesh_instanced.c) | <img src="shaders/shaders_rlgl_mesh_instanced.png" alt="shaders_rlgl_mesh_instanced" width="200"> | [Chris Camacho](https://github.com/codifies) | ⭐️ |
|
||||||
|
| 101 | [shaders_multi_sample2d](shaders/shaders_multi_sample2d.c) | <img src="shaders/shaders_multi_sample2d.png" alt="shaders_multi_sample2d" width="200"> | ray | ⭐️ |
|
||||||
|
|
||||||
### category: audio
|
### category: audio
|
||||||
|
|
||||||
Examples using raylib audio functionality, including sound/music loading and playing. This functionality is provided by raylib [raudio](../src/raudio.c) module. Note this module can be used standalone independently of raylib, check [raudio_standalone](others/raudio_standalone.c) example.
|
Examples using raylib audio functionality, including sound/music loading and playing. This functionality is provided by raylib [raudio](../src/raudio.c) module. Note this module can be used standalone independently of raylib, check [raudio_standalone](others/raudio_standalone.c) example.
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
| ## | example | image | developer | new |
|
||||||
|----|----------|--------|:----------:|:---:|
|
|----|----------|--------|:----------:|:---:|
|
||||||
| 97 | [audio_module_playing](audio/audio_module_playing.c) | <img src="audio/audio_module_playing.png" alt="audio_module_playing" width="200"> | ray | |
|
| 102 | [audio_module_playing](audio/audio_module_playing.c) | <img src="audio/audio_module_playing.png" alt="audio_module_playing" width="200"> | ray | |
|
||||||
| 98 | [audio_music_stream](audio/audio_music_stream.c) | <img src="audio/audio_music_stream.png" alt="audio_music_stream" width="200"> | ray | |
|
| 103 | [audio_music_stream](audio/audio_music_stream.c) | <img src="audio/audio_music_stream.png" alt="audio_music_stream" width="200"> | ray | |
|
||||||
| 99 | [audio_raw_stream](audio/audio_raw_stream.c) | <img src="audio/audio_raw_stream.png" alt="audio_raw_stream" width="200"> | ray | |
|
| 104 | [audio_raw_stream](audio/audio_raw_stream.c) | <img src="audio/audio_raw_stream.png" alt="audio_raw_stream" width="200"> | ray | |
|
||||||
| 10 | [audio_sound_loading](audio/audio_sound_loading.c) | <img src="audio/audio_sound_loading.png" alt="audio_sound_loading" width="200"> | ray | |
|
| 105 | [audio_sound_loading](audio/audio_sound_loading.c) | <img src="audio/audio_sound_loading.png" alt="audio_sound_loading" width="200"> | ray | |
|
||||||
| 101 | [audio_multichannel_sound](audio/audio_multichannel_sound.c) | <img src="audio/audio_multichannel_sound.png" alt="audio_multichannel_sound" width="200"> | [Chris Camacho](https://github.com/codifies) | ⭐️ |
|
| 106 | [audio_multichannel_sound](audio/audio_multichannel_sound.c) | <img src="audio/audio_multichannel_sound.png" alt="audio_multichannel_sound" width="200"> | [Chris Camacho](https://github.com/codifies) | ⭐️ |
|
||||||
|
|
||||||
### category: physics
|
### category: physics
|
||||||
|
|
||||||
|
|
@ -156,11 +161,11 @@ Examples showing physics functionality with raylib. This functionality is provid
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
| ## | example | image | developer | new |
|
||||||
|----|----------|--------|:----------:|:---:|
|
|----|----------|--------|:----------:|:---:|
|
||||||
| 102 | [physics_demo](physics/physics_demo.c) | <img src="physics/physics_demo.png" alt="physics_demo" width="200"> | [Victor Fisac](https://github.com/victorfisac) | |
|
| 107 | [physics_demo](physics/physics_demo.c) | <img src="physics/physics_demo.png" alt="physics_demo" width="200"> | [Victor Fisac](https://github.com/victorfisac) | |
|
||||||
| 103 | [physics_friction](physics/physics_friction.c) | <img src="physics/physics_friction.png" alt="physics_friction" width="200"> | [Victor Fisac](https://github.com/victorfisac) | |
|
| 108 | [physics_friction](physics/physics_friction.c) | <img src="physics/physics_friction.png" alt="physics_friction" width="200"> | [Victor Fisac](https://github.com/victorfisac) | |
|
||||||
| 104 | [physics_movement](physics/physics_movement.c) | <img src="physics/physics_movement.png" alt="physics_movement" width="200"> | [Victor Fisac](https://github.com/victorfisac) | |
|
| 109 | [physics_movement](physics/physics_movement.c) | <img src="physics/physics_movement.png" alt="physics_movement" width="200"> | [Victor Fisac](https://github.com/victorfisac) | |
|
||||||
| 105 | [physics_restitution](physics/physics_restitution.c) | <img src="physics/physics_restitution.png" alt="physics_restitution" width="200"> | [Victor Fisac](https://github.com/victorfisac) | |
|
| 110 | [physics_restitution](physics/physics_restitution.c) | <img src="physics/physics_restitution.png" alt="physics_restitution" width="200"> | [Victor Fisac](https://github.com/victorfisac) | |
|
||||||
| 106 | [physics_shatter](physics/physics_shatter.c) | <img src="physics/physics_shatter.png" alt="physics_shatter" width="200"> | [Victor Fisac](https://github.com/victorfisac) | |
|
| 111 | [physics_shatter](physics/physics_shatter.c) | <img src="physics/physics_shatter.png" alt="physics_shatter" width="200"> | [Victor Fisac](https://github.com/victorfisac) | |
|
||||||
|
|
||||||
### category: network
|
### category: network
|
||||||
|
|
||||||
|
|
@ -170,13 +175,13 @@ Examples showing raylib network functionality. This functionality is provided by
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
| ## | example | image | developer | new |
|
||||||
|----|----------|--------|:----------:|:---:|
|
|----|----------|--------|:----------:|:---:|
|
||||||
| 107 | [network_ping_pong](network/network_ping_pong.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
| 112 | [network_ping_pong](network/network_ping_pong.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
||||||
| 108 | [network_resolve_host](network/network_resolve_host.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
| 113 | [network_resolve_host](network/network_resolve_host.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
||||||
| 109 | [network_tcp_client](network/network_tcp_client.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
| 114 | [network_tcp_client](network/network_tcp_client.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
||||||
| 110 | [network_tcp_server](network/network_tcp_server.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
| 115 | [network_tcp_server](network/network_tcp_server.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
||||||
| 111 | [network_test](network/network_test.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
| 116 | [network_test](network/network_test.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
||||||
| 112 | [network_udp_client](network/network_udp_client.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
| 117 | [network_udp_client](network/network_udp_client.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
||||||
| 113 | [network_udp_server](network/network_udp_server.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
| 118 | [network_udp_server](network/network_udp_server.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
||||||
|
|
||||||
### category: others
|
### category: others
|
||||||
|
|
||||||
|
|
@ -184,9 +189,10 @@ Examples showing raylib misc functionality that does not fit in other categories
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
| ## | example | image | developer | new |
|
||||||
|----|----------|--------|:----------:|:---:|
|
|----|----------|--------|:----------:|:---:|
|
||||||
| 114 | [raudio_standalone](others/raudio_standalone.c) | | ray | |
|
| 119 | [raudio_standalone](others/raudio_standalone.c) | | ray | |
|
||||||
| 115 | [rlgl_standalone](others/rlgl_standalone.c) | | ray | |
|
| 120 | [rlgl_standalone](others/rlgl_standalone.c) | | ray | |
|
||||||
| 116 | [easings_testbed](others/easings_testbed.c) | | [Juan Miguel López](https://github.com/flashback-fx) | |
|
| 121 | [easings_testbed](others/easings_testbed.c) | | [Juan Miguel López](https://github.com/flashback-fx) | |
|
||||||
|
| 122 | [embedded_files_loading](others/embedded_files_loading.c)) | | [Kristian Holmgren](https://github.com/defutura) | |
|
||||||
|
|
||||||
As always contributions are welcome, feel free to send new examples! Here it is an [examples template](examples_template.c) to start with!
|
As always contributions are welcome, feel free to send new examples! Here it is an [examples template](examples_template.c) to start with!
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,7 @@ int main(void)
|
||||||
|
|
||||||
Music music = LoadMusicStream("resources/mini1111.xm");
|
Music music = LoadMusicStream("resources/mini1111.xm");
|
||||||
music.looping = false;
|
music.looping = false;
|
||||||
|
float pitch = 1.0f;
|
||||||
|
|
||||||
PlayMusicStream(music);
|
PlayMusicStream(music);
|
||||||
|
|
||||||
|
|
@ -84,6 +85,11 @@ int main(void)
|
||||||
else ResumeMusicStream(music);
|
else ResumeMusicStream(music);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (IsKeyDown(KEY_DOWN)) pitch -= 0.01f;
|
||||||
|
else if (IsKeyDown(KEY_UP)) pitch += 0.01f;
|
||||||
|
|
||||||
|
SetMusicPitch(music, pitch);
|
||||||
|
|
||||||
// Get timePlayed scaled to bar dimensions
|
// Get timePlayed scaled to bar dimensions
|
||||||
timePlayed = GetMusicTimePlayed(music)/GetMusicTimeLength(music)*(screenWidth - 40);
|
timePlayed = GetMusicTimePlayed(music)/GetMusicTimeLength(music)*(screenWidth - 40);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,9 @@
|
||||||
* This example has been created using raylib 2.6 (www.raylib.com)
|
* This example has been created using raylib 2.6 (www.raylib.com)
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
*
|
*
|
||||||
* Example contributed by Chris Camacho (@codifies) and reviewed by Ramon Santamaria (@raysan5)
|
* Example contributed by Chris Camacho (@chriscamacho) and reviewed by Ramon Santamaria (@raysan5)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2019 Chris Camacho (@codifies) and Ramon Santamaria (@raysan5)
|
* Copyright (c) 2019 Chris Camacho (@chriscamacho) and Ramon Santamaria (@raysan5)
|
||||||
*
|
*
|
||||||
********************************************************************************************/
|
********************************************************************************************/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,19 +4,18 @@
|
||||||
*
|
*
|
||||||
* Welcome to raylib!
|
* Welcome to raylib!
|
||||||
*
|
*
|
||||||
* To test examples in Notepad++, provided with default raylib installer package,
|
* To test examples, just press F6 and execute raylib_compile_execute script
|
||||||
* just press F6 and run [raylib_compile_execute] script, it will compile and execute.
|
|
||||||
* Note that compiled executable is placed in the same folder as .c file
|
* Note that compiled executable is placed in the same folder as .c file
|
||||||
*
|
*
|
||||||
* You can find all basic examples on [C:\raylib\raylib\examples] directory and
|
* You can find all basic examples on C:\raylib\raylib\examples folder or
|
||||||
* raylib official webpage: [www.raylib.com]
|
* raylib official webpage: www.raylib.com
|
||||||
*
|
*
|
||||||
* Enjoy using raylib. :)
|
* Enjoy using raylib. :)
|
||||||
*
|
*
|
||||||
* This example has been created using raylib 1.0 (www.raylib.com)
|
* 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)
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2013-2020 Ramon Santamaria (@raysan5)
|
* Copyright (c) 2013-2016 Ramon Santamaria (@raysan5)
|
||||||
*
|
*
|
||||||
********************************************************************************************/
|
********************************************************************************************/
|
||||||
|
|
||||||
|
|
@ -46,9 +45,9 @@ int main(void)
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
BeginDrawing();
|
BeginDrawing();
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
ClearBackground(RAYWHITE);
|
||||||
|
|
||||||
DrawText("Congrats! You created your first window!", 190, 200, 20, LIGHTGRAY);
|
DrawText("Congrats! You created your first window!", 190, 200, 20, LIGHTGRAY);
|
||||||
|
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -2,29 +2,21 @@
|
||||||
*
|
*
|
||||||
* raylib [core] example - quat conversions
|
* raylib [core] example - quat conversions
|
||||||
*
|
*
|
||||||
* Welcome to raylib!
|
* Generally you should really stick to eulers OR quats...
|
||||||
|
* This tests that various conversions are equivalent.
|
||||||
*
|
*
|
||||||
* generally you should really stick to eulers OR quats...
|
* This example has been created using raylib 3.5 (www.raylib.com)
|
||||||
* This tests that various conversions are equivilant.
|
|
||||||
*
|
|
||||||
* You can find all basic examples on [C:\raylib\raylib\examples] directory and
|
|
||||||
* raylib official webpage: [www.raylib.com]
|
|
||||||
*
|
|
||||||
* Enjoy using raylib. :)
|
|
||||||
*
|
|
||||||
* 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)
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2013-2020 Ramon Santamaria (@raysan5)
|
* Example contributed by Chris Camacho (@chriscamacho) and reviewed by Ramon Santamaria (@raysan5)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 Chris Camacho (@chriscamacho) and Ramon Santamaria (@raysan5)
|
||||||
*
|
*
|
||||||
********************************************************************************************/
|
********************************************************************************************/
|
||||||
|
|
||||||
#include "raylib.h"
|
#include "raylib.h"
|
||||||
#include "raymath.h"
|
|
||||||
|
|
||||||
#ifndef PI2
|
#include "raymath.h"
|
||||||
#define PI2 PI*2
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
|
|
@ -42,29 +34,32 @@ int main(void)
|
||||||
camera.fovy = 45.0f; // Camera field-of-view Y
|
camera.fovy = 45.0f; // Camera field-of-view Y
|
||||||
camera.type = CAMERA_PERSPECTIVE; // Camera mode type
|
camera.type = CAMERA_PERSPECTIVE; // Camera mode type
|
||||||
|
|
||||||
Mesh msh = GenMeshCylinder(.2, 1, 32);
|
Mesh mesh = GenMeshCylinder(0.2f, 1.0f, 32);
|
||||||
Model mod = LoadModelFromMesh(msh);
|
Model model = LoadModelFromMesh(mesh);
|
||||||
|
|
||||||
|
// Some required variables
|
||||||
|
Quaternion q1 = { 0 };
|
||||||
|
Matrix m1 = { 0 }, m2 = { 0 }, m3 = { 0 }, m4 = { 0 };
|
||||||
|
Vector3 v1 = { 0 }, v2 = { 0 };
|
||||||
|
|
||||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
Quaternion q1;
|
|
||||||
Matrix m1,m2,m3,m4;
|
|
||||||
Vector3 v1,v2;
|
|
||||||
|
|
||||||
// Main game loop
|
// Main game loop
|
||||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||||
{
|
{
|
||||||
// Update
|
// Update
|
||||||
if (!IsKeyDown(KEY_SPACE)) {
|
//--------------------------------------------------------------------------------------
|
||||||
v1.x += 0.01;
|
if (!IsKeyDown(KEY_SPACE))
|
||||||
v1.y += 0.03;
|
{
|
||||||
v1.z += 0.05;
|
v1.x += 0.01f;
|
||||||
|
v1.y += 0.03f;
|
||||||
|
v1.z += 0.05f;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (v1.x > PI2) v1.x-=PI2;
|
if (v1.x > PI*2) v1.x -= PI*2;
|
||||||
if (v1.y > PI2) v1.y-=PI2;
|
if (v1.y > PI*2) v1.y -= PI*2;
|
||||||
if (v1.z > PI2) v1.z-=PI2;
|
if (v1.z > PI*2) v1.z -= PI*2;
|
||||||
|
|
||||||
q1 = QuaternionFromEuler(v1.x, v1.y, v1.z);
|
q1 = QuaternionFromEuler(v1.x, v1.y, v1.z);
|
||||||
m1 = MatrixRotateZYX(v1);
|
m1 = MatrixRotateZYX(v1);
|
||||||
|
|
@ -74,49 +69,51 @@ int main(void)
|
||||||
m3 = QuaternionToMatrix(q1);
|
m3 = QuaternionToMatrix(q1);
|
||||||
|
|
||||||
v2 = QuaternionToEuler(q1);
|
v2 = QuaternionToEuler(q1);
|
||||||
v2.x*=DEG2RAD; v2.y*=DEG2RAD; v2.z*=DEG2RAD;
|
v2.x *= DEG2RAD;
|
||||||
|
v2.y *= DEG2RAD;
|
||||||
|
v2.z *= DEG2RAD;
|
||||||
|
|
||||||
m4 = MatrixRotateZYX(v2);
|
m4 = MatrixRotateZYX(v2);
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Draw
|
// Draw
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
BeginDrawing();
|
BeginDrawing();
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
ClearBackground(RAYWHITE);
|
||||||
|
|
||||||
BeginMode3D(camera);
|
BeginMode3D(camera);
|
||||||
|
|
||||||
mod.transform = m1;
|
model.transform = m1;
|
||||||
DrawModel(mod, (Vector3){-1,0,0},1.0,RED);
|
DrawModel(model, (Vector3){ -1, 0, 0 }, 1.0f, RED);
|
||||||
mod.transform = m2;
|
model.transform = m2;
|
||||||
DrawModel(mod, (Vector3){1,0,0},1.0,RED);
|
DrawModel(model, (Vector3){ 1, 0, 0 }, 1.0f, RED);
|
||||||
mod.transform = m3;
|
model.transform = m3;
|
||||||
DrawModel(mod, (Vector3){0,0,0},1.0,RED);
|
DrawModel(model, (Vector3){ 0, 0, 0 }, 1.0f, RED);
|
||||||
mod.transform = m4;
|
model.transform = m4;
|
||||||
DrawModel(mod, (Vector3){0,0,-1},1.0,RED);
|
DrawModel(model, (Vector3){ 0, 0, -1 }, 1.0f, RED);
|
||||||
|
|
||||||
|
|
||||||
DrawGrid(10, 1.0f);
|
DrawGrid(10, 1.0f);
|
||||||
|
|
||||||
EndMode3D();
|
EndMode3D();
|
||||||
|
|
||||||
if (v2.x<0) v2.x+=PI2;
|
if (v2.x < 0) v2.x += PI*2;
|
||||||
if (v2.y<0) v2.y+=PI2;
|
if (v2.y < 0) v2.y += PI*2;
|
||||||
if (v2.z<0) v2.z+=PI2;
|
if (v2.z < 0) v2.z += PI*2;
|
||||||
|
|
||||||
Color cx,cy,cz;
|
Color cx,cy,cz;
|
||||||
cx=cy=cz=BLACK;
|
cx = cy = cz = BLACK;
|
||||||
if (v1.x == v2.x) cx = GREEN;
|
if (v1.x == v2.x) cx = GREEN;
|
||||||
if (v1.y == v2.y) cy = GREEN;
|
if (v1.y == v2.y) cy = GREEN;
|
||||||
if (v1.z == v2.z) cz = GREEN;
|
if (v1.z == v2.z) cz = GREEN;
|
||||||
|
|
||||||
DrawText(TextFormat("%2.3f",v1.x),20,20,20,cx);
|
DrawText(TextFormat("%2.3f", v1.x), 20, 20, 20, cx);
|
||||||
DrawText(TextFormat("%2.3f",v1.y),20,40,20,cy);
|
DrawText(TextFormat("%2.3f", v1.y), 20, 40, 20, cy);
|
||||||
DrawText(TextFormat("%2.3f",v1.z),20,60,20,cz);
|
DrawText(TextFormat("%2.3f", v1.z), 20, 60, 20, cz);
|
||||||
|
|
||||||
|
DrawText(TextFormat("%2.3f", v2.x), 200, 20, 20, cx);
|
||||||
DrawText(TextFormat("%2.3f",v2.x),200,20,20,cx);
|
DrawText(TextFormat("%2.3f", v2.y), 200, 40, 20, cy);
|
||||||
DrawText(TextFormat("%2.3f",v2.y),200,40,20,cy);
|
DrawText(TextFormat("%2.3f", v2.z), 200, 60, 20, cz);
|
||||||
DrawText(TextFormat("%2.3f",v2.z),200,60,20,cz);
|
|
||||||
|
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
@ -124,6 +121,8 @@ int main(void)
|
||||||
|
|
||||||
// De-Initialization
|
// De-Initialization
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
UnloadModel(model); // Unload model data (mesh and materials)
|
||||||
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
CloseWindow(); // Close window and OpenGL context
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
||||||
BIN
examples/core/core_quat_conversion.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
191
examples/core/core_window_flags.c
Normal file
|
|
@ -0,0 +1,191 @@
|
||||||
|
/*******************************************************************************************
|
||||||
|
*
|
||||||
|
* raylib [core] example - window flags
|
||||||
|
*
|
||||||
|
* This example has been created using raylib 3.5 (www.raylib.com)
|
||||||
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 Ramon Santamaria (@raysan5)
|
||||||
|
*
|
||||||
|
********************************************************************************************/
|
||||||
|
|
||||||
|
#include "raylib.h"
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
// Initialization
|
||||||
|
//---------------------------------------------------------
|
||||||
|
const int screenWidth = 800;
|
||||||
|
const int screenHeight = 450;
|
||||||
|
|
||||||
|
// Possible window flags
|
||||||
|
/*
|
||||||
|
FLAG_VSYNC_HINT
|
||||||
|
FLAG_FULLSCREEN_MODE -> not working properly -> wrong scaling!
|
||||||
|
FLAG_WINDOW_RESIZABLE
|
||||||
|
FLAG_WINDOW_UNDECORATED
|
||||||
|
FLAG_WINDOW_TRANSPARENT
|
||||||
|
FLAG_WINDOW_HIDDEN
|
||||||
|
FLAG_WINDOW_MINIMIZED -> Not supported on window creation
|
||||||
|
FLAG_WINDOW_MAXIMIZED -> Not supported on window creation
|
||||||
|
FLAG_WINDOW_UNFOCUSED
|
||||||
|
FLAG_WINDOW_TOPMOST
|
||||||
|
FLAG_WINDOW_HIGHDPI -> errors after minimize-resize, fb size is recalculated
|
||||||
|
FLAG_WINDOW_ALWAYS_RUN
|
||||||
|
FLAG_MSAA_4X_HINT
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Set configuration flags for window creation
|
||||||
|
SetConfigFlags(FLAG_VSYNC_HINT | FLAG_MSAA_4X_HINT | FLAG_WINDOW_HIGHDPI);
|
||||||
|
InitWindow(screenWidth, screenHeight, "raylib [core] example - window flags");
|
||||||
|
|
||||||
|
Vector2 ballPosition = { GetScreenWidth() / 2, GetScreenHeight() / 2 };
|
||||||
|
Vector2 ballSpeed = { 5.0f, 4.0f };
|
||||||
|
int ballRadius = 20;
|
||||||
|
|
||||||
|
int framesCounter = 0;
|
||||||
|
|
||||||
|
//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_F)) ToggleFullscreen(); // modifies window size when scaling!
|
||||||
|
|
||||||
|
if (IsKeyPressed(KEY_R))
|
||||||
|
{
|
||||||
|
if (IsWindowState(FLAG_WINDOW_RESIZABLE)) ClearWindowState(FLAG_WINDOW_RESIZABLE);
|
||||||
|
else SetWindowState(FLAG_WINDOW_RESIZABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsKeyPressed(KEY_D))
|
||||||
|
{
|
||||||
|
if (IsWindowState(FLAG_WINDOW_UNDECORATED)) ClearWindowState(FLAG_WINDOW_UNDECORATED);
|
||||||
|
else SetWindowState(FLAG_WINDOW_UNDECORATED);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsKeyPressed(KEY_H))
|
||||||
|
{
|
||||||
|
if (!IsWindowState(FLAG_WINDOW_HIDDEN)) SetWindowState(FLAG_WINDOW_HIDDEN);
|
||||||
|
|
||||||
|
framesCounter = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsWindowState(FLAG_WINDOW_HIDDEN))
|
||||||
|
{
|
||||||
|
framesCounter++;
|
||||||
|
if (framesCounter >= 240) ClearWindowState(FLAG_WINDOW_HIDDEN); // Show window after 3 seconds
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsKeyPressed(KEY_N))
|
||||||
|
{
|
||||||
|
if (!IsWindowState(FLAG_WINDOW_MINIMIZED)) MinimizeWindow();
|
||||||
|
|
||||||
|
framesCounter = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsWindowState(FLAG_WINDOW_MINIMIZED))
|
||||||
|
{
|
||||||
|
framesCounter++;
|
||||||
|
if (framesCounter >= 240) RestoreWindow(); // Restore window after 3 seconds
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsKeyPressed(KEY_M))
|
||||||
|
{
|
||||||
|
// NOTE: Requires FLAG_WINDOW_RESIZABLE enabled!
|
||||||
|
if (IsWindowState(FLAG_WINDOW_MAXIMIZED)) RestoreWindow();
|
||||||
|
else MaximizeWindow();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsKeyPressed(KEY_U))
|
||||||
|
{
|
||||||
|
if (IsWindowState(FLAG_WINDOW_UNFOCUSED)) ClearWindowState(FLAG_WINDOW_UNFOCUSED);
|
||||||
|
else SetWindowState(FLAG_WINDOW_UNFOCUSED);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsKeyPressed(KEY_T))
|
||||||
|
{
|
||||||
|
if (IsWindowState(FLAG_WINDOW_TOPMOST)) ClearWindowState(FLAG_WINDOW_TOPMOST);
|
||||||
|
else SetWindowState(FLAG_WINDOW_TOPMOST);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsKeyPressed(KEY_A))
|
||||||
|
{
|
||||||
|
if (IsWindowState(FLAG_WINDOW_ALWAYS_RUN)) ClearWindowState(FLAG_WINDOW_ALWAYS_RUN);
|
||||||
|
else SetWindowState(FLAG_WINDOW_ALWAYS_RUN);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsKeyPressed(KEY_V))
|
||||||
|
{
|
||||||
|
if (IsWindowState(FLAG_VSYNC_HINT)) ClearWindowState(FLAG_VSYNC_HINT);
|
||||||
|
else SetWindowState(FLAG_VSYNC_HINT);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bouncing ball logic
|
||||||
|
ballPosition.x += ballSpeed.x;
|
||||||
|
ballPosition.y += ballSpeed.y;
|
||||||
|
if ((ballPosition.x >= (GetScreenWidth() - ballRadius)) || (ballPosition.x <= ballRadius)) ballSpeed.x *= -1.0f;
|
||||||
|
if ((ballPosition.y >= (GetScreenHeight() - ballRadius)) || (ballPosition.y <= ballRadius)) ballSpeed.y *= -1.0f;
|
||||||
|
//-----------------------------------------------------
|
||||||
|
|
||||||
|
// Draw
|
||||||
|
//-----------------------------------------------------
|
||||||
|
BeginDrawing();
|
||||||
|
|
||||||
|
if (IsWindowState(FLAG_WINDOW_TRANSPARENT)) ClearBackground(BLANK);
|
||||||
|
else ClearBackground(RAYWHITE);
|
||||||
|
|
||||||
|
DrawCircleV(ballPosition, ballRadius, MAROON);
|
||||||
|
DrawRectangleLinesEx((Rectangle) { 0, 0, GetScreenWidth(), GetScreenHeight() }, 4, RAYWHITE);
|
||||||
|
|
||||||
|
DrawCircleV(GetMousePosition(), 10, DARKBLUE);
|
||||||
|
|
||||||
|
DrawFPS(10, 10);
|
||||||
|
|
||||||
|
DrawText(FormatText("Screen Size: [%i, %i]", GetScreenWidth(), GetScreenHeight()), 10, 40, 10, GREEN);
|
||||||
|
|
||||||
|
// Draw window state info
|
||||||
|
DrawText("Following flags can be set after window creation:", 10, 60, 10, GRAY);
|
||||||
|
if (IsWindowState(FLAG_FULLSCREEN_MODE)) DrawText("[F] FLAG_FULLSCREEN_MODE: on", 10, 80, 10, LIME);
|
||||||
|
else DrawText("[F] FLAG_FULLSCREEN_MODE: off", 10, 80, 10, MAROON);
|
||||||
|
if (IsWindowState(FLAG_WINDOW_RESIZABLE)) DrawText("[R] FLAG_WINDOW_RESIZABLE: on", 10, 100, 10, LIME);
|
||||||
|
else DrawText("[R] FLAG_WINDOW_RESIZABLE: off", 10, 100, 10, MAROON);
|
||||||
|
if (IsWindowState(FLAG_WINDOW_UNDECORATED)) DrawText("[D] FLAG_WINDOW_UNDECORATED: on", 10, 120, 10, LIME);
|
||||||
|
else DrawText("[D] FLAG_WINDOW_UNDECORATED: off", 10, 120, 10, MAROON);
|
||||||
|
if (IsWindowState(FLAG_WINDOW_HIDDEN)) DrawText("[H] FLAG_WINDOW_HIDDEN: on", 10, 140, 10, LIME);
|
||||||
|
else DrawText("[H] FLAG_WINDOW_HIDDEN: off", 10, 140, 10, MAROON);
|
||||||
|
if (IsWindowState(FLAG_WINDOW_MINIMIZED)) DrawText("[N] FLAG_WINDOW_MINIMIZED: on", 10, 160, 10, LIME);
|
||||||
|
else DrawText("[N] FLAG_WINDOW_MINIMIZED: off", 10, 160, 10, MAROON);
|
||||||
|
if (IsWindowState(FLAG_WINDOW_MAXIMIZED)) DrawText("[M] FLAG_WINDOW_MAXIMIZED: on", 10, 180, 10, LIME);
|
||||||
|
else DrawText("[M] FLAG_WINDOW_MAXIMIZED: off", 10, 180, 10, MAROON);
|
||||||
|
if (IsWindowState(FLAG_WINDOW_UNFOCUSED)) DrawText("[G] FLAG_WINDOW_UNFOCUSED: on", 10, 200, 10, LIME);
|
||||||
|
else DrawText("[U] FLAG_WINDOW_UNFOCUSED: off", 10, 200, 10, MAROON);
|
||||||
|
if (IsWindowState(FLAG_WINDOW_TOPMOST)) DrawText("[T] FLAG_WINDOW_TOPMOST: on", 10, 220, 10, LIME);
|
||||||
|
else DrawText("[T] FLAG_WINDOW_TOPMOST: off", 10, 220, 10, MAROON);
|
||||||
|
if (IsWindowState(FLAG_WINDOW_ALWAYS_RUN)) DrawText("[A] FLAG_WINDOW_ALWAYS_RUN: on", 10, 240, 10, LIME);
|
||||||
|
else DrawText("[A] FLAG_WINDOW_ALWAYS_RUN: off", 10, 240, 10, MAROON);
|
||||||
|
if (IsWindowState(FLAG_VSYNC_HINT)) DrawText("[V] FLAG_VSYNC_HINT: on", 10, 260, 10, LIME);
|
||||||
|
else DrawText("[V] FLAG_VSYNC_HINT: off", 10, 260, 10, MAROON);
|
||||||
|
|
||||||
|
DrawText("Following flags can only be set before window creation:", 10, 300, 10, GRAY);
|
||||||
|
if (IsWindowState(FLAG_WINDOW_HIGHDPI)) DrawText("FLAG_WINDOW_HIGHDPI: on", 10, 320, 10, LIME);
|
||||||
|
else DrawText("FLAG_WINDOW_HIGHDPI: off", 10, 320, 10, MAROON);
|
||||||
|
if (IsWindowState(FLAG_WINDOW_TRANSPARENT)) DrawText("FLAG_WINDOW_TRANSPARENT: on", 10, 340, 10, LIME);
|
||||||
|
else DrawText("FLAG_WINDOW_TRANSPARENT: off", 10, 340, 10, MAROON);
|
||||||
|
if (IsWindowState(FLAG_MSAA_4X_HINT)) DrawText("FLAG_MSAA_4X_HINT: on", 10, 360, 10, LIME);
|
||||||
|
else DrawText("FLAG_MSAA_4X_HINT: off", 10, 360, 10, MAROON);
|
||||||
|
|
||||||
|
EndDrawing();
|
||||||
|
//-----------------------------------------------------
|
||||||
|
}
|
||||||
|
|
||||||
|
// De-Initialization
|
||||||
|
//---------------------------------------------------------
|
||||||
|
CloseWindow(); // Close window and OpenGL context
|
||||||
|
//----------------------------------------------------------
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
BIN
examples/core/core_window_flags.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
|
|
@ -71,6 +71,10 @@ int main(void)
|
||||||
virtualMouse.x = (mouse.x - (GetScreenWidth() - (gameScreenWidth*scale))*0.5f)/scale;
|
virtualMouse.x = (mouse.x - (GetScreenWidth() - (gameScreenWidth*scale))*0.5f)/scale;
|
||||||
virtualMouse.y = (mouse.y - (GetScreenHeight() - (gameScreenHeight*scale))*0.5f)/scale;
|
virtualMouse.y = (mouse.y - (GetScreenHeight() - (gameScreenHeight*scale))*0.5f)/scale;
|
||||||
virtualMouse = ClampValue(virtualMouse, (Vector2){ 0, 0 }, (Vector2){ gameScreenWidth, gameScreenHeight });
|
virtualMouse = ClampValue(virtualMouse, (Vector2){ 0, 0 }, (Vector2){ gameScreenWidth, gameScreenHeight });
|
||||||
|
|
||||||
|
// Apply the same transformation as the virtual mouse to the real mouse (i.e. to work with raygui)
|
||||||
|
//SetMouseOffset(-(GetScreenWidth() - (gameScreenWidth*scale))*0.5f, -(GetScreenHeight() - (gameScreenHeight*scale))*0.5f);
|
||||||
|
//SetMouseScale(1/scale, 1/scale);
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Draw
|
// Draw
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,11 @@
|
||||||
*
|
*
|
||||||
********************************************************************************************/
|
********************************************************************************************/
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "raylib.h"
|
#include "raylib.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
// Initialization
|
// Initialization
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ int main(void)
|
||||||
model.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set map diffuse texture
|
model.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set map diffuse texture
|
||||||
|
|
||||||
// Get map image data to be used for collision detection
|
// Get map image data to be used for collision detection
|
||||||
Color *mapPixels = GetImageData(imMap);
|
Color *mapPixels = LoadImageColors(imMap);
|
||||||
UnloadImage(imMap); // Unload image from RAM
|
UnloadImage(imMap); // Unload image from RAM
|
||||||
|
|
||||||
Vector3 mapPosition = { -16.0f, 0.0f, -8.0f }; // Set model position
|
Vector3 mapPosition = { -16.0f, 0.0f, -8.0f }; // Set model position
|
||||||
|
|
@ -113,13 +113,13 @@ int main(void)
|
||||||
|
|
||||||
// De-Initialization
|
// De-Initialization
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
free(mapPixels); // Unload color array
|
UnloadImageColors(mapPixels); // Unload color array
|
||||||
|
|
||||||
UnloadTexture(cubicmap); // Unload cubicmap texture
|
UnloadTexture(cubicmap); // Unload cubicmap texture
|
||||||
UnloadTexture(texture); // Unload map texture
|
UnloadTexture(texture); // Unload map texture
|
||||||
UnloadModel(model); // Unload map model
|
UnloadModel(model); // Unload map model
|
||||||
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
CloseWindow(); // Close window and OpenGL context
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
122
examples/models/models_gltf_animation.c
Normal file
|
|
@ -0,0 +1,122 @@
|
||||||
|
/*******************************************************************************************
|
||||||
|
*
|
||||||
|
* raylib [models] example - Load 3d gltf model with animations and play them
|
||||||
|
*
|
||||||
|
* This example has been created using raylib 3.5 (www.raylib.com)
|
||||||
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
|
*
|
||||||
|
* Example contributed by Hristo Stamenov (@object71) and reviewed by Ramon Santamaria (@raysan5)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2021 Hristo Stamenov (@object71) and Ramon Santamaria (@raysan5)
|
||||||
|
*
|
||||||
|
********************************************************************************************
|
||||||
|
*
|
||||||
|
* To export a model from blender, make sure it is not posed, the vertices need to be in the
|
||||||
|
* same position as they would be in edit mode.
|
||||||
|
* and that the scale of your models is set to 0. Scaling can be done from the export menu.
|
||||||
|
*
|
||||||
|
********************************************************************************************/
|
||||||
|
|
||||||
|
#include "raylib.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
// Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
const int screenWidth = 800;
|
||||||
|
const int screenHeight = 450;
|
||||||
|
|
||||||
|
InitWindow(screenWidth, screenHeight, "raylib [models] example - model animation");
|
||||||
|
|
||||||
|
// Define the camera to look into our 3d world
|
||||||
|
Camera camera = { 0 };
|
||||||
|
camera.position = (Vector3){ 10.0f, 10.0f, 10.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
|
||||||
|
camera.type = CAMERA_PERSPECTIVE; // Camera mode type
|
||||||
|
|
||||||
|
Model model = LoadModel("resources/gltf/rigged_figure.glb"); // Load the animated model mesh and
|
||||||
|
// basic data
|
||||||
|
// Texture2D texture = LoadTexture("resources/guy/guytex.png"); // Load model texture and set material
|
||||||
|
// SetMaterialTexture(&model.materials[0], MAP_DIFFUSE, texture); // Set model material map texture
|
||||||
|
|
||||||
|
Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position
|
||||||
|
|
||||||
|
// Load animation data
|
||||||
|
int animsCount = 0;
|
||||||
|
ModelAnimation *anims = LoadModelAnimations("resources/gltf/rigged_figure.glb", &animsCount);
|
||||||
|
int animFrameCounter = 0;
|
||||||
|
int animationDirection = 1;
|
||||||
|
|
||||||
|
SetCameraMode(camera, CAMERA_FREE); // Set free camera mode
|
||||||
|
|
||||||
|
SetTargetFPS(30); // 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);
|
||||||
|
|
||||||
|
// Play animation when spacebar is held down
|
||||||
|
if (IsKeyDown(KEY_SPACE))
|
||||||
|
{
|
||||||
|
animFrameCounter += animationDirection;
|
||||||
|
|
||||||
|
if (animFrameCounter >= anims[0].frameCount || animFrameCounter <= 0)
|
||||||
|
{
|
||||||
|
animationDirection *= -1;
|
||||||
|
animFrameCounter += animationDirection;
|
||||||
|
}
|
||||||
|
|
||||||
|
UpdateModelAnimation(model, anims[0], animFrameCounter);
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Draw
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
BeginDrawing();
|
||||||
|
|
||||||
|
ClearBackground(RAYWHITE);
|
||||||
|
|
||||||
|
BeginMode3D(camera);
|
||||||
|
|
||||||
|
DrawModelEx(model, position, (Vector3){ 1.0f, 0.0f, 0.0f }, -90.0f, (Vector3){ 1.0f, 1.0f, 1.0f }, WHITE);
|
||||||
|
|
||||||
|
for (int i = 0; i < model.boneCount; i++)
|
||||||
|
{
|
||||||
|
DrawSphere(anims[0].framePoses[animFrameCounter][i].translation, 0.01f, RED);
|
||||||
|
}
|
||||||
|
|
||||||
|
DrawGrid(10, 1.0f); // Draw a grid
|
||||||
|
|
||||||
|
EndMode3D();
|
||||||
|
|
||||||
|
DrawText("PRESS SPACE to PLAY MODEL ANIMATION", 10, 10, 20, MAROON);
|
||||||
|
DrawText("(cc4) Rigged Figure by @Cesium", screenWidth - 200, screenHeight - 20, 10, GRAY);
|
||||||
|
|
||||||
|
EndDrawing();
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
}
|
||||||
|
|
||||||
|
// De-Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
// UnloadTexture(texture); // Unload texture
|
||||||
|
|
||||||
|
// Unload model animations data
|
||||||
|
for (int i = 0; i < animsCount; i++) UnloadModelAnimation(anims[i]);
|
||||||
|
RL_FREE(anims);
|
||||||
|
|
||||||
|
UnloadModel(model); // Unload model
|
||||||
|
|
||||||
|
CloseWindow(); // Close window and OpenGL context
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
87
examples/models/models_gltf_model.c
Normal file
|
|
@ -0,0 +1,87 @@
|
||||||
|
/*******************************************************************************************
|
||||||
|
*
|
||||||
|
* raylib [models] example - Load 3d gltf model
|
||||||
|
*
|
||||||
|
* This example has been created using raylib 3.5 (www.raylib.com)
|
||||||
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
|
*
|
||||||
|
* Example contributed by Hristo Stamenov (@object71) and reviewed by Ramon Santamaria (@raysan5)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2021 Hristo Stamenov (@object71) and Ramon Santamaria (@raysan5)
|
||||||
|
*
|
||||||
|
********************************************************************************************
|
||||||
|
*
|
||||||
|
* To export a model from blender, make sure it is not posed, the vertices need to be in the
|
||||||
|
* same position as they would be in edit mode.
|
||||||
|
* and that the scale of your models is set to 0. Scaling can be done from the export menu.
|
||||||
|
*
|
||||||
|
********************************************************************************************/
|
||||||
|
|
||||||
|
#include "raylib.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
// Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
const int screenWidth = 800;
|
||||||
|
const int screenHeight = 450;
|
||||||
|
|
||||||
|
InitWindow(screenWidth, screenHeight, "raylib [models] example - model animation");
|
||||||
|
|
||||||
|
// Define the camera to look into our 3d world
|
||||||
|
Camera camera = { 0 };
|
||||||
|
camera.position = (Vector3){ 10.0f, 10.0f, 10.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
|
||||||
|
camera.type = CAMERA_PERSPECTIVE; // Camera mode type
|
||||||
|
|
||||||
|
Model model = LoadModel("resources/gltf/Avocado.glb"); // Load the animated model mesh and
|
||||||
|
|
||||||
|
Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position
|
||||||
|
|
||||||
|
SetCameraMode(camera, CAMERA_FREE); // Set free 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);
|
||||||
|
|
||||||
|
// Draw
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
BeginDrawing();
|
||||||
|
|
||||||
|
ClearBackground(RAYWHITE);
|
||||||
|
|
||||||
|
BeginMode3D(camera);
|
||||||
|
|
||||||
|
DrawModelEx(model, position, (Vector3){ 0.0f, 1.0f, 0.0f }, 180.0f, (Vector3){ 15.0f, 15.0f, 15.0f }, WHITE);
|
||||||
|
|
||||||
|
DrawGrid(10, 1.0f); // Draw a grid
|
||||||
|
|
||||||
|
EndMode3D();
|
||||||
|
|
||||||
|
DrawText("(cc0) Avocado by @Microsoft", screenWidth - 200, screenHeight - 20, 10, GRAY);
|
||||||
|
|
||||||
|
EndDrawing();
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
}
|
||||||
|
|
||||||
|
// De-Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
UnloadModel(model); // Unload model
|
||||||
|
|
||||||
|
CloseWindow(); // Close window and OpenGL context
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
@ -24,6 +24,8 @@
|
||||||
#define IRRADIANCE_SIZE 32 // Irradiance texture size
|
#define IRRADIANCE_SIZE 32 // Irradiance texture size
|
||||||
#define PREFILTERED_SIZE 256 // Prefiltered HDR environment texture size
|
#define PREFILTERED_SIZE 256 // Prefiltered HDR environment texture size
|
||||||
#define BRDF_SIZE 512 // BRDF LUT texture size
|
#define BRDF_SIZE 512 // BRDF LUT texture size
|
||||||
|
#define LIGHT_DISTANCE 1000.0f
|
||||||
|
#define LIGHT_HEIGHT 1.0f
|
||||||
|
|
||||||
// PBR material loading
|
// PBR material loading
|
||||||
static Material LoadMaterialPBR(Color albedo, float metalness, float roughness);
|
static Material LoadMaterialPBR(Color albedo, float metalness, float roughness);
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* raylib [models] example - Skybox loading and drawing
|
* raylib [models] example - Skybox loading and drawing
|
||||||
*
|
*
|
||||||
* This example has been created using raylib 3.1 (www.raylib.com)
|
* This example has been created using raylib 3.5 (www.raylib.com)
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2017-2020 Ramon Santamaria (@raysan5)
|
* Copyright (c) 2017-2020 Ramon Santamaria (@raysan5)
|
||||||
|
|
|
||||||
|
|
@ -114,23 +114,23 @@ int main(void)
|
||||||
// Draw framebuffer texture (Ahrs Display)
|
// Draw framebuffer texture (Ahrs Display)
|
||||||
int centerX = framebuffer.texture.width/2;
|
int centerX = framebuffer.texture.width/2;
|
||||||
int centerY = framebuffer.texture.height/2;
|
int centerY = framebuffer.texture.height/2;
|
||||||
float scaleFactor = 0.5f;
|
|
||||||
|
|
||||||
BeginTextureMode(framebuffer);
|
BeginTextureMode(framebuffer);
|
||||||
|
|
||||||
|
ClearBackground(RAYWHITE);
|
||||||
BeginBlendMode(BLEND_ALPHA);
|
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},
|
(Rectangle){ centerX, centerY, texBackground.width, texBackground.height},
|
||||||
(Vector2){ texBackground.width/2*scaleFactor, texBackground.height/2*scaleFactor + pitchOffset*scaleFactor }, roll, WHITE);
|
(Vector2){ texBackground.width/2, texBackground.height/2 + pitchOffset }, roll, WHITE);
|
||||||
|
|
||||||
DrawTexturePro(texPitch, (Rectangle){ 0, 0, texPitch.width, texPitch.height },
|
DrawTexturePro(texPitch, (Rectangle){ 0, 0, texPitch.width, texPitch.height },
|
||||||
(Rectangle){ centerX, centerY, texPitch.width*scaleFactor, texPitch.height*scaleFactor },
|
(Rectangle){ centerX, centerY, texPitch.width, texPitch.height },
|
||||||
(Vector2){ texPitch.width/2*scaleFactor, texPitch.height/2*scaleFactor + pitchOffset*scaleFactor }, roll, WHITE);
|
(Vector2){ texPitch.width/2, texPitch.height/2 + pitchOffset }, 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 },
|
(Rectangle){ centerX, centerY, texPlane.width, texPlane.height },
|
||||||
(Vector2){ texPlane.width/2*scaleFactor, texPlane.height/2*scaleFactor }, 0, WHITE);
|
(Vector2){ texPlane.width/2, texPlane.height/2 }, 0, WHITE);
|
||||||
|
|
||||||
EndBlendMode();
|
EndBlendMode();
|
||||||
|
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 4.3 KiB |
BIN
examples/models/resources/gltf/Avocado.glb
Normal file
11
examples/models/resources/gltf/LICENSE
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
Rigged Figure model has been created by Cesium (https://cesium.com/cesiumjs/),
|
||||||
|
and licensed as Creative Commons Attribution 4.0 International License.
|
||||||
|
|
||||||
|
Check for details: http://creativecommons.org/licenses/by/4.0/
|
||||||
|
|
||||||
|
Avocado model is provided by Microsoft
|
||||||
|
and licensed as CC0 Universal Public Domain
|
||||||
|
|
||||||
|
Check for details: https://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
|
||||||
|
GLTF sample models for testing are taken from: https://github.com/KhronosGroup/glTF-Sample-Models/
|
||||||
BIN
examples/models/resources/gltf/rigged_figure.glb
Normal file
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 295 KiB After Width: | Height: | Size: 295 KiB |
|
|
@ -41,27 +41,27 @@ float RadicalInverseVdC(uint bits)
|
||||||
// Compute Hammersley coordinates
|
// Compute Hammersley coordinates
|
||||||
vec2 Hammersley(uint i, uint N)
|
vec2 Hammersley(uint i, uint N)
|
||||||
{
|
{
|
||||||
return vec2(float(i)/float(N), RadicalInverseVdC(i));
|
return vec2(float(i)/float(N), RadicalInverseVdC(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Integrate number of importance samples for (roughness and NoV)
|
// Integrate number of importance samples for (roughness and NoV)
|
||||||
vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness)
|
vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness)
|
||||||
{
|
{
|
||||||
float a = roughness*roughness;
|
float a = roughness*roughness;
|
||||||
float phi = 2.0 * PI * Xi.x;
|
float phi = 2.0 * PI * Xi.x;
|
||||||
float cosTheta = sqrt((1.0 - Xi.y)/(1.0 + (a*a - 1.0)*Xi.y));
|
float cosTheta = sqrt((1.0 - Xi.y)/(1.0 + (a*a - 1.0)*Xi.y));
|
||||||
float sinTheta = sqrt(1.0 - cosTheta*cosTheta);
|
float sinTheta = sqrt(1.0 - cosTheta*cosTheta);
|
||||||
|
|
||||||
// Transform from spherical coordinates to cartesian coordinates (halfway vector)
|
// Transform from spherical coordinates to cartesian coordinates (halfway vector)
|
||||||
vec3 H = vec3(cos(phi)*sinTheta, sin(phi)*sinTheta, cosTheta);
|
vec3 H = vec3(cos(phi)*sinTheta, sin(phi)*sinTheta, cosTheta);
|
||||||
|
|
||||||
// Transform from tangent space H vector to world space sample vector
|
// Transform from tangent space H vector to world space sample vector
|
||||||
vec3 up = ((abs(N.z) < 0.999) ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0));
|
vec3 up = ((abs(N.z) < 0.999) ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0));
|
||||||
vec3 tangent = normalize(cross(up, N));
|
vec3 tangent = normalize(cross(up, N));
|
||||||
vec3 bitangent = cross(N, tangent);
|
vec3 bitangent = cross(N, tangent);
|
||||||
vec3 sampleVec = tangent*H.x + bitangent*H.y + N*H.z;
|
vec3 sampleVec = tangent*H.x + bitangent*H.y + N*H.z;
|
||||||
|
|
||||||
return normalize(sampleVec);
|
return normalize(sampleVec);
|
||||||
}
|
}
|
||||||
|
|
||||||
float GeometrySchlickGGX(float NdotV, float roughness)
|
float GeometrySchlickGGX(float NdotV, float roughness)
|
||||||
|
|
|
||||||
|
|
@ -54,26 +54,26 @@ float RadicalInverse_VdC(uint bits)
|
||||||
|
|
||||||
vec2 Hammersley(uint i, uint N)
|
vec2 Hammersley(uint i, uint N)
|
||||||
{
|
{
|
||||||
return vec2(float(i)/float(N), RadicalInverse_VdC(i));
|
return vec2(float(i)/float(N), RadicalInverse_VdC(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness)
|
vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness)
|
||||||
{
|
{
|
||||||
float a = roughness*roughness;
|
float a = roughness*roughness;
|
||||||
float phi = 2.0*PI*Xi.x;
|
float phi = 2.0*PI*Xi.x;
|
||||||
float cosTheta = sqrt((1.0 - Xi.y)/(1.0 + (a*a - 1.0)*Xi.y));
|
float cosTheta = sqrt((1.0 - Xi.y)/(1.0 + (a*a - 1.0)*Xi.y));
|
||||||
float sinTheta = sqrt(1.0 - cosTheta*cosTheta);
|
float sinTheta = sqrt(1.0 - cosTheta*cosTheta);
|
||||||
|
|
||||||
// Transform from spherical coordinates to cartesian coordinates (halfway vector)
|
// Transform from spherical coordinates to cartesian coordinates (halfway vector)
|
||||||
vec3 H = vec3(cos(phi)*sinTheta, sin(phi)*sinTheta, cosTheta);
|
vec3 H = vec3(cos(phi)*sinTheta, sin(phi)*sinTheta, cosTheta);
|
||||||
|
|
||||||
// Transform from tangent space H vector to world space sample vector
|
// Transform from tangent space H vector to world space sample vector
|
||||||
vec3 up = ((abs(N.z) < 0.999) ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0));
|
vec3 up = ((abs(N.z) < 0.999) ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0));
|
||||||
vec3 tangent = normalize(cross(up, N));
|
vec3 tangent = normalize(cross(up, N));
|
||||||
vec3 bitangent = cross(N, tangent);
|
vec3 bitangent = cross(N, tangent);
|
||||||
vec3 sampleVec = tangent*H.x + bitangent*H.y + N*H.z;
|
vec3 sampleVec = tangent*H.x + bitangent*H.y + N*H.z;
|
||||||
|
|
||||||
return normalize(sampleVec);
|
return normalize(sampleVec);
|
||||||
}
|
}
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
*
|
*
|
||||||
* Copyright (c) 2017 Victor Fisac
|
* Copyright (c) 2017 Victor Fisac
|
||||||
*
|
*
|
||||||
* 19-Jun-2020 - modified by Giuseppe Mastrangelo (@peppemas) - VFlip Support
|
* 19-Jun-2020 - modified by Giuseppe Mastrangelo (@peppemas) - VFlip Support
|
||||||
*
|
*
|
||||||
**********************************************************************************************/
|
**********************************************************************************************/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
*
|
*
|
||||||
* LICENSE: zlib/libpng
|
* LICENSE: zlib/libpng
|
||||||
*
|
*
|
||||||
* Copyright (c) 2017 Victor Fisac and Ramon Santamaria
|
* Copyright (c) 2017-2020 Victor Fisac (@victorfisac) and Ramon Santamaria (@raysan5)
|
||||||
*
|
*
|
||||||
* This software is provided "as-is", without any express or implied warranty. In no event
|
* 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.
|
* will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
|
@ -33,29 +33,24 @@
|
||||||
#ifndef RLIGHTS_H
|
#ifndef RLIGHTS_H
|
||||||
#define RLIGHTS_H
|
#define RLIGHTS_H
|
||||||
|
|
||||||
#include "raylib.h"
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Defines and Macros
|
// Defines and Macros
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
#define MAX_LIGHTS 4 // Max lights supported by shader
|
#define MAX_LIGHTS 4 // Max dynamic lights supported by shader
|
||||||
#define LIGHT_DISTANCE 3.5f // Light distance from world center
|
|
||||||
#define LIGHT_HEIGHT 1.0f // Light height position
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Types and Structures Definition
|
// Types and Structures Definition
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
typedef enum {
|
|
||||||
LIGHT_DIRECTIONAL,
|
|
||||||
LIGHT_POINT
|
|
||||||
} LightType;
|
|
||||||
|
|
||||||
typedef struct {
|
// Light data
|
||||||
bool enabled;
|
typedef struct {
|
||||||
LightType type;
|
int type;
|
||||||
Vector3 position;
|
Vector3 position;
|
||||||
Vector3 target;
|
Vector3 target;
|
||||||
Color color;
|
Color color;
|
||||||
|
bool enabled;
|
||||||
|
|
||||||
|
// Shader locations
|
||||||
int enabledLoc;
|
int enabledLoc;
|
||||||
int typeLoc;
|
int typeLoc;
|
||||||
int posLoc;
|
int posLoc;
|
||||||
|
|
@ -63,6 +58,12 @@ typedef struct {
|
||||||
int colorLoc;
|
int colorLoc;
|
||||||
} Light;
|
} Light;
|
||||||
|
|
||||||
|
// Light type
|
||||||
|
typedef enum {
|
||||||
|
LIGHT_DIRECTIONAL,
|
||||||
|
LIGHT_POINT
|
||||||
|
} LightType;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" { // Prevents name mangling of functions
|
extern "C" { // Prevents name mangling of functions
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -70,8 +71,8 @@ extern "C" { // Prevents name mangling of functions
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Module Functions Declaration
|
// Module Functions Declaration
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
void CreateLight(int type, Vector3 pos, Vector3 targ, Color color, Shader shader); // Defines a light and get locations from PBR shader
|
Light CreateLight(int type, Vector3 position, Vector3 target, Color color, Shader shader); // Create a light and get shader locations
|
||||||
void UpdateLightValues(Shader shader, Light light); // Send to PBR shader light values
|
void UpdateLightValues(Shader shader, Light light); // Send light properties to shader
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
@ -103,7 +104,6 @@ void UpdateLightValues(Shader shader, Light light);
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Global Variables Definition
|
// Global Variables Definition
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
static Light lights[MAX_LIGHTS] = { 0 };
|
|
||||||
static int lightsCount = 0; // Current amount of created lights
|
static int lightsCount = 0; // Current amount of created lights
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
@ -115,8 +115,8 @@ static int lightsCount = 0; // Current amount of created lights
|
||||||
// Module Functions Definition
|
// Module Functions Definition
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Defines a light and get locations from PBR shader
|
// Create a light and get shader locations
|
||||||
void CreateLight(int type, Vector3 pos, Vector3 targ, Color color, Shader shader)
|
Light CreateLight(int type, Vector3 position, Vector3 target, Color color, Shader shader)
|
||||||
{
|
{
|
||||||
Light light = { 0 };
|
Light light = { 0 };
|
||||||
|
|
||||||
|
|
@ -124,15 +124,20 @@ void CreateLight(int type, Vector3 pos, Vector3 targ, Color color, Shader shader
|
||||||
{
|
{
|
||||||
light.enabled = true;
|
light.enabled = true;
|
||||||
light.type = type;
|
light.type = type;
|
||||||
light.position = pos;
|
light.position = position;
|
||||||
light.target = targ;
|
light.target = target;
|
||||||
light.color = color;
|
light.color = color;
|
||||||
|
|
||||||
|
// TODO: Below code doesn't look good to me,
|
||||||
|
// it assumes a specific shader naming and structure
|
||||||
|
// Probably this implementation could be improved
|
||||||
char enabledName[32] = "lights[x].enabled\0";
|
char enabledName[32] = "lights[x].enabled\0";
|
||||||
char typeName[32] = "lights[x].type\0";
|
char typeName[32] = "lights[x].type\0";
|
||||||
char posName[32] = "lights[x].position\0";
|
char posName[32] = "lights[x].position\0";
|
||||||
char targetName[32] = "lights[x].target\0";
|
char targetName[32] = "lights[x].target\0";
|
||||||
char colorName[32] = "lights[x].color\0";
|
char colorName[32] = "lights[x].color\0";
|
||||||
|
|
||||||
|
// Set location name [x] depending on lights count
|
||||||
enabledName[7] = '0' + lightsCount;
|
enabledName[7] = '0' + lightsCount;
|
||||||
typeName[7] = '0' + lightsCount;
|
typeName[7] = '0' + lightsCount;
|
||||||
posName[7] = '0' + lightsCount;
|
posName[7] = '0' + lightsCount;
|
||||||
|
|
@ -146,13 +151,15 @@ void CreateLight(int type, Vector3 pos, Vector3 targ, Color color, Shader shader
|
||||||
light.colorLoc = GetShaderLocation(shader, colorName);
|
light.colorLoc = GetShaderLocation(shader, colorName);
|
||||||
|
|
||||||
UpdateLightValues(shader, light);
|
UpdateLightValues(shader, light);
|
||||||
|
|
||||||
lights[lightsCount] = light;
|
|
||||||
lightsCount++;
|
lightsCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return light;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send to PBR shader light values
|
// Send light properties to shader
|
||||||
|
// NOTE: Light shader locations should be available
|
||||||
void UpdateLightValues(Shader shader, Light light)
|
void UpdateLightValues(Shader shader, Light light)
|
||||||
{
|
{
|
||||||
// Send to shader light enabled state and type
|
// Send to shader light enabled state and type
|
||||||
|
|
@ -168,8 +175,9 @@ void UpdateLightValues(Shader shader, Light light)
|
||||||
SetShaderValue(shader, light.targetLoc, target, UNIFORM_VEC3);
|
SetShaderValue(shader, light.targetLoc, target, UNIFORM_VEC3);
|
||||||
|
|
||||||
// Send to shader light color values
|
// Send to shader light color values
|
||||||
float diff[4] = { (float)light.color.r/(float)255, (float)light.color.g/(float)255, (float)light.color.b/(float)255, (float)light.color.a/(float)255 };
|
float color[4] = { (float)light.color.r/(float)255, (float)light.color.g/(float)255,
|
||||||
SetShaderValue(shader, light.colorLoc, diff, UNIFORM_VEC4);
|
(float)light.color.b/(float)255, (float)light.color.a/(float)255 };
|
||||||
|
SetShaderValue(shader, light.colorLoc, color, UNIFORM_VEC4);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // RLIGHTS_IMPLEMENTATION
|
#endif // RLIGHTS_IMPLEMENTATION
|
||||||
|
|
@ -135,7 +135,7 @@ EASEDEF float EaseQuadOut(float t, float b, float c, float d) { t /= d; return (
|
||||||
EASEDEF float EaseQuadInOut(float t, float b, float c, float d)
|
EASEDEF float EaseQuadInOut(float t, float b, float c, float d)
|
||||||
{
|
{
|
||||||
if ((t/=d/2) < 1) return (((c/2)*(t*t)) + b);
|
if ((t/=d/2) < 1) return (((c/2)*(t*t)) + b);
|
||||||
return (-c/2.0f*(((t - 1.0f)*(t - 3.0f)) - 1.0f) + b);
|
return (-c/2.0f*(((t - 1.0f)*(t - 3.0f)) - 1.0f) + b);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Exponential Easing functions
|
// Exponential Easing functions
|
||||||
|
|
@ -147,7 +147,7 @@ EASEDEF float EaseExpoInOut(float t, float b, float c, float d)
|
||||||
if (t == d) return (b + c);
|
if (t == d) return (b + c);
|
||||||
if ((t/=d/2.0f) < 1.0f) return (c/2.0f*pow(2.0f, 10.0f*(t - 1.0f)) + b);
|
if ((t/=d/2.0f) < 1.0f) return (c/2.0f*pow(2.0f, 10.0f*(t - 1.0f)) + b);
|
||||||
|
|
||||||
return (c/2.0f*(-pow(2.0f, -10.0f*(t - 1.0f)) + 2.0f) + b);
|
return (c/2.0f*(-pow(2.0f, -10.0f*(t - 1.0f)) + 2.0f) + b);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Back Easing functions
|
// Back Easing functions
|
||||||
|
|
|
||||||
|
|
@ -119,29 +119,29 @@ int main(int argc, char *argv[])
|
||||||
// Check if a key has been pressed
|
// Check if a key has been pressed
|
||||||
static int kbhit(void)
|
static int kbhit(void)
|
||||||
{
|
{
|
||||||
struct termios oldt, newt;
|
struct termios oldt, newt;
|
||||||
int ch;
|
int ch;
|
||||||
int oldf;
|
int oldf;
|
||||||
|
|
||||||
tcgetattr(STDIN_FILENO, &oldt);
|
tcgetattr(STDIN_FILENO, &oldt);
|
||||||
newt = oldt;
|
newt = oldt;
|
||||||
newt.c_lflag &= ~(ICANON | ECHO);
|
newt.c_lflag &= ~(ICANON | ECHO);
|
||||||
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
|
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
|
||||||
oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
|
oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
|
||||||
fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);
|
fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);
|
||||||
|
|
||||||
ch = getchar();
|
ch = getchar();
|
||||||
|
|
||||||
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
|
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
|
||||||
fcntl(STDIN_FILENO, F_SETFL, oldf);
|
fcntl(STDIN_FILENO, F_SETFL, oldf);
|
||||||
|
|
||||||
if (ch != EOF)
|
if (ch != EOF)
|
||||||
{
|
{
|
||||||
ungetc(ch, stdin);
|
ungetc(ch, stdin);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get pressed character
|
// Get pressed character
|
||||||
|
|
|
||||||
|
|
@ -15,10 +15,15 @@
|
||||||
* allows coding in a pseudo-OpenGL 1.1 style while translating calls to multiple
|
* allows coding in a pseudo-OpenGL 1.1 style while translating calls to multiple
|
||||||
* OpenGL versions backends (1.1, 2.1, 3.3, ES 2.0).
|
* OpenGL versions backends (1.1, 2.1, 3.3, ES 2.0).
|
||||||
*
|
*
|
||||||
* COMPILATION:
|
* WINDOWS COMPILATION:
|
||||||
* gcc -o rlgl_standalone.exe rlgl_standalone.c -s -Iexternal\include -I..\..\src \
|
* gcc -o rlgl_standalone.exe rlgl_standalone.c -s -Iexternal\include -I..\..\src \
|
||||||
* -L. -Lexternal\lib -lglfw3 -lopengl32 -lgdi32 -Wall -std=c99 -DGRAPHICS_API_OPENGL_33
|
* -L. -Lexternal\lib -lglfw3 -lopengl32 -lgdi32 -Wall -std=c99 -DGRAPHICS_API_OPENGL_33
|
||||||
*
|
*
|
||||||
|
* APPLE COMPILATION:
|
||||||
|
* gcc -o rlgl_standalone rlgl_standalone.c -I../../src -Iexternal/include -Lexternal/lib \
|
||||||
|
* -lglfw3 -std=c99 -framework CoreVideo -framework OpenGL -framework OpenAL \
|
||||||
|
* -framework IOKit -framework Cocoa -Wno-deprecated-declarations
|
||||||
|
*
|
||||||
* LICENSE: zlib/libpng
|
* LICENSE: zlib/libpng
|
||||||
*
|
*
|
||||||
* This example is licensed under an unmodified zlib/libpng license, which is an OSI-certified,
|
* This example is licensed under an unmodified zlib/libpng license, which is an OSI-certified,
|
||||||
|
|
@ -99,6 +104,10 @@ int main(void)
|
||||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
|
||||||
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
||||||
//glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE);
|
//glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE);
|
||||||
|
#if defined(__APPLE__)
|
||||||
|
glfwWindowHint( GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
GLFWwindow *window = glfwCreateWindow(screenWidth, screenHeight, "rlgl standalone", NULL, NULL);
|
GLFWwindow *window = glfwCreateWindow(screenWidth, screenHeight, "rlgl standalone", NULL, NULL);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,19 @@
|
||||||
/*******************************************************************************************
|
/*******************************************************************************************
|
||||||
*
|
*
|
||||||
* Physac - Physics demo
|
* raylib [physac] example - physics demo
|
||||||
*
|
*
|
||||||
* NOTE 1: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations.
|
* This example has been created using raylib 1.5 (www.raylib.com)
|
||||||
* NOTE 2: Physac requires static C library linkage to avoid dependency on MinGW DLL (-static -lpthread)
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
*
|
*
|
||||||
* Use the following line to compile:
|
* This example uses physac 1.1 (https://github.com/raysan5/raylib/blob/master/src/physac.h)
|
||||||
*
|
*
|
||||||
* gcc -o $(NAME_PART).exe $(FILE_NAME) -s -static /
|
* Copyright (c) 2016-2021 Victor Fisac (@victorfisac) and Ramon Santamaria (@raysan5)
|
||||||
* -lraylib -lpthread -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm /
|
|
||||||
* -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition
|
|
||||||
*
|
|
||||||
* Copyright (c) 2016-2018 Victor Fisac
|
|
||||||
*
|
*
|
||||||
********************************************************************************************/
|
********************************************************************************************/
|
||||||
|
|
||||||
#include "raylib.h"
|
#include "raylib.h"
|
||||||
|
|
||||||
#define PHYSAC_IMPLEMENTATION
|
#define PHYSAC_IMPLEMENTATION
|
||||||
#define PHYSAC_NO_THREADS
|
|
||||||
#include "physac.h"
|
#include "physac.h"
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
|
|
@ -29,12 +24,11 @@ int main(void)
|
||||||
const int screenHeight = 450;
|
const int screenHeight = 450;
|
||||||
|
|
||||||
SetConfigFlags(FLAG_MSAA_4X_HINT);
|
SetConfigFlags(FLAG_MSAA_4X_HINT);
|
||||||
InitWindow(screenWidth, screenHeight, "Physac [raylib] - Physics demo");
|
InitWindow(screenWidth, screenHeight, "raylib [physac] example - physics demo");
|
||||||
|
|
||||||
// Physac logo drawing position
|
// Physac logo drawing position
|
||||||
int logoX = screenWidth - MeasureText("Physac", 30) - 10;
|
int logoX = screenWidth - MeasureText("Physac", 30) - 10;
|
||||||
int logoY = 15;
|
int logoY = 15;
|
||||||
bool needsReset = false;
|
|
||||||
|
|
||||||
// Initialize physics and default physics bodies
|
// Initialize physics and default physics bodies
|
||||||
InitPhysics();
|
InitPhysics();
|
||||||
|
|
@ -55,25 +49,17 @@ int main(void)
|
||||||
{
|
{
|
||||||
// Update
|
// Update
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Delay initialization of variables due to physics reset async
|
UpdatePhysics(); // Update physics system
|
||||||
RunPhysicsStep();
|
|
||||||
|
|
||||||
if (needsReset)
|
if (IsKeyPressed('R')) // Reset physics system
|
||||||
{
|
{
|
||||||
|
ResetPhysics();
|
||||||
|
|
||||||
floor = CreatePhysicsBodyRectangle((Vector2){ screenWidth/2, screenHeight }, 500, 100, 10);
|
floor = CreatePhysicsBodyRectangle((Vector2){ screenWidth/2, screenHeight }, 500, 100, 10);
|
||||||
floor->enabled = false;
|
floor->enabled = false;
|
||||||
|
|
||||||
circle = CreatePhysicsBodyCircle((Vector2){ screenWidth/2, screenHeight/2 }, 45, 10);
|
circle = CreatePhysicsBodyCircle((Vector2){ screenWidth/2, screenHeight/2 }, 45, 10);
|
||||||
circle->enabled = false;
|
circle->enabled = false;
|
||||||
|
|
||||||
needsReset = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset physics input
|
|
||||||
if (IsKeyPressed('R'))
|
|
||||||
{
|
|
||||||
ResetPhysics();
|
|
||||||
needsReset = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Physics body creation inputs
|
// Physics body creation inputs
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,19 @@
|
||||||
/*******************************************************************************************
|
/*******************************************************************************************
|
||||||
*
|
*
|
||||||
* Physac - Physics friction
|
* raylib [physac] example - physics friction
|
||||||
*
|
*
|
||||||
* NOTE 1: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations.
|
* This example has been created using raylib 1.5 (www.raylib.com)
|
||||||
* NOTE 2: Physac requires static C library linkage to avoid dependency on MinGW DLL (-static -lpthread)
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
*
|
*
|
||||||
* Use the following line to compile:
|
* This example uses physac 1.1 (https://github.com/raysan5/raylib/blob/master/src/physac.h)
|
||||||
*
|
*
|
||||||
* gcc -o $(NAME_PART).exe $(FILE_NAME) -s -static /
|
* Copyright (c) 2016-2021 Victor Fisac (@victorfisac) and Ramon Santamaria (@raysan5)
|
||||||
* -lraylib -lpthread -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm /
|
|
||||||
* -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition
|
|
||||||
*
|
|
||||||
* Copyright (c) 2016-2018 Victor Fisac
|
|
||||||
*
|
*
|
||||||
********************************************************************************************/
|
********************************************************************************************/
|
||||||
|
|
||||||
#include "raylib.h"
|
#include "raylib.h"
|
||||||
|
|
||||||
#define PHYSAC_IMPLEMENTATION
|
#define PHYSAC_IMPLEMENTATION
|
||||||
#define PHYSAC_NO_THREADS
|
|
||||||
#include "physac.h"
|
#include "physac.h"
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
|
|
@ -29,7 +24,7 @@ int main(void)
|
||||||
const int screenHeight = 450;
|
const int screenHeight = 450;
|
||||||
|
|
||||||
SetConfigFlags(FLAG_MSAA_4X_HINT);
|
SetConfigFlags(FLAG_MSAA_4X_HINT);
|
||||||
InitWindow(screenWidth, screenHeight, "Physac [raylib] - Physics friction");
|
InitWindow(screenWidth, screenHeight, "raylib [physac] example - physics friction");
|
||||||
|
|
||||||
// Physac logo drawing position
|
// Physac logo drawing position
|
||||||
int logoX = screenWidth - MeasureText("Physac", 30) - 10;
|
int logoX = screenWidth - MeasureText("Physac", 30) - 10;
|
||||||
|
|
@ -73,9 +68,9 @@ int main(void)
|
||||||
{
|
{
|
||||||
// Update
|
// Update
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
RunPhysicsStep();
|
UpdatePhysics(); // Update physics system
|
||||||
|
|
||||||
if (IsKeyPressed('R')) // Reset physics input
|
if (IsKeyPressed('R')) // Reset physics system
|
||||||
{
|
{
|
||||||
// Reset dynamic physics bodies position, velocity and rotation
|
// Reset dynamic physics bodies position, velocity and rotation
|
||||||
bodyA->position = (Vector2){ 35, screenHeight*0.6f };
|
bodyA->position = (Vector2){ 35, screenHeight*0.6f };
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,19 @@
|
||||||
/*******************************************************************************************
|
/*******************************************************************************************
|
||||||
*
|
*
|
||||||
* Physac - Physics movement
|
* raylib [physac] example - physics movement
|
||||||
*
|
*
|
||||||
* NOTE 1: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations.
|
* This example has been created using raylib 1.5 (www.raylib.com)
|
||||||
* NOTE 2: Physac requires static C library linkage to avoid dependency on MinGW DLL (-static -lpthread)
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
*
|
*
|
||||||
* Use the following line to compile:
|
* This example uses physac 1.1 (https://github.com/raysan5/raylib/blob/master/src/physac.h)
|
||||||
*
|
*
|
||||||
* gcc -o $(NAME_PART).exe $(FILE_NAME) -s -static /
|
* Copyright (c) 2016-2021 Victor Fisac (@victorfisac) and Ramon Santamaria (@raysan5)
|
||||||
* -lraylib -lpthread -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm /
|
|
||||||
* -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition
|
|
||||||
*
|
|
||||||
* Copyright (c) 2016-2018 Victor Fisac
|
|
||||||
*
|
*
|
||||||
********************************************************************************************/
|
********************************************************************************************/
|
||||||
|
|
||||||
#include "raylib.h"
|
#include "raylib.h"
|
||||||
|
|
||||||
#define PHYSAC_IMPLEMENTATION
|
#define PHYSAC_IMPLEMENTATION
|
||||||
#define PHYSAC_NO_THREADS
|
|
||||||
#include "physac.h"
|
#include "physac.h"
|
||||||
|
|
||||||
#define VELOCITY 0.5f
|
#define VELOCITY 0.5f
|
||||||
|
|
@ -31,7 +26,7 @@ int main(void)
|
||||||
const int screenHeight = 450;
|
const int screenHeight = 450;
|
||||||
|
|
||||||
SetConfigFlags(FLAG_MSAA_4X_HINT);
|
SetConfigFlags(FLAG_MSAA_4X_HINT);
|
||||||
InitWindow(screenWidth, screenHeight, "Physac [raylib] - Physics movement");
|
InitWindow(screenWidth, screenHeight, "raylib [physac] example - physics movement");
|
||||||
|
|
||||||
// Physac logo drawing position
|
// Physac logo drawing position
|
||||||
int logoX = screenWidth - MeasureText("Physac", 30) - 10;
|
int logoX = screenWidth - MeasureText("Physac", 30) - 10;
|
||||||
|
|
@ -66,9 +61,9 @@ int main(void)
|
||||||
{
|
{
|
||||||
// Update
|
// Update
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
RunPhysicsStep();
|
UpdatePhysics(); // Update physics system
|
||||||
|
|
||||||
if (IsKeyPressed('R')) // Reset physics input
|
if (IsKeyPressed('R')) // Reset physics input
|
||||||
{
|
{
|
||||||
// Reset movement physics body position, velocity and rotation
|
// Reset movement physics body position, velocity and rotation
|
||||||
body->position = (Vector2){ screenWidth/2, screenHeight/2 };
|
body->position = (Vector2){ screenWidth/2, screenHeight/2 };
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,19 @@
|
||||||
/*******************************************************************************************
|
/*******************************************************************************************
|
||||||
*
|
*
|
||||||
* Physac - Physics restitution
|
* raylib [physac] example - physics restitution
|
||||||
*
|
*
|
||||||
* NOTE 1: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations.
|
* This example has been created using raylib 1.5 (www.raylib.com)
|
||||||
* NOTE 2: Physac requires static C library linkage to avoid dependency on MinGW DLL (-static -lpthread)
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
*
|
*
|
||||||
* Use the following line to compile:
|
* This example uses physac 1.1 (https://github.com/raysan5/raylib/blob/master/src/physac.h)
|
||||||
*
|
*
|
||||||
* gcc -o $(NAME_PART).exe $(FILE_NAME) -s -static /
|
* Copyright (c) 2016-2021 Victor Fisac (@victorfisac) and Ramon Santamaria (@raysan5)
|
||||||
* -lraylib -lpthread -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm /
|
|
||||||
* -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition
|
|
||||||
*
|
|
||||||
* Copyright (c) 2016-2018 Victor Fisac
|
|
||||||
*
|
*
|
||||||
********************************************************************************************/
|
********************************************************************************************/
|
||||||
|
|
||||||
#include "raylib.h"
|
#include "raylib.h"
|
||||||
|
|
||||||
#define PHYSAC_IMPLEMENTATION
|
#define PHYSAC_IMPLEMENTATION
|
||||||
#define PHYSAC_NO_THREADS
|
|
||||||
#include "physac.h"
|
#include "physac.h"
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
|
|
@ -29,7 +24,7 @@ int main(void)
|
||||||
const int screenHeight = 450;
|
const int screenHeight = 450;
|
||||||
|
|
||||||
SetConfigFlags(FLAG_MSAA_4X_HINT);
|
SetConfigFlags(FLAG_MSAA_4X_HINT);
|
||||||
InitWindow(screenWidth, screenHeight, "Physac [raylib] - Physics restitution");
|
InitWindow(screenWidth, screenHeight, "raylib [physac] example - physics restitution");
|
||||||
|
|
||||||
// Physac logo drawing position
|
// Physac logo drawing position
|
||||||
int logoX = screenWidth - MeasureText("Physac", 30) - 10;
|
int logoX = screenWidth - MeasureText("Physac", 30) - 10;
|
||||||
|
|
@ -62,9 +57,9 @@ int main(void)
|
||||||
{
|
{
|
||||||
// Update
|
// Update
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
RunPhysicsStep();
|
UpdatePhysics(); // Update physics system
|
||||||
|
|
||||||
if (IsKeyPressed('R')) // Reset physics input
|
if (IsKeyPressed('R')) // Reset physics input
|
||||||
{
|
{
|
||||||
// Reset circles physics bodies position and velocity
|
// Reset circles physics bodies position and velocity
|
||||||
circleA->position = (Vector2){ screenWidth*0.25f, screenHeight/2 };
|
circleA->position = (Vector2){ screenWidth*0.25f, screenHeight/2 };
|
||||||
|
|
@ -124,6 +119,7 @@ int main(void)
|
||||||
DestroyPhysicsBody(circleB);
|
DestroyPhysicsBody(circleB);
|
||||||
DestroyPhysicsBody(circleC);
|
DestroyPhysicsBody(circleC);
|
||||||
DestroyPhysicsBody(floor);
|
DestroyPhysicsBody(floor);
|
||||||
|
|
||||||
ClosePhysics(); // Unitialize physics
|
ClosePhysics(); // Unitialize physics
|
||||||
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
CloseWindow(); // Close window and OpenGL context
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,19 @@
|
||||||
/*******************************************************************************************
|
/*******************************************************************************************
|
||||||
*
|
*
|
||||||
* Physac - Body shatter
|
* raylib [physac] example - physics shatter
|
||||||
*
|
*
|
||||||
* NOTE 1: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations.
|
* This example has been created using raylib 1.5 (www.raylib.com)
|
||||||
* NOTE 2: Physac requires static C library linkage to avoid dependency on MinGW DLL (-static -lpthread)
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
*
|
*
|
||||||
* Use the following line to compile:
|
* This example uses physac 1.1 (https://github.com/raysan5/raylib/blob/master/src/physac.h)
|
||||||
*
|
*
|
||||||
* gcc -o $(NAME_PART).exe $(FILE_NAME) -s -static /
|
* Copyright (c) 2016-2021 Victor Fisac (@victorfisac) and Ramon Santamaria (@raysan5)
|
||||||
* -lraylib -lpthread -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm /
|
|
||||||
* -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition
|
|
||||||
*
|
|
||||||
* Copyright (c) 2016-2018 Victor Fisac
|
|
||||||
*
|
*
|
||||||
********************************************************************************************/
|
********************************************************************************************/
|
||||||
|
|
||||||
#include "raylib.h"
|
#include "raylib.h"
|
||||||
|
|
||||||
#define PHYSAC_IMPLEMENTATION
|
#define PHYSAC_IMPLEMENTATION
|
||||||
#define PHYSAC_NO_THREADS
|
|
||||||
#include "physac.h"
|
#include "physac.h"
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
|
|
@ -29,12 +24,11 @@ int main(void)
|
||||||
const int screenHeight = 450;
|
const int screenHeight = 450;
|
||||||
|
|
||||||
SetConfigFlags(FLAG_MSAA_4X_HINT);
|
SetConfigFlags(FLAG_MSAA_4X_HINT);
|
||||||
InitWindow(screenWidth, screenHeight, "Physac [raylib] - Body shatter");
|
InitWindow(screenWidth, screenHeight, "raylib [physac] example - physics shatter");
|
||||||
|
|
||||||
// Physac logo drawing position
|
// Physac logo drawing position
|
||||||
int logoX = screenWidth - MeasureText("Physac", 30) - 10;
|
int logoX = screenWidth - MeasureText("Physac", 30) - 10;
|
||||||
int logoY = 15;
|
int logoY = 15;
|
||||||
bool needsReset = false;
|
|
||||||
|
|
||||||
// Initialize physics and default physics bodies
|
// Initialize physics and default physics bodies
|
||||||
InitPhysics();
|
InitPhysics();
|
||||||
|
|
@ -49,31 +43,23 @@ int main(void)
|
||||||
// Main game loop
|
// Main game loop
|
||||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||||
{
|
{
|
||||||
// Update
|
|
||||||
RunPhysicsStep();
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Delay initialization of variables due to physics reset asynchronous
|
UpdatePhysics(); // Update physics system
|
||||||
if (needsReset)
|
|
||||||
{
|
if (IsKeyPressed('R')) // Reset physics input
|
||||||
// Create random polygon physics body to shatter
|
|
||||||
CreatePhysicsBodyPolygon((Vector2){ screenWidth/2, screenHeight/2 }, GetRandomValue(80, 200), GetRandomValue(3, 8), 10);
|
|
||||||
needsReset = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IsKeyPressed('R')) // Reset physics input
|
|
||||||
{
|
{
|
||||||
ResetPhysics();
|
ResetPhysics();
|
||||||
needsReset = true;
|
|
||||||
|
CreatePhysicsBodyPolygon((Vector2){ screenWidth/2, screenHeight/2 }, GetRandomValue(80, 200), GetRandomValue(3, 8), 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) // Physics shatter input
|
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) // Physics shatter input
|
||||||
{
|
{
|
||||||
// Note: some values need to be stored in variables due to asynchronous changes during main thread
|
|
||||||
int count = GetPhysicsBodiesCount();
|
int count = GetPhysicsBodiesCount();
|
||||||
for (int i = count - 1; i >= 0; i--)
|
for (int i = count - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
PhysicsBody currentBody = GetPhysicsBody(i);
|
PhysicsBody currentBody = GetPhysicsBody(i);
|
||||||
|
|
||||||
if (currentBody != NULL) PhysicsShatter(currentBody, GetMousePosition(), 10/currentBody->inverseMass);
|
if (currentBody != NULL) PhysicsShatter(currentBody, GetMousePosition(), 10/currentBody->inverseMass);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 567 KiB After Width: | Height: | Size: 568 KiB |
|
|
@ -14,7 +14,7 @@ uniform vec4 colDiffuse;
|
||||||
|
|
||||||
const vec2 size = vec2(800, 450); // render size
|
const vec2 size = vec2(800, 450); // render size
|
||||||
const float samples = 5.0; // pixels per axis; higher = bigger glow, worse performance
|
const float samples = 5.0; // pixels per axis; higher = bigger glow, worse performance
|
||||||
const float quality = 2.5; // lower = smaller glow, better quality
|
const float quality = 2.5; // lower = smaller glow, better quality
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
24
examples/shaders/resources/shaders/glsl100/color_mix.fs
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
#version 100
|
||||||
|
|
||||||
|
precision mediump float;
|
||||||
|
|
||||||
|
// Input vertex attributes (from vertex shader)
|
||||||
|
varying vec2 fragTexCoord;
|
||||||
|
varying vec4 fragColor;
|
||||||
|
|
||||||
|
// Input uniform values
|
||||||
|
uniform sampler2D texture0;
|
||||||
|
uniform sampler2D texture1;
|
||||||
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
// Texel color fetching from texture sampler
|
||||||
|
vec4 texelColor0 = texture2D(texture0, fragTexCoord);
|
||||||
|
vec4 texelColor1 = texture2D(texture1, fragTexCoord);
|
||||||
|
|
||||||
|
float x = fract(fragTexCoord.s);
|
||||||
|
float out = smoothstep(0.4, 0.6, x);
|
||||||
|
|
||||||
|
gl_FragColor = mix(texelColor0, texelColor1, out);
|
||||||
|
}
|
||||||
|
|
@ -34,4 +34,4 @@ void main()
|
||||||
color = color/9.5;
|
color = color/9.5;
|
||||||
|
|
||||||
gl_FragColor = color;
|
gl_FragColor = color;
|
||||||
}
|
}
|
||||||
|
|
@ -42,7 +42,7 @@ uniform vec2 resolution;
|
||||||
|
|
||||||
float sdPlane( vec3 p )
|
float sdPlane( vec3 p )
|
||||||
{
|
{
|
||||||
return p.y;
|
return p.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
float sdSphere( vec3 p, float s )
|
float sdSphere( vec3 p, float s )
|
||||||
|
|
@ -85,9 +85,9 @@ float sdHexPrism( vec3 p, vec2 h )
|
||||||
|
|
||||||
float sdCapsule( vec3 p, vec3 a, vec3 b, float r )
|
float sdCapsule( vec3 p, vec3 a, vec3 b, float r )
|
||||||
{
|
{
|
||||||
vec3 pa = p-a, ba = b-a;
|
vec3 pa = p-a, ba = b-a;
|
||||||
float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );
|
float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );
|
||||||
return length( pa - ba*h ) - r;
|
return length( pa - ba*h ) - r;
|
||||||
}
|
}
|
||||||
|
|
||||||
float sdEquilateralTriangle( in vec2 p )
|
float sdEquilateralTriangle( in vec2 p )
|
||||||
|
|
@ -154,19 +154,19 @@ float sdPryamid4(vec3 p, vec3 h ) // h = { cos a, sin a, height }
|
||||||
|
|
||||||
float length2( vec2 p )
|
float length2( vec2 p )
|
||||||
{
|
{
|
||||||
return sqrt( p.x*p.x + p.y*p.y );
|
return sqrt( p.x*p.x + p.y*p.y );
|
||||||
}
|
}
|
||||||
|
|
||||||
float length6( vec2 p )
|
float length6( vec2 p )
|
||||||
{
|
{
|
||||||
p = p*p*p; p = p*p;
|
p = p*p*p; p = p*p;
|
||||||
return pow( p.x + p.y, 1.0/6.0 );
|
return pow( p.x + p.y, 1.0/6.0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
float length8( vec2 p )
|
float length8( vec2 p )
|
||||||
{
|
{
|
||||||
p = p*p; p = p*p; p = p*p;
|
p = p*p; p = p*p; p = p*p;
|
||||||
return pow( p.x + p.y, 1.0/8.0 );
|
return pow( p.x + p.y, 1.0/8.0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
float sdTorus82( vec3 p, vec2 t )
|
float sdTorus82( vec3 p, vec2 t )
|
||||||
|
|
@ -195,7 +195,7 @@ float opS( float d1, float d2 )
|
||||||
|
|
||||||
vec2 opU( vec2 d1, vec2 d2 )
|
vec2 opU( vec2 d1, vec2 d2 )
|
||||||
{
|
{
|
||||||
return (d1.x<d2.x) ? d1 : d2;
|
return (d1.x<d2.x) ? d1 : d2;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3 opRep( vec3 p, vec3 c )
|
vec3 opRep( vec3 p, vec3 c )
|
||||||
|
|
@ -216,25 +216,25 @@ vec3 opTwist( vec3 p )
|
||||||
vec2 map( in vec3 pos )
|
vec2 map( in vec3 pos )
|
||||||
{
|
{
|
||||||
vec2 res = opU( vec2( sdPlane( pos), 1.0 ),
|
vec2 res = opU( vec2( sdPlane( pos), 1.0 ),
|
||||||
vec2( sdSphere( pos-vec3( 0.0,0.25, 0.0), 0.25 ), 46.9 ) );
|
vec2( sdSphere( pos-vec3( 0.0,0.25, 0.0), 0.25 ), 46.9 ) );
|
||||||
res = opU( res, vec2( sdBox( pos-vec3( 1.0,0.25, 0.0), vec3(0.25) ), 3.0 ) );
|
res = opU( res, vec2( sdBox( pos-vec3( 1.0,0.25, 0.0), vec3(0.25) ), 3.0 ) );
|
||||||
res = opU( res, vec2( udRoundBox( pos-vec3( 1.0,0.25, 1.0), vec3(0.15), 0.1 ), 41.0 ) );
|
res = opU( res, vec2( udRoundBox( pos-vec3( 1.0,0.25, 1.0), vec3(0.15), 0.1 ), 41.0 ) );
|
||||||
res = opU( res, vec2( sdTorus( pos-vec3( 0.0,0.25, 1.0), vec2(0.20,0.05) ), 25.0 ) );
|
res = opU( res, vec2( sdTorus( pos-vec3( 0.0,0.25, 1.0), vec2(0.20,0.05) ), 25.0 ) );
|
||||||
res = opU( res, vec2( sdCapsule( pos,vec3(-1.3,0.10,-0.1), vec3(-0.8,0.50,0.2), 0.1 ), 31.9 ) );
|
res = opU( res, vec2( sdCapsule( pos,vec3(-1.3,0.10,-0.1), vec3(-0.8,0.50,0.2), 0.1 ), 31.9 ) );
|
||||||
res = opU( res, vec2( sdTriPrism( pos-vec3(-1.0,0.25,-1.0), vec2(0.25,0.05) ),43.5 ) );
|
res = opU( res, vec2( sdTriPrism( pos-vec3(-1.0,0.25,-1.0), vec2(0.25,0.05) ),43.5 ) );
|
||||||
res = opU( res, vec2( sdCylinder( pos-vec3( 1.0,0.30,-1.0), vec2(0.1,0.2) ), 8.0 ) );
|
res = opU( res, vec2( sdCylinder( pos-vec3( 1.0,0.30,-1.0), vec2(0.1,0.2) ), 8.0 ) );
|
||||||
res = opU( res, vec2( sdCone( pos-vec3( 0.0,0.50,-1.0), vec3(0.8,0.6,0.3) ), 55.0 ) );
|
res = opU( res, vec2( sdCone( pos-vec3( 0.0,0.50,-1.0), vec3(0.8,0.6,0.3) ), 55.0 ) );
|
||||||
res = opU( res, vec2( sdTorus82( pos-vec3( 0.0,0.25, 2.0), vec2(0.20,0.05) ),50.0 ) );
|
res = opU( res, vec2( sdTorus82( pos-vec3( 0.0,0.25, 2.0), vec2(0.20,0.05) ),50.0 ) );
|
||||||
res = opU( res, vec2( sdTorus88( pos-vec3(-1.0,0.25, 2.0), vec2(0.20,0.05) ),43.0 ) );
|
res = opU( res, vec2( sdTorus88( pos-vec3(-1.0,0.25, 2.0), vec2(0.20,0.05) ),43.0 ) );
|
||||||
res = opU( res, vec2( sdCylinder6( pos-vec3( 1.0,0.30, 2.0), vec2(0.1,0.2) ), 12.0 ) );
|
res = opU( res, vec2( sdCylinder6( pos-vec3( 1.0,0.30, 2.0), vec2(0.1,0.2) ), 12.0 ) );
|
||||||
res = opU( res, vec2( sdHexPrism( pos-vec3(-1.0,0.20, 1.0), vec2(0.25,0.05) ),17.0 ) );
|
res = opU( res, vec2( sdHexPrism( pos-vec3(-1.0,0.20, 1.0), vec2(0.25,0.05) ),17.0 ) );
|
||||||
res = opU( res, vec2( sdPryamid4( pos-vec3(-1.0,0.15,-2.0), vec3(0.8,0.6,0.25) ),37.0 ) );
|
res = opU( res, vec2( sdPryamid4( pos-vec3(-1.0,0.15,-2.0), vec3(0.8,0.6,0.25) ),37.0 ) );
|
||||||
res = opU( res, vec2( opS( udRoundBox( pos-vec3(-2.0,0.2, 1.0), vec3(0.15),0.05),
|
res = opU( res, vec2( opS( udRoundBox( pos-vec3(-2.0,0.2, 1.0), vec3(0.15),0.05),
|
||||||
sdSphere( pos-vec3(-2.0,0.2, 1.0), 0.25)), 13.0 ) );
|
sdSphere( pos-vec3(-2.0,0.2, 1.0), 0.25)), 13.0 ) );
|
||||||
res = opU( res, vec2( opS( sdTorus82( pos-vec3(-2.0,0.2, 0.0), vec2(0.20,0.1)),
|
res = opU( res, vec2( opS( sdTorus82( pos-vec3(-2.0,0.2, 0.0), vec2(0.20,0.1)),
|
||||||
sdCylinder( opRep( vec3(atan(pos.x+2.0,pos.z)/6.2831, pos.y, 0.02+0.5*length(pos-vec3(-2.0,0.2, 0.0))), vec3(0.05,1.0,0.05)), vec2(0.02,0.6))), 51.0 ) );
|
sdCylinder( opRep( vec3(atan(pos.x+2.0,pos.z)/6.2831, pos.y, 0.02+0.5*length(pos-vec3(-2.0,0.2, 0.0))), vec3(0.05,1.0,0.05)), vec2(0.02,0.6))), 51.0 ) );
|
||||||
res = opU( res, vec2( 0.5*sdSphere( pos-vec3(-2.0,0.25,-1.0), 0.2 ) + 0.03*sin(50.0*pos.x)*sin(50.0*pos.y)*sin(50.0*pos.z), 65.0 ) );
|
res = opU( res, vec2( 0.5*sdSphere( pos-vec3(-2.0,0.25,-1.0), 0.2 ) + 0.03*sin(50.0*pos.x)*sin(50.0*pos.y)*sin(50.0*pos.z), 65.0 ) );
|
||||||
res = opU( res, vec2( 0.5*sdTorus( opTwist(pos-vec3(-2.0,0.25, 2.0)),vec2(0.20,0.05)), 46.7 ) );
|
res = opU( res, vec2( 0.5*sdTorus( opTwist(pos-vec3(-2.0,0.25, 2.0)),vec2(0.20,0.05)), 46.7 ) );
|
||||||
res = opU( res, vec2( sdConeSection( pos-vec3( 0.0,0.35,-2.0), 0.15, 0.2, 0.1 ), 13.67 ) );
|
res = opU( res, vec2( sdConeSection( pos-vec3( 0.0,0.35,-2.0), 0.15, 0.2, 0.1 ), 13.67 ) );
|
||||||
res = opU( res, vec2( sdEllipsoid( pos-vec3( 1.0,0.35,-2.0), vec3(0.15, 0.2, 0.05) ), 43.17 ) );
|
res = opU( res, vec2( sdEllipsoid( pos-vec3( 1.0,0.35,-2.0), vec3(0.15, 0.2, 0.05) ), 43.17 ) );
|
||||||
|
|
||||||
|
|
@ -257,11 +257,11 @@ vec2 castRay( in vec3 ro, in vec3 rd )
|
||||||
float m = -1.0;
|
float m = -1.0;
|
||||||
for( int i=0; i<64; i++ )
|
for( int i=0; i<64; i++ )
|
||||||
{
|
{
|
||||||
float precis = 0.0005*t;
|
float precis = 0.0005*t;
|
||||||
vec2 res = map( ro+rd*t );
|
vec2 res = map( ro+rd*t );
|
||||||
if( res.x<precis || t>tmax ) break;
|
if( res.x<precis || t>tmax ) break;
|
||||||
t += res.x;
|
t += res.x;
|
||||||
m = res.y;
|
m = res.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( t>tmax ) m=-1.0;
|
if( t>tmax ) m=-1.0;
|
||||||
|
|
@ -271,11 +271,11 @@ vec2 castRay( in vec3 ro, in vec3 rd )
|
||||||
|
|
||||||
float calcSoftshadow( in vec3 ro, in vec3 rd, in float mint, in float tmax )
|
float calcSoftshadow( in vec3 ro, in vec3 rd, in float mint, in float tmax )
|
||||||
{
|
{
|
||||||
float res = 1.0;
|
float res = 1.0;
|
||||||
float t = mint;
|
float t = mint;
|
||||||
for( int i=0; i<16; i++ )
|
for( int i=0; i<16; i++ )
|
||||||
{
|
{
|
||||||
float h = map( ro + rd*t ).x;
|
float h = map( ro + rd*t ).x;
|
||||||
res = min( res, 8.0*h/t );
|
res = min( res, 8.0*h/t );
|
||||||
t += clamp( h, 0.02, 0.10 );
|
t += clamp( h, 0.02, 0.10 );
|
||||||
if( h<0.001 || t>tmax ) break;
|
if( h<0.001 || t>tmax ) break;
|
||||||
|
|
@ -287,22 +287,22 @@ vec3 calcNormal( in vec3 pos )
|
||||||
{
|
{
|
||||||
vec2 e = vec2(1.0,-1.0)*0.5773*0.0005;
|
vec2 e = vec2(1.0,-1.0)*0.5773*0.0005;
|
||||||
return normalize( e.xyy*map( pos + e.xyy ).x +
|
return normalize( e.xyy*map( pos + e.xyy ).x +
|
||||||
e.yyx*map( pos + e.yyx ).x +
|
e.yyx*map( pos + e.yyx ).x +
|
||||||
e.yxy*map( pos + e.yxy ).x +
|
e.yxy*map( pos + e.yxy ).x +
|
||||||
e.xxx*map( pos + e.xxx ).x );
|
e.xxx*map( pos + e.xxx ).x );
|
||||||
/*
|
/*
|
||||||
vec3 eps = vec3( 0.0005, 0.0, 0.0 );
|
vec3 eps = vec3( 0.0005, 0.0, 0.0 );
|
||||||
vec3 nor = vec3(
|
vec3 nor = vec3(
|
||||||
map(pos+eps.xyy).x - map(pos-eps.xyy).x,
|
map(pos+eps.xyy).x - map(pos-eps.xyy).x,
|
||||||
map(pos+eps.yxy).x - map(pos-eps.yxy).x,
|
map(pos+eps.yxy).x - map(pos-eps.yxy).x,
|
||||||
map(pos+eps.yyx).x - map(pos-eps.yyx).x );
|
map(pos+eps.yyx).x - map(pos-eps.yyx).x );
|
||||||
return normalize(nor);
|
return normalize(nor);
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
float calcAO( in vec3 pos, in vec3 nor )
|
float calcAO( in vec3 pos, in vec3 nor )
|
||||||
{
|
{
|
||||||
float occ = 0.0;
|
float occ = 0.0;
|
||||||
float sca = 1.0;
|
float sca = 1.0;
|
||||||
for( int i=0; i<5; i++ )
|
for( int i=0; i<5; i++ )
|
||||||
{
|
{
|
||||||
|
|
@ -331,7 +331,7 @@ vec3 render( in vec3 ro, in vec3 rd )
|
||||||
vec3 col = vec3(0.7, 0.9, 1.0) +rd.y*0.8;
|
vec3 col = vec3(0.7, 0.9, 1.0) +rd.y*0.8;
|
||||||
vec2 res = castRay(ro,rd);
|
vec2 res = castRay(ro,rd);
|
||||||
float t = res.x;
|
float t = res.x;
|
||||||
float m = res.y;
|
float m = res.y;
|
||||||
if( m>-0.5 )
|
if( m>-0.5 )
|
||||||
{
|
{
|
||||||
vec3 pos = ro + t*rd;
|
vec3 pos = ro + t*rd;
|
||||||
|
|
@ -339,7 +339,7 @@ vec3 render( in vec3 ro, in vec3 rd )
|
||||||
vec3 ref = reflect( rd, nor );
|
vec3 ref = reflect( rd, nor );
|
||||||
|
|
||||||
// material
|
// material
|
||||||
col = 0.45 + 0.35*sin( vec3(0.05,0.08,0.10)*(m-1.0) );
|
col = 0.45 + 0.35*sin( vec3(0.05,0.08,0.10)*(m-1.0) );
|
||||||
if( m<1.5 )
|
if( m<1.5 )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
@ -349,9 +349,9 @@ vec3 render( in vec3 ro, in vec3 rd )
|
||||||
|
|
||||||
// lighting
|
// lighting
|
||||||
float occ = calcAO( pos, nor );
|
float occ = calcAO( pos, nor );
|
||||||
vec3 lig = normalize( vec3(cos(-0.4 * runTime), sin(0.7 * runTime), -0.6) );
|
vec3 lig = normalize( vec3(cos(-0.4 * runTime), sin(0.7 * runTime), -0.6) );
|
||||||
vec3 hal = normalize( lig-rd );
|
vec3 hal = normalize( lig-rd );
|
||||||
float amb = clamp( 0.5+0.5*nor.y, 0.0, 1.0 );
|
float amb = clamp( 0.5+0.5*nor.y, 0.0, 1.0 );
|
||||||
float dif = clamp( dot( nor, lig ), 0.0, 1.0 );
|
float dif = clamp( dot( nor, lig ), 0.0, 1.0 );
|
||||||
float bac = clamp( dot( nor, normalize(vec3(-lig.x,0.0,-lig.z))), 0.0, 1.0 )*clamp( 1.0-pos.y,0.0,1.0);
|
float bac = clamp( dot( nor, normalize(vec3(-lig.x,0.0,-lig.z))), 0.0, 1.0 )*clamp( 1.0-pos.y,0.0,1.0);
|
||||||
float dom = smoothstep( -0.1, 0.1, ref.y );
|
float dom = smoothstep( -0.1, 0.1, ref.y );
|
||||||
|
|
@ -360,31 +360,31 @@ vec3 render( in vec3 ro, in vec3 rd )
|
||||||
dif *= calcSoftshadow( pos, lig, 0.02, 2.5 );
|
dif *= calcSoftshadow( pos, lig, 0.02, 2.5 );
|
||||||
dom *= calcSoftshadow( pos, ref, 0.02, 2.5 );
|
dom *= calcSoftshadow( pos, ref, 0.02, 2.5 );
|
||||||
|
|
||||||
float spe = pow( clamp( dot( nor, hal ), 0.0, 1.0 ),16.0)*
|
float spe = pow( clamp( dot( nor, hal ), 0.0, 1.0 ),16.0)*
|
||||||
dif *
|
dif *
|
||||||
(0.04 + 0.96*pow( clamp(1.0+dot(hal,rd),0.0,1.0), 5.0 ));
|
(0.04 + 0.96*pow( clamp(1.0+dot(hal,rd),0.0,1.0), 5.0 ));
|
||||||
|
|
||||||
vec3 lin = vec3(0.0);
|
vec3 lin = vec3(0.0);
|
||||||
lin += 1.30*dif*vec3(1.00,0.80,0.55);
|
lin += 1.30*dif*vec3(1.00,0.80,0.55);
|
||||||
lin += 0.40*amb*vec3(0.40,0.60,1.00)*occ;
|
lin += 0.40*amb*vec3(0.40,0.60,1.00)*occ;
|
||||||
lin += 0.50*dom*vec3(0.40,0.60,1.00)*occ;
|
lin += 0.50*dom*vec3(0.40,0.60,1.00)*occ;
|
||||||
lin += 0.50*bac*vec3(0.25,0.25,0.25)*occ;
|
lin += 0.50*bac*vec3(0.25,0.25,0.25)*occ;
|
||||||
lin += 0.25*fre*vec3(1.00,1.00,1.00)*occ;
|
lin += 0.25*fre*vec3(1.00,1.00,1.00)*occ;
|
||||||
col = col*lin;
|
col = col*lin;
|
||||||
col += 10.00*spe*vec3(1.00,0.90,0.70);
|
col += 10.00*spe*vec3(1.00,0.90,0.70);
|
||||||
|
|
||||||
col = mix( col, vec3(0.8,0.9,1.0), 1.0-exp( -0.0002*t*t*t ) );
|
col = mix( col, vec3(0.8,0.9,1.0), 1.0-exp( -0.0002*t*t*t ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
return vec3( clamp(col,0.0,1.0) );
|
return vec3( clamp(col,0.0,1.0) );
|
||||||
}
|
}
|
||||||
|
|
||||||
mat3 setCamera( in vec3 ro, in vec3 ta, float cr )
|
mat3 setCamera( in vec3 ro, in vec3 ta, float cr )
|
||||||
{
|
{
|
||||||
vec3 cw = normalize(ta-ro);
|
vec3 cw = normalize(ta-ro);
|
||||||
vec3 cp = vec3(sin(cr), cos(cr),0.0);
|
vec3 cp = vec3(sin(cr), cos(cr),0.0);
|
||||||
vec3 cu = normalize( cross(cw,cp) );
|
vec3 cu = normalize( cross(cw,cp) );
|
||||||
vec3 cv = normalize( cross(cu,cw) );
|
vec3 cv = normalize( cross(cu,cw) );
|
||||||
return mat3( cu, cv, cw );
|
return mat3( cu, cv, cw );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -402,7 +402,7 @@ void main()
|
||||||
vec2 p = (-resolution.xy + 2.0*gl_FragCoord.xy)/resolution.y;
|
vec2 p = (-resolution.xy + 2.0*gl_FragCoord.xy)/resolution.y;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// RAY: Camera is provided from raylib
|
// RAY: Camera is provided from raylib
|
||||||
//vec3 ro = vec3( -0.5+3.5*cos(0.1*time + 6.0*mo.x), 1.0 + 2.0*mo.y, 0.5 + 4.0*sin(0.1*time + 6.0*mo.x) );
|
//vec3 ro = vec3( -0.5+3.5*cos(0.1*time + 6.0*mo.x), 1.0 + 2.0*mo.y, 0.5 + 4.0*sin(0.1*time + 6.0*mo.x) );
|
||||||
|
|
||||||
vec3 ro = viewEye;
|
vec3 ro = viewEye;
|
||||||
|
|
@ -413,10 +413,10 @@ void main()
|
||||||
// ray direction
|
// ray direction
|
||||||
vec3 rd = ca * normalize( vec3(p.xy,2.0) );
|
vec3 rd = ca * normalize( vec3(p.xy,2.0) );
|
||||||
|
|
||||||
// render
|
// render
|
||||||
vec3 col = render( ro, rd );
|
vec3 col = render( ro, rd );
|
||||||
|
|
||||||
// gamma
|
// gamma
|
||||||
col = pow( col, vec3(0.4545) );
|
col = pow( col, vec3(0.4545) );
|
||||||
|
|
||||||
tot += col;
|
tot += col;
|
||||||
|
|
|
||||||
|
|
@ -15,26 +15,26 @@ vec2 resolution = vec2(800.0, 450.0);
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
float x = 1.0/resolution.x;
|
float x = 1.0/resolution.x;
|
||||||
float y = 1.0/resolution.y;
|
float y = 1.0/resolution.y;
|
||||||
|
|
||||||
vec4 horizEdge = vec4(0.0);
|
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 - y))*1.0;
|
||||||
horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y ))*2.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 - 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 ))*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;
|
||||||
|
|
||||||
vec4 vertEdge = vec4(0.0);
|
vec4 vertEdge = vec4(0.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 , 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 - 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 , 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;
|
||||||
|
|
||||||
vec3 edge = sqrt((horizEdge.rgb*horizEdge.rgb) + (vertEdge.rgb*vertEdge.rgb));
|
vec3 edge = sqrt((horizEdge.rgb*horizEdge.rgb) + (vertEdge.rgb*vertEdge.rgb));
|
||||||
|
|
||||||
gl_FragColor = vec4(edge, texture2D(texture0, fragTexCoord).a);
|
gl_FragColor = vec4(edge, texture2D(texture0, fragTexCoord).a);
|
||||||
}
|
}
|
||||||
|
|
@ -5,9 +5,9 @@ precision mediump float;
|
||||||
#define MAX_SPOTS 3
|
#define MAX_SPOTS 3
|
||||||
|
|
||||||
struct Spot {
|
struct Spot {
|
||||||
vec2 pos; // window coords of spot
|
vec2 pos; // window coords of spot
|
||||||
float inner; // inner fully transparent centre radius
|
float inner; // inner fully transparent centre radius
|
||||||
float radius; // alpha fades out to this radius
|
float radius; // alpha fades out to this radius
|
||||||
};
|
};
|
||||||
|
|
||||||
uniform Spot spots[MAX_SPOTS]; // Spotlight positions array
|
uniform Spot spots[MAX_SPOTS]; // Spotlight positions array
|
||||||
|
|
@ -15,63 +15,63 @@ uniform float screenWidth; // Width of the screen
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
float alpha = 1.0;
|
float alpha = 1.0;
|
||||||
|
|
||||||
// Get the position of the current fragment (screen coordinates!)
|
// Get the position of the current fragment (screen coordinates!)
|
||||||
vec2 pos = vec2(gl_FragCoord.x, gl_FragCoord.y);
|
vec2 pos = vec2(gl_FragCoord.x, gl_FragCoord.y);
|
||||||
|
|
||||||
// Find out which spotlight is nearest
|
// Find out which spotlight is nearest
|
||||||
float d = 65000.0; // some high value
|
float d = 65000.0; // some high value
|
||||||
int fi = -1; // found index
|
int fi = -1; // found index
|
||||||
|
|
||||||
for (int i = 0; i < MAX_SPOTS; i++)
|
for (int i = 0; i < MAX_SPOTS; i++)
|
||||||
{
|
{
|
||||||
for (int j = 0; j < MAX_SPOTS; j++)
|
for (int j = 0; j < MAX_SPOTS; j++)
|
||||||
{
|
{
|
||||||
float dj = distance(pos, spots[j].pos) - spots[j].radius + spots[i].radius;
|
float dj = distance(pos, spots[j].pos) - spots[j].radius + spots[i].radius;
|
||||||
|
|
||||||
if (d > dj)
|
if (d > dj)
|
||||||
{
|
{
|
||||||
d = dj;
|
d = dj;
|
||||||
fi = i;
|
fi = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// d now equals distance to nearest spot...
|
// d now equals distance to nearest spot...
|
||||||
// allowing for the different radii of all spotlights
|
// allowing for the different radii of all spotlights
|
||||||
if (fi == 0)
|
if (fi == 0)
|
||||||
{
|
{
|
||||||
if (d > spots[0].radius) alpha = 1.0;
|
if (d > spots[0].radius) alpha = 1.0;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (d < spots[0].inner) alpha = 0.0;
|
if (d < spots[0].inner) alpha = 0.0;
|
||||||
else alpha = (d - spots[0].inner)/(spots[0].radius - spots[0].inner);
|
else alpha = (d - spots[0].inner)/(spots[0].radius - spots[0].inner);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (fi == 1)
|
else if (fi == 1)
|
||||||
{
|
{
|
||||||
if (d > spots[1].radius) alpha = 1.0;
|
if (d > spots[1].radius) alpha = 1.0;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (d < spots[1].inner) alpha = 0.0;
|
if (d < spots[1].inner) alpha = 0.0;
|
||||||
else alpha = (d - spots[1].inner)/(spots[1].radius - spots[1].inner);
|
else alpha = (d - spots[1].inner)/(spots[1].radius - spots[1].inner);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (fi == 2)
|
else if (fi == 2)
|
||||||
{
|
{
|
||||||
if (d > spots[2].radius) alpha = 1.0;
|
if (d > spots[2].radius) alpha = 1.0;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (d < spots[2].inner) alpha = 0.0;
|
if (d < spots[2].inner) alpha = 0.0;
|
||||||
else alpha = (d - spots[2].inner)/(spots[2].radius - spots[2].inner);
|
else alpha = (d - spots[2].inner)/(spots[2].radius - spots[2].inner);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Right hand side of screen is dimly lit,
|
// Right hand side of screen is dimly lit,
|
||||||
// could make the threshold value user definable
|
// could make the threshold value user definable
|
||||||
if ((pos.x > screenWidth/2.0) && (alpha > 0.9)) alpha = 0.9;
|
if ((pos.x > screenWidth/2.0) && (alpha > 0.9)) alpha = 0.9;
|
||||||
|
|
||||||
// could make the black out colour user definable...
|
// could make the black out colour user definable...
|
||||||
gl_FragColor = vec4(0, 0, 0, alpha);
|
gl_FragColor = vec4(0, 0, 0, alpha);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,15 +22,15 @@ uniform float speedX;
|
||||||
uniform float speedY;
|
uniform float speedY;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
float pixelWidth = 1.0 / size.x;
|
float pixelWidth = 1.0 / size.x;
|
||||||
float pixelHeight = 1.0 / size.y;
|
float pixelHeight = 1.0 / size.y;
|
||||||
float aspect = pixelHeight / pixelWidth;
|
float aspect = pixelHeight / pixelWidth;
|
||||||
float boxLeft = 0.0;
|
float boxLeft = 0.0;
|
||||||
float boxTop = 0.0;
|
float boxTop = 0.0;
|
||||||
|
|
||||||
vec2 p = fragTexCoord;
|
vec2 p = fragTexCoord;
|
||||||
p.x += cos((fragTexCoord.y - boxTop) * freqX / ( pixelWidth * 750.0) + (secondes * speedX)) * ampX * pixelWidth;
|
p.x += cos((fragTexCoord.y - boxTop) * freqX / ( pixelWidth * 750.0) + (secondes * speedX)) * ampX * pixelWidth;
|
||||||
p.y += sin((fragTexCoord.x - boxLeft) * freqY * aspect / ( pixelHeight * 750.0) + (secondes * speedY)) * ampY * pixelHeight;
|
p.y += sin((fragTexCoord.x - boxLeft) * freqY * aspect / ( pixelHeight * 750.0) + (secondes * speedY)) * ampY * pixelHeight;
|
||||||
|
|
||||||
gl_FragColor = texture2D(texture0, p)*colDiffuse*fragColor;
|
gl_FragColor = texture2D(texture0, p)*colDiffuse*fragColor;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ uniform vec4 colDiffuse;
|
||||||
|
|
||||||
const vec2 size = vec2(800, 450); // render size
|
const vec2 size = vec2(800, 450); // render size
|
||||||
const float samples = 5.0; // pixels per axis; higher = bigger glow, worse performance
|
const float samples = 5.0; // pixels per axis; higher = bigger glow, worse performance
|
||||||
const float quality = 2.5; // lower = smaller glow, better quality
|
const float quality = 2.5; // lower = smaller glow, better quality
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -32,4 +32,4 @@ void main()
|
||||||
color = color/9.5;
|
color = color/9.5;
|
||||||
|
|
||||||
gl_FragColor = color;
|
gl_FragColor = color;
|
||||||
}
|
}
|
||||||
|
|
@ -13,26 +13,26 @@ vec2 resolution = vec2(800.0, 450.0);
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
float x = 1.0/resolution.x;
|
float x = 1.0/resolution.x;
|
||||||
float y = 1.0/resolution.y;
|
float y = 1.0/resolution.y;
|
||||||
|
|
||||||
vec4 horizEdge = vec4(0.0);
|
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 - y))*1.0;
|
||||||
horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y ))*2.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 - 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 ))*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;
|
||||||
|
|
||||||
vec4 vertEdge = vec4(0.0);
|
vec4 vertEdge = vec4(0.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 , 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 - 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 , 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;
|
||||||
|
|
||||||
vec3 edge = sqrt((horizEdge.rgb*horizEdge.rgb) + (vertEdge.rgb*vertEdge.rgb));
|
vec3 edge = sqrt((horizEdge.rgb*horizEdge.rgb) + (vertEdge.rgb*vertEdge.rgb));
|
||||||
|
|
||||||
gl_FragColor = vec4(edge, texture2D(texture0, fragTexCoord).a);
|
gl_FragColor = vec4(edge, texture2D(texture0, fragTexCoord).a);
|
||||||
}
|
}
|
||||||
|
|
@ -15,7 +15,7 @@ out vec4 finalColor;
|
||||||
|
|
||||||
const vec2 size = vec2(800, 450); // render size
|
const vec2 size = vec2(800, 450); // render size
|
||||||
const float samples = 5.0; // pixels per axis; higher = bigger glow, worse performance
|
const float samples = 5.0; // pixels per axis; higher = bigger glow, worse performance
|
||||||
const float quality = 2.5; // lower = smaller glow, better quality
|
const float quality = 2.5; // lower = smaller glow, better quality
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
25
examples/shaders/resources/shaders/glsl330/color_mix.fs
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
#version 330
|
||||||
|
|
||||||
|
// Input vertex attributes (from vertex shader)
|
||||||
|
in vec3 vertexPos;
|
||||||
|
in vec2 fragTexCoord;
|
||||||
|
in vec4 fragColor;
|
||||||
|
|
||||||
|
// Input uniform values
|
||||||
|
uniform sampler2D texture0;
|
||||||
|
uniform sampler2D texture1;
|
||||||
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
|
out vec4 finalColor;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
// Texel color fetching from texture sampler
|
||||||
|
vec4 texelColor0 = texture(texture0, fragTexCoord);
|
||||||
|
vec4 texelColor1 = texture(texture1, fragTexCoord);
|
||||||
|
|
||||||
|
float x = fract(fragTexCoord.s);
|
||||||
|
float outVal = smoothstep(0.4, 0.6, x);
|
||||||
|
|
||||||
|
finalColor = mix(texelColor0, texelColor1, outVal);
|
||||||
|
}
|
||||||
|
|
@ -31,4 +31,4 @@ void main()
|
||||||
color = color/9.5;
|
color = color/9.5;
|
||||||
|
|
||||||
fragColor = color;
|
fragColor = color;
|
||||||
}
|
}
|
||||||
|
|
@ -38,9 +38,9 @@ vec4 Colorizer(float counter, float maxSize)
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec4 color = vec4(1.0);
|
vec4 color = vec4(1.0);
|
||||||
float scale = 1000.0; // Makes 100x100 square grid. Change this variable to make a smaller or larger grid.
|
float scale = 1000.0; // Makes 100x100 square grid. Change this variable to make a smaller or larger grid.
|
||||||
int value = int(scale*floor(fragTexCoord.y*scale)+floor(fragTexCoord.x*scale)); // Group pixels into boxes representing integer values
|
int value = int(scale*floor(fragTexCoord.y*scale)+floor(fragTexCoord.x*scale)); // Group pixels into boxes representing integer values
|
||||||
|
|
||||||
if ((value == 0) || (value == 1) || (value == 2)) finalColor = vec4(1.0);
|
if ((value == 0) || (value == 1) || (value == 2)) finalColor = vec4(1.0);
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ uniform vec2 resolution;
|
||||||
|
|
||||||
float sdPlane( vec3 p )
|
float sdPlane( vec3 p )
|
||||||
{
|
{
|
||||||
return p.y;
|
return p.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
float sdSphere( vec3 p, float s )
|
float sdSphere( vec3 p, float s )
|
||||||
|
|
@ -86,9 +86,9 @@ float sdHexPrism( vec3 p, vec2 h )
|
||||||
|
|
||||||
float sdCapsule( vec3 p, vec3 a, vec3 b, float r )
|
float sdCapsule( vec3 p, vec3 a, vec3 b, float r )
|
||||||
{
|
{
|
||||||
vec3 pa = p-a, ba = b-a;
|
vec3 pa = p-a, ba = b-a;
|
||||||
float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );
|
float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );
|
||||||
return length( pa - ba*h ) - r;
|
return length( pa - ba*h ) - r;
|
||||||
}
|
}
|
||||||
|
|
||||||
float sdEquilateralTriangle( in vec2 p )
|
float sdEquilateralTriangle( in vec2 p )
|
||||||
|
|
@ -155,19 +155,19 @@ float sdPryamid4(vec3 p, vec3 h ) // h = { cos a, sin a, height }
|
||||||
|
|
||||||
float length2( vec2 p )
|
float length2( vec2 p )
|
||||||
{
|
{
|
||||||
return sqrt( p.x*p.x + p.y*p.y );
|
return sqrt( p.x*p.x + p.y*p.y );
|
||||||
}
|
}
|
||||||
|
|
||||||
float length6( vec2 p )
|
float length6( vec2 p )
|
||||||
{
|
{
|
||||||
p = p*p*p; p = p*p;
|
p = p*p*p; p = p*p;
|
||||||
return pow( p.x + p.y, 1.0/6.0 );
|
return pow( p.x + p.y, 1.0/6.0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
float length8( vec2 p )
|
float length8( vec2 p )
|
||||||
{
|
{
|
||||||
p = p*p; p = p*p; p = p*p;
|
p = p*p; p = p*p; p = p*p;
|
||||||
return pow( p.x + p.y, 1.0/8.0 );
|
return pow( p.x + p.y, 1.0/8.0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
float sdTorus82( vec3 p, vec2 t )
|
float sdTorus82( vec3 p, vec2 t )
|
||||||
|
|
@ -196,7 +196,7 @@ float opS( float d1, float d2 )
|
||||||
|
|
||||||
vec2 opU( vec2 d1, vec2 d2 )
|
vec2 opU( vec2 d1, vec2 d2 )
|
||||||
{
|
{
|
||||||
return (d1.x<d2.x) ? d1 : d2;
|
return (d1.x<d2.x) ? d1 : d2;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3 opRep( vec3 p, vec3 c )
|
vec3 opRep( vec3 p, vec3 c )
|
||||||
|
|
@ -217,25 +217,25 @@ vec3 opTwist( vec3 p )
|
||||||
vec2 map( in vec3 pos )
|
vec2 map( in vec3 pos )
|
||||||
{
|
{
|
||||||
vec2 res = opU( vec2( sdPlane( pos), 1.0 ),
|
vec2 res = opU( vec2( sdPlane( pos), 1.0 ),
|
||||||
vec2( sdSphere( pos-vec3( 0.0,0.25, 0.0), 0.25 ), 46.9 ) );
|
vec2( sdSphere( pos-vec3( 0.0,0.25, 0.0), 0.25 ), 46.9 ) );
|
||||||
res = opU( res, vec2( sdBox( pos-vec3( 1.0,0.25, 0.0), vec3(0.25) ), 3.0 ) );
|
res = opU( res, vec2( sdBox( pos-vec3( 1.0,0.25, 0.0), vec3(0.25) ), 3.0 ) );
|
||||||
res = opU( res, vec2( udRoundBox( pos-vec3( 1.0,0.25, 1.0), vec3(0.15), 0.1 ), 41.0 ) );
|
res = opU( res, vec2( udRoundBox( pos-vec3( 1.0,0.25, 1.0), vec3(0.15), 0.1 ), 41.0 ) );
|
||||||
res = opU( res, vec2( sdTorus( pos-vec3( 0.0,0.25, 1.0), vec2(0.20,0.05) ), 25.0 ) );
|
res = opU( res, vec2( sdTorus( pos-vec3( 0.0,0.25, 1.0), vec2(0.20,0.05) ), 25.0 ) );
|
||||||
res = opU( res, vec2( sdCapsule( pos,vec3(-1.3,0.10,-0.1), vec3(-0.8,0.50,0.2), 0.1 ), 31.9 ) );
|
res = opU( res, vec2( sdCapsule( pos,vec3(-1.3,0.10,-0.1), vec3(-0.8,0.50,0.2), 0.1 ), 31.9 ) );
|
||||||
res = opU( res, vec2( sdTriPrism( pos-vec3(-1.0,0.25,-1.0), vec2(0.25,0.05) ),43.5 ) );
|
res = opU( res, vec2( sdTriPrism( pos-vec3(-1.0,0.25,-1.0), vec2(0.25,0.05) ),43.5 ) );
|
||||||
res = opU( res, vec2( sdCylinder( pos-vec3( 1.0,0.30,-1.0), vec2(0.1,0.2) ), 8.0 ) );
|
res = opU( res, vec2( sdCylinder( pos-vec3( 1.0,0.30,-1.0), vec2(0.1,0.2) ), 8.0 ) );
|
||||||
res = opU( res, vec2( sdCone( pos-vec3( 0.0,0.50,-1.0), vec3(0.8,0.6,0.3) ), 55.0 ) );
|
res = opU( res, vec2( sdCone( pos-vec3( 0.0,0.50,-1.0), vec3(0.8,0.6,0.3) ), 55.0 ) );
|
||||||
res = opU( res, vec2( sdTorus82( pos-vec3( 0.0,0.25, 2.0), vec2(0.20,0.05) ),50.0 ) );
|
res = opU( res, vec2( sdTorus82( pos-vec3( 0.0,0.25, 2.0), vec2(0.20,0.05) ),50.0 ) );
|
||||||
res = opU( res, vec2( sdTorus88( pos-vec3(-1.0,0.25, 2.0), vec2(0.20,0.05) ),43.0 ) );
|
res = opU( res, vec2( sdTorus88( pos-vec3(-1.0,0.25, 2.0), vec2(0.20,0.05) ),43.0 ) );
|
||||||
res = opU( res, vec2( sdCylinder6( pos-vec3( 1.0,0.30, 2.0), vec2(0.1,0.2) ), 12.0 ) );
|
res = opU( res, vec2( sdCylinder6( pos-vec3( 1.0,0.30, 2.0), vec2(0.1,0.2) ), 12.0 ) );
|
||||||
res = opU( res, vec2( sdHexPrism( pos-vec3(-1.0,0.20, 1.0), vec2(0.25,0.05) ),17.0 ) );
|
res = opU( res, vec2( sdHexPrism( pos-vec3(-1.0,0.20, 1.0), vec2(0.25,0.05) ),17.0 ) );
|
||||||
res = opU( res, vec2( sdPryamid4( pos-vec3(-1.0,0.15,-2.0), vec3(0.8,0.6,0.25) ),37.0 ) );
|
res = opU( res, vec2( sdPryamid4( pos-vec3(-1.0,0.15,-2.0), vec3(0.8,0.6,0.25) ),37.0 ) );
|
||||||
res = opU( res, vec2( opS( udRoundBox( pos-vec3(-2.0,0.2, 1.0), vec3(0.15),0.05),
|
res = opU( res, vec2( opS( udRoundBox( pos-vec3(-2.0,0.2, 1.0), vec3(0.15),0.05),
|
||||||
sdSphere( pos-vec3(-2.0,0.2, 1.0), 0.25)), 13.0 ) );
|
sdSphere( pos-vec3(-2.0,0.2, 1.0), 0.25)), 13.0 ) );
|
||||||
res = opU( res, vec2( opS( sdTorus82( pos-vec3(-2.0,0.2, 0.0), vec2(0.20,0.1)),
|
res = opU( res, vec2( opS( sdTorus82( pos-vec3(-2.0,0.2, 0.0), vec2(0.20,0.1)),
|
||||||
sdCylinder( opRep( vec3(atan(pos.x+2.0,pos.z)/6.2831, pos.y, 0.02+0.5*length(pos-vec3(-2.0,0.2, 0.0))), vec3(0.05,1.0,0.05)), vec2(0.02,0.6))), 51.0 ) );
|
sdCylinder( opRep( vec3(atan(pos.x+2.0,pos.z)/6.2831, pos.y, 0.02+0.5*length(pos-vec3(-2.0,0.2, 0.0))), vec3(0.05,1.0,0.05)), vec2(0.02,0.6))), 51.0 ) );
|
||||||
res = opU( res, vec2( 0.5*sdSphere( pos-vec3(-2.0,0.25,-1.0), 0.2 ) + 0.03*sin(50.0*pos.x)*sin(50.0*pos.y)*sin(50.0*pos.z), 65.0 ) );
|
res = opU( res, vec2( 0.5*sdSphere( pos-vec3(-2.0,0.25,-1.0), 0.2 ) + 0.03*sin(50.0*pos.x)*sin(50.0*pos.y)*sin(50.0*pos.z), 65.0 ) );
|
||||||
res = opU( res, vec2( 0.5*sdTorus( opTwist(pos-vec3(-2.0,0.25, 2.0)),vec2(0.20,0.05)), 46.7 ) );
|
res = opU( res, vec2( 0.5*sdTorus( opTwist(pos-vec3(-2.0,0.25, 2.0)),vec2(0.20,0.05)), 46.7 ) );
|
||||||
res = opU( res, vec2( sdConeSection( pos-vec3( 0.0,0.35,-2.0), 0.15, 0.2, 0.1 ), 13.67 ) );
|
res = opU( res, vec2( sdConeSection( pos-vec3( 0.0,0.35,-2.0), 0.15, 0.2, 0.1 ), 13.67 ) );
|
||||||
res = opU( res, vec2( sdEllipsoid( pos-vec3( 1.0,0.35,-2.0), vec3(0.15, 0.2, 0.05) ), 43.17 ) );
|
res = opU( res, vec2( sdEllipsoid( pos-vec3( 1.0,0.35,-2.0), vec3(0.15, 0.2, 0.05) ), 43.17 ) );
|
||||||
|
|
||||||
|
|
@ -258,11 +258,11 @@ vec2 castRay( in vec3 ro, in vec3 rd )
|
||||||
float m = -1.0;
|
float m = -1.0;
|
||||||
for( int i=0; i<64; i++ )
|
for( int i=0; i<64; i++ )
|
||||||
{
|
{
|
||||||
float precis = 0.0005*t;
|
float precis = 0.0005*t;
|
||||||
vec2 res = map( ro+rd*t );
|
vec2 res = map( ro+rd*t );
|
||||||
if( res.x<precis || t>tmax ) break;
|
if( res.x<precis || t>tmax ) break;
|
||||||
t += res.x;
|
t += res.x;
|
||||||
m = res.y;
|
m = res.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( t>tmax ) m=-1.0;
|
if( t>tmax ) m=-1.0;
|
||||||
|
|
@ -272,11 +272,11 @@ vec2 castRay( in vec3 ro, in vec3 rd )
|
||||||
|
|
||||||
float calcSoftshadow( in vec3 ro, in vec3 rd, in float mint, in float tmax )
|
float calcSoftshadow( in vec3 ro, in vec3 rd, in float mint, in float tmax )
|
||||||
{
|
{
|
||||||
float res = 1.0;
|
float res = 1.0;
|
||||||
float t = mint;
|
float t = mint;
|
||||||
for( int i=0; i<16; i++ )
|
for( int i=0; i<16; i++ )
|
||||||
{
|
{
|
||||||
float h = map( ro + rd*t ).x;
|
float h = map( ro + rd*t ).x;
|
||||||
res = min( res, 8.0*h/t );
|
res = min( res, 8.0*h/t );
|
||||||
t += clamp( h, 0.02, 0.10 );
|
t += clamp( h, 0.02, 0.10 );
|
||||||
if( h<0.001 || t>tmax ) break;
|
if( h<0.001 || t>tmax ) break;
|
||||||
|
|
@ -288,22 +288,22 @@ vec3 calcNormal( in vec3 pos )
|
||||||
{
|
{
|
||||||
vec2 e = vec2(1.0,-1.0)*0.5773*0.0005;
|
vec2 e = vec2(1.0,-1.0)*0.5773*0.0005;
|
||||||
return normalize( e.xyy*map( pos + e.xyy ).x +
|
return normalize( e.xyy*map( pos + e.xyy ).x +
|
||||||
e.yyx*map( pos + e.yyx ).x +
|
e.yyx*map( pos + e.yyx ).x +
|
||||||
e.yxy*map( pos + e.yxy ).x +
|
e.yxy*map( pos + e.yxy ).x +
|
||||||
e.xxx*map( pos + e.xxx ).x );
|
e.xxx*map( pos + e.xxx ).x );
|
||||||
/*
|
/*
|
||||||
vec3 eps = vec3( 0.0005, 0.0, 0.0 );
|
vec3 eps = vec3( 0.0005, 0.0, 0.0 );
|
||||||
vec3 nor = vec3(
|
vec3 nor = vec3(
|
||||||
map(pos+eps.xyy).x - map(pos-eps.xyy).x,
|
map(pos+eps.xyy).x - map(pos-eps.xyy).x,
|
||||||
map(pos+eps.yxy).x - map(pos-eps.yxy).x,
|
map(pos+eps.yxy).x - map(pos-eps.yxy).x,
|
||||||
map(pos+eps.yyx).x - map(pos-eps.yyx).x );
|
map(pos+eps.yyx).x - map(pos-eps.yyx).x );
|
||||||
return normalize(nor);
|
return normalize(nor);
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
float calcAO( in vec3 pos, in vec3 nor )
|
float calcAO( in vec3 pos, in vec3 nor )
|
||||||
{
|
{
|
||||||
float occ = 0.0;
|
float occ = 0.0;
|
||||||
float sca = 1.0;
|
float sca = 1.0;
|
||||||
for( int i=0; i<5; i++ )
|
for( int i=0; i<5; i++ )
|
||||||
{
|
{
|
||||||
|
|
@ -332,7 +332,7 @@ vec3 render( in vec3 ro, in vec3 rd )
|
||||||
vec3 col = vec3(0.7, 0.9, 1.0) +rd.y*0.8;
|
vec3 col = vec3(0.7, 0.9, 1.0) +rd.y*0.8;
|
||||||
vec2 res = castRay(ro,rd);
|
vec2 res = castRay(ro,rd);
|
||||||
float t = res.x;
|
float t = res.x;
|
||||||
float m = res.y;
|
float m = res.y;
|
||||||
if( m>-0.5 )
|
if( m>-0.5 )
|
||||||
{
|
{
|
||||||
vec3 pos = ro + t*rd;
|
vec3 pos = ro + t*rd;
|
||||||
|
|
@ -340,7 +340,7 @@ vec3 render( in vec3 ro, in vec3 rd )
|
||||||
vec3 ref = reflect( rd, nor );
|
vec3 ref = reflect( rd, nor );
|
||||||
|
|
||||||
// material
|
// material
|
||||||
col = 0.45 + 0.35*sin( vec3(0.05,0.08,0.10)*(m-1.0) );
|
col = 0.45 + 0.35*sin( vec3(0.05,0.08,0.10)*(m-1.0) );
|
||||||
if( m<1.5 )
|
if( m<1.5 )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
@ -350,9 +350,9 @@ vec3 render( in vec3 ro, in vec3 rd )
|
||||||
|
|
||||||
// lighting
|
// lighting
|
||||||
float occ = calcAO( pos, nor );
|
float occ = calcAO( pos, nor );
|
||||||
vec3 lig = normalize( vec3(cos(-0.4 * runTime), sin(0.7 * runTime), -0.6) );
|
vec3 lig = normalize( vec3(cos(-0.4 * runTime), sin(0.7 * runTime), -0.6) );
|
||||||
vec3 hal = normalize( lig-rd );
|
vec3 hal = normalize( lig-rd );
|
||||||
float amb = clamp( 0.5+0.5*nor.y, 0.0, 1.0 );
|
float amb = clamp( 0.5+0.5*nor.y, 0.0, 1.0 );
|
||||||
float dif = clamp( dot( nor, lig ), 0.0, 1.0 );
|
float dif = clamp( dot( nor, lig ), 0.0, 1.0 );
|
||||||
float bac = clamp( dot( nor, normalize(vec3(-lig.x,0.0,-lig.z))), 0.0, 1.0 )*clamp( 1.0-pos.y,0.0,1.0);
|
float bac = clamp( dot( nor, normalize(vec3(-lig.x,0.0,-lig.z))), 0.0, 1.0 )*clamp( 1.0-pos.y,0.0,1.0);
|
||||||
float dom = smoothstep( -0.1, 0.1, ref.y );
|
float dom = smoothstep( -0.1, 0.1, ref.y );
|
||||||
|
|
@ -361,31 +361,31 @@ vec3 render( in vec3 ro, in vec3 rd )
|
||||||
dif *= calcSoftshadow( pos, lig, 0.02, 2.5 );
|
dif *= calcSoftshadow( pos, lig, 0.02, 2.5 );
|
||||||
dom *= calcSoftshadow( pos, ref, 0.02, 2.5 );
|
dom *= calcSoftshadow( pos, ref, 0.02, 2.5 );
|
||||||
|
|
||||||
float spe = pow( clamp( dot( nor, hal ), 0.0, 1.0 ),16.0)*
|
float spe = pow( clamp( dot( nor, hal ), 0.0, 1.0 ),16.0)*
|
||||||
dif *
|
dif *
|
||||||
(0.04 + 0.96*pow( clamp(1.0+dot(hal,rd),0.0,1.0), 5.0 ));
|
(0.04 + 0.96*pow( clamp(1.0+dot(hal,rd),0.0,1.0), 5.0 ));
|
||||||
|
|
||||||
vec3 lin = vec3(0.0);
|
vec3 lin = vec3(0.0);
|
||||||
lin += 1.30*dif*vec3(1.00,0.80,0.55);
|
lin += 1.30*dif*vec3(1.00,0.80,0.55);
|
||||||
lin += 0.40*amb*vec3(0.40,0.60,1.00)*occ;
|
lin += 0.40*amb*vec3(0.40,0.60,1.00)*occ;
|
||||||
lin += 0.50*dom*vec3(0.40,0.60,1.00)*occ;
|
lin += 0.50*dom*vec3(0.40,0.60,1.00)*occ;
|
||||||
lin += 0.50*bac*vec3(0.25,0.25,0.25)*occ;
|
lin += 0.50*bac*vec3(0.25,0.25,0.25)*occ;
|
||||||
lin += 0.25*fre*vec3(1.00,1.00,1.00)*occ;
|
lin += 0.25*fre*vec3(1.00,1.00,1.00)*occ;
|
||||||
col = col*lin;
|
col = col*lin;
|
||||||
col += 10.00*spe*vec3(1.00,0.90,0.70);
|
col += 10.00*spe*vec3(1.00,0.90,0.70);
|
||||||
|
|
||||||
col = mix( col, vec3(0.8,0.9,1.0), 1.0-exp( -0.0002*t*t*t ) );
|
col = mix( col, vec3(0.8,0.9,1.0), 1.0-exp( -0.0002*t*t*t ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
return vec3( clamp(col,0.0,1.0) );
|
return vec3( clamp(col,0.0,1.0) );
|
||||||
}
|
}
|
||||||
|
|
||||||
mat3 setCamera( in vec3 ro, in vec3 ta, float cr )
|
mat3 setCamera( in vec3 ro, in vec3 ta, float cr )
|
||||||
{
|
{
|
||||||
vec3 cw = normalize(ta-ro);
|
vec3 cw = normalize(ta-ro);
|
||||||
vec3 cp = vec3(sin(cr), cos(cr),0.0);
|
vec3 cp = vec3(sin(cr), cos(cr),0.0);
|
||||||
vec3 cu = normalize( cross(cw,cp) );
|
vec3 cu = normalize( cross(cw,cp) );
|
||||||
vec3 cv = normalize( cross(cu,cw) );
|
vec3 cv = normalize( cross(cu,cw) );
|
||||||
return mat3( cu, cv, cw );
|
return mat3( cu, cv, cw );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -403,7 +403,7 @@ void main()
|
||||||
vec2 p = (-resolution.xy + 2.0*gl_FragCoord.xy)/resolution.y;
|
vec2 p = (-resolution.xy + 2.0*gl_FragCoord.xy)/resolution.y;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// RAY: Camera is provided from raylib
|
// RAY: Camera is provided from raylib
|
||||||
//vec3 ro = vec3( -0.5+3.5*cos(0.1*time + 6.0*mo.x), 1.0 + 2.0*mo.y, 0.5 + 4.0*sin(0.1*time + 6.0*mo.x) );
|
//vec3 ro = vec3( -0.5+3.5*cos(0.1*time + 6.0*mo.x), 1.0 + 2.0*mo.y, 0.5 + 4.0*sin(0.1*time + 6.0*mo.x) );
|
||||||
|
|
||||||
vec3 ro = viewEye;
|
vec3 ro = viewEye;
|
||||||
|
|
@ -414,10 +414,10 @@ void main()
|
||||||
// ray direction
|
// ray direction
|
||||||
vec3 rd = ca * normalize( vec3(p.xy,2.0) );
|
vec3 rd = ca * normalize( vec3(p.xy,2.0) );
|
||||||
|
|
||||||
// render
|
// render
|
||||||
vec3 col = render( ro, rd );
|
vec3 col = render( ro, rd );
|
||||||
|
|
||||||
// gamma
|
// gamma
|
||||||
col = pow( col, vec3(0.4545) );
|
col = pow( col, vec3(0.4545) );
|
||||||
|
|
||||||
tot += col;
|
tot += col;
|
||||||
|
|
|
||||||
|
|
@ -15,26 +15,26 @@ uniform float time; // Total run time (in secods)
|
||||||
// Draw circle
|
// Draw circle
|
||||||
vec4 DrawCircle(vec2 fragCoord, vec2 position, float radius, vec3 color)
|
vec4 DrawCircle(vec2 fragCoord, vec2 position, float radius, vec3 color)
|
||||||
{
|
{
|
||||||
float d = length(position - fragCoord) - radius;
|
float d = length(position - fragCoord) - radius;
|
||||||
float t = clamp(d, 0.0, 1.0);
|
float t = clamp(d, 0.0, 1.0);
|
||||||
return vec4(color, 1.0 - t);
|
return vec4(color, 1.0 - t);
|
||||||
}
|
}
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec2 fragCoord = gl_FragCoord.xy;
|
vec2 fragCoord = gl_FragCoord.xy;
|
||||||
vec2 position = vec2(mouse.x, resolution.y - mouse.y);
|
vec2 position = vec2(mouse.x, resolution.y - mouse.y);
|
||||||
float radius = 40.0;
|
float radius = 40.0;
|
||||||
|
|
||||||
// Draw background layer
|
// Draw background layer
|
||||||
vec4 colorA = vec4(0.2,0.2,0.8, 1.0);
|
vec4 colorA = vec4(0.2,0.2,0.8, 1.0);
|
||||||
vec4 colorB = vec4(1.0,0.7,0.2, 1.0);
|
vec4 colorB = vec4(1.0,0.7,0.2, 1.0);
|
||||||
vec4 layer1 = mix(colorA, colorB, abs(sin(time*0.1)));
|
vec4 layer1 = mix(colorA, colorB, abs(sin(time*0.1)));
|
||||||
|
|
||||||
// Draw circle layer
|
// Draw circle layer
|
||||||
vec3 color = vec3(0.9, 0.16, 0.21);
|
vec3 color = vec3(0.9, 0.16, 0.21);
|
||||||
vec4 layer2 = DrawCircle(fragCoord, position, radius, color);
|
vec4 layer2 = DrawCircle(fragCoord, position, radius, color);
|
||||||
|
|
||||||
// Blend the two layers
|
// Blend the two layers
|
||||||
finalColor = mix(layer1, layer2, layer2.a);
|
finalColor = mix(layer1, layer2, layer2.a);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,26 +16,26 @@ uniform vec2 resolution = vec2(800, 450);
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
float x = 1.0/resolution.x;
|
float x = 1.0/resolution.x;
|
||||||
float y = 1.0/resolution.y;
|
float y = 1.0/resolution.y;
|
||||||
|
|
||||||
vec4 horizEdge = vec4(0.0);
|
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 - y))*1.0;
|
||||||
horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y ))*2.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 - 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 ))*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;
|
||||||
|
|
||||||
vec4 vertEdge = vec4(0.0);
|
vec4 vertEdge = vec4(0.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 , 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 - 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 , 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;
|
||||||
|
|
||||||
vec3 edge = sqrt((horizEdge.rgb*horizEdge.rgb) + (vertEdge.rgb*vertEdge.rgb));
|
vec3 edge = sqrt((horizEdge.rgb*horizEdge.rgb) + (vertEdge.rgb*vertEdge.rgb));
|
||||||
|
|
||||||
finalColor = vec4(edge, texture2D(texture0, fragTexCoord).a);
|
finalColor = vec4(edge, texture2D(texture0, fragTexCoord).a);
|
||||||
}
|
}
|
||||||
|
|
@ -12,9 +12,9 @@ out vec4 finalColor;
|
||||||
#define MAX_SPOTS 3
|
#define MAX_SPOTS 3
|
||||||
|
|
||||||
struct Spot {
|
struct Spot {
|
||||||
vec2 pos; // window coords of spot
|
vec2 pos; // window coords of spot
|
||||||
float inner; // inner fully transparent centre radius
|
float inner; // inner fully transparent centre radius
|
||||||
float radius; // alpha fades out to this radius
|
float radius; // alpha fades out to this radius
|
||||||
};
|
};
|
||||||
|
|
||||||
uniform Spot spots[MAX_SPOTS]; // Spotlight positions array
|
uniform Spot spots[MAX_SPOTS]; // Spotlight positions array
|
||||||
|
|
@ -22,44 +22,44 @@ uniform float screenWidth; // Width of the screen
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
float alpha = 1.0;
|
float alpha = 1.0;
|
||||||
|
|
||||||
// Get the position of the current fragment (screen coordinates!)
|
// Get the position of the current fragment (screen coordinates!)
|
||||||
vec2 pos = vec2(gl_FragCoord.x, gl_FragCoord.y);
|
vec2 pos = vec2(gl_FragCoord.x, gl_FragCoord.y);
|
||||||
|
|
||||||
// Find out which spotlight is nearest
|
// Find out which spotlight is nearest
|
||||||
float d = 65000; // some high value
|
float d = 65000; // some high value
|
||||||
int fi = -1; // found index
|
int fi = -1; // found index
|
||||||
|
|
||||||
for (int i = 0; i < MAX_SPOTS; i++)
|
for (int i = 0; i < MAX_SPOTS; i++)
|
||||||
{
|
{
|
||||||
for (int j = 0; j < MAX_SPOTS; j++)
|
for (int j = 0; j < MAX_SPOTS; j++)
|
||||||
{
|
{
|
||||||
float dj = distance(pos, spots[j].pos) - spots[j].radius + spots[i].radius;
|
float dj = distance(pos, spots[j].pos) - spots[j].radius + spots[i].radius;
|
||||||
|
|
||||||
if (d > dj)
|
if (d > dj)
|
||||||
{
|
{
|
||||||
d = dj;
|
d = dj;
|
||||||
fi = i;
|
fi = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// d now equals distance to nearest spot...
|
// d now equals distance to nearest spot...
|
||||||
// allowing for the different radii of all spotlights
|
// allowing for the different radii of all spotlights
|
||||||
if (fi != -1)
|
if (fi != -1)
|
||||||
{
|
{
|
||||||
if (d > spots[fi].radius) alpha = 1.0;
|
if (d > spots[fi].radius) alpha = 1.0;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (d < spots[fi].inner) alpha = 0.0;
|
if (d < spots[fi].inner) alpha = 0.0;
|
||||||
else alpha = (d - spots[fi].inner) / (spots[fi].radius - spots[fi].inner);
|
else alpha = (d - spots[fi].inner) / (spots[fi].radius - spots[fi].inner);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Right hand side of screen is dimly lit,
|
// Right hand side of screen is dimly lit,
|
||||||
// could make the threshold value user definable
|
// could make the threshold value user definable
|
||||||
if ((pos.x > screenWidth/2.0) && (alpha > 0.9)) alpha = 0.9;
|
if ((pos.x > screenWidth/2.0) && (alpha > 0.9)) alpha = 0.9;
|
||||||
|
|
||||||
finalColor = vec4(0, 0, 0, alpha);
|
finalColor = vec4(0, 0, 0, alpha);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,15 +23,15 @@ uniform float speedX;
|
||||||
uniform float speedY;
|
uniform float speedY;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
float pixelWidth = 1.0 / size.x;
|
float pixelWidth = 1.0 / size.x;
|
||||||
float pixelHeight = 1.0 / size.y;
|
float pixelHeight = 1.0 / size.y;
|
||||||
float aspect = pixelHeight / pixelWidth;
|
float aspect = pixelHeight / pixelWidth;
|
||||||
float boxLeft = 0.0;
|
float boxLeft = 0.0;
|
||||||
float boxTop = 0.0;
|
float boxTop = 0.0;
|
||||||
|
|
||||||
vec2 p = fragTexCoord;
|
vec2 p = fragTexCoord;
|
||||||
p.x += cos((fragTexCoord.y - boxTop) * freqX / ( pixelWidth * 750.0) + (secondes * speedX)) * ampX * pixelWidth;
|
p.x += cos((fragTexCoord.y - boxTop) * freqX / ( pixelWidth * 750.0) + (secondes * speedX)) * ampX * pixelWidth;
|
||||||
p.y += sin((fragTexCoord.x - boxLeft) * freqY * aspect / ( pixelHeight * 750.0) + (secondes * speedY)) * ampY * pixelHeight;
|
p.y += sin((fragTexCoord.x - boxLeft) * freqY * aspect / ( pixelHeight * 750.0) + (secondes * speedY)) * ampY * pixelHeight;
|
||||||
|
|
||||||
finalColor = texture(texture0, p)*colDiffuse*fragColor;
|
finalColor = texture(texture0, p)*colDiffuse*fragColor;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
*
|
*
|
||||||
* LICENSE: zlib/libpng
|
* LICENSE: zlib/libpng
|
||||||
*
|
*
|
||||||
* Copyright (c) 2017-2019 Victor Fisac (@victorfisac) and Ramon Santamaria (@raysan5)
|
* Copyright (c) 2017-2020 Victor Fisac (@victorfisac) and Ramon Santamaria (@raysan5)
|
||||||
*
|
*
|
||||||
* This software is provided "as-is", without any express or implied warranty. In no event
|
* 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.
|
* will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,9 @@
|
||||||
* This example has been created using raylib 2.5 (www.raylib.com)
|
* This example has been created using raylib 2.5 (www.raylib.com)
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
*
|
*
|
||||||
* Example contributed by Chris Camacho (@codifies) and reviewed by Ramon Santamaria (@raysan5)
|
* Example contributed by Chris Camacho (@chriscamacho) and reviewed by Ramon Santamaria (@raysan5)
|
||||||
*
|
*
|
||||||
* Chris Camacho (@codifies - http://bedroomcoders.co.uk/) notes:
|
* Chris Camacho (@chriscamacho - http://bedroomcoders.co.uk/) notes:
|
||||||
*
|
*
|
||||||
* This is based on the PBR lighting example, but greatly simplified to aid learning...
|
* This is based on the PBR lighting example, but greatly simplified to aid learning...
|
||||||
* actually there is very little of the PBR example left!
|
* actually there is very little of the PBR example left!
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
* a testement to the authors of raylib (including rlights.h) that the example
|
* a testement to the authors of raylib (including rlights.h) that the example
|
||||||
* came together fairly quickly.
|
* came together fairly quickly.
|
||||||
*
|
*
|
||||||
* Copyright (c) 2019 Chris Camacho (@codifies) and Ramon Santamaria (@raysan5)
|
* Copyright (c) 2019 Chris Camacho (@chriscamacho) and Ramon Santamaria (@raysan5)
|
||||||
*
|
*
|
||||||
********************************************************************************************/
|
********************************************************************************************/
|
||||||
|
|
||||||
|
|
|
||||||
93
examples/shaders/shaders_multi_sample2d.c
Normal file
|
|
@ -0,0 +1,93 @@
|
||||||
|
/*******************************************************************************************
|
||||||
|
*
|
||||||
|
* raylib [shaders] example - Multiple sample2D with default batch system
|
||||||
|
*
|
||||||
|
* NOTE: This example requires raylib OpenGL 3.3 or ES2 versions for shaders support,
|
||||||
|
* OpenGL 1.1 does not support shaders, recompile raylib to OpenGL 3.3 version.
|
||||||
|
*
|
||||||
|
* NOTE: Shaders used in this example are #version 330 (OpenGL 3.3), to test this example
|
||||||
|
* 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 3.5 (www.raylib.com)
|
||||||
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 Ramon Santamaria (@raysan5)
|
||||||
|
*
|
||||||
|
********************************************************************************************/
|
||||||
|
|
||||||
|
#include "raylib.h"
|
||||||
|
|
||||||
|
#if defined(PLATFORM_DESKTOP)
|
||||||
|
#define GLSL_VERSION 330
|
||||||
|
#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
|
||||||
|
#define GLSL_VERSION 100
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
// Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
const int screenWidth = 800;
|
||||||
|
const int screenHeight = 450;
|
||||||
|
|
||||||
|
InitWindow(screenWidth, screenHeight, "raylib - multiple sample2D");
|
||||||
|
|
||||||
|
Image imRed = GenImageColor(800, 450, (Color){ 255, 0, 0, 255 });
|
||||||
|
Texture texRed = LoadTextureFromImage(imRed);
|
||||||
|
UnloadImage(imRed);
|
||||||
|
|
||||||
|
Image imBlue = GenImageColor(800, 450, (Color){ 0, 0, 255, 255 });
|
||||||
|
Texture texBlue = LoadTextureFromImage(imBlue);
|
||||||
|
UnloadImage(imBlue);
|
||||||
|
|
||||||
|
Shader shader = LoadShader(0, TextFormat("resources/shaders/glsl%i/color_mix.fs", GLSL_VERSION));
|
||||||
|
|
||||||
|
// Get an additional sampler2D location to be enabled on drawing
|
||||||
|
int texBlueLoc = GetShaderLocation(shader, "texture1");
|
||||||
|
|
||||||
|
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
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
// ...
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Draw
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
BeginDrawing();
|
||||||
|
|
||||||
|
ClearBackground(RAYWHITE);
|
||||||
|
|
||||||
|
BeginShaderMode(shader);
|
||||||
|
|
||||||
|
// WARNING: Additional samplers are enabled for all draw calls in the batch,
|
||||||
|
// EndShaderMode() forces batch drawing and consequently resets active textures
|
||||||
|
// to let other sampler2D to be activated on consequent drawings (if required)
|
||||||
|
SetShaderValueTexture(shader, texBlueLoc, texBlue);
|
||||||
|
|
||||||
|
// We are drawing texRed using default sampler2D texture0 but
|
||||||
|
// an additional texture units is enabled for texBlue (sampler2D texture1)
|
||||||
|
DrawTexture(texRed, 0, 0, WHITE);
|
||||||
|
|
||||||
|
EndShaderMode();
|
||||||
|
|
||||||
|
EndDrawing();
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
}
|
||||||
|
|
||||||
|
// De-Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
UnloadShader(shader); // Unload shader
|
||||||
|
UnloadTexture(texRed); // Unload texture
|
||||||
|
UnloadTexture(texBlue); // Unload texture
|
||||||
|
|
||||||
|
CloseWindow(); // Close window and OpenGL context
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
BIN
examples/shaders/shaders_multi_sample2d.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
|
|
@ -4,17 +4,16 @@
|
||||||
*
|
*
|
||||||
* This example uses [rlgl] module funtionality (pseudo-OpenGL 1.1 style coding)
|
* This example uses [rlgl] module funtionality (pseudo-OpenGL 1.1 style coding)
|
||||||
*
|
*
|
||||||
* This example has been created using raylib 3.0 (www.raylib.com)
|
* This example has been created using raylib 3.5 (www.raylib.com)
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Ramon Santamaria (@raysan5)
|
* Example contributed by @seanpringle and reviewed by Ramon Santamaria (@raysan5)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 @seanpringle
|
||||||
*
|
*
|
||||||
********************************************************************************************/
|
********************************************************************************************/
|
||||||
|
|
||||||
#define GRAPHICS_API_OPENGL_33
|
|
||||||
#define GLSL_VERSION 330
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "raylib.h"
|
#include "raylib.h"
|
||||||
#include "raymath.h"
|
#include "raymath.h"
|
||||||
#include "rlgl.h"
|
#include "rlgl.h"
|
||||||
|
|
@ -22,6 +21,10 @@
|
||||||
#define RLIGHTS_IMPLEMENTATION
|
#define RLIGHTS_IMPLEMENTATION
|
||||||
#include "rlights.h"
|
#include "rlights.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#define GLSL_VERSION 330
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------
|
||||||
// Program main entry point
|
// Program main entry point
|
||||||
//------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------
|
||||||
|
|
@ -29,11 +32,11 @@ int main(void)
|
||||||
{
|
{
|
||||||
// Initialization
|
// Initialization
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
const int screenWidth = 1024;
|
const int screenWidth = 800;
|
||||||
const int screenHeight = 768;
|
const int screenHeight = 450;
|
||||||
|
|
||||||
SetConfigFlags(FLAG_MSAA_4X_HINT); // Enable Multi Sampling Anti Aliasing 4x (if available)
|
SetConfigFlags(FLAG_MSAA_4X_HINT); // Enable Multi Sampling Anti Aliasing 4x (if available)
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [shaders] example - rlgl module usage for instanced meshes");
|
InitWindow(screenWidth, screenHeight, "raylib [shaders] example - rlgl mesh instanced");
|
||||||
|
|
||||||
// Define the camera to look into our 3d world
|
// Define the camera to look into our 3d world
|
||||||
Camera camera = { 0 };
|
Camera camera = { 0 };
|
||||||
|
|
@ -43,14 +46,12 @@ int main(void)
|
||||||
camera.fovy = 45.0f;
|
camera.fovy = 45.0f;
|
||||||
camera.type = CAMERA_PERSPECTIVE;
|
camera.type = CAMERA_PERSPECTIVE;
|
||||||
|
|
||||||
SetCameraMode(camera, CAMERA_FREE);
|
|
||||||
|
|
||||||
const int count = 10000; // Number of instances to display
|
const int count = 10000; // Number of instances to display
|
||||||
Mesh cube = GenMeshCube(1.0f, 1.0f, 1.0f);
|
Mesh cube = GenMeshCube(1.0f, 1.0f, 1.0f);
|
||||||
|
|
||||||
Matrix* rotations = RL_MALLOC(count * sizeof(Matrix)); // Rotation state of instances
|
Matrix *rotations = RL_MALLOC(count*sizeof(Matrix)); // Rotation state of instances
|
||||||
Matrix* rotationsInc = RL_MALLOC(count * sizeof(Matrix)); // Per-frame rotation animation of instances
|
Matrix *rotationsInc = RL_MALLOC(count*sizeof(Matrix)); // Per-frame rotation animation of instances
|
||||||
Matrix* translations = RL_MALLOC(count * sizeof(Matrix)); // Locations of instances
|
Matrix *translations = RL_MALLOC(count*sizeof(Matrix)); // Locations of instances
|
||||||
|
|
||||||
// Scatter random cubes around
|
// Scatter random cubes around
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
|
|
@ -67,11 +68,10 @@ int main(void)
|
||||||
float angle = (float)GetRandomValue(0, 10) * DEG2RAD;
|
float angle = (float)GetRandomValue(0, 10) * DEG2RAD;
|
||||||
|
|
||||||
rotationsInc[i] = MatrixRotate(axis, angle);
|
rotationsInc[i] = MatrixRotate(axis, angle);
|
||||||
|
|
||||||
rotations[i] = MatrixIdentity();
|
rotations[i] = MatrixIdentity();
|
||||||
}
|
}
|
||||||
|
|
||||||
Matrix* transforms = RL_MALLOC(count * sizeof(Matrix)); // Pre-multiplied transformations passed to rlgl
|
Matrix *transforms = RL_MALLOC(count*sizeof(Matrix)); // Pre-multiplied transformations passed to rlgl
|
||||||
|
|
||||||
Shader shader = LoadShader(FormatText("resources/shaders/glsl%i/base_lighting_instanced.vs", GLSL_VERSION),
|
Shader shader = LoadShader(FormatText("resources/shaders/glsl%i/base_lighting_instanced.vs", GLSL_VERSION),
|
||||||
FormatText("resources/shaders/glsl%i/lighting.fs", GLSL_VERSION));
|
FormatText("resources/shaders/glsl%i/lighting.fs", GLSL_VERSION));
|
||||||
|
|
@ -81,7 +81,7 @@ int main(void)
|
||||||
shader.locs[LOC_VECTOR_VIEW] = GetShaderLocation(shader, "viewPos");
|
shader.locs[LOC_VECTOR_VIEW] = GetShaderLocation(shader, "viewPos");
|
||||||
shader.locs[LOC_MATRIX_MODEL] = GetShaderLocationAttrib(shader, "instance");
|
shader.locs[LOC_MATRIX_MODEL] = GetShaderLocationAttrib(shader, "instance");
|
||||||
|
|
||||||
// ambient light level
|
// Ambient light level
|
||||||
int ambientLoc = GetShaderLocation(shader, "ambient");
|
int ambientLoc = GetShaderLocation(shader, "ambient");
|
||||||
SetShaderValue(shader, ambientLoc, (float[4]){ 0.2f, 0.2f, 0.2f, 1.0f }, UNIFORM_VEC4);
|
SetShaderValue(shader, ambientLoc, (float[4]){ 0.2f, 0.2f, 0.2f, 1.0f }, UNIFORM_VEC4);
|
||||||
|
|
||||||
|
|
@ -90,6 +90,8 @@ int main(void)
|
||||||
Material material = LoadMaterialDefault();
|
Material material = LoadMaterialDefault();
|
||||||
material.shader = shader;
|
material.shader = shader;
|
||||||
material.maps[MAP_DIFFUSE].color = RED;
|
material.maps[MAP_DIFFUSE].color = RED;
|
||||||
|
|
||||||
|
SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode
|
||||||
|
|
||||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
@ -111,7 +113,6 @@ int main(void)
|
||||||
rotations[i] = MatrixMultiply(rotations[i], rotationsInc[i]);
|
rotations[i] = MatrixMultiply(rotations[i], rotationsInc[i]);
|
||||||
transforms[i] = MatrixMultiply(rotations[i], translations[i]);
|
transforms[i] = MatrixMultiply(rotations[i], translations[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Draw
|
// Draw
|
||||||
|
|
@ -124,7 +125,8 @@ int main(void)
|
||||||
rlDrawMeshInstanced(cube, material, transforms, count);
|
rlDrawMeshInstanced(cube, material, transforms, count);
|
||||||
EndMode3D();
|
EndMode3D();
|
||||||
|
|
||||||
DrawText("A CUBE OF DANCING CUBES!", 400, 10, 20, MAROON);
|
DrawText("A CUBE OF DANCING CUBES!", 490, 10, 20, MAROON);
|
||||||
|
|
||||||
DrawFPS(10, 10);
|
DrawFPS(10, 10);
|
||||||
|
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
|
|
|
||||||
BIN
examples/shaders/shaders_rlgl_mesh_instanced.png
Normal file
|
After Width: | Height: | Size: 401 KiB |
|
|
@ -5,9 +5,9 @@
|
||||||
* This example has been created using raylib 2.5 (www.raylib.com)
|
* This example has been created using raylib 2.5 (www.raylib.com)
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
*
|
*
|
||||||
* Example contributed by Chris Camacho (@codifies) and reviewed by Ramon Santamaria (@raysan5)
|
* Example contributed by Chris Camacho (@chriscamacho) and reviewed by Ramon Santamaria (@raysan5)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2019 Chris Camacho (@codifies) and Ramon Santamaria (@raysan5)
|
* Copyright (c) 2019 Chris Camacho (@chriscamacho) and Ramon Santamaria (@raysan5)
|
||||||
*
|
*
|
||||||
********************************************************************************************
|
********************************************************************************************
|
||||||
*
|
*
|
||||||
|
|
@ -64,8 +64,7 @@ int main(void)
|
||||||
model2.materials[0].maps[MAP_DIFFUSE].texture = texDiffuse;
|
model2.materials[0].maps[MAP_DIFFUSE].texture = texDiffuse;
|
||||||
|
|
||||||
// Using MAP_EMISSION as a spare slot to use for 2nd texture
|
// Using MAP_EMISSION as a spare slot to use for 2nd texture
|
||||||
// NOTE: Don't use MAP_IRRADIANCE, MAP_PREFILTER or MAP_CUBEMAP
|
// NOTE: Don't use MAP_IRRADIANCE, MAP_PREFILTER or MAP_CUBEMAP as they are bound as cube maps
|
||||||
// as they are bound as cube maps
|
|
||||||
Texture texMask = LoadTexture("resources/mask.png");
|
Texture texMask = LoadTexture("resources/mask.png");
|
||||||
model1.materials[0].maps[MAP_EMISSION].texture = texMask;
|
model1.materials[0].maps[MAP_EMISSION].texture = texMask;
|
||||||
model2.materials[0].maps[MAP_EMISSION].texture = texMask;
|
model2.materials[0].maps[MAP_EMISSION].texture = texMask;
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,10 @@
|
||||||
* This example has been created using raylib 2.5 (www.raylib.com)
|
* This example has been created using raylib 2.5 (www.raylib.com)
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
*
|
*
|
||||||
* Example contributed by Chris Camacho (@codifies - http://bedroomcoders.co.uk/)
|
* Example contributed by Chris Camacho (@chriscamacho - http://bedroomcoders.co.uk/)
|
||||||
* and reviewed by Ramon Santamaria (@raysan5)
|
* and reviewed by Ramon Santamaria (@raysan5)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2019 Chris Camacho (@codifies) and Ramon Santamaria (@raysan5)
|
* Copyright (c) 2019 Chris Camacho (@chriscamacho) and Ramon Santamaria (@raysan5)
|
||||||
*
|
*
|
||||||
********************************************************************************************
|
********************************************************************************************
|
||||||
*
|
*
|
||||||
|
|
@ -39,10 +39,8 @@
|
||||||
#define GLSL_VERSION 100
|
#define GLSL_VERSION 100
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define MAX_SPOTS 3 // NOTE: It must be the same as define in shader
|
||||||
#define MAXSPOT 3 // NB must be the same as define in shader
|
#define MAX_STARS 400
|
||||||
#define numStars 400
|
|
||||||
|
|
||||||
|
|
||||||
// Spot data
|
// Spot data
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
@ -78,76 +76,67 @@ int main(void)
|
||||||
|
|
||||||
Texture texRay = LoadTexture("resources/raysan.png");
|
Texture texRay = LoadTexture("resources/raysan.png");
|
||||||
|
|
||||||
Star stars[numStars] = { 0 };
|
Star stars[MAX_STARS] = { 0 };
|
||||||
|
|
||||||
for (int n = 0; n < numStars; n++) ResetStar(&stars[n]);
|
for (int n = 0; n < MAX_STARS; n++) ResetStar(&stars[n]);
|
||||||
|
|
||||||
// Progress all the stars on, so they don't all start in the centre
|
// Progress all the stars on, so they don't all start in the centre
|
||||||
for (int m = 0; m < screenWidth/2.0; m++)
|
for (int m = 0; m < screenWidth/2.0; m++)
|
||||||
{
|
{
|
||||||
for (int n = 0; n < numStars; n++) UpdateStar(&stars[n]);
|
for (int n = 0; n < MAX_STARS; n++) UpdateStar(&stars[n]);
|
||||||
}
|
}
|
||||||
|
|
||||||
int frameCounter = 0;
|
int frameCounter = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Use default vert shader
|
// Use default vert shader
|
||||||
Shader spotShader = LoadShader(0, TextFormat("resources/shaders/glsl%i/spotlight.fs", GLSL_VERSION));
|
Shader shdrSpot = LoadShader(0, TextFormat("resources/shaders/glsl%i/spotlight.fs", GLSL_VERSION));
|
||||||
|
|
||||||
// Get the locations of spots in the shader
|
// Get the locations of spots in the shader
|
||||||
Spot spots[MAXSPOT];
|
Spot spots[MAX_SPOTS];
|
||||||
/*
|
|
||||||
unsigned int posLoc;
|
|
||||||
unsigned int innerLoc;
|
|
||||||
unsigned int radiusLoc;
|
|
||||||
*/
|
|
||||||
for (int i = 0; i < MAXSPOT; i++)
|
|
||||||
{
|
|
||||||
char posName[32] = "spots[x].pos\0";
|
|
||||||
char innerName[32] = "spots[x].inner\0";
|
|
||||||
char radiusName[32] = "spots[x].radius\0";
|
|
||||||
|
|
||||||
posName[6] = '0' + i;
|
for (int i = 0; i < MAX_SPOTS; i++)
|
||||||
innerName[6] = '0' + i;
|
|
||||||
radiusName[6] = '0' + i;
|
|
||||||
|
|
||||||
spots[i].posLoc = GetShaderLocation(spotShader, posName);
|
|
||||||
spots[i].innerLoc = GetShaderLocation(spotShader, innerName);
|
|
||||||
spots[i].radiusLoc = GetShaderLocation(spotShader, radiusName);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// tell the shader how wide the screen is so we can have
|
|
||||||
// a pitch black half and a dimly lit half.
|
|
||||||
{
|
|
||||||
unsigned int wLoc = GetShaderLocation(spotShader, "screenWidth");
|
|
||||||
float sw = (float)GetScreenWidth();
|
|
||||||
SetShaderValue(spotShader, wLoc, &sw, UNIFORM_FLOAT);
|
|
||||||
}
|
|
||||||
|
|
||||||
// randomise the locations and velocities of the spotlights
|
|
||||||
// and initialise the shader locations
|
|
||||||
for (int i = 0; i < MAXSPOT; i++)
|
|
||||||
{
|
{
|
||||||
|
char posName[32] = "spots[x].pos\0";
|
||||||
spots[i].pos.x = GetRandomValue(64, screenWidth - 64);
|
char innerName[32] = "spots[x].inner\0";
|
||||||
spots[i].pos.y = GetRandomValue(64, screenHeight - 64);
|
char radiusName[32] = "spots[x].radius\0";
|
||||||
spots[i].vel = (Vector2){ 0, 0 };
|
|
||||||
|
posName[6] = '0' + i;
|
||||||
|
innerName[6] = '0' + i;
|
||||||
|
radiusName[6] = '0' + i;
|
||||||
|
|
||||||
while ((fabs(spots[i].vel.x) + fabs(spots[i].vel.y)) < 2)
|
spots[i].posLoc = GetShaderLocation(shdrSpot, posName);
|
||||||
|
spots[i].innerLoc = GetShaderLocation(shdrSpot, innerName);
|
||||||
|
spots[i].radiusLoc = GetShaderLocation(shdrSpot, radiusName);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tell the shader how wide the screen is so we can have
|
||||||
|
// a pitch black half and a dimly lit half.
|
||||||
|
unsigned int wLoc = GetShaderLocation(shdrSpot, "screenWidth");
|
||||||
|
float sw = (float)GetScreenWidth();
|
||||||
|
SetShaderValue(shdrSpot, wLoc, &sw, UNIFORM_FLOAT);
|
||||||
|
|
||||||
|
// Randomise the locations and velocities of the spotlights
|
||||||
|
// and initialise the shader locations
|
||||||
|
for (int i = 0; i < MAX_SPOTS; i++)
|
||||||
|
{
|
||||||
|
spots[i].pos.x = GetRandomValue(64, screenWidth - 64);
|
||||||
|
spots[i].pos.y = GetRandomValue(64, screenHeight - 64);
|
||||||
|
spots[i].vel = (Vector2){ 0, 0 };
|
||||||
|
|
||||||
|
while ((fabs(spots[i].vel.x) + fabs(spots[i].vel.y)) < 2)
|
||||||
{
|
{
|
||||||
spots[i].vel.x = GetRandomValue(-40, 40)/10.0;
|
spots[i].vel.x = GetRandomValue(-40, 40)/10.0;
|
||||||
spots[i].vel.y = GetRandomValue(-40, 40)/10.0;
|
spots[i].vel.y = GetRandomValue(-40, 40)/10.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
spots[i].inner = 28 * (i + 1);
|
spots[i].inner = 28 * (i + 1);
|
||||||
spots[i].radius = 48 * (i + 1);
|
spots[i].radius = 48 * (i + 1);
|
||||||
|
|
||||||
SetShaderValue(spotShader, spots[i].posLoc, &spots[i].pos.x, UNIFORM_VEC2);
|
SetShaderValue(shdrSpot, spots[i].posLoc, &spots[i].pos.x, UNIFORM_VEC2);
|
||||||
SetShaderValue(spotShader, spots[i].innerLoc, &spots[i].inner, UNIFORM_FLOAT);
|
SetShaderValue(shdrSpot, spots[i].innerLoc, &spots[i].inner, UNIFORM_FLOAT);
|
||||||
SetShaderValue(spotShader, spots[i].radiusLoc, &spots[i].radius, UNIFORM_FLOAT);
|
SetShaderValue(shdrSpot, spots[i].radiusLoc, &spots[i].radius, UNIFORM_FLOAT);
|
||||||
}
|
}
|
||||||
|
|
||||||
SetTargetFPS(60); // Set to run at 60 frames-per-second
|
SetTargetFPS(60); // Set to run at 60 frames-per-second
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
@ -159,39 +148,42 @@ int main(void)
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
frameCounter++;
|
frameCounter++;
|
||||||
|
|
||||||
// Move the stars, resetting them if the go offscreen
|
// Move the stars, resetting them if the go offscreen
|
||||||
for (int n = 0; n < numStars; n++) UpdateStar(&stars[n]);
|
for (int n = 0; n < MAX_STARS; n++) UpdateStar(&stars[n]);
|
||||||
|
|
||||||
// Update the spots, send them to the shader
|
// Update the spots, send them to the shader
|
||||||
for (int i = 0; i < MAXSPOT; i++)
|
for (int i = 0; i < MAX_SPOTS; i++)
|
||||||
{
|
{
|
||||||
if ( i == 0 ) {
|
if (i == 0)
|
||||||
Vector2 mp = GetMousePosition();
|
{
|
||||||
spots[i].pos.x = mp.x;
|
Vector2 mp = GetMousePosition();
|
||||||
spots[i].pos.y = screenHeight - mp.y;
|
spots[i].pos.x = mp.x;
|
||||||
} else {
|
spots[i].pos.y = screenHeight - mp.y;
|
||||||
spots[i].pos.x += spots[i].vel.x;
|
}
|
||||||
spots[i].pos.y += spots[i].vel.y;
|
else
|
||||||
|
{
|
||||||
if (spots[i].pos.x < 64) spots[i].vel.x = -spots[i].vel.x;
|
spots[i].pos.x += spots[i].vel.x;
|
||||||
if (spots[i].pos.x > screenWidth - 64) spots[i].vel.x = -spots[i].vel.x;
|
spots[i].pos.y += spots[i].vel.y;
|
||||||
if (spots[i].pos.y < 64) spots[i].vel.y = -spots[i].vel.y;
|
|
||||||
if (spots[i].pos.y > screenHeight - 64) spots[i].vel.y = -spots[i].vel.y;
|
if (spots[i].pos.x < 64) spots[i].vel.x = -spots[i].vel.x;
|
||||||
}
|
if (spots[i].pos.x > (screenWidth - 64)) spots[i].vel.x = -spots[i].vel.x;
|
||||||
|
if (spots[i].pos.y < 64) spots[i].vel.y = -spots[i].vel.y;
|
||||||
SetShaderValue(spotShader, spots[i].posLoc, &spots[i].pos.x, UNIFORM_VEC2);
|
if (spots[i].pos.y > (screenHeight - 64)) spots[i].vel.y = -spots[i].vel.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SetShaderValue(shdrSpot, spots[i].posLoc, &spots[i].pos.x, UNIFORM_VEC2);
|
||||||
|
}
|
||||||
|
|
||||||
// Draw
|
// Draw
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
BeginDrawing();
|
BeginDrawing();
|
||||||
|
|
||||||
ClearBackground(DARKBLUE);
|
ClearBackground(DARKBLUE);
|
||||||
|
|
||||||
// Draw stars and bobs
|
// Draw stars and bobs
|
||||||
for (int n = 0; n < numStars; n++)
|
for (int n = 0; n < MAX_STARS; n++)
|
||||||
{
|
{
|
||||||
// Single pixel is just too small these days!
|
// Single pixel is just too small these days!
|
||||||
DrawRectangle(stars[n].pos.x, stars[n].pos.y, 2, 2, WHITE);
|
DrawRectangle(stars[n].pos.x, stars[n].pos.y, 2, 2, WHITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -199,24 +191,23 @@ int main(void)
|
||||||
{
|
{
|
||||||
DrawTexture(texRay,
|
DrawTexture(texRay,
|
||||||
(screenWidth/2.0) + cos((frameCounter + i*8)/51.45f)*(screenWidth/2.2) - 32,
|
(screenWidth/2.0) + cos((frameCounter + i*8)/51.45f)*(screenWidth/2.2) - 32,
|
||||||
(screenHeight/2.0) + sin((frameCounter + i*8)/17.87f)*(screenHeight/4.2),
|
(screenHeight/2.0) + sin((frameCounter + i*8)/17.87f)*(screenHeight/4.2), WHITE);
|
||||||
WHITE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw spot lights
|
// Draw spot lights
|
||||||
BeginShaderMode(spotShader);
|
BeginShaderMode(shdrSpot);
|
||||||
// instead of a blank rectangle you could render here
|
// Instead of a blank rectangle you could render here
|
||||||
// a render texture of the full screen used to do screen
|
// a render texture of the full screen used to do screen
|
||||||
// scaling (slight adjustment to shader would be required
|
// scaling (slight adjustment to shader would be required
|
||||||
// to actually pay attention to the colour!)
|
// to actually pay attention to the colour!)
|
||||||
DrawRectangle(0,0,screenWidth,screenHeight,WHITE);
|
DrawRectangle(0, 0, screenWidth, screenHeight, WHITE);
|
||||||
EndShaderMode();
|
EndShaderMode();
|
||||||
|
|
||||||
DrawFPS(10, 10);
|
DrawFPS(10, 10);
|
||||||
|
|
||||||
DrawText("Move the mouse!", 10, 30, 20, GREEN);
|
DrawText("Move the mouse!", 10, 30, 20, GREEN);
|
||||||
DrawText("Pitch Black", screenWidth * .2, screenHeight / 2, 20, GREEN);
|
DrawText("Pitch Black", screenWidth*0.2f, screenHeight/2, 20, GREEN);
|
||||||
DrawText("Dark", screenWidth * .66, screenHeight / 2, 20, GREEN);
|
DrawText("Dark", screenWidth*.66f, screenHeight/2, 20, GREEN);
|
||||||
|
|
||||||
|
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
|
|
@ -226,6 +217,7 @@ int main(void)
|
||||||
// De-Initialization
|
// De-Initialization
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
UnloadTexture(texRay);
|
UnloadTexture(texRay);
|
||||||
|
UnloadShader(shdrSpot);
|
||||||
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
CloseWindow(); // Close window and OpenGL context
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
@ -243,17 +235,17 @@ void ResetStar(Star *s)
|
||||||
s->vel.x = (float)GetRandomValue(-1000, 1000)/100.0f;
|
s->vel.x = (float)GetRandomValue(-1000, 1000)/100.0f;
|
||||||
s->vel.y = (float)GetRandomValue(-1000, 1000)/100.0f;
|
s->vel.y = (float)GetRandomValue(-1000, 1000)/100.0f;
|
||||||
|
|
||||||
} while (!(fabs(s->vel.x) + fabs(s->vel.y) > 1));
|
} while (!(fabs(s->vel.x) + (fabs(s->vel.y) > 1)));
|
||||||
|
|
||||||
s->pos = Vector2Add(s->pos, Vector2Multiply(s->vel, (Vector2){ 8, 8 }));
|
s->pos = Vector2Add(s->pos, Vector2Multiply(s->vel, (Vector2){ 8.0f, 8.0f }));
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateStar(Star *s)
|
void UpdateStar(Star *s)
|
||||||
{
|
{
|
||||||
s->pos = Vector2Add(s->pos, s->vel);
|
s->pos = Vector2Add(s->pos, s->vel);
|
||||||
|
|
||||||
if (s->pos.x < 0 || s->pos.x > GetScreenWidth() ||
|
if ((s->pos.x < 0) || (s->pos.x > GetScreenWidth()) ||
|
||||||
s->pos.y < 0 || s->pos.y > GetScreenHeight())
|
(s->pos.y < 0) || (s->pos.y > GetScreenHeight()))
|
||||||
{
|
{
|
||||||
ResetStar(s);
|
ResetStar(s);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
556
examples/shapes/ricons.h
Normal file
|
|
@ -0,0 +1,556 @@
|
||||||
|
/**********************************************************************************************
|
||||||
|
*
|
||||||
|
* rIcons - Icons pack intended for tools development with raygui
|
||||||
|
*
|
||||||
|
* LICENSE: zlib/libpng
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019-2020 Ramon Santamaria (@raysan5)
|
||||||
|
*
|
||||||
|
**********************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef RICONS_H
|
||||||
|
#define RICONS_H
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
// Defines and Macros
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
#define RICON_MAX_ICONS 256 // Maximum number of icons
|
||||||
|
#define RICON_SIZE 16 // Size of icons (squared)
|
||||||
|
|
||||||
|
#define RICON_MAX_NAME_LENGTH 32 // Maximum length of icon name id
|
||||||
|
|
||||||
|
// Icons data is defined by bit array (every bit represents one pixel)
|
||||||
|
// Those arrays are stored as unsigned int data arrays, so every array
|
||||||
|
// element defines 32 pixels (bits) of information
|
||||||
|
// Number of elemens depend on RICON_SIZE (by default 16x16 pixels)
|
||||||
|
#define RICON_DATA_ELEMENTS (RICON_SIZE*RICON_SIZE/32)
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
// Icons enumeration
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
typedef enum {
|
||||||
|
RICON_NONE = 0,
|
||||||
|
RICON_FOLDER_FILE_OPEN = 1,
|
||||||
|
RICON_FILE_SAVE_CLASSIC = 2,
|
||||||
|
RICON_FOLDER_OPEN = 3,
|
||||||
|
RICON_FOLDER_SAVE = 4,
|
||||||
|
RICON_FILE_OPEN = 5,
|
||||||
|
RICON_FILE_SAVE = 6,
|
||||||
|
RICON_FILE_EXPORT = 7,
|
||||||
|
RICON_FILE_NEW = 8,
|
||||||
|
RICON_FILE_DELETE = 9,
|
||||||
|
RICON_FILETYPE_TEXT = 10,
|
||||||
|
RICON_FILETYPE_AUDIO = 11,
|
||||||
|
RICON_FILETYPE_IMAGE = 12,
|
||||||
|
RICON_FILETYPE_PLAY = 13,
|
||||||
|
RICON_FILETYPE_VIDEO = 14,
|
||||||
|
RICON_FILETYPE_INFO = 15,
|
||||||
|
RICON_FILE_COPY = 16,
|
||||||
|
RICON_FILE_CUT = 17,
|
||||||
|
RICON_FILE_PASTE = 18,
|
||||||
|
RICON_CURSOR_HAND = 19,
|
||||||
|
RICON_CURSOR_POINTER = 20,
|
||||||
|
RICON_CURSOR_CLASSIC = 21,
|
||||||
|
RICON_PENCIL = 22,
|
||||||
|
RICON_PENCIL_BIG = 23,
|
||||||
|
RICON_BRUSH_CLASSIC = 24,
|
||||||
|
RICON_BRUSH_PAINTER = 25,
|
||||||
|
RICON_WATER_DROP = 26,
|
||||||
|
RICON_COLOR_PICKER = 27,
|
||||||
|
RICON_RUBBER = 28,
|
||||||
|
RICON_COLOR_BUCKET = 29,
|
||||||
|
RICON_TEXT_T = 30,
|
||||||
|
RICON_TEXT_A = 31,
|
||||||
|
RICON_SCALE = 32,
|
||||||
|
RICON_RESIZE = 33,
|
||||||
|
RICON_FILTER_POINT = 34,
|
||||||
|
RICON_FILTER_BILINEAR = 35,
|
||||||
|
RICON_CROP = 36,
|
||||||
|
RICON_CROP_ALPHA = 37,
|
||||||
|
RICON_SQUARE_TOGGLE = 38,
|
||||||
|
RICON_SYMMETRY = 39,
|
||||||
|
RICON_SYMMETRY_HORIZONTAL = 40,
|
||||||
|
RICON_SYMMETRY_VERTICAL = 41,
|
||||||
|
RICON_LENS = 42,
|
||||||
|
RICON_LENS_BIG = 43,
|
||||||
|
RICON_EYE_ON = 44,
|
||||||
|
RICON_EYE_OFF = 45,
|
||||||
|
RICON_FILTER_TOP = 46,
|
||||||
|
RICON_FILTER = 47,
|
||||||
|
RICON_TARGET_POINT = 48,
|
||||||
|
RICON_TARGET_SMALL = 49,
|
||||||
|
RICON_TARGET_BIG = 50,
|
||||||
|
RICON_TARGET_MOVE = 51,
|
||||||
|
RICON_CURSOR_MOVE = 52,
|
||||||
|
RICON_CURSOR_SCALE = 53,
|
||||||
|
RICON_CURSOR_SCALE_RIGHT = 54,
|
||||||
|
RICON_CURSOR_SCALE_LEFT = 55,
|
||||||
|
RICON_UNDO = 56,
|
||||||
|
RICON_REDO = 57,
|
||||||
|
RICON_REREDO = 58,
|
||||||
|
RICON_MUTATE = 59,
|
||||||
|
RICON_ROTATE = 60,
|
||||||
|
RICON_REPEAT = 61,
|
||||||
|
RICON_SHUFFLE = 62,
|
||||||
|
RICON_EMPTYBOX = 63,
|
||||||
|
RICON_TARGET = 64,
|
||||||
|
RICON_TARGET_SMALL_FILL = 65,
|
||||||
|
RICON_TARGET_BIG_FILL = 66,
|
||||||
|
RICON_TARGET_MOVE_FILL = 67,
|
||||||
|
RICON_CURSOR_MOVE_FILL = 68,
|
||||||
|
RICON_CURSOR_SCALE_FILL = 69,
|
||||||
|
RICON_CURSOR_SCALE_RIGHT_FILL = 70,
|
||||||
|
RICON_CURSOR_SCALE_LEFT_FILL = 71,
|
||||||
|
RICON_UNDO_FILL = 72,
|
||||||
|
RICON_REDO_FILL = 73,
|
||||||
|
RICON_REREDO_FILL = 74,
|
||||||
|
RICON_MUTATE_FILL = 75,
|
||||||
|
RICON_ROTATE_FILL = 76,
|
||||||
|
RICON_REPEAT_FILL = 77,
|
||||||
|
RICON_SHUFFLE_FILL = 78,
|
||||||
|
RICON_EMPTYBOX_SMALL = 79,
|
||||||
|
RICON_BOX = 80,
|
||||||
|
RICON_BOX_TOP = 81,
|
||||||
|
RICON_BOX_TOP_RIGHT = 82,
|
||||||
|
RICON_BOX_RIGHT = 83,
|
||||||
|
RICON_BOX_BOTTOM_RIGHT = 84,
|
||||||
|
RICON_BOX_BOTTOM = 85,
|
||||||
|
RICON_BOX_BOTTOM_LEFT = 86,
|
||||||
|
RICON_BOX_LEFT = 87,
|
||||||
|
RICON_BOX_TOP_LEFT = 88,
|
||||||
|
RICON_BOX_CENTER = 89,
|
||||||
|
RICON_BOX_CIRCLE_MASK = 90,
|
||||||
|
RICON_POT = 91,
|
||||||
|
RICON_ALPHA_MULTIPLY = 92,
|
||||||
|
RICON_ALPHA_CLEAR = 93,
|
||||||
|
RICON_DITHERING = 94,
|
||||||
|
RICON_MIPMAPS = 95,
|
||||||
|
RICON_BOX_GRID = 96,
|
||||||
|
RICON_GRID = 97,
|
||||||
|
RICON_BOX_CORNERS_SMALL = 98,
|
||||||
|
RICON_BOX_CORNERS_BIG = 99,
|
||||||
|
RICON_FOUR_BOXES = 100,
|
||||||
|
RICON_GRID_FILL = 101,
|
||||||
|
RICON_BOX_MULTISIZE = 102,
|
||||||
|
RICON_ZOOM_SMALL = 103,
|
||||||
|
RICON_ZOOM_MEDIUM = 104,
|
||||||
|
RICON_ZOOM_BIG = 105,
|
||||||
|
RICON_ZOOM_ALL = 106,
|
||||||
|
RICON_ZOOM_CENTER = 107,
|
||||||
|
RICON_BOX_DOTS_SMALL = 108,
|
||||||
|
RICON_BOX_DOTS_BIG = 109,
|
||||||
|
RICON_BOX_CONCENTRIC = 110,
|
||||||
|
RICON_BOX_GRID_BIG = 111,
|
||||||
|
RICON_OK_TICK = 112,
|
||||||
|
RICON_CROSS = 113,
|
||||||
|
RICON_ARROW_LEFT = 114,
|
||||||
|
RICON_ARROW_RIGHT = 115,
|
||||||
|
RICON_ARROW_BOTTOM = 116,
|
||||||
|
RICON_ARROW_TOP = 117,
|
||||||
|
RICON_ARROW_LEFT_FILL = 118,
|
||||||
|
RICON_ARROW_RIGHT_FILL = 119,
|
||||||
|
RICON_ARROW_BOTTOM_FILL = 120,
|
||||||
|
RICON_ARROW_TOP_FILL = 121,
|
||||||
|
RICON_AUDIO = 122,
|
||||||
|
RICON_FX = 123,
|
||||||
|
RICON_WAVE = 124,
|
||||||
|
RICON_WAVE_SINUS = 125,
|
||||||
|
RICON_WAVE_SQUARE = 126,
|
||||||
|
RICON_WAVE_TRIANGULAR = 127,
|
||||||
|
RICON_CROSS_SMALL = 128,
|
||||||
|
RICON_PLAYER_PREVIOUS = 129,
|
||||||
|
RICON_PLAYER_PLAY_BACK = 130,
|
||||||
|
RICON_PLAYER_PLAY = 131,
|
||||||
|
RICON_PLAYER_PAUSE = 132,
|
||||||
|
RICON_PLAYER_STOP = 133,
|
||||||
|
RICON_PLAYER_NEXT = 134,
|
||||||
|
RICON_PLAYER_RECORD = 135,
|
||||||
|
RICON_MAGNET = 136,
|
||||||
|
RICON_LOCK_CLOSE = 137,
|
||||||
|
RICON_LOCK_OPEN = 138,
|
||||||
|
RICON_CLOCK = 139,
|
||||||
|
RICON_TOOLS = 140,
|
||||||
|
RICON_GEAR = 141,
|
||||||
|
RICON_GEAR_BIG = 142,
|
||||||
|
RICON_BIN = 143,
|
||||||
|
RICON_HAND_POINTER = 144,
|
||||||
|
RICON_LASER = 145,
|
||||||
|
RICON_COIN = 146,
|
||||||
|
RICON_EXPLOSION = 147,
|
||||||
|
RICON_1UP = 148,
|
||||||
|
RICON_PLAYER = 149,
|
||||||
|
RICON_PLAYER_JUMP = 150,
|
||||||
|
RICON_KEY = 151,
|
||||||
|
RICON_DEMON = 152,
|
||||||
|
RICON_TEXT_POPUP = 153,
|
||||||
|
RICON_GEAR_EX = 154,
|
||||||
|
RICON_CRACK = 155,
|
||||||
|
RICON_CRACK_POINTS = 156,
|
||||||
|
RICON_STAR = 157,
|
||||||
|
RICON_DOOR = 158,
|
||||||
|
RICON_EXIT = 159,
|
||||||
|
RICON_MODE_2D = 160,
|
||||||
|
RICON_MODE_3D = 161,
|
||||||
|
RICON_CUBE = 162,
|
||||||
|
RICON_CUBE_FACE_TOP = 163,
|
||||||
|
RICON_CUBE_FACE_LEFT = 164,
|
||||||
|
RICON_CUBE_FACE_FRONT = 165,
|
||||||
|
RICON_CUBE_FACE_BOTTOM = 166,
|
||||||
|
RICON_CUBE_FACE_RIGHT = 167,
|
||||||
|
RICON_CUBE_FACE_BACK = 168,
|
||||||
|
RICON_CAMERA = 169,
|
||||||
|
RICON_SPECIAL = 170,
|
||||||
|
RICON_LINK_NET = 171,
|
||||||
|
RICON_LINK_BOXES = 172,
|
||||||
|
RICON_LINK_MULTI = 173,
|
||||||
|
RICON_LINK = 174,
|
||||||
|
RICON_LINK_BROKE = 175,
|
||||||
|
RICON_TEXT_NOTES = 176,
|
||||||
|
RICON_NOTEBOOK = 177,
|
||||||
|
RICON_SUITCASE = 178,
|
||||||
|
RICON_SUITCASE_ZIP = 179,
|
||||||
|
RICON_MAILBOX = 180,
|
||||||
|
RICON_MONITOR = 181,
|
||||||
|
RICON_PRINTER = 182,
|
||||||
|
RICON_PHOTO_CAMERA = 183,
|
||||||
|
RICON_PHOTO_CAMERA_FLASH = 184,
|
||||||
|
RICON_HOUSE = 185,
|
||||||
|
RICON_HEART = 186,
|
||||||
|
RICON_CORNER = 187,
|
||||||
|
RICON_VERTICAL_BARS = 188,
|
||||||
|
RICON_VERTICAL_BARS_FILL = 189,
|
||||||
|
RICON_LIFE_BARS = 190,
|
||||||
|
RICON_INFO = 191,
|
||||||
|
RICON_CROSSLINE = 192,
|
||||||
|
RICON_HELP = 193,
|
||||||
|
RICON_FILETYPE_ALPHA = 194,
|
||||||
|
RICON_FILETYPE_HOME = 195,
|
||||||
|
RICON_LAYERS_VISIBLE = 196,
|
||||||
|
RICON_LAYERS = 197,
|
||||||
|
RICON_WINDOW = 198,
|
||||||
|
RICON_HIDPI = 199,
|
||||||
|
RICON_200 = 200,
|
||||||
|
RICON_201 = 201,
|
||||||
|
RICON_202 = 202,
|
||||||
|
RICON_203 = 203,
|
||||||
|
RICON_204 = 204,
|
||||||
|
RICON_205 = 205,
|
||||||
|
RICON_206 = 206,
|
||||||
|
RICON_207 = 207,
|
||||||
|
RICON_208 = 208,
|
||||||
|
RICON_209 = 209,
|
||||||
|
RICON_210 = 210,
|
||||||
|
RICON_211 = 211,
|
||||||
|
RICON_212 = 212,
|
||||||
|
RICON_213 = 213,
|
||||||
|
RICON_214 = 214,
|
||||||
|
RICON_215 = 215,
|
||||||
|
RICON_216 = 216,
|
||||||
|
RICON_217 = 217,
|
||||||
|
RICON_218 = 218,
|
||||||
|
RICON_219 = 219,
|
||||||
|
RICON_220 = 220,
|
||||||
|
RICON_221 = 221,
|
||||||
|
RICON_222 = 222,
|
||||||
|
RICON_223 = 223,
|
||||||
|
RICON_224 = 224,
|
||||||
|
RICON_225 = 225,
|
||||||
|
RICON_226 = 226,
|
||||||
|
RICON_227 = 227,
|
||||||
|
RICON_228 = 228,
|
||||||
|
RICON_229 = 229,
|
||||||
|
RICON_230 = 230,
|
||||||
|
RICON_231 = 231,
|
||||||
|
RICON_232 = 232,
|
||||||
|
RICON_233 = 233,
|
||||||
|
RICON_234 = 234,
|
||||||
|
RICON_235 = 235,
|
||||||
|
RICON_236 = 236,
|
||||||
|
RICON_237 = 237,
|
||||||
|
RICON_238 = 238,
|
||||||
|
RICON_239 = 239,
|
||||||
|
RICON_240 = 240,
|
||||||
|
RICON_241 = 241,
|
||||||
|
RICON_242 = 242,
|
||||||
|
RICON_243 = 243,
|
||||||
|
RICON_244 = 244,
|
||||||
|
RICON_245 = 245,
|
||||||
|
RICON_246 = 246,
|
||||||
|
RICON_247 = 247,
|
||||||
|
RICON_248 = 248,
|
||||||
|
RICON_249 = 249,
|
||||||
|
RICON_250 = 250,
|
||||||
|
RICON_251 = 251,
|
||||||
|
RICON_252 = 252,
|
||||||
|
RICON_253 = 253,
|
||||||
|
RICON_254 = 254,
|
||||||
|
RICON_255 = 255,
|
||||||
|
} guiIconName;
|
||||||
|
|
||||||
|
#endif // RICONS_H
|
||||||
|
|
||||||
|
#if defined(RICONS_IMPLEMENTATION)
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
// Icons data (allocated on memory data section by default)
|
||||||
|
// NOTE: A new icon set could be loaded over this array using GuiLoadIcons(),
|
||||||
|
// just note that loaded icons set must be same RICON_SIZE
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
static unsigned int guiIcons[RICON_MAX_ICONS*RICON_DATA_ELEMENTS] = {
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_NONE
|
||||||
|
0x3ff80000, 0x2f082008, 0x2042207e, 0x40027fc2, 0x40024002, 0x40024002, 0x40024002, 0x00007ffe, // RICON_FOLDER_FILE_OPEN
|
||||||
|
0x3ffe0000, 0x44226422, 0x400247e2, 0x5ffa4002, 0x57ea500a, 0x500a500a, 0x40025ffa, 0x00007ffe, // RICON_FILE_SAVE_CLASSIC
|
||||||
|
0x00000000, 0x0042007e, 0x40027fc2, 0x40024002, 0x41024002, 0x44424282, 0x793e4102, 0x00000100, // RICON_FOLDER_OPEN
|
||||||
|
0x00000000, 0x0042007e, 0x40027fc2, 0x40024002, 0x41024102, 0x44424102, 0x793e4282, 0x00000000, // RICON_FOLDER_SAVE
|
||||||
|
0x3ff00000, 0x201c2010, 0x20042004, 0x21042004, 0x24442284, 0x21042104, 0x20042104, 0x00003ffc, // RICON_FILE_OPEN
|
||||||
|
0x3ff00000, 0x201c2010, 0x20042004, 0x21042004, 0x21042104, 0x22842444, 0x20042104, 0x00003ffc, // RICON_FILE_SAVE
|
||||||
|
0x3ff00000, 0x201c2010, 0x00042004, 0x20041004, 0x20844784, 0x00841384, 0x20042784, 0x00003ffc, // RICON_FILE_EXPORT
|
||||||
|
0x3ff00000, 0x201c2010, 0x20042004, 0x20042004, 0x22042204, 0x22042f84, 0x20042204, 0x00003ffc, // RICON_FILE_NEW
|
||||||
|
0x3ff00000, 0x201c2010, 0x20042004, 0x20042004, 0x25042884, 0x25042204, 0x20042884, 0x00003ffc, // RICON_FILE_DELETE
|
||||||
|
0x3ff00000, 0x201c2010, 0x20042004, 0x20042ff4, 0x20042ff4, 0x20042ff4, 0x20042004, 0x00003ffc, // RICON_FILETYPE_TEXT
|
||||||
|
0x3ff00000, 0x201c2010, 0x27042004, 0x244424c4, 0x26442444, 0x20642664, 0x20042004, 0x00003ffc, // RICON_FILETYPE_AUDIO
|
||||||
|
0x3ff00000, 0x201c2010, 0x26042604, 0x20042004, 0x35442884, 0x2414222c, 0x20042004, 0x00003ffc, // RICON_FILETYPE_IMAGE
|
||||||
|
0x3ff00000, 0x201c2010, 0x20c42004, 0x22442144, 0x22442444, 0x20c42144, 0x20042004, 0x00003ffc, // RICON_FILETYPE_PLAY
|
||||||
|
0x3ff00000, 0x3ffc2ff0, 0x3f3c2ff4, 0x3dbc2eb4, 0x3dbc2bb4, 0x3f3c2eb4, 0x3ffc2ff4, 0x00002ff4, // RICON_FILETYPE_VIDEO
|
||||||
|
0x3ff00000, 0x201c2010, 0x21842184, 0x21842004, 0x21842184, 0x21842184, 0x20042184, 0x00003ffc, // RICON_FILETYPE_INFO
|
||||||
|
0x0ff00000, 0x381c0810, 0x28042804, 0x28042804, 0x28042804, 0x28042804, 0x20102ffc, 0x00003ff0, // RICON_FILE_COPY
|
||||||
|
0x00000000, 0x701c0000, 0x079c1e14, 0x55a000f0, 0x079c00f0, 0x701c1e14, 0x00000000, 0x00000000, // RICON_FILE_CUT
|
||||||
|
0x01c00000, 0x13e41bec, 0x3f841004, 0x204420c4, 0x20442044, 0x20442044, 0x207c2044, 0x00003fc0, // RICON_FILE_PASTE
|
||||||
|
0x00000000, 0x3aa00fe0, 0x2abc2aa0, 0x2aa42aa4, 0x20042aa4, 0x20042004, 0x3ffc2004, 0x00000000, // RICON_CURSOR_HAND
|
||||||
|
0x00000000, 0x003c000c, 0x030800c8, 0x30100c10, 0x10202020, 0x04400840, 0x01800280, 0x00000000, // RICON_CURSOR_POINTER
|
||||||
|
0x00000000, 0x00180000, 0x01f00078, 0x03e007f0, 0x07c003e0, 0x04000e40, 0x00000000, 0x00000000, // RICON_CURSOR_CLASSIC
|
||||||
|
0x00000000, 0x04000000, 0x11000a00, 0x04400a80, 0x01100220, 0x00580088, 0x00000038, 0x00000000, // RICON_PENCIL
|
||||||
|
0x04000000, 0x15000a00, 0x50402880, 0x14102820, 0x05040a08, 0x015c028c, 0x007c00bc, 0x00000000, // RICON_PENCIL_BIG
|
||||||
|
0x01c00000, 0x01400140, 0x01400140, 0x0ff80140, 0x0ff80808, 0x0aa80808, 0x0aa80aa8, 0x00000ff8, // RICON_BRUSH_CLASSIC
|
||||||
|
0x1ffc0000, 0x5ffc7ffe, 0x40004000, 0x00807f80, 0x01c001c0, 0x01c001c0, 0x01c001c0, 0x00000080, // RICON_BRUSH_PAINTER
|
||||||
|
0x00000000, 0x00800000, 0x01c00080, 0x03e001c0, 0x07f003e0, 0x036006f0, 0x000001c0, 0x00000000, // RICON_WATER_DROP
|
||||||
|
0x00000000, 0x3e003800, 0x1f803f80, 0x0c201e40, 0x02080c10, 0x00840104, 0x00380044, 0x00000000, // RICON_COLOR_PICKER
|
||||||
|
0x00000000, 0x07800300, 0x1fe00fc0, 0x3f883fd0, 0x0e021f04, 0x02040402, 0x00f00108, 0x00000000, // RICON_RUBBER
|
||||||
|
0x00c00000, 0x02800140, 0x08200440, 0x20081010, 0x2ffe3004, 0x03f807fc, 0x00e001f0, 0x00000040, // RICON_COLOR_BUCKET
|
||||||
|
0x00000000, 0x21843ffc, 0x01800180, 0x01800180, 0x01800180, 0x01800180, 0x03c00180, 0x00000000, // RICON_TEXT_T
|
||||||
|
0x00800000, 0x01400180, 0x06200340, 0x0c100620, 0x1ff80c10, 0x380c1808, 0x70067004, 0x0000f80f, // RICON_TEXT_A
|
||||||
|
0x78000000, 0x50004000, 0x00004800, 0x03c003c0, 0x03c003c0, 0x00100000, 0x0002000a, 0x0000000e, // RICON_SCALE
|
||||||
|
0x75560000, 0x5e004002, 0x54001002, 0x41001202, 0x408200fe, 0x40820082, 0x40820082, 0x00006afe, // RICON_RESIZE
|
||||||
|
0x00000000, 0x3f003f00, 0x3f003f00, 0x3f003f00, 0x00400080, 0x001c0020, 0x001c001c, 0x00000000, // RICON_FILTER_POINT
|
||||||
|
0x6d800000, 0x00004080, 0x40804080, 0x40800000, 0x00406d80, 0x001c0020, 0x001c001c, 0x00000000, // RICON_FILTER_BILINEAR
|
||||||
|
0x40080000, 0x1ffe2008, 0x14081008, 0x11081208, 0x10481088, 0x10081028, 0x10047ff8, 0x00001002, // RICON_CROP
|
||||||
|
0x00100000, 0x3ffc0010, 0x2ab03550, 0x22b02550, 0x20b02150, 0x20302050, 0x2000fff0, 0x00002000, // RICON_CROP_ALPHA
|
||||||
|
0x40000000, 0x1ff82000, 0x04082808, 0x01082208, 0x00482088, 0x00182028, 0x35542008, 0x00000002, // RICON_SQUARE_TOGGLE
|
||||||
|
0x00000000, 0x02800280, 0x06c006c0, 0x0ea00ee0, 0x1e901eb0, 0x3e883e98, 0x7efc7e8c, 0x00000000, // RICON_SIMMETRY
|
||||||
|
0x01000000, 0x05600100, 0x1d480d50, 0x7d423d44, 0x3d447d42, 0x0d501d48, 0x01000560, 0x00000100, // RICON_SIMMETRY_HORIZONTAL
|
||||||
|
0x01800000, 0x04200240, 0x10080810, 0x00001ff8, 0x00007ffe, 0x0ff01ff8, 0x03c007e0, 0x00000180, // RICON_SIMMETRY_VERTICAL
|
||||||
|
0x00000000, 0x010800f0, 0x02040204, 0x02040204, 0x07f00308, 0x1c000e00, 0x30003800, 0x00000000, // RICON_LENS
|
||||||
|
0x00000000, 0x061803f0, 0x08240c0c, 0x08040814, 0x0c0c0804, 0x23f01618, 0x18002400, 0x00000000, // RICON_LENS_BIG
|
||||||
|
0x00000000, 0x00000000, 0x1c7007c0, 0x638e3398, 0x1c703398, 0x000007c0, 0x00000000, 0x00000000, // RICON_EYE_ON
|
||||||
|
0x00000000, 0x10002000, 0x04700fc0, 0x610e3218, 0x1c703098, 0x001007a0, 0x00000008, 0x00000000, // RICON_EYE_OFF
|
||||||
|
0x00000000, 0x00007ffc, 0x40047ffc, 0x10102008, 0x04400820, 0x02800280, 0x02800280, 0x00000100, // RICON_FILTER_TOP
|
||||||
|
0x00000000, 0x40027ffe, 0x10082004, 0x04200810, 0x02400240, 0x02400240, 0x01400240, 0x000000c0, // RICON_FILTER
|
||||||
|
0x00800000, 0x00800080, 0x00000080, 0x3c9e0000, 0x00000000, 0x00800080, 0x00800080, 0x00000000, // RICON_TARGET_POINT
|
||||||
|
0x00800000, 0x00800080, 0x00800080, 0x3f7e01c0, 0x008001c0, 0x00800080, 0x00800080, 0x00000000, // RICON_TARGET_SMALL
|
||||||
|
0x00800000, 0x00800080, 0x03e00080, 0x3e3e0220, 0x03e00220, 0x00800080, 0x00800080, 0x00000000, // RICON_TARGET_BIG
|
||||||
|
0x01000000, 0x04400280, 0x01000100, 0x43842008, 0x43849ab2, 0x01002008, 0x04400100, 0x01000280, // RICON_TARGET_MOVE
|
||||||
|
0x01000000, 0x04400280, 0x01000100, 0x41042108, 0x41049ff2, 0x01002108, 0x04400100, 0x01000280, // RICON_CURSOR_MOVE
|
||||||
|
0x781e0000, 0x500a4002, 0x04204812, 0x00000240, 0x02400000, 0x48120420, 0x4002500a, 0x0000781e, // RICON_CURSOR_SCALE
|
||||||
|
0x00000000, 0x20003c00, 0x24002800, 0x01000200, 0x00400080, 0x00140024, 0x003c0004, 0x00000000, // RICON_CURSOR_SCALE_RIGHT
|
||||||
|
0x00000000, 0x0004003c, 0x00240014, 0x00800040, 0x02000100, 0x28002400, 0x3c002000, 0x00000000, // RICON_CURSOR_SCALE_LEFT
|
||||||
|
0x00000000, 0x00100020, 0x10101fc8, 0x10001020, 0x10001000, 0x10001000, 0x00001fc0, 0x00000000, // RICON_UNDO
|
||||||
|
0x00000000, 0x08000400, 0x080813f8, 0x00080408, 0x00080008, 0x00080008, 0x000003f8, 0x00000000, // RICON_REDO
|
||||||
|
0x00000000, 0x3ffc0000, 0x20042004, 0x20002000, 0x20402000, 0x3f902020, 0x00400020, 0x00000000, // RICON_REREDO
|
||||||
|
0x00000000, 0x3ffc0000, 0x20042004, 0x27fc2004, 0x20202000, 0x3fc82010, 0x00200010, 0x00000000, // RICON_MUTATE
|
||||||
|
0x00000000, 0x0ff00000, 0x10081818, 0x11801008, 0x10001180, 0x18101020, 0x00100fc8, 0x00000020, // RICON_ROTATE
|
||||||
|
0x00000000, 0x04000200, 0x240429fc, 0x20042204, 0x20442004, 0x3f942024, 0x00400020, 0x00000000, // RICON_REPEAT
|
||||||
|
0x00000000, 0x20001000, 0x22104c0e, 0x00801120, 0x11200040, 0x4c0e2210, 0x10002000, 0x00000000, // RICON_SHUFFLE
|
||||||
|
0x7ffe0000, 0x50024002, 0x44024802, 0x41024202, 0x40424082, 0x40124022, 0x4002400a, 0x00007ffe, // RICON_EMPTYBOX
|
||||||
|
0x00800000, 0x03e00080, 0x08080490, 0x3c9e0808, 0x08080808, 0x03e00490, 0x00800080, 0x00000000, // RICON_TARGET
|
||||||
|
0x00800000, 0x00800080, 0x00800080, 0x3ffe01c0, 0x008001c0, 0x00800080, 0x00800080, 0x00000000, // RICON_TARGET_SMALL_FILL
|
||||||
|
0x00800000, 0x00800080, 0x03e00080, 0x3ffe03e0, 0x03e003e0, 0x00800080, 0x00800080, 0x00000000, // RICON_TARGET_BIG_FILL
|
||||||
|
0x01000000, 0x07c00380, 0x01000100, 0x638c2008, 0x638cfbbe, 0x01002008, 0x07c00100, 0x01000380, // RICON_TARGET_MOVE_FILL
|
||||||
|
0x01000000, 0x07c00380, 0x01000100, 0x610c2108, 0x610cfffe, 0x01002108, 0x07c00100, 0x01000380, // RICON_CURSOR_MOVE_FILL
|
||||||
|
0x781e0000, 0x6006700e, 0x04204812, 0x00000240, 0x02400000, 0x48120420, 0x700e6006, 0x0000781e, // RICON_CURSOR_SCALE_FILL
|
||||||
|
0x00000000, 0x38003c00, 0x24003000, 0x01000200, 0x00400080, 0x000c0024, 0x003c001c, 0x00000000, // RICON_CURSOR_SCALE_RIGHT
|
||||||
|
0x00000000, 0x001c003c, 0x0024000c, 0x00800040, 0x02000100, 0x30002400, 0x3c003800, 0x00000000, // RICON_CURSOR_SCALE_LEFT
|
||||||
|
0x00000000, 0x00300020, 0x10301ff8, 0x10001020, 0x10001000, 0x10001000, 0x00001fc0, 0x00000000, // RICON_UNDO_FILL
|
||||||
|
0x00000000, 0x0c000400, 0x0c081ff8, 0x00080408, 0x00080008, 0x00080008, 0x000003f8, 0x00000000, // RICON_REDO_FILL
|
||||||
|
0x00000000, 0x3ffc0000, 0x20042004, 0x20002000, 0x20402000, 0x3ff02060, 0x00400060, 0x00000000, // RICON_REREDO_FILL
|
||||||
|
0x00000000, 0x3ffc0000, 0x20042004, 0x27fc2004, 0x20202000, 0x3ff82030, 0x00200030, 0x00000000, // RICON_MUTATE_FILL
|
||||||
|
0x00000000, 0x0ff00000, 0x10081818, 0x11801008, 0x10001180, 0x18301020, 0x00300ff8, 0x00000020, // RICON_ROTATE_FILL
|
||||||
|
0x00000000, 0x06000200, 0x26042ffc, 0x20042204, 0x20442004, 0x3ff42064, 0x00400060, 0x00000000, // RICON_REPEAT_FILL
|
||||||
|
0x00000000, 0x30001000, 0x32107c0e, 0x00801120, 0x11200040, 0x7c0e3210, 0x10003000, 0x00000000, // RICON_SHUFFLE_FILL
|
||||||
|
0x00000000, 0x30043ffc, 0x24042804, 0x21042204, 0x20442084, 0x20142024, 0x3ffc200c, 0x00000000, // RICON_EMPTYBOX_SMALL
|
||||||
|
0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // RICON_BOX
|
||||||
|
0x00000000, 0x23c43ffc, 0x23c423c4, 0x200423c4, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // RICON_BOX_TOP
|
||||||
|
0x00000000, 0x3e043ffc, 0x3e043e04, 0x20043e04, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // RICON_BOX_TOP_RIGHT
|
||||||
|
0x00000000, 0x20043ffc, 0x20042004, 0x3e043e04, 0x3e043e04, 0x20042004, 0x3ffc2004, 0x00000000, // RICON_BOX_RIGHT
|
||||||
|
0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x3e042004, 0x3e043e04, 0x3ffc3e04, 0x00000000, // RICON_BOX_BOTTOM_RIGHT
|
||||||
|
0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x23c42004, 0x23c423c4, 0x3ffc23c4, 0x00000000, // RICON_BOX_BOTTOM
|
||||||
|
0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x207c2004, 0x207c207c, 0x3ffc207c, 0x00000000, // RICON_BOX_BOTTOM_LEFT
|
||||||
|
0x00000000, 0x20043ffc, 0x20042004, 0x207c207c, 0x207c207c, 0x20042004, 0x3ffc2004, 0x00000000, // RICON_BOX_LEFT
|
||||||
|
0x00000000, 0x207c3ffc, 0x207c207c, 0x2004207c, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // RICON_BOX_TOP_LEFT
|
||||||
|
0x00000000, 0x20043ffc, 0x20042004, 0x23c423c4, 0x23c423c4, 0x20042004, 0x3ffc2004, 0x00000000, // RICON_BOX_CIRCLE_MASK
|
||||||
|
0x7ffe0000, 0x40024002, 0x47e24182, 0x4ff247e2, 0x47e24ff2, 0x418247e2, 0x40024002, 0x00007ffe, // RICON_BOX_CENTER
|
||||||
|
0x7fff0000, 0x40014001, 0x40014001, 0x49555ddd, 0x4945495d, 0x400149c5, 0x40014001, 0x00007fff, // RICON_POT
|
||||||
|
0x7ffe0000, 0x53327332, 0x44ce4cce, 0x41324332, 0x404e40ce, 0x48125432, 0x4006540e, 0x00007ffe, // RICON_ALPHA_MULTIPLY
|
||||||
|
0x7ffe0000, 0x53327332, 0x44ce4cce, 0x41324332, 0x5c4e40ce, 0x44124432, 0x40065c0e, 0x00007ffe, // RICON_ALPHA_CLEAR
|
||||||
|
0x7ffe0000, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x00007ffe, // RICON_DITHERING
|
||||||
|
0x07fe0000, 0x1ffa0002, 0x7fea000a, 0x402a402a, 0x5b2a512a, 0x5128552a, 0x40205128, 0x00007fe0, // RICON_MIPMAPS
|
||||||
|
0x00000000, 0x1ff80000, 0x12481248, 0x12481ff8, 0x1ff81248, 0x12481248, 0x00001ff8, 0x00000000, // RICON_BOX_GRID
|
||||||
|
0x12480000, 0x7ffe1248, 0x12481248, 0x12487ffe, 0x7ffe1248, 0x12481248, 0x12487ffe, 0x00001248, // RICON_GRID
|
||||||
|
0x00000000, 0x1c380000, 0x1c3817e8, 0x08100810, 0x08100810, 0x17e81c38, 0x00001c38, 0x00000000, // RICON_BOX_CORNERS_SMALL
|
||||||
|
0x700e0000, 0x700e5ffa, 0x20042004, 0x20042004, 0x20042004, 0x20042004, 0x5ffa700e, 0x0000700e, // RICON_BOX_CORNERS_BIG
|
||||||
|
0x3f7e0000, 0x21422142, 0x21422142, 0x00003f7e, 0x21423f7e, 0x21422142, 0x3f7e2142, 0x00000000, // RICON_FOUR_BOXES
|
||||||
|
0x00000000, 0x3bb80000, 0x3bb83bb8, 0x3bb80000, 0x3bb83bb8, 0x3bb80000, 0x3bb83bb8, 0x00000000, // RICON_GRID_FILL
|
||||||
|
0x7ffe0000, 0x7ffe7ffe, 0x77fe7000, 0x77fe77fe, 0x777e7700, 0x777e777e, 0x777e777e, 0x0000777e, // RICON_BOX_MULTISIZE
|
||||||
|
0x781e0000, 0x40024002, 0x00004002, 0x01800000, 0x00000180, 0x40020000, 0x40024002, 0x0000781e, // RICON_ZOOM_SMALL
|
||||||
|
0x781e0000, 0x40024002, 0x00004002, 0x03c003c0, 0x03c003c0, 0x40020000, 0x40024002, 0x0000781e, // RICON_ZOOM_MEDIUM
|
||||||
|
0x781e0000, 0x40024002, 0x07e04002, 0x07e007e0, 0x07e007e0, 0x400207e0, 0x40024002, 0x0000781e, // RICON_ZOOM_BIG
|
||||||
|
0x781e0000, 0x5ffa4002, 0x1ff85ffa, 0x1ff81ff8, 0x1ff81ff8, 0x5ffa1ff8, 0x40025ffa, 0x0000781e, // RICON_ZOOM_ALL
|
||||||
|
0x00000000, 0x2004381c, 0x00002004, 0x00000000, 0x00000000, 0x20040000, 0x381c2004, 0x00000000, // RICON_ZOOM_CENTER
|
||||||
|
0x00000000, 0x1db80000, 0x10081008, 0x10080000, 0x00001008, 0x10081008, 0x00001db8, 0x00000000, // RICON_BOX_DOTS_SMALL
|
||||||
|
0x35560000, 0x00002002, 0x00002002, 0x00002002, 0x00002002, 0x00002002, 0x35562002, 0x00000000, // RICON_BOX_DOTS_BIG
|
||||||
|
0x7ffe0000, 0x40024002, 0x48124ff2, 0x49924812, 0x48124992, 0x4ff24812, 0x40024002, 0x00007ffe, // RICON_BOX_CONCENTRIC
|
||||||
|
0x00000000, 0x10841ffc, 0x10841084, 0x1ffc1084, 0x10841084, 0x10841084, 0x00001ffc, 0x00000000, // RICON_BOX_GRID_BIG
|
||||||
|
0x00000000, 0x00000000, 0x10000000, 0x04000800, 0x01040200, 0x00500088, 0x00000020, 0x00000000, // RICON_OK_TICK
|
||||||
|
0x00000000, 0x10080000, 0x04200810, 0x01800240, 0x02400180, 0x08100420, 0x00001008, 0x00000000, // RICON_CROSS
|
||||||
|
0x00000000, 0x02000000, 0x00800100, 0x00200040, 0x00200010, 0x00800040, 0x02000100, 0x00000000, // RICON_ARROW_LEFT
|
||||||
|
0x00000000, 0x00400000, 0x01000080, 0x04000200, 0x04000800, 0x01000200, 0x00400080, 0x00000000, // RICON_ARROW_RIGHT
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x08081004, 0x02200410, 0x00800140, 0x00000000, 0x00000000, // RICON_ARROW_BOTTOM
|
||||||
|
0x00000000, 0x00000000, 0x01400080, 0x04100220, 0x10040808, 0x00000000, 0x00000000, 0x00000000, // RICON_ARROW_TOP
|
||||||
|
0x00000000, 0x02000000, 0x03800300, 0x03e003c0, 0x03e003f0, 0x038003c0, 0x02000300, 0x00000000, // RICON_ARROW_LEFT_FILL
|
||||||
|
0x00000000, 0x00400000, 0x01c000c0, 0x07c003c0, 0x07c00fc0, 0x01c003c0, 0x004000c0, 0x00000000, // RICON_ARROW_RIGHT_FILL
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x0ff81ffc, 0x03e007f0, 0x008001c0, 0x00000000, 0x00000000, // RICON_ARROW_BOTTOM_FILL
|
||||||
|
0x00000000, 0x00000000, 0x01c00080, 0x07f003e0, 0x1ffc0ff8, 0x00000000, 0x00000000, 0x00000000, // RICON_ARROW_TOP_FILL
|
||||||
|
0x00000000, 0x18a008c0, 0x32881290, 0x24822686, 0x26862482, 0x12903288, 0x08c018a0, 0x00000000, // RICON_AUDIO
|
||||||
|
0x00000000, 0x04800780, 0x004000c0, 0x662000f0, 0x08103c30, 0x130a0e18, 0x0000318e, 0x00000000, // RICON_FX
|
||||||
|
0x00000000, 0x00800000, 0x08880888, 0x2aaa0a8a, 0x0a8a2aaa, 0x08880888, 0x00000080, 0x00000000, // RICON_WAVE
|
||||||
|
0x00000000, 0x00600000, 0x01080090, 0x02040108, 0x42044204, 0x24022402, 0x00001800, 0x00000000, // RICON_WAVE_SINUS
|
||||||
|
0x00000000, 0x07f80000, 0x04080408, 0x04080408, 0x04080408, 0x7c0e0408, 0x00000000, 0x00000000, // RICON_WAVE_SQUARE
|
||||||
|
0x00000000, 0x00000000, 0x00a00040, 0x22084110, 0x08021404, 0x00000000, 0x00000000, 0x00000000, // RICON_WAVE_TRIANGULAR
|
||||||
|
0x00000000, 0x00000000, 0x04200000, 0x01800240, 0x02400180, 0x00000420, 0x00000000, 0x00000000, // RICON_CROSS_SMALL
|
||||||
|
0x00000000, 0x18380000, 0x12281428, 0x10a81128, 0x112810a8, 0x14281228, 0x00001838, 0x00000000, // RICON_PLAYER_PREVIOUS
|
||||||
|
0x00000000, 0x18000000, 0x11801600, 0x10181060, 0x10601018, 0x16001180, 0x00001800, 0x00000000, // RICON_PLAYER_PLAY_BACK
|
||||||
|
0x00000000, 0x00180000, 0x01880068, 0x18080608, 0x06081808, 0x00680188, 0x00000018, 0x00000000, // RICON_PLAYER_PLAY
|
||||||
|
0x00000000, 0x1e780000, 0x12481248, 0x12481248, 0x12481248, 0x12481248, 0x00001e78, 0x00000000, // RICON_PLAYER_PAUSE
|
||||||
|
0x00000000, 0x1ff80000, 0x10081008, 0x10081008, 0x10081008, 0x10081008, 0x00001ff8, 0x00000000, // RICON_PLAYER_STOP
|
||||||
|
0x00000000, 0x1c180000, 0x14481428, 0x15081488, 0x14881508, 0x14281448, 0x00001c18, 0x00000000, // RICON_PLAYER_NEXT
|
||||||
|
0x00000000, 0x03c00000, 0x08100420, 0x10081008, 0x10081008, 0x04200810, 0x000003c0, 0x00000000, // RICON_PLAYER_RECORD
|
||||||
|
0x00000000, 0x0c3007e0, 0x13c81818, 0x14281668, 0x14281428, 0x1c381c38, 0x08102244, 0x00000000, // RICON_MAGNET
|
||||||
|
0x07c00000, 0x08200820, 0x3ff80820, 0x23882008, 0x21082388, 0x20082108, 0x1ff02008, 0x00000000, // RICON_LOCK_CLOSE
|
||||||
|
0x07c00000, 0x08000800, 0x3ff80800, 0x23882008, 0x21082388, 0x20082108, 0x1ff02008, 0x00000000, // RICON_LOCK_OPEN
|
||||||
|
0x01c00000, 0x0c180770, 0x3086188c, 0x60832082, 0x60034781, 0x30062002, 0x0c18180c, 0x01c00770, // RICON_CLOCK
|
||||||
|
0x0a200000, 0x1b201b20, 0x04200e20, 0x04200420, 0x04700420, 0x0e700e70, 0x0e700e70, 0x04200e70, // RICON_TOOLS
|
||||||
|
0x01800000, 0x3bdc318c, 0x0ff01ff8, 0x7c3e1e78, 0x1e787c3e, 0x1ff80ff0, 0x318c3bdc, 0x00000180, // RICON_GEAR
|
||||||
|
0x01800000, 0x3ffc318c, 0x1c381ff8, 0x781e1818, 0x1818781e, 0x1ff81c38, 0x318c3ffc, 0x00000180, // RICON_GEAR_BIG
|
||||||
|
0x00000000, 0x08080ff8, 0x08081ffc, 0x0aa80aa8, 0x0aa80aa8, 0x0aa80aa8, 0x08080aa8, 0x00000ff8, // RICON_BIN
|
||||||
|
0x00000000, 0x00000000, 0x20043ffc, 0x08043f84, 0x04040f84, 0x04040784, 0x000007fc, 0x00000000, // RICON_HAND_POINTER
|
||||||
|
0x00000000, 0x24400400, 0x00001480, 0x6efe0e00, 0x00000e00, 0x24401480, 0x00000400, 0x00000000, // RICON_LASER
|
||||||
|
0x00000000, 0x03c00000, 0x08300460, 0x11181118, 0x11181118, 0x04600830, 0x000003c0, 0x00000000, // RICON_COIN
|
||||||
|
0x00000000, 0x10880080, 0x06c00810, 0x366c07e0, 0x07e00240, 0x00001768, 0x04200240, 0x00000000, // RICON_EXPLOSION
|
||||||
|
0x00000000, 0x3d280000, 0x2528252c, 0x3d282528, 0x05280528, 0x05e80528, 0x00000000, 0x00000000, // RICON_1UP
|
||||||
|
0x01800000, 0x03c003c0, 0x018003c0, 0x0ff007e0, 0x0bd00bd0, 0x0a500bd0, 0x02400240, 0x02400240, // RICON_PLAYER
|
||||||
|
0x01800000, 0x03c003c0, 0x118013c0, 0x03c81ff8, 0x07c003c8, 0x04400440, 0x0c080478, 0x00000000, // RICON_PLAYER_JUMP
|
||||||
|
0x3ff80000, 0x30183ff8, 0x30183018, 0x3ff83ff8, 0x03000300, 0x03c003c0, 0x03e00300, 0x000003e0, // RICON_KEY
|
||||||
|
0x3ff80000, 0x3ff83ff8, 0x33983ff8, 0x3ff83398, 0x3ff83ff8, 0x00000540, 0x0fe00aa0, 0x00000fe0, // RICON_DEMON
|
||||||
|
0x00000000, 0x0ff00000, 0x20041008, 0x25442004, 0x10082004, 0x06000bf0, 0x00000300, 0x00000000, // RICON_TEXT_POPUP
|
||||||
|
0x00000000, 0x11440000, 0x07f00be8, 0x1c1c0e38, 0x1c1c0c18, 0x07f00e38, 0x11440be8, 0x00000000, // RICON_GEAR_EX
|
||||||
|
0x00000000, 0x20080000, 0x0c601010, 0x07c00fe0, 0x07c007c0, 0x0c600fe0, 0x20081010, 0x00000000, // RICON_CRACK
|
||||||
|
0x00000000, 0x20080000, 0x0c601010, 0x04400fe0, 0x04405554, 0x0c600fe0, 0x20081010, 0x00000000, // RICON_CRACK_POINTS
|
||||||
|
0x00000000, 0x00800080, 0x01c001c0, 0x1ffc3ffe, 0x03e007f0, 0x07f003e0, 0x0c180770, 0x00000808, // RICON_STAR
|
||||||
|
0x0ff00000, 0x08180810, 0x08100818, 0x0a100810, 0x08180810, 0x08100818, 0x08100810, 0x00001ff8, // RICON_DOOR
|
||||||
|
0x0ff00000, 0x08100810, 0x08100810, 0x10100010, 0x4f902010, 0x10102010, 0x08100010, 0x00000ff0, // RICON_EXIT
|
||||||
|
0x00040000, 0x001f000e, 0x0ef40004, 0x12f41284, 0x0ef41214, 0x10040004, 0x7ffc3004, 0x10003000, // RICON_MODE_2D
|
||||||
|
0x78040000, 0x501f600e, 0x0ef44004, 0x12f41284, 0x0ef41284, 0x10140004, 0x7ffc300c, 0x10003000, // RICON_MODE_3D
|
||||||
|
0x7fe00000, 0x50286030, 0x47fe4804, 0x44224402, 0x44224422, 0x241275e2, 0x0c06140a, 0x000007fe, // RICON_CUBE
|
||||||
|
0x7fe00000, 0x5ff87ff0, 0x47fe4ffc, 0x44224402, 0x44224422, 0x241275e2, 0x0c06140a, 0x000007fe, // RICON_CUBE_FACE_TOP
|
||||||
|
0x7fe00000, 0x50386030, 0x47fe483c, 0x443e443e, 0x443e443e, 0x241e75fe, 0x0c06140e, 0x000007fe, // RICON_CUBE_FACE_LEFT
|
||||||
|
0x7fe00000, 0x50286030, 0x47fe4804, 0x47fe47fe, 0x47fe47fe, 0x27fe77fe, 0x0ffe17fe, 0x000007fe, // RICON_CUBE_FACE_FRONT
|
||||||
|
0x7fe00000, 0x50286030, 0x47fe4804, 0x44224402, 0x44224422, 0x3ff27fe2, 0x0ffe1ffa, 0x000007fe, // RICON_CUBE_FACE_BOTTOM
|
||||||
|
0x7fe00000, 0x70286030, 0x7ffe7804, 0x7c227c02, 0x7c227c22, 0x3c127de2, 0x0c061c0a, 0x000007fe, // RICON_CUBE_FACE_RIGHT
|
||||||
|
0x7fe00000, 0x7fe87ff0, 0x7ffe7fe4, 0x7fe27fe2, 0x7fe27fe2, 0x24127fe2, 0x0c06140a, 0x000007fe, // RICON_CUBE_FACE_BACK
|
||||||
|
0x00000000, 0x2a0233fe, 0x22022602, 0x22022202, 0x2a022602, 0x00a033fe, 0x02080110, 0x00000000, // RICON_CAMERA
|
||||||
|
0x00000000, 0x200c3ffc, 0x000c000c, 0x3ffc000c, 0x30003000, 0x30003000, 0x3ffc3004, 0x00000000, // RICON_SPECIAL
|
||||||
|
0x00000000, 0x0022003e, 0x012201e2, 0x0100013e, 0x01000100, 0x79000100, 0x4f004900, 0x00007800, // RICON_LINK_NET
|
||||||
|
0x00000000, 0x44007c00, 0x45004600, 0x00627cbe, 0x00620022, 0x45007cbe, 0x44004600, 0x00007c00, // RICON_LINK_BOXES
|
||||||
|
0x00000000, 0x0044007c, 0x0010007c, 0x3f100010, 0x3f1021f0, 0x3f100010, 0x3f0021f0, 0x00000000, // RICON_LINK_MULTI
|
||||||
|
0x00000000, 0x0044007c, 0x00440044, 0x0010007c, 0x00100010, 0x44107c10, 0x440047f0, 0x00007c00, // RICON_LINK
|
||||||
|
0x00000000, 0x0044007c, 0x00440044, 0x0000007c, 0x00000010, 0x44007c10, 0x44004550, 0x00007c00, // RICON_LINK_BROKE
|
||||||
|
0x02a00000, 0x22a43ffc, 0x20042004, 0x20042ff4, 0x20042ff4, 0x20042ff4, 0x20042004, 0x00003ffc, // RICON_TEXT_NOTES
|
||||||
|
0x3ffc0000, 0x20042004, 0x245e27c4, 0x27c42444, 0x2004201e, 0x201e2004, 0x20042004, 0x00003ffc, // RICON_NOTEBOOK
|
||||||
|
0x00000000, 0x07e00000, 0x04200420, 0x24243ffc, 0x24242424, 0x24242424, 0x3ffc2424, 0x00000000, // RICON_SUITCASE
|
||||||
|
0x00000000, 0x0fe00000, 0x08200820, 0x40047ffc, 0x7ffc5554, 0x40045554, 0x7ffc4004, 0x00000000, // RICON_SUITCASE_ZIP
|
||||||
|
0x00000000, 0x20043ffc, 0x3ffc2004, 0x13c81008, 0x100813c8, 0x10081008, 0x1ff81008, 0x00000000, // RICON_MAILBOX
|
||||||
|
0x00000000, 0x40027ffe, 0x5ffa5ffa, 0x5ffa5ffa, 0x40025ffa, 0x03c07ffe, 0x1ff81ff8, 0x00000000, // RICON_MONITOR
|
||||||
|
0x0ff00000, 0x6bfe7ffe, 0x7ffe7ffe, 0x68167ffe, 0x08106816, 0x08100810, 0x0ff00810, 0x00000000, // RICON_PRINTER
|
||||||
|
0x3ff80000, 0xfffe2008, 0x870a8002, 0x904a888a, 0x904a904a, 0x870a888a, 0xfffe8002, 0x00000000, // RICON_PHOTO_CAMERA
|
||||||
|
0x0fc00000, 0xfcfe0cd8, 0x8002fffe, 0x84428382, 0x84428442, 0x80028382, 0xfffe8002, 0x00000000, // RICON_PHOTO_CAMERA_FLASH
|
||||||
|
0x00000000, 0x02400180, 0x08100420, 0x20041008, 0x23c42004, 0x22442244, 0x3ffc2244, 0x00000000, // RICON_HOUSE
|
||||||
|
0x00000000, 0x1c700000, 0x3ff83ef8, 0x3ff83ff8, 0x0fe01ff0, 0x038007c0, 0x00000100, 0x00000000, // RICON_HEART
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0xe000c000, // RICON_CORNER
|
||||||
|
0x00000000, 0x14001c00, 0x15c01400, 0x15401540, 0x155c1540, 0x15541554, 0x1ddc1554, 0x00000000, // RICON_VERTICAL_BARS
|
||||||
|
0x00000000, 0x03000300, 0x1b001b00, 0x1b601b60, 0x1b6c1b60, 0x1b6c1b6c, 0x1b6c1b6c, 0x00000000, // RICON_VERTICAL_BARS_FILL
|
||||||
|
0x00000000, 0x00000000, 0x403e7ffe, 0x7ffe403e, 0x7ffe0000, 0x43fe43fe, 0x00007ffe, 0x00000000, // RICON_LIFE_BARS
|
||||||
|
0x7ffc0000, 0x43844004, 0x43844284, 0x43844004, 0x42844284, 0x42844284, 0x40044384, 0x00007ffc, // RICON_INFO
|
||||||
|
0x40008000, 0x10002000, 0x04000800, 0x01000200, 0x00400080, 0x00100020, 0x00040008, 0x00010002, // RICON_CROSSLINE
|
||||||
|
0x00000000, 0x1ff01ff0, 0x18301830, 0x1f001830, 0x03001f00, 0x00000300, 0x03000300, 0x00000000, // RICON_HELP
|
||||||
|
0x3ff00000, 0x2abc3550, 0x2aac3554, 0x2aac3554, 0x2aac3554, 0x2aac3554, 0x2aac3554, 0x00003ffc, // RICON_FILETYPE_ALPHA
|
||||||
|
0x3ff00000, 0x201c2010, 0x22442184, 0x28142424, 0x29942814, 0x2ff42994, 0x20042004, 0x00003ffc, // RICON_FILETYPE_HOME
|
||||||
|
0x07fe0000, 0x04020402, 0x7fe20402, 0x44224422, 0x44224422, 0x402047fe, 0x40204020, 0x00007fe0, // RICON_LAYERS_VISIBLE
|
||||||
|
0x07fe0000, 0x04020402, 0x7c020402, 0x44024402, 0x44024402, 0x402047fe, 0x40204020, 0x00007fe0, // RICON_LAYERS
|
||||||
|
0x00000000, 0x40027ffe, 0x7ffe4002, 0x40024002, 0x40024002, 0x40024002, 0x7ffe4002, 0x00000000, // RICON_WINDOW
|
||||||
|
0x09100000, 0x09f00910, 0x09100910, 0x00000910, 0x24a2779e, 0x27a224a2, 0x709e20a2, 0x00000000, // RICON_HIDPI
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_200
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_201
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_202
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_203
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_204
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_205
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_206
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_207
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_208
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_209
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_210
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_211
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_212
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_213
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_214
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_215
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_216
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_217
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_218
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_219
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_220
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_221
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_222
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_223
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_224
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_225
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_226
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_227
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_228
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_229
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_230
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_231
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_232
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_233
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_234
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_235
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_236
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_237
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_238
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_239
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_240
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_241
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_242
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_243
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_244
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_245
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_246
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_247
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_248
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_249
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_250
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_251
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_252
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_253
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_254
|
||||||
|
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_255
|
||||||
|
};
|
||||||
|
#endif // RICONS_IMPLEMENTATION
|
||||||
|
|
@ -57,11 +57,11 @@ int main(void)
|
||||||
|
|
||||||
// Draw GUI controls
|
// Draw GUI controls
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
startAngle = GuiSliderBar((Rectangle){ 600, 40, 120, 20}, "StartAngle", startAngle, 0, 720, true );
|
startAngle = GuiSliderBar((Rectangle){ 600, 40, 120, 20}, "StartAngle", NULL, startAngle, 0, 720);
|
||||||
endAngle = GuiSliderBar((Rectangle){ 600, 70, 120, 20}, "EndAngle", endAngle, 0, 720, true);
|
endAngle = GuiSliderBar((Rectangle){ 600, 70, 120, 20}, "EndAngle", NULL, endAngle, 0, 720);
|
||||||
|
|
||||||
outerRadius = GuiSliderBar((Rectangle){ 600, 140, 120, 20}, "Radius", outerRadius, 0, 200, true);
|
outerRadius = GuiSliderBar((Rectangle){ 600, 140, 120, 20}, "Radius", NULL, outerRadius, 0, 200);
|
||||||
segments = GuiSliderBar((Rectangle){ 600, 170, 120, 20}, "Segments", segments, 0, 100, true);
|
segments = GuiSliderBar((Rectangle){ 600, 170, 120, 20}, "Segments", NULL, segments, 0, 100);
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
DrawText(TextFormat("MODE: %s", (segments >= 4)? "MANUAL" : "AUTO"), 600, 200, 10, (segments >= 4)? MAROON : DARKGRAY);
|
DrawText(TextFormat("MODE: %s", (segments >= 4)? "MANUAL" : "AUTO"), 600, 200, 10, (segments >= 4)? MAROON : DARKGRAY);
|
||||||
|
|
|
||||||
|
|
@ -61,11 +61,11 @@ int main(void)
|
||||||
|
|
||||||
// Draw GUI controls
|
// Draw GUI controls
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
width = GuiSliderBar((Rectangle){ 640, 40, 105, 20 }, "Width", width, 0, GetScreenWidth() - 300, true );
|
width = GuiSliderBar((Rectangle){ 640, 40, 105, 20 }, "Width", NULL, width, 0, GetScreenWidth() - 300);
|
||||||
height = GuiSliderBar((Rectangle){ 640, 70, 105, 20 }, "Height", height, 0, GetScreenHeight() - 50, true);
|
height = GuiSliderBar((Rectangle){ 640, 70, 105, 20 }, "Height", NULL, height, 0, GetScreenHeight() - 50);
|
||||||
roundness = GuiSliderBar((Rectangle){ 640, 140, 105, 20 }, "Roundness", roundness, 0.0f, 1.0f, true);
|
roundness = GuiSliderBar((Rectangle){ 640, 140, 105, 20 }, "Roundness", NULL, roundness, 0.0f, 1.0f);
|
||||||
lineThick = GuiSliderBar((Rectangle){ 640, 170, 105, 20 }, "Thickness", lineThick, 0, 20, true);
|
lineThick = GuiSliderBar((Rectangle){ 640, 170, 105, 20 }, "Thickness", NULL, lineThick, 0, 20);
|
||||||
segments = GuiSliderBar((Rectangle){ 640, 240, 105, 20}, "Segments", segments, 0, 60, true);
|
segments = GuiSliderBar((Rectangle){ 640, 240, 105, 20}, "Segments", NULL, segments, 0, 60);
|
||||||
|
|
||||||
drawRoundedRect = GuiCheckBox((Rectangle){ 640, 320, 20, 20 }, "DrawRoundedRect", drawRoundedRect);
|
drawRoundedRect = GuiCheckBox((Rectangle){ 640, 320, 20, 20 }, "DrawRoundedRect", drawRoundedRect);
|
||||||
drawRoundedLines = GuiCheckBox((Rectangle){ 640, 350, 20, 20 }, "DrawRoundedLines", drawRoundedLines);
|
drawRoundedLines = GuiCheckBox((Rectangle){ 640, 350, 20, 20 }, "DrawRoundedLines", drawRoundedLines);
|
||||||
|
|
|
||||||
|
|
@ -64,13 +64,13 @@ int main(void)
|
||||||
|
|
||||||
// Draw GUI controls
|
// Draw GUI controls
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
startAngle = GuiSliderBar((Rectangle){ 600, 40, 120, 20 }, "StartAngle", startAngle, -450, 450, true);
|
startAngle = GuiSliderBar((Rectangle){ 600, 40, 120, 20 }, "StartAngle", NULL, startAngle, -450, 450);
|
||||||
endAngle = GuiSliderBar((Rectangle){ 600, 70, 120, 20 }, "EndAngle", endAngle, -450, 450, true);
|
endAngle = GuiSliderBar((Rectangle){ 600, 70, 120, 20 }, "EndAngle", NULL, endAngle, -450, 450);
|
||||||
|
|
||||||
innerRadius = GuiSliderBar((Rectangle){ 600, 140, 120, 20 }, "InnerRadius", innerRadius, 0, 100, true);
|
innerRadius = GuiSliderBar((Rectangle){ 600, 140, 120, 20 }, "InnerRadius", NULL, innerRadius, 0, 100);
|
||||||
outerRadius = GuiSliderBar((Rectangle){ 600, 170, 120, 20 }, "OuterRadius", outerRadius, 0, 200, true);
|
outerRadius = GuiSliderBar((Rectangle){ 600, 170, 120, 20 }, "OuterRadius", NULL, outerRadius, 0, 200);
|
||||||
|
|
||||||
segments = GuiSliderBar((Rectangle){ 600, 240, 120, 20 }, "Segments", segments, 0, 100, true);
|
segments = GuiSliderBar((Rectangle){ 600, 240, 120, 20 }, "Segments", NULL, segments, 0, 100);
|
||||||
|
|
||||||
drawRing = GuiCheckBox((Rectangle){ 600, 320, 20, 20 }, "Draw Ring", drawRing);
|
drawRing = GuiCheckBox((Rectangle){ 600, 320, 20, 20 }, "Draw Ring", drawRing);
|
||||||
drawRingLines = GuiCheckBox((Rectangle){ 600, 350, 20, 20 }, "Draw RingLines", drawRingLines);
|
drawRingLines = GuiCheckBox((Rectangle){ 600, 350, 20, 20 }, "Draw RingLines", drawRingLines);
|
||||||
|
|
|
||||||