Merge branch 'master' into cursors
1
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
blank_issues_enabled: false
|
||||||
10
.github/ISSUE_TEMPLATE/new-issue-template.md
vendored
|
|
@ -7,6 +7,16 @@ assignees: ''
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
**WARNING: Please, read this note carefully before submitting a new issue:**
|
||||||
|
|
||||||
|
It is important to realise that **this is NOT A SUPPORT FORUM**, this is for reproducible BUGS with raylib ONLY.
|
||||||
|
|
||||||
|
There are lots of generous and helpful people ready to help you out on [raylib Discord forum](https://discord.gg/VkzNHUE) or [raylib reddit](https://www.reddit.com/r/raylib/).
|
||||||
|
|
||||||
|
Remember that asking for support questions here actively takes developer time away from improving raylib.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
Please, before submitting a new issue verify and check:
|
Please, before submitting a new issue verify and check:
|
||||||
|
|
||||||
- [ ] I tested it on latest raylib version from master branch
|
- [ ] I tested it on latest raylib version from master branch
|
||||||
|
|
|
||||||
72
.github/workflows/android.yml
vendored
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
name: Android
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: windows-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
max-parallel: 1
|
||||||
|
matrix:
|
||||||
|
ARCH: ["arm64", "x86_64"]
|
||||||
|
|
||||||
|
env:
|
||||||
|
RELEASE_NAME: raylib-dev_android_api28_${{ matrix.ARCH }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@master
|
||||||
|
|
||||||
|
- name: Setup Release Version
|
||||||
|
run: |
|
||||||
|
echo "::set-env name=RELEASE_NAME::raylib-${{ github.event.release.tag_name }}_android_api28_${{ matrix.ARCH }}"
|
||||||
|
shell: bash
|
||||||
|
if: github.event_name == 'release' && github.event.action == 'published'
|
||||||
|
|
||||||
|
- name: Setup Environment
|
||||||
|
run: |
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
mkdir ${{ env.RELEASE_NAME }}
|
||||||
|
cd ${{ env.RELEASE_NAME }}
|
||||||
|
mkdir include
|
||||||
|
mkdir lib
|
||||||
|
cd ../..
|
||||||
|
|
||||||
|
# Generating static + shared library for 64bit arquitectures and API version 28
|
||||||
|
- name: Build Library
|
||||||
|
run: |
|
||||||
|
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=28 ANDROID_NDK="C:\PROGRA~2\Android\android-sdk\ndk-bundle" RAYLIB_LIBTYPE=SHARED RAYLIB_RELEASE_PATH="../build/${{ env.RELEASE_NAME }}/lib" -B
|
||||||
|
cd ..
|
||||||
|
shell: cmd
|
||||||
|
|
||||||
|
- name: Generate Artifacts
|
||||||
|
run: |
|
||||||
|
cp -v ./src/raylib.h ./build/${{ env.RELEASE_NAME }}/include
|
||||||
|
cd build
|
||||||
|
tar -czvf ${{ env.RELEASE_NAME }}.tar.gz ${{ env.RELEASE_NAME }}
|
||||||
|
|
||||||
|
- name: Upload Artifacts
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: ${{ env.RELEASE_NAME }}.tar.gz
|
||||||
|
path: ./build/${{ env.RELEASE_NAME }}.tar.gz
|
||||||
|
|
||||||
|
- name: Upload Artifact to Release
|
||||||
|
uses: actions/upload-release-asset@v1.0.1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
upload_url: ${{ github.event.release.upload_url }}
|
||||||
|
asset_path: ./build/${{ env.RELEASE_NAME }}.tar.gz
|
||||||
|
asset_name: ${{ env.RELEASE_NAME }}.tar.gz
|
||||||
|
asset_content_type: application/gzip
|
||||||
|
if: github.event_name == 'release' && github.event.action == 'published'
|
||||||
|
|
||||||
30
.github/workflows/cd_src_release.yml
vendored
|
|
@ -1,30 +0,0 @@
|
||||||
name: CD - Source Build & Release - Linux
|
|
||||||
|
|
||||||
# Trigger the workflow on release publish
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types: [published]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@master
|
|
||||||
|
|
||||||
# TODO: Build project and zip generated files
|
|
||||||
- name: Build project
|
|
||||||
id: build_project
|
|
||||||
run: |
|
|
||||||
zip raylib.zip README.md
|
|
||||||
|
|
||||||
- name: Upload Release Asset
|
|
||||||
id: upload-release-asset
|
|
||||||
uses: actions/upload-release-asset@v1.0.1
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
|
||||||
upload_url: ${{ github.event.release.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
|
|
||||||
asset_path: ./raylib.zip
|
|
||||||
asset_name: raylib.zip
|
|
||||||
asset_content_type: application/zip
|
|
||||||
18
.github/workflows/ci_src_examples_linux.yml
vendored
|
|
@ -1,18 +0,0 @@
|
||||||
name: CI - Source & Examples - Linux
|
|
||||||
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@master
|
|
||||||
- name: apt-update
|
|
||||||
run: sudo apt-get update -qq
|
|
||||||
- name: apt get glfw
|
|
||||||
run: 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: make src
|
|
||||||
run: cd src && make PLATFORM=PLATFORM_DESKTOP
|
|
||||||
- name: make examples
|
|
||||||
run: cd examples && make PLATFORM=PLATFORM_DESKTOP
|
|
||||||
13
.github/workflows/ci_src_examples_macos.yml
vendored
|
|
@ -1,13 +0,0 @@
|
||||||
name: CI - Source & Examples - macOS
|
|
||||||
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: macos-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v1
|
|
||||||
- name: make src
|
|
||||||
run: cd src && make PLATFORM=PLATFORM_DESKTOP
|
|
||||||
- name: make examples
|
|
||||||
run: cd examples && make PLATFORM=PLATFORM_DESKTOP
|
|
||||||
64
.github/workflows/ci_src_examples_win.yml
vendored
|
|
@ -1,64 +0,0 @@
|
||||||
name: CI - Source & Examples - Windows
|
|
||||||
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: windows-latest
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
max-parallel: 1
|
|
||||||
matrix:
|
|
||||||
compiler: [mingw, msvc16]
|
|
||||||
bits: [32, 64]
|
|
||||||
include:
|
|
||||||
- compiler: mingw
|
|
||||||
bits: 32
|
|
||||||
CFLAGS: -m32
|
|
||||||
GENERATOR: "MinGW Makefiles"
|
|
||||||
- compiler: mingw
|
|
||||||
bits: 64
|
|
||||||
CFLAGS: -m64
|
|
||||||
GENERATOR: "MinGW Makefiles"
|
|
||||||
- compiler: msvc16
|
|
||||||
bits: 32
|
|
||||||
GENERATOR: "Visual Studio 16 2019"
|
|
||||||
ARCH: "-A Win32"
|
|
||||||
- compiler: msvc16
|
|
||||||
bits: 64
|
|
||||||
GENERATOR: "Visual Studio 16 2019"
|
|
||||||
ARCH: "-A x64"
|
|
||||||
|
|
||||||
env:
|
|
||||||
CFLAGS: ${{ matrix.CFLAGS }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@master
|
|
||||||
|
|
||||||
- name: Setup Environment
|
|
||||||
run: |
|
|
||||||
mkdir build
|
|
||||||
cd build
|
|
||||||
|
|
||||||
# Trying to solve an issue with CMake and Chocolatey for MinGW
|
|
||||||
- run: cmake -E remove c:\ProgramData\chocolatey\bin\cpack.exe
|
|
||||||
if: matrix.compiler == 'mingw'
|
|
||||||
|
|
||||||
# Setup MSBuild.exe path if required
|
|
||||||
- uses: warrenbuckley/Setup-MSBuild@v1
|
|
||||||
if: matrix.compiler == 'msvc16'
|
|
||||||
|
|
||||||
- name: Build MinGW Project
|
|
||||||
run: |
|
|
||||||
cd ../raylib/src
|
|
||||||
make PLATFORM=PLATFORM_DESKTOP CC=gcc
|
|
||||||
if: matrix.compiler == 'mingw'
|
|
||||||
|
|
||||||
- name: Setup CMake Project
|
|
||||||
run: cmake -G "${{ matrix.GENERATOR }}" ${{ matrix.ARCH }} -DCMAKE_SH="CMAKE_SH-NOTFOUND" -DSTATIC=ON -DSHARED=ON -DBUILD_EXAMPLES=ON -DBUILD_GAMES=OFF -DINCLUDE_EVERYTHING=ON ../raylib
|
|
||||||
if: matrix.compiler == 'msvc16'
|
|
||||||
|
|
||||||
- name: Build raylib Source & Examples
|
|
||||||
run: cmake --build . --target install
|
|
||||||
if: matrix.compiler == 'msvc16'
|
|
||||||
92
.github/workflows/linux.yml
vendored
Normal file
|
|
@ -0,0 +1,92 @@
|
||||||
|
name: Linux
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
max-parallel: 1
|
||||||
|
matrix:
|
||||||
|
bits: [32, 64]
|
||||||
|
include:
|
||||||
|
- bits: 32
|
||||||
|
ARCH: "i386"
|
||||||
|
ARCH_NAME: "i386"
|
||||||
|
COMPILER_PATH: "/user/bin"
|
||||||
|
- bits: 64
|
||||||
|
ARCH: "x86_64"
|
||||||
|
ARCH_NAME: "amd64"
|
||||||
|
COMPILER_PATH: "/user/bin"
|
||||||
|
|
||||||
|
env:
|
||||||
|
RELEASE_NAME: raylib-dev_linux_${{ matrix.ARCH_NAME }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@master
|
||||||
|
|
||||||
|
- name: Setup Release Version
|
||||||
|
run: |
|
||||||
|
echo "::set-env name=RELEASE_NAME::raylib-${{ github.event.release.tag_name }}_linux_${{ matrix.ARCH_NAME }}"
|
||||||
|
shell: bash
|
||||||
|
if: github.event_name == 'release' && github.event.action == 'published'
|
||||||
|
|
||||||
|
- 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
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
mkdir ${{ env.RELEASE_NAME }}
|
||||||
|
cd ${{ env.RELEASE_NAME }}
|
||||||
|
mkdir include
|
||||||
|
mkdir lib
|
||||||
|
cd ../../../raylib
|
||||||
|
# ${{ matrix.ARCH }}-linux-gnu-gcc -v
|
||||||
|
|
||||||
|
# TODO: Support 32bit (i386) shared library building
|
||||||
|
- name: Build Library
|
||||||
|
run: |
|
||||||
|
cd src
|
||||||
|
make PLATFORM=PLATFORM_DESKTOP CC=gcc RAYLIB_LIBTYPE=STATIC RAYLIB_RELEASE_PATH="../build/${{ env.RELEASE_NAME }}/lib" CFLAGS="-m32"
|
||||||
|
# make PLATFORM=PLATFORM_DESKTOP CC=gcc RAYLIB_LIBTYPE=SHARED RAYLIB_RELEASE_PATH="../build/${{ env.RELEASE_NAME }}/lib" -B
|
||||||
|
cd ..
|
||||||
|
if: matrix.bits == 32
|
||||||
|
|
||||||
|
- name: Build Library
|
||||||
|
run: |
|
||||||
|
cd src
|
||||||
|
make PLATFORM=PLATFORM_DESKTOP CC=gcc RAYLIB_LIBTYPE=STATIC RAYLIB_RELEASE_PATH="../build/${{ env.RELEASE_NAME }}/lib"
|
||||||
|
make PLATFORM=PLATFORM_DESKTOP CC=gcc RAYLIB_LIBTYPE=SHARED RAYLIB_RELEASE_PATH="../build/${{ env.RELEASE_NAME }}/lib" -B
|
||||||
|
cd ..
|
||||||
|
if: matrix.bits == 64
|
||||||
|
|
||||||
|
- name: Generate Artifacts
|
||||||
|
run: |
|
||||||
|
cp -v ./src/raylib.h ./build/${{ env.RELEASE_NAME }}/include
|
||||||
|
cd build
|
||||||
|
tar -czvf ${{ env.RELEASE_NAME }}.tar.gz ${{ env.RELEASE_NAME }}
|
||||||
|
|
||||||
|
- name: Upload Artifacts
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: ${{ env.RELEASE_NAME }}.tar.gz
|
||||||
|
path: ./build/${{ env.RELEASE_NAME }}.tar.gz
|
||||||
|
|
||||||
|
- name: Upload Artifact to Release
|
||||||
|
uses: actions/upload-release-asset@v1.0.1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
upload_url: ${{ github.event.release.upload_url }}
|
||||||
|
asset_path: ./build/${{ env.RELEASE_NAME }}.tar.gz
|
||||||
|
asset_name: ${{ env.RELEASE_NAME }}.tar.gz
|
||||||
|
asset_content_type: application/gzip
|
||||||
|
if: github.event_name == 'release' && github.event.action == 'published'
|
||||||
77
.github/workflows/macos.yml
vendored
Normal file
|
|
@ -0,0 +1,77 @@
|
||||||
|
name: macOS
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: macos-latest
|
||||||
|
|
||||||
|
env:
|
||||||
|
RELEASE_NAME: raylib-dev_macos
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@master
|
||||||
|
|
||||||
|
- name: Setup Release Version
|
||||||
|
run: |
|
||||||
|
echo "::set-env name=RELEASE_NAME::raylib-${{ github.event.release.tag_name }}_macos"
|
||||||
|
shell: bash
|
||||||
|
if: github.event_name == 'release' && github.event.action == 'published'
|
||||||
|
|
||||||
|
- name: Setup Environment
|
||||||
|
run: |
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
mkdir ${{ env.RELEASE_NAME }}
|
||||||
|
cd ${{ env.RELEASE_NAME }}
|
||||||
|
mkdir include
|
||||||
|
mkdir lib
|
||||||
|
cd ../..
|
||||||
|
|
||||||
|
# Generating static + shared library, note that i386 architecture is deprecated
|
||||||
|
# Defining GL_SILENCE_DEPRECATION because OpenGL is deprecated on macOS
|
||||||
|
# TODO: Support Universal ARCH libraries (build arm64 + x86_64 and merge)
|
||||||
|
- name: Build Library
|
||||||
|
run: |
|
||||||
|
cd src
|
||||||
|
clang --version
|
||||||
|
make PLATFORM=PLATFORM_DESKTOP RAYLIB_LIBTYPE=STATIC RAYLIB_RELEASE_PATH="../build/${{ env.RELEASE_NAME }}/lib" CFLAGS="-target x86_64-apple-macos10.12 -DGL_SILENCE_DEPRECATION"
|
||||||
|
# make PLATFORM=PLATFORM_DESKTOP RAYLIB_LIBTYPE=STATIC RAYLIB_LIB_NAME=raylib_x86_64 CFLAGS="-target x86_64-apple-macos10.12 -DGL_SILENCE_DEPRECATION"
|
||||||
|
# make PLATFORM=PLATFORM_DESKTOP RAYLIB_LIBTYPE=STATIC RAYLIB_LIB_NAME=raylib_arm64 CFLAGS="-target arm64-apple-macos11 -DGL_SILENCE_DEPRECATION" -B
|
||||||
|
# lipo -create -output ../build/${{ env.RELEASE_NAME }}/lib/libraylib.a libraylib_x86_64.a libraylib_arm64.a
|
||||||
|
make clean
|
||||||
|
make PLATFORM=PLATFORM_DESKTOP RAYLIB_LIBTYPE=SHARED RAYLIB_RELEASE_PATH="../build/${{ env.RELEASE_NAME }}/lib" CFLAGS="-target x86_64-apple-macos10.12 -DGL_SILENCE_DEPRECATION"
|
||||||
|
# make PLATFORM=PLATFORM_DESKTOP RAYLIB_LIBTYPE=SHARED RAYLIB_LIB_NAME=raylib_x86_64 CFLAGS="-target x86_64-apple-macos10.12 -DGL_SILENCE_DEPRECATION" -B
|
||||||
|
# make PLATFORM=PLATFORM_DESKTOP RAYLIB_LIBTYPE=SHARED RAYLIB_LIB_NAME=raylib_arm64 CFLAGS="-target i686-apple-macos -DGL_SILENCE_DEPRECATION" -B
|
||||||
|
# lipo -create -output ../build/${{ env.RELEASE_NAME }}/lib/libraylib.3.1.0.dylib libraylib_x86_64.3.1.0.dylib libraylib_arm64.3.1.0.dylib
|
||||||
|
# cp -v ./libraylib_arm64.dylib ../build/${{ env.RELEASE_NAME }}/lib/libraylib.dylib
|
||||||
|
# cp -v ./libraylib_arm64.310.dylib ../build/${{ env.RELEASE_NAME }}/lib/libraylib.310.dylib
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
- name: Generate Artifacts
|
||||||
|
run: |
|
||||||
|
cp -v ./src/raylib.h ./build/${{ env.RELEASE_NAME }}/include
|
||||||
|
cd build
|
||||||
|
tar -czvf ${{ env.RELEASE_NAME }}.tar.gz ${{ env.RELEASE_NAME }}
|
||||||
|
|
||||||
|
- name: Upload Artifacts
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: ${{ env.RELEASE_NAME }}.tar.gz
|
||||||
|
path: ./build/${{ env.RELEASE_NAME }}.tar.gz
|
||||||
|
|
||||||
|
- name: Upload Artifact to Release
|
||||||
|
uses: actions/upload-release-asset@v1.0.1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
upload_url: ${{ github.event.release.upload_url }}
|
||||||
|
asset_path: ./build/${{ env.RELEASE_NAME }}.tar.gz
|
||||||
|
asset_name: ${{ env.RELEASE_NAME }}.tar.gz
|
||||||
|
asset_content_type: application/gzip
|
||||||
|
if: github.event_name == 'release' && github.event.action == 'published'
|
||||||
72
.github/workflows/webassembly.yml
vendored
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
name: WebAssembly
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: windows-latest
|
||||||
|
|
||||||
|
env:
|
||||||
|
RELEASE_NAME: raylib-dev_webassembly
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@master
|
||||||
|
|
||||||
|
- name: Setup emsdk
|
||||||
|
uses: mymindstorm/setup-emsdk@v6
|
||||||
|
with:
|
||||||
|
version: 2.0.0
|
||||||
|
actions-cache-folder: 'emsdk-cache'
|
||||||
|
|
||||||
|
- name: Setup Release Version
|
||||||
|
run: |
|
||||||
|
echo "::set-env name=RELEASE_NAME::raylib-${{ github.event.release.tag_name }}_webassembly"
|
||||||
|
shell: bash
|
||||||
|
if: github.event_name == 'release' && github.event.action == 'published'
|
||||||
|
|
||||||
|
- name: Setup Environment
|
||||||
|
run: |
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
mkdir ${{ env.RELEASE_NAME }}
|
||||||
|
cd ${{ env.RELEASE_NAME }}
|
||||||
|
mkdir include
|
||||||
|
mkdir lib
|
||||||
|
cd ../..
|
||||||
|
|
||||||
|
- name: Build Library
|
||||||
|
run: |
|
||||||
|
cd src
|
||||||
|
emcc -v
|
||||||
|
make PLATFORM=PLATFORM_WEB EMSDK_PATH="D:/a/raylib/raylib/emsdk-cache/emsdk-master" RAYLIB_RELEASE_PATH="../build/${{ env.RELEASE_NAME }}/lib"
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
- name: Generate Artifacts
|
||||||
|
run: |
|
||||||
|
copy /Y .\src\raylib.h .\build\${{ env.RELEASE_NAME }}\include\raylib.h
|
||||||
|
cd build
|
||||||
|
7z a ./${{ env.RELEASE_NAME }}.zip ./${{ env.RELEASE_NAME }}
|
||||||
|
dir
|
||||||
|
shell: cmd
|
||||||
|
|
||||||
|
- name: Upload Artifacts
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: ${{ env.RELEASE_NAME }}.zip
|
||||||
|
path: ./build/${{ env.RELEASE_NAME }}.zip
|
||||||
|
|
||||||
|
- name: Upload Artifact to Release
|
||||||
|
uses: actions/upload-release-asset@v1.0.1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
upload_url: ${{ github.event.release.upload_url }}
|
||||||
|
asset_path: ./build/${{ env.RELEASE_NAME }}.zip
|
||||||
|
asset_name: ${{ env.RELEASE_NAME }}.zip
|
||||||
|
asset_content_type: application/zip
|
||||||
|
if: github.event_name == 'release' && github.event.action == 'published'
|
||||||
116
.github/workflows/windows.yml
vendored
Normal file
|
|
@ -0,0 +1,116 @@
|
||||||
|
name: Windows
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: windows-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
max-parallel: 1
|
||||||
|
matrix:
|
||||||
|
compiler: [mingw-w64, msvc16]
|
||||||
|
bits: [32, 64]
|
||||||
|
include:
|
||||||
|
- compiler: mingw-w64
|
||||||
|
bits: 32
|
||||||
|
ARCH: "i686"
|
||||||
|
COMPILER_PATH: "C:\\msys64\\mingw32\\bin"
|
||||||
|
WINDRES_ARCH: pe-i386
|
||||||
|
- compiler: mingw-w64
|
||||||
|
bits: 64
|
||||||
|
ARCH: "x86_64"
|
||||||
|
COMPILER_PATH: "C:\\msys64\\mingw64\\bin"
|
||||||
|
WINDRES_ARCH: pe-x86-64
|
||||||
|
- compiler: msvc16
|
||||||
|
bits: 32
|
||||||
|
ARCH: "x86"
|
||||||
|
VSBINPATH: "Win32"
|
||||||
|
- compiler: msvc16
|
||||||
|
bits: 64
|
||||||
|
ARCH: "x64"
|
||||||
|
VSBINPATH: "x64"
|
||||||
|
|
||||||
|
env:
|
||||||
|
RELEASE_NAME: raylib-dev_win${{ matrix.bits }}_${{ matrix.compiler }}
|
||||||
|
GNUTARGET: default
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@master
|
||||||
|
|
||||||
|
- name: Setup Release Version
|
||||||
|
run: |
|
||||||
|
echo "::set-env name=RELEASE_NAME::raylib-${{ github.event.release.tag_name }}_win${{ matrix.bits }}_${{ matrix.compiler }}"
|
||||||
|
shell: bash
|
||||||
|
if: github.event_name == 'release' && github.event.action == 'published'
|
||||||
|
|
||||||
|
- name: Setup Environment
|
||||||
|
run: |
|
||||||
|
dir
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
mkdir ${{ env.RELEASE_NAME }}
|
||||||
|
cd ${{ env.RELEASE_NAME }}
|
||||||
|
mkdir include
|
||||||
|
mkdir lib
|
||||||
|
cd ../../../raylib
|
||||||
|
|
||||||
|
# Setup MSBuild.exe path if required
|
||||||
|
- name: Setup MSBuild
|
||||||
|
uses: microsoft/setup-msbuild@v1.0.1
|
||||||
|
if: matrix.compiler == 'msvc16'
|
||||||
|
|
||||||
|
- name: Build Library (MinGW-w64)
|
||||||
|
run: |
|
||||||
|
cd src
|
||||||
|
set PATH=%PATH%;${{ matrix.COMPILER_PATH }}
|
||||||
|
${{ matrix.ARCH }}-w64-mingw32-gcc.exe --version
|
||||||
|
${{ matrix.COMPILER_PATH }}/windres.exe --version
|
||||||
|
make PLATFORM=PLATFORM_DESKTOP CC=${{ matrix.ARCH }}-w64-mingw32-gcc.exe RAYLIB_LIBTYPE=STATIC RAYLIB_RELEASE_PATH="../build/${{ env.RELEASE_NAME }}/lib"
|
||||||
|
${{ matrix.COMPILER_PATH }}/windres.exe -i raylib.dll.rc -o raylib.dll.rc.data -O coff --target=${{ matrix.WINDRES_ARCH }}
|
||||||
|
make PLATFORM=PLATFORM_DESKTOP CC=${{ matrix.ARCH }}-w64-mingw32-gcc.exe RAYLIB_LIBTYPE=SHARED RAYLIB_RELEASE_PATH="../build/${{ env.RELEASE_NAME }}/lib" -B
|
||||||
|
cd ..
|
||||||
|
shell: cmd
|
||||||
|
if: matrix.compiler == 'mingw-w64'
|
||||||
|
|
||||||
|
- name: Build Library (MSVC16)
|
||||||
|
run: |
|
||||||
|
cd projects/VS2017
|
||||||
|
msbuild.exe raylib.sln /target:raylib /property:Configuration=Release /property:Platform=${{ matrix.ARCH }}
|
||||||
|
copy /Y .\bin\${{ matrix.VSBINPATH }}\Release\raylib.lib .\..\..\build\${{ env.RELEASE_NAME }}\lib\raylib.lib
|
||||||
|
msbuild.exe raylib.sln /target:raylib /property:Configuration=Release.DLL /property:Platform=${{ matrix.ARCH }}
|
||||||
|
copy /Y .\bin\${{ matrix.VSBINPATH }}\Release.DLL\raylib.dll .\..\..\build\${{ env.RELEASE_NAME }}\lib\raylib.dll
|
||||||
|
copy /Y .\bin\${{ matrix.VSBINPATH }}\Release.DLL\raylib.lib .\..\..\build\${{ env.RELEASE_NAME }}\lib\raylibdll.lib
|
||||||
|
cd ../..
|
||||||
|
shell: cmd
|
||||||
|
if: matrix.compiler == 'msvc16'
|
||||||
|
|
||||||
|
- name: Generate Artifacts
|
||||||
|
run: |
|
||||||
|
copy /Y .\src\raylib.h .\build\${{ env.RELEASE_NAME }}\include\raylib.h
|
||||||
|
cd build
|
||||||
|
7z a ./${{ env.RELEASE_NAME }}.zip ./${{ env.RELEASE_NAME }}
|
||||||
|
dir
|
||||||
|
shell: cmd
|
||||||
|
|
||||||
|
- name: Upload Artifacts
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: ${{ env.RELEASE_NAME }}.zip
|
||||||
|
path: ./build/${{ env.RELEASE_NAME }}.zip
|
||||||
|
|
||||||
|
- name: Upload Artifact to Release
|
||||||
|
uses: actions/upload-release-asset@v1.0.1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
upload_url: ${{ github.event.release.upload_url }}
|
||||||
|
asset_path: ./build/${{ env.RELEASE_NAME }}.zip
|
||||||
|
asset_name: ${{ env.RELEASE_NAME }}.zip
|
||||||
|
asset_content_type: application/zip
|
||||||
|
if: github.event_name == 'release' && github.event.action == 'published'
|
||||||
17
.gitignore
vendored
|
|
@ -34,13 +34,10 @@ Thumbs.db
|
||||||
|
|
||||||
[Bb]in
|
[Bb]in
|
||||||
[Dd]ebug/
|
[Dd]ebug/
|
||||||
[Dd]ebug.win32/
|
|
||||||
[Dd]ebug.DLL/
|
|
||||||
*.sbr
|
*.sbr
|
||||||
*.sdf
|
*.sdf
|
||||||
obj/
|
obj/
|
||||||
[R]elease/
|
[R]elease/
|
||||||
[Rr]elease.win32/
|
|
||||||
_ReSharper*/
|
_ReSharper*/
|
||||||
[Tt]est[Rr]esult*
|
[Tt]est[Rr]esult*
|
||||||
ipch/
|
ipch/
|
||||||
|
|
@ -62,7 +59,6 @@ examples/*
|
||||||
!examples/*/
|
!examples/*/
|
||||||
# Unignore all examples files with extension
|
# Unignore all examples files with extension
|
||||||
!examples/*.c
|
!examples/*.c
|
||||||
!examples/*.lua
|
|
||||||
!examples/*.png
|
!examples/*.png
|
||||||
# Unignore examples Makefile
|
# Unignore examples Makefile
|
||||||
!examples/Makefile
|
!examples/Makefile
|
||||||
|
|
@ -70,17 +66,6 @@ examples/*
|
||||||
!examples/raylib_compile_execute.bat
|
!examples/raylib_compile_execute.bat
|
||||||
!examples/raylib_makefile_example.bat
|
!examples/raylib_makefile_example.bat
|
||||||
|
|
||||||
# Ignore all games files
|
|
||||||
games/*
|
|
||||||
# Unignore all games dirs
|
|
||||||
!games/*/
|
|
||||||
# Unignore all games files with extension
|
|
||||||
!games/*.c
|
|
||||||
!games/*.png
|
|
||||||
# Unignore games makefile
|
|
||||||
!games/Makefile
|
|
||||||
!games/Makefile.Android
|
|
||||||
|
|
||||||
# Ignore files build by xcode
|
# Ignore files build by xcode
|
||||||
*.mode*v*
|
*.mode*v*
|
||||||
*.pbxuser
|
*.pbxuser
|
||||||
|
|
@ -104,7 +89,6 @@ CMakeCache.txt
|
||||||
CMakeFiles
|
CMakeFiles
|
||||||
CMakeScripts
|
CMakeScripts
|
||||||
Testing
|
Testing
|
||||||
TestingIfSymlinkWorks
|
|
||||||
cmake_install.cmake
|
cmake_install.cmake
|
||||||
install_manifest.txt
|
install_manifest.txt
|
||||||
compile_commands.json
|
compile_commands.json
|
||||||
|
|
@ -113,7 +97,6 @@ build
|
||||||
|
|
||||||
# Unignore These makefiles...
|
# Unignore These makefiles...
|
||||||
!examples/CMakeLists.txt
|
!examples/CMakeLists.txt
|
||||||
!games/CMakeLists.txt
|
|
||||||
|
|
||||||
# Ignore GNU global tags
|
# Ignore GNU global tags
|
||||||
GPATH
|
GPATH
|
||||||
|
|
|
||||||
39
.travis.yml
|
|
@ -33,15 +33,6 @@ matrix:
|
||||||
- os: osx
|
- os: osx
|
||||||
osx_image: xcode9.4
|
osx_image: xcode9.4
|
||||||
env: ARCH=universal SHARED=OFF RELEASE=NO
|
env: ARCH=universal SHARED=OFF RELEASE=NO
|
||||||
- os: linux
|
|
||||||
env: ARCH=arm64-android RELEASE=NO
|
|
||||||
sudo: required
|
|
||||||
- os: linux
|
|
||||||
env: ARCH=arm32-android RELEASE=NO
|
|
||||||
sudo: required
|
|
||||||
- os: linux
|
|
||||||
env: ARCH=html5 RELEASE=NO
|
|
||||||
sudo: required
|
|
||||||
- os: windows
|
- os: windows
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
env: ARCH=i386 SHARED=OFF RELEASE=NO
|
env: ARCH=i386 SHARED=OFF RELEASE=NO
|
||||||
|
|
@ -56,39 +47,12 @@ before_install:
|
||||||
export DONT_TEST=1;
|
export DONT_TEST=1;
|
||||||
fi
|
fi
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then
|
||||||
if [[ "$ARCH" == *-android ]]; then
|
|
||||||
export DONT_TEST=1;
|
|
||||||
export RAYLIB_PACKAGE_SUFFIX="-Android-arm64";
|
|
||||||
wget https://dl.google.com/android/repository/android-ndk-r17-linux-x86_64.zip;
|
|
||||||
unzip -qq android-ndk*.zip;
|
|
||||||
if [[ "$ARCH" == arm64-* ]]; then
|
|
||||||
export RAYLIB_PACKAGE_SUFFIX="-Android-arm64";
|
|
||||||
TOOLCHAIN_ARCH=arm64;
|
|
||||||
PREFIX=aarch64-linux-android-;
|
|
||||||
else
|
|
||||||
export RAYLIB_PACKAGE_SUFFIX="-Android-arm32";
|
|
||||||
TOOLCHAIN_ARCH=arm;
|
|
||||||
PREFIX=arm-linux-androideabi-;
|
|
||||||
fi;
|
|
||||||
android-ndk*/build/tools/make_standalone_toolchain.py --arch $TOOLCHAIN_ARCH --api 21 --install-dir /tmp/android-toolchain;
|
|
||||||
export PATH=/tmp/android-toolchain/bin:$PATH;
|
|
||||||
export CC=${PREFIX}clang;
|
|
||||||
export CXX=${PREFIX}clang++;
|
|
||||||
export CMAKE_ARCH_ARGS='-DPLATFORM=Android';
|
|
||||||
elif [ "$ARCH" == "html5" ]; then
|
|
||||||
export DONT_TEST=1;
|
|
||||||
export RAYLIB_PACKAGE_SUFFIX="-html5";
|
|
||||||
docker run --privileged=true -dit --name emscripten -v $(pwd):/src trzeci/emscripten:sdk-incoming-64bit bash;
|
|
||||||
export CMAKE_ARCH_ARGS='-DPLATFORM=Web -DCMAKE_TOOLCHAIN_FILE=../cmake/emscripten.cmake';
|
|
||||||
RUNNER='docker exec -it emscripten cmake -E chdir build';
|
|
||||||
else
|
|
||||||
sudo apt-get install -y gcc-multilib
|
sudo apt-get install -y gcc-multilib
|
||||||
libasound2-dev:$ARCH
|
libasound2-dev:$ARCH
|
||||||
libxcursor-dev:$ARCH libxinerama-dev:$ARCH mesa-common-dev:$ARCH
|
libxcursor-dev:$ARCH libxinerama-dev:$ARCH mesa-common-dev:$ARCH
|
||||||
libx11-dev:$ARCH libxrandr-dev:$ARCH libxrandr2:$ARCH libxi-dev:$ARCH
|
libx11-dev:$ARCH libxrandr-dev:$ARCH libxrandr2:$ARCH libxi-dev:$ARCH
|
||||||
libgl1-mesa-dev:$ARCH libglu1-mesa-dev:$ARCH;
|
libgl1-mesa-dev:$ARCH libglu1-mesa-dev:$ARCH;
|
||||||
|
|
||||||
if [ "$OPENAL" == "ON" ]; then sudo apt-get install -y libopenal-dev; fi;
|
|
||||||
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;
|
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";
|
export RAYLIB_PACKAGE_SUFFIX="-Linux-$ARCH";
|
||||||
|
|
@ -104,7 +68,6 @@ before_install:
|
||||||
sudo make install;
|
sudo make install;
|
||||||
popd;
|
popd;
|
||||||
fi;
|
fi;
|
||||||
fi;
|
|
||||||
fi
|
fi
|
||||||
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then
|
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then
|
||||||
export RAYLIB_PACKAGE_SUFFIX="-macOS";
|
export RAYLIB_PACKAGE_SUFFIX="-macOS";
|
||||||
|
|
@ -134,7 +97,7 @@ script:
|
||||||
- $RUNNER cmake $CMAKE_ARCH_ARGS
|
- $RUNNER cmake $CMAKE_ARCH_ARGS
|
||||||
-DMACOS_FATLIB=ON
|
-DMACOS_FATLIB=ON
|
||||||
-DSTATIC=$STATIC -DSHARED=$SHARED
|
-DSTATIC=$STATIC -DSHARED=$SHARED
|
||||||
-DBUILD_EXAMPLES=ON -DBUILD_GAMES=ON
|
-DBUILD_EXAMPLES=ON
|
||||||
-DUSE_EXTERNAL_GLFW=$USE_EXTERNAL_GLFW
|
-DUSE_EXTERNAL_GLFW=$USE_EXTERNAL_GLFW
|
||||||
-DUSE_WAYLAND=$WAYLAND
|
-DUSE_WAYLAND=$WAYLAND
|
||||||
-DINCLUDE_EVERYTHING=ON
|
-DINCLUDE_EVERYTHING=ON
|
||||||
|
|
|
||||||
156
BINDINGS.md
|
|
@ -1,75 +1,95 @@
|
||||||
## raylib bindings
|
## raylib bindings
|
||||||
|
|
||||||
Some people ported raylib to other languages in form of bindings or wrappers to the library, here is a list with the ones I'm aware of:
|
Some people ported raylib to other languages in form of bindings or wrappers to the library.
|
||||||
|
|
||||||
| name | language | repo |
|
Here it is a list with the ones I'm aware of:
|
||||||
|:------------------:|:--------------:|----------------------------------------------------------------------|
|
|
||||||
| raylib | C | https://github.com/raysan5/raylib |
|
|
||||||
| raylib-cpp | C++ | https://github.com/robloach/raylib-cpp |
|
|
||||||
| Raylib-cs | C# | https://github.com/ChrisDill/Raylib-cs |
|
|
||||||
| RaylibSharp | C# | https://github.com/TheLumaio/RaylibSharp |
|
|
||||||
| RaylibFS | F# | https://github.com/dallinbeutler/RaylibFS |
|
|
||||||
| raylib_d | D | https://github.com/0xFireball/raylib_d |
|
|
||||||
| raylib-d | D | https://github.com/onroundit/raylib-d |
|
|
||||||
| raylib-go | Go | https://github.com/gen2brain/raylib-go |
|
|
||||||
| raylib-goplus | Go | https://github.com/Lachee/raylib-goplus |
|
|
||||||
| raylib-rs | Rust | https://github.com/deltaphc/raylib-rs |
|
|
||||||
| raylib-lua | Lua | https://github.com/raysan5/raylib-lua |
|
|
||||||
| raylib-lua-ffi | Lua | https://github.com/raysan5/raylib/issues/693 |
|
|
||||||
| raylib-lua-sol | Lua | https://github.com/RobLoach/raylib-lua-sol |
|
|
||||||
| raylib-lua (raylua)| Lua | https://github.com/TSnake41/raylib-lua |
|
|
||||||
| raylib-luamore | Lua | https://github.com/HDPLocust/raylib-luamore |
|
|
||||||
| raylib-nelua | Nelua | https://github.com/Andre-LA/raylib-nelua-mirror |
|
|
||||||
| raylib-Nim | Nim | https://gitlab.com/define-private-public/raylib-Nim |
|
|
||||||
| raylib-nim | Nim | https://github.com/Skrylar/raylib-nim |
|
|
||||||
| raylib-haskell | Haskell | https://github.com/DevJac/raylib-haskell |
|
|
||||||
| raylib-cr | Crystal | https://github.com/AregevDev/raylib-cr |
|
|
||||||
| cray | Crystal | https://gitlab.com/Zatherz/cray |
|
|
||||||
| cray | Crystal | https://github.com/tapgg/cray |
|
|
||||||
| raylib-pascal | Pascal | https://github.com/drezgames/raylib-pascal |
|
|
||||||
| raylib-pas | Pascal | https://github.com/tazdij/raylib-pas |
|
|
||||||
| Graphics-Raylib | Perl | https://github.com/athreef/Graphics-Raylib |
|
|
||||||
| raylib-ruby-ffi | Ruby | https://github.com/D3nX/raylib-ruby-ffi |
|
|
||||||
| raylib-ruby | Ruby | https://github.com/a0/raylib-ruby |
|
|
||||||
| raylib-mruby | mruby | https://github.com/lihaochen910/raylib-mruby |
|
|
||||||
| raylib-py | Python | https://github.com/overdev/raylib-py |
|
|
||||||
| raylib-python-cffi | Python | https://github.com/electronstudio/raylib-python-cffi |
|
|
||||||
| raylib-java | Java | https://github.com/XoanaIO/raylib-java |
|
|
||||||
| node-raylib | Node.js | https://github.com/RobLoach/node-raylib |
|
|
||||||
| QuickJS-raylib | QuickJS | https://github.com/sntg-p/QuickJS-raylib |
|
|
||||||
| raylib-js | JavaScript | https://github.com/RobLoach/raylib-js |
|
|
||||||
| raylib-chaiscript | ChaiScript | https://github.com/RobLoach/raylib-chaiscript |
|
|
||||||
| raylib-squirrel | Squirrel | https://github.com/RobLoach/raylib-squirrel |
|
|
||||||
| racket-raylib-2d | Racket | https://github.com/arvyy/racket-raylib-2d |
|
|
||||||
| raylib-php | PHP | https://github.com/joseph-montanez/raylib-php |
|
|
||||||
| raylib-php-ffi | PHP | https://github.com/oraoto/raylib-php-ffi |
|
|
||||||
| raylib-phpcpp | PHP | https://github.com/oraoto/raylib-phpcpp |
|
|
||||||
| raylib-factor | Factor | https://github.com/Silverbeard00/raylib-factor |
|
|
||||||
| raylib-haxe | Haxe | https://github.com/ibilon/raylib-haxe |
|
|
||||||
| ringraylib | Ring | https://github.com/ringpackages/ringraylib |
|
|
||||||
| cl-raylib | Common Lisp | https://github.com/longlene/cl-raylib |
|
|
||||||
| raylib-scm | Chicken Scheme | https://github.com/yashrk/raylib-scm |
|
|
||||||
| raylib-chibi | Chibi-Scheme | https://github.com/VincentToups/raylib-chibi |
|
|
||||||
| Euraylib | Euphoria | https://github.com/gAndy50/Euraylib |
|
|
||||||
| raylib-wren | Wren | https://github.com/TSnake41/raylib-wren |
|
|
||||||
| raylib-odin | Odin | https://github.com/kevinw/raylib-odin |
|
|
||||||
| raylib-zig | Zig | https://github.com/G3bE/raylib-zig |
|
|
||||||
| ray.zig | Zig | https://github.com/BitPuffin/zig-raylib-experiments |
|
|
||||||
| raylib-Ada | Ada | https://github.com/mimo/raylib-Ada |
|
|
||||||
| jaylib | Janet | https://github.com/janet-lang/jaylib |
|
|
||||||
| raykit | Kit | https://github.com/Gamerfiend/raykit |
|
|
||||||
| vraylib | V | https://github.com/MajorHard/vraylib |
|
|
||||||
| ray.mod | BlitzMax | https://github.com/bmx-ng/ray.mod |
|
|
||||||
| raylib-mosaic | Mosaic | https://github.com/pluckyporcupine/raylib-mosaic |
|
|
||||||
| raylib-xdpw | XD Pascal | https://github.com/vtereshkov/raylib-xdpw |
|
|
||||||
| raylib-carp | Carp | https://github.com/pluckyporcupine/raylib-carp |
|
|
||||||
| raylib-fb | FreeBasic | https://github.com/IchMagBier/raylib-fb |
|
|
||||||
| raylib-ats2 | ATS2 | https://github.com/mephistopheles-8/raylib-ats2 |
|
|
||||||
| raylib.cbl | COBOL | *[code examples](https://github.com/Martinfx/Cobol/tree/master/OpenCobol/Games/raylib)* |
|
|
||||||
|
|
||||||
Missing some language? Check the [bindings not yet in this list](https://gist.github.com/raysan5/5764cc5b885183f523fce47f098f3d9b#bindings-not-yet-in-the-official-list) or create a new binding! :)
|
| name | raylib version | language | repo |
|
||||||
|
|:------------------:|:-------------: | :--------:|----------------------------------------------------------------------|
|
||||||
|
| raylib | **3.1-dev** | [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-cs | 3.0 | [C#](https://en.wikipedia.org/wiki/C_Sharp_(programming_language)) | https://github.com/ChrisDill/Raylib-cs |
|
||||||
|
| raylib-cppsharp | ? | [C#](https://en.wikipedia.org/wiki/C_Sharp_(programming_language)) | https://github.com/phxvyper/raylib-cppsharp |
|
||||||
|
| 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 | 3.0 | [D](https://dlang.org/) | https://github.com/onroundit/raylib-d |
|
||||||
|
| bindbc-raylib | 3.0 | [D](https://dlang.org/) | https://github.com/o3o/bindbc-raylib |
|
||||||
|
| dray | 3.0 | [D](https://dlang.org/) | https://github.com/xdrie/dray |
|
||||||
|
| 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 |
|
||||||
|
| 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 |
|
||||||
|
| 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-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 | 3.0 | [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 |
|
||||||
|
| raylua | 3.0 | [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 |
|
||||||
|
| 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 | 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 |
|
||||||
|
| nim-raylib | 3.1-dev | [Nim](https://nim-lang.org/) | https://github.com/tomc1998/nim-raylib |
|
||||||
|
| 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 |
|
||||||
|
| 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-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 |
|
||||||
|
| Graphics-Raylib | ? | [Perl](https://www.perl.org/) | https://github.com/athreef/Graphics-Raylib |
|
||||||
|
| raylib-ruby-ffi | ? | [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-mruby | ? | [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-python-cffi | 2.6 | [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 |
|
||||||
|
| 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 |
|
||||||
|
| clj-raylib | ? | [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 |
|
||||||
|
| 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-chaiscript | 2.6 | [ChaiScript](http://chaiscript.com/) | https://github.com/RobLoach/raylib-chaiscript |
|
||||||
|
| raylib-squirrel | 2.5 | [Squirrel](http://www.squirrel-lang.org/) | https://github.com/RobLoach/raylib-squirrel |
|
||||||
|
| racket-raylib-2d | 2.5 | [Racket](https://racket-lang.org/) | https://github.com/arvyy/racket-raylib-2d |
|
||||||
|
| 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-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 |
|
||||||
|
| gforth-raylib | 3.0 | [Gforth](https://gforth.org/) | https://github.com/ArnautDaniel/gforth-raylib |
|
||||||
|
| 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 |
|
||||||
|
| 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-chibi | ? | [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 |
|
||||||
|
| 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-odin | 3.0 | [Odin](https://odin-lang.org/) | https://github.com/kevinw/raylib-odin |
|
||||||
|
| raylib-zig | 3.0 | [Zig](https://ziglang.org/) | https://github.com/Not-Nik/raylib-zig |
|
||||||
|
| raylib-jai | 3.1-dev | [Jai](https://github.com/BSVino/JaiPrimer/blob/master/JaiPrimer.md) | https://github.com/kevinw/raylib-jai |
|
||||||
|
| ray.zig | 2.5 | [Zig](https://ziglang.org/) | https://github.com/BitPuffin/zig-raylib-experiments |
|
||||||
|
| raylib-Ada | 3.0 | [Ada](https://www.adacore.com/about-ada) | https://github.com/mimo/raylib-Ada |
|
||||||
|
| 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 |
|
||||||
|
| vraylib | 2.5 | [V](https://vlang.io/) | https://github.com/MajorHard/vraylib |
|
||||||
|
| 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 |
|
||||||
|
| raylib-mosaic | 3.0 | [Mosaic](https://github.com/sal55/langs/tree/master/Mosaic) | https://github.com/pluckyporcupine/raylib-mosaic |
|
||||||
|
| raylib-xdpw | 2.6 | [XD Pascal](https://github.com/vtereshkov/xdpw) | https://github.com/vtereshkov/raylib-xdpw |
|
||||||
|
| 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-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-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.cbl | ? | [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! :)
|
||||||
|
|
||||||
Usually, raylib bindings follow the convention: `raylib-{language}`
|
Usually, raylib bindings follow the convention: `raylib-{language}`
|
||||||
|
|
||||||
Let me know if you're writing a new binding for raylib, I will list it here and I usually
|
Let me know if you're writing a new binding for raylib, I will list it here!
|
||||||
provide the icon/logo for that new language binding.
|
|
||||||
|
|
|
||||||
7
CMakeLists.txt
Normal file → Executable file
|
|
@ -3,7 +3,6 @@ set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
||||||
|
|
||||||
# Config options
|
# Config options
|
||||||
option(BUILD_EXAMPLES "Build the examples." ON)
|
option(BUILD_EXAMPLES "Build the examples." ON)
|
||||||
option(BUILD_GAMES "Build the example games." ON)
|
|
||||||
option(ENABLE_ASAN "Enable AddressSanitizer (ASAN) for debugging (degrades performance)" OFF)
|
option(ENABLE_ASAN "Enable AddressSanitizer (ASAN) for debugging (degrades performance)" OFF)
|
||||||
option(ENABLE_UBSAN "Enable UndefinedBehaviorSanitizer (UBSan) for debugging" 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)
|
option(ENABLE_MSAN "Enable MemorySanitizer (MSan) for debugging (not recommended to run with ASAN)" OFF)
|
||||||
|
|
@ -22,8 +21,6 @@ add_if_flag_compiles(-Werror=implicit-function-declaration CMAKE_C_FLAGS)
|
||||||
# src/external/jar_xm.h does shady stuff
|
# src/external/jar_xm.h does shady stuff
|
||||||
add_if_flag_compiles(-fno-strict-aliasing CMAKE_C_FLAGS)
|
add_if_flag_compiles(-fno-strict-aliasing CMAKE_C_FLAGS)
|
||||||
|
|
||||||
include(CheckFileSystemSymlinkSupport)
|
|
||||||
|
|
||||||
if (ENABLE_ASAN)
|
if (ENABLE_ASAN)
|
||||||
add_if_flag_compiles(-fno-omit-frame-pointer CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
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)
|
add_if_flag_compiles(-fsanitize=address CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
||||||
|
|
@ -47,8 +44,4 @@ if (${BUILD_EXAMPLES})
|
||||||
add_subdirectory(examples)
|
add_subdirectory(examples)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (${BUILD_GAMES})
|
|
||||||
add_subdirectory(games)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
|
|
||||||
16
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,12 +20,12 @@ 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://travis-ci.org/raysan5/raylib)
|
||||||
[)](https://ci.appveyor.com/project/raysan5/raylib)
|
[](https://github.com/raysan5/raylib/actions?query=workflow%3AWindows)
|
||||||
|
[](https://github.com/raysan5/raylib/actions?query=workflow%3ALinux)
|
||||||
[](https://github.com/raysan5/raylib/actions)
|
[](https://github.com/raysan5/raylib/actions?query=workflow%3AmacOS)
|
||||||
[](https://github.com/raysan5/raylib/actions)
|
[](https://github.com/raysan5/raylib/actions?query=workflow%3AAndroid)
|
||||||
[](https://github.com/raysan5/raylib/actions)
|
[](https://github.com/raysan5/raylib/actions?query=workflow%3AWebAssembly)
|
||||||
|
|
||||||
features
|
features
|
||||||
--------
|
--------
|
||||||
|
|
@ -118,4 +118,4 @@ If you are using raylib and enjoying it, please, join our [Discord server](https
|
||||||
license
|
license
|
||||||
-------
|
-------
|
||||||
|
|
||||||
raylib is licensed under an unmodified zlib/libpng license, which is an OSI-certified, BSD-like license that allows static linking with closed source software. Check [LICENSE](LICENSE.md) for further details.
|
raylib is licensed under an unmodified zlib/libpng license, which is an OSI-certified, BSD-like license that allows static linking with closed source software. Check [LICENSE](LICENSE) for further details.
|
||||||
|
|
|
||||||
33
SPONSORS.md
|
|
@ -6,8 +6,37 @@ The following people has contributed with a generous donation to the raylib proj
|
||||||
|
|
||||||
## 🥈 Silver Contributors
|
## 🥈 Silver Contributors
|
||||||
|
|
||||||
...
|
- Jonathan Johnson ([@ecton](https://github.com/ecton))
|
||||||
|
- Eric J. ([@ProfJski](https://github.com/ProfJski))
|
||||||
|
- Rudy Faile ([@rfaile313](https://github.com/rfaile313)) - https://rudyfaile.com/
|
||||||
|
- devdad ([@devdad](https://github.com/devdad))
|
||||||
|
- frithrah ([@frithrah](https://github.com/frithrah))
|
||||||
|
|
||||||
## 🥉 Bronze Contributors
|
## 🥉 Bronze Contributors
|
||||||
|
|
||||||
...
|
- minirop ([@minirop](https://github.com/minirop))
|
||||||
|
- Daniel Gómez ([@Koocachookies](https://github.com/Koocachookies))
|
||||||
|
- Sergio ([@anidealgift](https://github.com/anidealgift))
|
||||||
|
- JFons ([@JFonS](https://github.com/JFonS))
|
||||||
|
- Marc Agüera ([@maguera93](https://github.com/maguera93))
|
||||||
|
- Pau Fernández ([@pauek](https://github.com/pauek))
|
||||||
|
- Jens Pitkänen ([@neonmoe](https://github.com/neonmoe))
|
||||||
|
- Snowminx ([@Gamerfiend](https://github.com/Gamerfiend))
|
||||||
|
- NimbusFox ([@NimbusFox](https://github.com/NimbusFox))
|
||||||
|
- Robin Mattheussen ([@romatthe](https://github.com/romatthe))
|
||||||
|
- Rahul Nair ([@rahulunair](https://github.com/rahulunair))
|
||||||
|
- Grant Haywood ([@cinterloper](https://github.com/cinterloper))
|
||||||
|
- Terry Nguyen ([@terrehbyte](https://github.com/terrehbyte))
|
||||||
|
- albatros-hmd ([@albatros-hmd](https://github.com/albatros-hmd))
|
||||||
|
- Benjamin Stigsen ([@BenStigsen](https://github.com/BenStigsen))
|
||||||
|
- Louis Johnson ([@louisgjohnson](https://github.com/louisgjohnson))
|
||||||
|
- Dani Martin ([@danimartin82](https://github.com/danimartin82))
|
||||||
|
- Tommi Sinivuo ([@TommiSinivuo](https://github.com/TommiSinivuo))
|
||||||
|
- Joakim Wennergren ([@joakimwennergren](https://github.com/joakimwennergren))
|
||||||
|
- Richard Urbanec ([@Poryg1](https://github.com/Poryg1))
|
||||||
|
- pmgl ([@pmgl](https://github.com/pmgl))
|
||||||
|
- cob ([@majorcob](https://github.com/majorcob))
|
||||||
|
- Samuel Batista ([@gamedevsam](https://github.com/gamedevsam))
|
||||||
|
- Alexandre Chêne ([@kooparse](https://github.com/kooparse))
|
||||||
|
- daddio69 ([@daddio69](https://github.com/daddio69))
|
||||||
|
|
||||||
|
|
|
||||||
65
appveyor.yml
|
|
@ -1,65 +0,0 @@
|
||||||
#os: Visual Studio 2015
|
|
||||||
|
|
||||||
clone_depth: 5
|
|
||||||
|
|
||||||
cache:
|
|
||||||
- C:\ProgramData\chocolatey\bin -> appveyor.yml
|
|
||||||
- C:\ProgramData\chocolatey\lib -> appveyor.yml
|
|
||||||
|
|
||||||
init:
|
|
||||||
- cmake -E remove c:\programdata\chocolatey\bin\cpack.exe
|
|
||||||
- set PATH=%PATH:C:\Program Files (x86)\Git\usr\bin;=%
|
|
||||||
- set PATH=%PATH:C:\Program Files\Git\usr\bin;=%
|
|
||||||
- if [%BITS%]==[32] set MINGW=C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32
|
|
||||||
- if [%BITS%]==[64] set MINGW=C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64
|
|
||||||
- if [%COMPILER%]==[mingw] set PATH=%MINGW%\bin;%PATH%
|
|
||||||
- set RAYLIB_PACKAGE_SUFFIX=-Win%BITS%-%COMPILER%
|
|
||||||
- set VERBOSE=1
|
|
||||||
|
|
||||||
environment:
|
|
||||||
matrix:
|
|
||||||
- compiler: mingw
|
|
||||||
bits: 32
|
|
||||||
examples: ON
|
|
||||||
- compiler: mingw
|
|
||||||
bits: 64
|
|
||||||
examples: ON
|
|
||||||
- compiler: msvc15
|
|
||||||
bits: 32
|
|
||||||
examples: OFF
|
|
||||||
- compiler: msvc15
|
|
||||||
bits: 64
|
|
||||||
examples: OFF
|
|
||||||
|
|
||||||
before_build:
|
|
||||||
- if [%compiler%]==[mingw] set CFLAGS=-m%BITS% & set LDFLAGS=-m%BITS% & set GENERATOR="MinGW Makefiles"
|
|
||||||
- if [%COMPILER%]==[msvc15] if [%BITS%]==[32] set GENERATOR="Visual Studio 14 2015"
|
|
||||||
- if [%COMPILER%]==[msvc15] if [%BITS%]==[64] set GENERATOR="Visual Studio 14 2015 Win64"
|
|
||||||
- mkdir build
|
|
||||||
- cd build
|
|
||||||
|
|
||||||
build_script:
|
|
||||||
- cmake -G %GENERATOR% -DCMAKE_BUILD_TYPE=Release -DSTATIC=ON -DSHARED=ON -DBUILD_EXAMPLES=%examples% -DBUILD_GAMES=%examples% -DINCLUDE_EVERYTHING=ON ..
|
|
||||||
- cmake --build . --target install
|
|
||||||
|
|
||||||
after_build:
|
|
||||||
- cmake --build . --target package
|
|
||||||
|
|
||||||
before_test:
|
|
||||||
|
|
||||||
test_script:
|
|
||||||
|
|
||||||
artifacts:
|
|
||||||
- path: 'build\*.zip'
|
|
||||||
|
|
||||||
deploy:
|
|
||||||
- provider: GitHub
|
|
||||||
auth_token:
|
|
||||||
secure: OxKnnT3tlkPl9365cOO84rDWU4UkHIYJc0D3r3Tv7rB3HaR2BBhlhCnl7g3nuOJy
|
|
||||||
artifact: /.*\.zip/
|
|
||||||
draft: false
|
|
||||||
prerelease: false
|
|
||||||
force_update: true
|
|
||||||
on:
|
|
||||||
branch: master
|
|
||||||
appveyor_repo_tag: true # deploy on tag push only
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
# Populates a ${FILESYSTEM_LACKS_SYMLINKS} variable
|
|
||||||
message(STATUS "Testing if file system supports symlinks")
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E create_symlink CMakeLists.txt "${CMAKE_CURRENT_BINARY_DIR}/TestingIfSymlinkWorks"
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
||||||
RESULT_VARIABLE FILESYSTEM_LACKS_SYMLINKS
|
|
||||||
)
|
|
||||||
If (FILESYSTEM_LACKS_SYMLINKS)
|
|
||||||
message(STATUS "Testing if file system supports symlinks -- unsupported")
|
|
||||||
else()
|
|
||||||
message(STATUS "Testing if file system supports symlinks -- supported")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
26
cmake/JoinPaths.cmake
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
# This module provides function for joining paths
|
||||||
|
# known from most languages
|
||||||
|
#
|
||||||
|
# Original license:
|
||||||
|
# SPDX-License-Identifier: (MIT OR CC0-1.0)
|
||||||
|
# Explicit permission given to distribute this module under
|
||||||
|
# the terms of the project as described in /LICENSE.rst.
|
||||||
|
# Copyright 2020 Jan Tojnar
|
||||||
|
# https://github.com/jtojnar/cmake-snips
|
||||||
|
#
|
||||||
|
# Modelled after Python’s os.path.join
|
||||||
|
# https://docs.python.org/3.7/library/os.path.html#os.path.join
|
||||||
|
# Windows not supported
|
||||||
|
function(join_paths joined_path first_path_segment)
|
||||||
|
set(temp_path "${first_path_segment}")
|
||||||
|
foreach(current_segment IN LISTS ARGN)
|
||||||
|
if(NOT ("${current_segment}" STREQUAL ""))
|
||||||
|
if(IS_ABSOLUTE "${current_segment}")
|
||||||
|
set(temp_path "${current_segment}")
|
||||||
|
else()
|
||||||
|
set(temp_path "${temp_path}/${current_segment}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
set(${joined_path} "${temp_path}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
@ -81,7 +81,7 @@ if(${PLATFORM} MATCHES "Android")
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_basic_lighting.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 EMTERPRETIFY=1 -s EMTERPRETIFY_ASYNC=1")
|
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")
|
||||||
|
|
|
||||||
|
|
@ -96,6 +96,12 @@ ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||||
PLATFORM_OS=LINUX
|
PLATFORM_OS=LINUX
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(PLATFORM),PLATFORM_DRM)
|
||||||
|
UNAMEOS=$(shell uname)
|
||||||
|
ifeq ($(UNAMEOS),Linux)
|
||||||
|
PLATFORM_OS=LINUX
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
# RAYLIB_PATH adjustment for different platforms.
|
# RAYLIB_PATH adjustment for different platforms.
|
||||||
# If using GNU make, we can get the full path to the top of the tree. Windows? BSD?
|
# If using GNU make, we can get the full path to the top of the tree. Windows? BSD?
|
||||||
|
|
@ -112,14 +118,17 @@ endif
|
||||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||||
RAYLIB_PATH ?= /home/pi/raylib
|
RAYLIB_PATH ?= /home/pi/raylib
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(PLATFORM),PLATFORM_DRM)
|
||||||
|
RAYLIB_PATH ?= /home/pi/raylib
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||||
# Emscripten required variables
|
# Emscripten required variables
|
||||||
EMSDK_PATH ?= C:/emsdk
|
EMSDK_PATH ?= C:/emsdk
|
||||||
EMSCRIPTEN_PATH ?= $(EMSDK_PATH)/upstream/emscripten
|
EMSCRIPTEN_PATH ?= $(EMSDK_PATH)/upstream/emscripten
|
||||||
CLANG_PATH = $(EMSDK_PATH)/upstream/bin
|
CLANG_PATH = $(EMSDK_PATH)/upstream/bin
|
||||||
PYTHON_PATH = $(EMSDK_PATH)/python/3.7.4_64bit
|
PYTHON_PATH = $(EMSDK_PATH)/python/3.7.4-pywin32_64bit
|
||||||
NODE_PATH = $(EMSDK_PATH)/node/12.9.1_64bit/bin
|
NODE_PATH = $(EMSDK_PATH)/node/12.18.1_64bit/bin
|
||||||
export PATH = $(EMSDK_PATH);$(EMSCRIPTEN_PATH);$(CLANG_PATH);$(NODE_PATH);$(PYTHON_PATH);C:\raylib\MinGW\bin:$$(PATH)
|
export PATH = $(EMSDK_PATH);$(EMSCRIPTEN_PATH);$(CLANG_PATH);$(NODE_PATH);$(PYTHON_PATH);C:\raylib\MinGW\bin:$$(PATH)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
@ -176,6 +185,9 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
ifeq ($(PLATFORM_OS),LINUX)
|
ifeq ($(PLATFORM_OS),LINUX)
|
||||||
MAKE = make
|
MAKE = make
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(PLATFORM_OS),OSX)
|
||||||
|
MAKE = make
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Define compiler flags:
|
# Define compiler flags:
|
||||||
|
|
@ -196,7 +208,7 @@ ifeq ($(BUILD_MODE),DEBUG)
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||||
CFLAGS += -O3
|
CFLAGS += -Os
|
||||||
else
|
else
|
||||||
CFLAGS += -s -O1
|
CFLAGS += -s -O1
|
||||||
endif
|
endif
|
||||||
|
|
@ -218,6 +230,9 @@ endif
|
||||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||||
CFLAGS += -std=gnu99
|
CFLAGS += -std=gnu99
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(PLATFORM),PLATFORM_DRM)
|
||||||
|
CFLAGS += -std=gnu99 -DEGL_NO_X11
|
||||||
|
endif
|
||||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||||
# -Os # size optimization
|
# -Os # size optimization
|
||||||
# -O2 # optimization level 2, if used, also set --memory-init-file 0
|
# -O2 # optimization level 2, if used, also set --memory-init-file 0
|
||||||
|
|
@ -256,6 +271,10 @@ ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||||
INCLUDE_PATHS += -I/opt/vc/include/interface/vmcs_host/linux
|
INCLUDE_PATHS += -I/opt/vc/include/interface/vmcs_host/linux
|
||||||
INCLUDE_PATHS += -I/opt/vc/include/interface/vcos/pthreads
|
INCLUDE_PATHS += -I/opt/vc/include/interface/vcos/pthreads
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(PLATFORM),PLATFORM_DRM)
|
||||||
|
# DRM required libraries
|
||||||
|
INCLUDE_PATHS += -I/usr/include/libdrm
|
||||||
|
endif
|
||||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
ifeq ($(PLATFORM_OS),BSD)
|
ifeq ($(PLATFORM_OS),BSD)
|
||||||
# Consider -L$(RAYLIB_H_INSTALL_PATH)
|
# Consider -L$(RAYLIB_H_INSTALL_PATH)
|
||||||
|
|
@ -264,7 +283,8 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
ifeq ($(PLATFORM_OS),LINUX)
|
ifeq ($(PLATFORM_OS),LINUX)
|
||||||
# Reset everything.
|
# Reset everything.
|
||||||
# Precedence: immediately local, installed version, raysan5 provided libs -I$(RAYLIB_H_INSTALL_PATH) -I$(RAYLIB_PATH)/release/include
|
# 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) -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
|
||||||
|
|
||||||
|
|
@ -287,7 +307,7 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
ifeq ($(PLATFORM_OS),LINUX)
|
ifeq ($(PLATFORM_OS),LINUX)
|
||||||
# Reset everything.
|
# Reset everything.
|
||||||
# Precedence: immediately local, installed version, raysan5 provided libs
|
# Precedence: immediately local, installed version, raysan5 provided libs
|
||||||
LDFLAGS = -L. -L$(RAYLIB_INSTALL_PATH) -L$(RAYLIB_RELEASE_PATH)
|
LDFLAGS = -L. -L$(RAYLIB_INSTALL_PATH) -L$(RAYLIB_RELEASE_PATH) -L$(RAYLIB_PATH)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
@ -295,6 +315,10 @@ ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||||
LDFLAGS += -L/opt/vc/lib
|
LDFLAGS += -L/opt/vc/lib
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLATFORM),PLATFORM_DRM)
|
||||||
|
LDFLAGS += -lGLESv2 -lEGL -ldrm -lgbm
|
||||||
|
endif
|
||||||
|
|
||||||
# Define any libraries required on linking
|
# Define any libraries required on linking
|
||||||
# if you want to link libraries (libname.so or libname.a), use the -lname
|
# if you want to link libraries (libname.so or libname.a), use the -lname
|
||||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
|
|
@ -347,9 +371,14 @@ ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||||
# NOTE: Required packages: libasound2-dev (ALSA)
|
# NOTE: Required packages: libasound2-dev (ALSA)
|
||||||
LDLIBS = -lraylib -lbrcmGLESv2 -lbrcmEGL -lpthread -lrt -lm -lbcm_host -ldl
|
LDLIBS = -lraylib -lbrcmGLESv2 -lbrcmEGL -lpthread -lrt -lm -lbcm_host -ldl
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(PLATFORM),PLATFORM_DRM)
|
||||||
|
# Libraries for DRM compiling
|
||||||
|
# NOTE: Required packages: libasound2-dev (ALSA)
|
||||||
|
LDLIBS = -lraylib -lGLESv2 -lEGL -lpthread -lrt -lm -lgbm -ldrm -ldl
|
||||||
|
endif
|
||||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||||
# Libraries for web (HTML5) compiling
|
# Libraries for web (HTML5) compiling
|
||||||
LDLIBS = $(RAYLIB_RELEASE_PATH)/libraylib.bc
|
LDLIBS = $(RAYLIB_RELEASE_PATH)/libraylib.a
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Define all object files required
|
# Define all object files required
|
||||||
|
|
@ -375,7 +404,8 @@ CORE = \
|
||||||
core/core_scissor_test \
|
core/core_scissor_test \
|
||||||
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
|
||||||
|
|
||||||
SHAPES = \
|
SHAPES = \
|
||||||
shapes/shapes_basic_shapes \
|
shapes/shapes_basic_shapes \
|
||||||
|
|
@ -411,7 +441,8 @@ TEXTURES = \
|
||||||
textures/textures_background_scrolling \
|
textures/textures_background_scrolling \
|
||||||
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
|
||||||
|
|
||||||
TEXT = \
|
TEXT = \
|
||||||
text/text_raylib_fonts \
|
text/text_raylib_fonts \
|
||||||
|
|
@ -457,7 +488,8 @@ SHADERS = \
|
||||||
shaders/shaders_basic_lighting \
|
shaders/shaders_basic_lighting \
|
||||||
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
|
||||||
|
|
||||||
AUDIO = \
|
AUDIO = \
|
||||||
audio/audio_module_playing \
|
audio/audio_module_playing \
|
||||||
|
|
@ -516,6 +548,10 @@ ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||||
find . -type f -executable -delete
|
find . -type f -executable -delete
|
||||||
rm -fv *.o
|
rm -fv *.o
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(PLATFORM),PLATFORM_DRM)
|
||||||
|
find . -type f -executable -delete
|
||||||
|
rm -fv *.o
|
||||||
|
endif
|
||||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||||
del *.o *.html *.js
|
del *.o *.html *.js
|
||||||
endif
|
endif
|
||||||
|
|
|
||||||
|
|
@ -227,7 +227,7 @@ generate_android_manifest:
|
||||||
# Generate storekey for APK signing: $(PROJECT_NAME).keystore
|
# Generate storekey for APK signing: $(PROJECT_NAME).keystore
|
||||||
# NOTE: Configure here your Distinguished Names (-dname) if required!
|
# NOTE: Configure here your Distinguished Names (-dname) if required!
|
||||||
generate_apk_keystore:
|
generate_apk_keystore:
|
||||||
if not exist $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore $(JAVA_HOME)/bin/keytool -genkeypair -validity 1000 -dname "CN=$(APP_COMPANY_NAME),O=Android,C=ES" -keystore $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore -storepass $(APP_KEYSTORE_PASS) -keypass $(APP_KEYSTORE_PASS) -alias $(PROJECT_NAME)Key -keyalg RSA
|
if not exist $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore $(JAVA_HOME)/bin/keytool -genkeypair -validity 10000 -dname "CN=$(APP_COMPANY_NAME),O=Android,C=ES" -keystore $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore -storepass $(APP_KEYSTORE_PASS) -keypass $(APP_KEYSTORE_PASS) -alias $(PROJECT_NAME)Key -keyalg RSA
|
||||||
|
|
||||||
# Config project package and resource using AndroidManifest.xml and res/values/strings.xml
|
# Config project package and resource using AndroidManifest.xml and res/values/strings.xml
|
||||||
# NOTE: Generates resources file: src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/R.java
|
# NOTE: Generates resources file: src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/R.java
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ Examples using raylib text functionality, including sprite fonts loading/generat
|
||||||
Examples using raylib textures functionality, including image/textures loading/generation and drawing, provided by raylib [textures](../src/textures.c) module.
|
Examples using raylib textures functionality, including image/textures loading/generation and drawing, provided by raylib [textures](../src/textures.c) module.
|
||||||
|
|
||||||
| ## | 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 | |
|
| 48 | [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 | |
|
| 49 | [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 | |
|
| 50 | [textures_srcrec_dstrec](textures/textures_srcrec_dstrec.c) | <img src="textures/textures_srcrec_dstrec.png" alt="textures_srcrec_dstrec" width="200"> | ray | |
|
||||||
|
|
@ -91,6 +91,7 @@ Examples using raylib textures functionality, including image/textures loading/g
|
||||||
| 62 | [textures_sprite_explosion](textures/textures_sprite_explosion.c) | <img src="textures/textures_sprite_explosion.png" alt="textures_sprite_explosion" 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 | ⭐️ |
|
||||||
| 63 | [textures_bunnymark](textures/textures_bunnymark.c) | <img src="textures/textures_bunnymark.png" alt="textures_bunnymark" width="200"> | ray | ⭐️ |
|
| 63 | [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) | ⭐️ |
|
| 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) | ⭐️ |
|
||||||
|
| 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) | ⭐️ |
|
||||||
|
|
||||||
### category: models
|
### category: models
|
||||||
|
|
||||||
|
|
@ -98,24 +99,24 @@ Examples using raylib models functionality, including models loading/generation
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
| ## | example | image | developer | new |
|
||||||
|----|----------|--------|:----------:|:---:|
|
|----|----------|--------|:----------:|:---:|
|
||||||
| 65 | [models_animation](models/models_animation.c) | <img src="models/models_animation.png" alt="models_animation" width="200"> | [culacant](https://github.com/culacant) | ⭐️ |
|
| 66 | [models_animation](models/models_animation.c) | <img src="models/models_animation.png" alt="models_animation" width="200"> | [culacant](https://github.com/culacant) | ⭐️ |
|
||||||
| 66 | [models_billboard](models/models_billboard.c) | <img src="models/models_billboard.png" alt="models_billboard" width="200"> | ray | |
|
| 67 | [models_billboard](models/models_billboard.c) | <img src="models/models_billboard.png" alt="models_billboard" width="200"> | ray | |
|
||||||
| 67 | [models_box_collisions](models/models_box_collisions.c) | <img src="models/models_box_collisions.png" alt="models_box_collisions" 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 | |
|
||||||
| 68 | [models_cubicmap](models/models_cubicmap.c) | <img src="models/models_cubicmap.png" alt="models_cubicmap" width="200"> | ray | |
|
| 69 | [models_cubicmap](models/models_cubicmap.c) | <img src="models/models_cubicmap.png" alt="models_cubicmap" width="200"> | ray | |
|
||||||
| 69 | [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 | ⭐️ |
|
| 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 | ⭐️ |
|
||||||
| 70 | [models_geometric_shapes](models/models_geometric_shapes.c) | <img src="models/models_geometric_shapes.png" alt="models_geometric_shapes" 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 | |
|
||||||
| 71 | [models_material_pbr](models/models_material_pbr.c) | <img src="models/models_material_pbr.png" alt="models_material_pbr" 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 | |
|
||||||
| 72 | [models_mesh_generation](models/models_mesh_generation.c) | <img src="models/models_mesh_generation.png" alt="models_mesh_generation" 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 | |
|
||||||
| 73 | [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) | |
|
| 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) | |
|
||||||
| 74 | [models_loading](models/models_loading.c) | <img src="models/models_loading.png" alt="models_loading" width="200"> | ray | |
|
| 75 | [models_loading](models/models_loading.c) | <img src="models/models_loading.png" alt="models_loading" width="200"> | ray | |
|
||||||
| 75 | [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) | |
|
| 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) | |
|
||||||
| 76 | *TODO* | *TODO* | *TODO* | |
|
|
||||||
| 77 | *TODO* | *TODO* | *TODO* | |
|
| 77 | *TODO* | *TODO* | *TODO* | |
|
||||||
| 78 | [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 | ⭐️ |
|
| 78 | *TODO* | *TODO* | *TODO* | |
|
||||||
| 79 | [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) | |
|
| 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 | ⭐️ |
|
||||||
| 80 | [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) | ⭐️ |
|
| 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) | |
|
||||||
| 81 | [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) | ⭐️ |
|
||||||
| 82 | [models_skybox](models/models_skybox.c) | <img src="models/models_skybox.png" alt="models_skybox" width="200"> | ray | |
|
| 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
|
||||||
|
|
||||||
|
|
@ -123,19 +124,19 @@ Examples using raylib shaders functionality, including shaders loading, paramete
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
| ## | example | image | developer | new |
|
||||||
|----|----------|--------|:----------:|:---:|
|
|----|----------|--------|:----------:|:---:|
|
||||||
| 83 | [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) | ⭐️ |
|
| 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) | ⭐️ |
|
||||||
| 84 | [shaders_model_shader](shaders/shaders_model_shader.c) | <img src="shaders/shaders_model_shader.png" alt="shaders_model_shader" width="200"> | ray | |
|
| 85 | [shaders_model_shader](shaders/shaders_model_shader.c) | <img src="shaders/shaders_model_shader.png" alt="shaders_model_shader" width="200"> | ray | |
|
||||||
| 85 | [shaders_shapes_textures](shaders/shaders_shapes_textures.c) | <img src="shaders/shaders_shapes_textures.png" alt="shaders_shapes_textures" 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 | |
|
||||||
| 86 | [shaders_custom_uniform](shaders/shaders_custom_uniform.c) | <img src="shaders/shaders_custom_uniform.png" alt="shaders_custom_uniform" 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 | |
|
||||||
| 87 | [shaders_postprocessing](shaders/shaders_postprocessing.c) | <img src="shaders/shaders_postprocessing.png" alt="shaders_postprocessing" width="200"> | ray | |
|
| 88 | [shaders_postprocessing](shaders/shaders_postprocessing.c) | <img src="shaders/shaders_postprocessing.png" alt="shaders_postprocessing" width="200"> | ray | |
|
||||||
| 88 | [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) | |
|
| 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) | |
|
||||||
| 89 | [shaders_raymarching](shaders/shaders_raymarching.c) | <img src="shaders/shaders_raymarching.png" alt="shaders_raymarching" width="200"> | Shader by Iñigo Quilez | ⭐️ |
|
| 90 | [shaders_raymarching](shaders/shaders_raymarching.c) | <img src="shaders/shaders_raymarching.png" alt="shaders_raymarching" width="200"> | Shader by Iñigo Quilez | ⭐️ |
|
||||||
| 90 | [shaders_texture_drawing](shaders/shaders_texture_drawing.c) | <img src="shaders/shaders_texture_drawing.png" alt="shaders_texture_drawing" width="200"> | Michał Ciesielski | ⭐️ |
|
| 91 | [shaders_texture_drawing](shaders/shaders_texture_drawing.c) | <img src="shaders/shaders_texture_drawing.png" alt="shaders_texture_drawing" width="200"> | Michał Ciesielski | ⭐️ |
|
||||||
| 91 | [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) | ⭐️ |
|
| 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) | ⭐️ |
|
||||||
| 92 | [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) | ⭐️ |
|
| 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) | ⭐️ |
|
||||||
| 93 | [shaders_eratosthenes](shaders/shaders_eratosthenes.c) | <img src="shaders/shaders_eratosthenes.png" alt="shaders_eratosthenes" width="200"> | [ProfJski](https://github.com/ProfJski) | ⭐️ |
|
| 94 | [shaders_eratosthenes](shaders/shaders_eratosthenes.c) | <img src="shaders/shaders_eratosthenes.png" alt="shaders_eratosthenes" width="200"> | [ProfJski](https://github.com/ProfJski) | ⭐️ |
|
||||||
| 94 | [shaders_fog](shaders/shaders_fog.c) | <img src="shaders/shaders_fog.png" alt="shaders_fog" width="200"> | [Chris Camacho](https://github.com/codifies) | ⭐️ |
|
| 95 | [shaders_fog](shaders/shaders_fog.c) | <img src="shaders/shaders_fog.png" alt="shaders_fog" width="200"> | [Chris Camacho](https://github.com/codifies) | ⭐️ |
|
||||||
| 95 | [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) | ⭐️ |
|
| 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) | ⭐️ |
|
||||||
|
|
||||||
### category: audio
|
### category: audio
|
||||||
|
|
||||||
|
|
@ -143,11 +144,11 @@ Examples using raylib audio functionality, including sound/music loading and pla
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
| ## | example | image | developer | new |
|
||||||
|----|----------|--------|:----------:|:---:|
|
|----|----------|--------|:----------:|:---:|
|
||||||
| 96 | [audio_module_playing](audio/audio_module_playing.c) | <img src="audio/audio_module_playing.png" alt="audio_module_playing" width="200"> | ray | |
|
| 97 | [audio_module_playing](audio/audio_module_playing.c) | <img src="audio/audio_module_playing.png" alt="audio_module_playing" width="200"> | ray | |
|
||||||
| 97 | [audio_music_stream](audio/audio_music_stream.c) | <img src="audio/audio_music_stream.png" alt="audio_music_stream" 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 | |
|
||||||
| 98 | [audio_raw_stream](audio/audio_raw_stream.c) | <img src="audio/audio_raw_stream.png" alt="audio_raw_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 | |
|
||||||
| 99 | [audio_sound_loading](audio/audio_sound_loading.c) | <img src="audio/audio_sound_loading.png" alt="audio_sound_loading" 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 | |
|
||||||
| 100 | [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) | ⭐️ |
|
| 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) | ⭐️ |
|
||||||
|
|
||||||
### category: physics
|
### category: physics
|
||||||
|
|
||||||
|
|
@ -155,11 +156,11 @@ Examples showing physics functionality with raylib. This functionality is provid
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
| ## | example | image | developer | new |
|
||||||
|----|----------|--------|:----------:|:---:|
|
|----|----------|--------|:----------:|:---:|
|
||||||
| 101 | [physics_demo](physics/physics_demo.c) | <img src="physics/physics_demo.png" alt="physics_demo" width="200"> | [Victor Fisac](https://github.com/victorfisac) | |
|
| 102 | [physics_demo](physics/physics_demo.c) | <img src="physics/physics_demo.png" alt="physics_demo" width="200"> | [Victor Fisac](https://github.com/victorfisac) | |
|
||||||
| 102 | [physics_friction](physics/physics_friction.c) | <img src="physics/physics_friction.png" alt="physics_friction" 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) | |
|
||||||
| 103 | [physics_movement](physics/physics_movement.c) | <img src="physics/physics_movement.png" alt="physics_movement" 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) | |
|
||||||
| 104 | [physics_restitution](physics/physics_restitution.c) | <img src="physics/physics_restitution.png" alt="physics_restitution" 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) | |
|
||||||
| 105 | [physics_shatter](physics/physics_shatter.c) | <img src="physics/physics_shatter.png" alt="physics_shatter" 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) | |
|
||||||
|
|
||||||
### category: network
|
### category: network
|
||||||
|
|
||||||
|
|
@ -169,13 +170,13 @@ Examples showing raylib network functionality. This functionality is provided by
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
| ## | example | image | developer | new |
|
||||||
|----|----------|--------|:----------:|:---:|
|
|----|----------|--------|:----------:|:---:|
|
||||||
| 106 | [network_ping_pong](network/network_ping_pong.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
| 107 | [network_ping_pong](network/network_ping_pong.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
||||||
| 107 | [network_resolve_host](network/network_resolve_host.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
| 108 | [network_resolve_host](network/network_resolve_host.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
||||||
| 108 | [network_tcp_client](network/network_tcp_client.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
| 109 | [network_tcp_client](network/network_tcp_client.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
||||||
| 109 | [network_tcp_server](network/network_tcp_server.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
| 110 | [network_tcp_server](network/network_tcp_server.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
||||||
| 110 | [network_test](network/network_test.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
| 111 | [network_test](network/network_test.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
||||||
| 111 | [network_udp_client](network/network_udp_client.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
| 112 | [network_udp_client](network/network_udp_client.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
||||||
| 112 | [network_udp_server](network/network_udp_server.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
| 113 | [network_udp_server](network/network_udp_server.c) | | [Jak Barnes](https://github.com/syphonx) | |
|
||||||
|
|
||||||
### category: others
|
### category: others
|
||||||
|
|
||||||
|
|
@ -183,9 +184,9 @@ Examples showing raylib misc functionality that does not fit in other categories
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
| ## | example | image | developer | new |
|
||||||
|----|----------|--------|:----------:|:---:|
|
|----|----------|--------|:----------:|:---:|
|
||||||
| 113 | [raudio_standalone](others/raudio_standalone.c) | | ray | |
|
| 114 | [raudio_standalone](others/raudio_standalone.c) | | ray | |
|
||||||
| 114 | [rlgl_standalone](others/rlgl_standalone.c) | | ray | |
|
| 115 | [rlgl_standalone](others/rlgl_standalone.c) | | ray | |
|
||||||
| 115 | [easings_testbed](others/easings_testbed.c) | | ray | |
|
| 116 | [easings_testbed](others/easings_testbed.c) | | [Juan Miguel López](https://github.com/flashback-fx) | |
|
||||||
|
|
||||||
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!
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,7 @@ int main(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
Music music = LoadMusicStream("resources/mini1111.xm");
|
Music music = LoadMusicStream("resources/mini1111.xm");
|
||||||
|
music.looping = false;
|
||||||
|
|
||||||
PlayMusicStream(music);
|
PlayMusicStream(music);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ int main(void)
|
||||||
InitAudioDevice(); // Initialize audio device
|
InitAudioDevice(); // Initialize audio device
|
||||||
|
|
||||||
Sound fxWav = LoadSound("resources/sound.wav"); // Load WAV audio file
|
Sound fxWav = LoadSound("resources/sound.wav"); // Load WAV audio file
|
||||||
Sound fxOgg = LoadSound("resources/tanatana.ogg"); // Load OGG audio file
|
Sound fxOgg = LoadSound("resources/target.ogg"); // Load OGG audio file
|
||||||
|
|
||||||
SetSoundVolume(fxWav, 0.2);
|
SetSoundVolume(fxWav, 0.2);
|
||||||
|
|
||||||
|
|
@ -51,7 +51,7 @@ int main(void)
|
||||||
DrawText("Press SPACE to play new ogg instance!", 200, 120, 20, LIGHTGRAY);
|
DrawText("Press SPACE to play new ogg instance!", 200, 120, 20, LIGHTGRAY);
|
||||||
DrawText("Press ENTER to play new wav instance!", 200, 180, 20, LIGHTGRAY);
|
DrawText("Press ENTER to play new wav instance!", 200, 180, 20, LIGHTGRAY);
|
||||||
|
|
||||||
DrawText(FormatText("CONCURRENT SOUNDS PLAYING: %02i", GetSoundsPlaying()), 220, 280, 20, RED);
|
DrawText(TextFormat("CONCURRENT SOUNDS PLAYING: %02i", GetSoundsPlaying()), 220, 280, 20, RED);
|
||||||
|
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ int main(void)
|
||||||
|
|
||||||
InitAudioDevice(); // Initialize audio device
|
InitAudioDevice(); // Initialize audio device
|
||||||
|
|
||||||
Music music = LoadMusicStream("resources/guitar_noodling.ogg");
|
Music music = LoadMusicStream("resources/country.mp3");
|
||||||
|
|
||||||
PlayMusicStream(music);
|
PlayMusicStream(music);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -134,7 +134,7 @@ int main(void)
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
ClearBackground(RAYWHITE);
|
||||||
|
|
||||||
DrawText(FormatText("sine frequency: %i",(int)frequency), GetScreenWidth() - 220, 10, 20, RED);
|
DrawText(TextFormat("sine frequency: %i",(int)frequency), GetScreenWidth() - 220, 10, 20, RED);
|
||||||
DrawText("click mouse button to change frequency", 10, 10, 20, DARKGRAY);
|
DrawText("click mouse button to change frequency", 10, 10, 20, DARKGRAY);
|
||||||
|
|
||||||
// Draw the current buffer state proportionate to the screen
|
// Draw the current buffer state proportionate to the screen
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ int main(void)
|
||||||
InitAudioDevice(); // Initialize audio device
|
InitAudioDevice(); // Initialize audio device
|
||||||
|
|
||||||
Sound fxWav = LoadSound("resources/sound.wav"); // Load WAV audio file
|
Sound fxWav = LoadSound("resources/sound.wav"); // Load WAV audio file
|
||||||
Sound fxOgg = LoadSound("resources/tanatana.ogg"); // Load OGG audio file
|
Sound fxOgg = LoadSound("resources/target.ogg"); // Load OGG audio file
|
||||||
|
|
||||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
|
||||||
10
examples/audio/resources/LICENSE.md
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
| resource | author | licence | notes |
|
||||||
|
| :------------------- | :---------: | :------ | :---- |
|
||||||
|
| country.mp3 | [@emegeme](https://github.com/emegeme) | [CC0](https://creativecommons.org/publicdomain/zero/1.0/) | Originally created for "DART that TARGET" game |
|
||||||
|
| target.ogg | [@emegeme](https://github.com/emegeme) | [CC0](https://creativecommons.org/publicdomain/zero/1.0/) | Originally created for "DART that TARGET" game |
|
||||||
|
| target.flac | [@emegeme](https://github.com/emegeme) | [CC0](https://creativecommons.org/publicdomain/zero/1.0/) | Originally created for "DART that TARGET" game |
|
||||||
|
| coin.wav | [@raysan5](https://github.com/raysan5) | [CC0](https://creativecommons.org/publicdomain/zero/1.0/) | Created using [rFXGen](https://raylibtech.itch.io/rfxgen) |
|
||||||
|
| sound.wav | [@raysan5](https://github.com/raysan5) | [CC0](https://creativecommons.org/publicdomain/zero/1.0/) | Created using [rFXGen](https://raylibtech.itch.io/rfxgen) |
|
||||||
|
| spring.wav | [@raysan5](https://github.com/raysan5) | [CC0](https://creativecommons.org/publicdomain/zero/1.0/) | Created using [rFXGen](https://raylibtech.itch.io/rfxgen) |
|
||||||
|
| weird.wav | [@raysan5](https://github.com/raysan5) | [CC0](https://creativecommons.org/publicdomain/zero/1.0/) | Created using [rFXGen](https://raylibtech.itch.io/rfxgen) |
|
||||||
|
| mini1111.xm | [tPORt](https://modarchive.org/index.php?request=view_by_moduleid&query=51891) | [Mod Archive Distribution license](https://modarchive.org/index.php?terms-upload) | - |
|
||||||
BIN
examples/audio/resources/country.mp3
Normal file
BIN
examples/audio/resources/target.flac
Normal file
BIN
examples/audio/resources/target.ogg
Normal file
|
|
@ -15,8 +15,8 @@
|
||||||
#include "raymath.h"
|
#include "raymath.h"
|
||||||
|
|
||||||
#define G 400
|
#define G 400
|
||||||
#define PLAYER_JUMP_SPD 350.f
|
#define PLAYER_JUMP_SPD 350.0f
|
||||||
#define PLAYER_HOR_SPD 200.f
|
#define PLAYER_HOR_SPD 200.0f
|
||||||
|
|
||||||
typedef struct Player {
|
typedef struct Player {
|
||||||
Vector2 position;
|
Vector2 position;
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ int main(void)
|
||||||
camera.type = CAMERA_PERSPECTIVE;
|
camera.type = CAMERA_PERSPECTIVE;
|
||||||
|
|
||||||
// Generates some random columns
|
// Generates some random columns
|
||||||
float heights[MAX_COLUMNS] = { 0.0f };
|
float heights[MAX_COLUMNS] = { 0 };
|
||||||
Vector3 positions[MAX_COLUMNS] = { 0 };
|
Vector3 positions[MAX_COLUMNS] = { 0 };
|
||||||
Color colors[MAX_COLUMNS] = { 0 };
|
Color colors[MAX_COLUMNS] = { 0 };
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ int main(void)
|
||||||
|
|
||||||
if (IsGamepadAvailable(GAMEPAD_PLAYER1))
|
if (IsGamepadAvailable(GAMEPAD_PLAYER1))
|
||||||
{
|
{
|
||||||
DrawText(FormatText("GP1: %s", GetGamepadName(GAMEPAD_PLAYER1)), 10, 10, 10, BLACK);
|
DrawText(TextFormat("GP1: %s", GetGamepadName(GAMEPAD_PLAYER1)), 10, 10, 10, BLACK);
|
||||||
|
|
||||||
if (IsGamepadName(GAMEPAD_PLAYER1, XBOX360_NAME_ID))
|
if (IsGamepadName(GAMEPAD_PLAYER1, XBOX360_NAME_ID))
|
||||||
{
|
{
|
||||||
|
|
@ -92,13 +92,13 @@ int main(void)
|
||||||
DrawCircle(259, 152, 39, BLACK);
|
DrawCircle(259, 152, 39, BLACK);
|
||||||
DrawCircle(259, 152, 34, LIGHTGRAY);
|
DrawCircle(259, 152, 34, LIGHTGRAY);
|
||||||
DrawCircle(259 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_X)*20),
|
DrawCircle(259 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_X)*20),
|
||||||
152 - (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_Y)*20), 25, BLACK);
|
152 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_Y)*20), 25, BLACK);
|
||||||
|
|
||||||
// Draw axis: right joystick
|
// Draw axis: right joystick
|
||||||
DrawCircle(461, 237, 38, BLACK);
|
DrawCircle(461, 237, 38, BLACK);
|
||||||
DrawCircle(461, 237, 33, LIGHTGRAY);
|
DrawCircle(461, 237, 33, LIGHTGRAY);
|
||||||
DrawCircle(461 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_X)*20),
|
DrawCircle(461 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_X)*20),
|
||||||
237 - (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_Y)*20), 25, BLACK);
|
237 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_Y)*20), 25, BLACK);
|
||||||
|
|
||||||
// Draw axis: left-right triggers
|
// Draw axis: left-right triggers
|
||||||
DrawRectangle(170, 30, 15, 70, GRAY);
|
DrawRectangle(170, 30, 15, 70, GRAY);
|
||||||
|
|
@ -106,8 +106,8 @@ int main(void)
|
||||||
DrawRectangle(170, 30, 15, (((1.0f + GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_TRIGGER))/2.0f)*70), RED);
|
DrawRectangle(170, 30, 15, (((1.0f + GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_TRIGGER))/2.0f)*70), RED);
|
||||||
DrawRectangle(604, 30, 15, (((1.0f + GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_TRIGGER))/2.0f)*70), RED);
|
DrawRectangle(604, 30, 15, (((1.0f + GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_TRIGGER))/2.0f)*70), RED);
|
||||||
|
|
||||||
//DrawText(FormatText("Xbox axis LT: %02.02f", GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_TRIGGER)), 10, 40, 10, BLACK);
|
//DrawText(TextFormat("Xbox axis LT: %02.02f", GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_TRIGGER)), 10, 40, 10, BLACK);
|
||||||
//DrawText(FormatText("Xbox axis RT: %02.02f", GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_TRIGGER)), 10, 60, 10, BLACK);
|
//DrawText(TextFormat("Xbox axis RT: %02.02f", GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_TRIGGER)), 10, 60, 10, BLACK);
|
||||||
}
|
}
|
||||||
else if (IsGamepadName(GAMEPAD_PLAYER1, PS3_NAME_ID))
|
else if (IsGamepadName(GAMEPAD_PLAYER1, PS3_NAME_ID))
|
||||||
{
|
{
|
||||||
|
|
@ -161,14 +161,14 @@ int main(void)
|
||||||
// TODO: Draw generic gamepad
|
// TODO: Draw generic gamepad
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawText(FormatText("DETECTED AXIS [%i]:", GetGamepadAxisCount(GAMEPAD_PLAYER1)), 10, 50, 10, MAROON);
|
DrawText(TextFormat("DETECTED AXIS [%i]:", GetGamepadAxisCount(GAMEPAD_PLAYER1)), 10, 50, 10, MAROON);
|
||||||
|
|
||||||
for (int i = 0; i < GetGamepadAxisCount(GAMEPAD_PLAYER1); i++)
|
for (int i = 0; i < GetGamepadAxisCount(GAMEPAD_PLAYER1); i++)
|
||||||
{
|
{
|
||||||
DrawText(FormatText("AXIS %i: %.02f", i, GetGamepadAxisMovement(GAMEPAD_PLAYER1, i)), 20, 70 + 20*i, 10, DARKGRAY);
|
DrawText(TextFormat("AXIS %i: %.02f", i, GetGamepadAxisMovement(GAMEPAD_PLAYER1, i)), 20, 70 + 20*i, 10, DARKGRAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GetGamepadButtonPressed() != -1) DrawText(FormatText("DETECTED BUTTON: %i", GetGamepadButtonPressed()), 10, 430, 10, RED);
|
if (GetGamepadButtonPressed() != -1) DrawText(TextFormat("DETECTED BUTTON: %i", GetGamepadButtonPressed()), 10, 430, 10, RED);
|
||||||
else DrawText("DETECTED BUTTON: NONE", 10, 430, 10, GRAY);
|
else DrawText("DETECTED BUTTON: NONE", 10, 430, 10, GRAY);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ int main(void)
|
||||||
DrawRectangle(screenWidth/2 - 40, boxPositionY, 80, 80, MAROON);
|
DrawRectangle(screenWidth/2 - 40, boxPositionY, 80, 80, MAROON);
|
||||||
|
|
||||||
DrawText("Use mouse wheel to move the cube up and down!", 10, 10, 20, GRAY);
|
DrawText("Use mouse wheel to move the cube up and down!", 10, 10, 20, GRAY);
|
||||||
DrawText(FormatText("Box position Y: %03i", boxPositionY), 10, 40, 20, LIGHTGRAY);
|
DrawText(TextFormat("Box position Y: %03i", boxPositionY), 10, 40, 20, LIGHTGRAY);
|
||||||
|
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,8 @@
|
||||||
|
|
||||||
#include "raylib.h"
|
#include "raylib.h"
|
||||||
|
|
||||||
|
#define MAX_TOUCH_POINTS 10
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
// Initialization
|
// Initialization
|
||||||
|
|
@ -26,7 +28,7 @@ int main(void)
|
||||||
Color ballColor = BEIGE;
|
Color ballColor = BEIGE;
|
||||||
|
|
||||||
int touchCounter = 0;
|
int touchCounter = 0;
|
||||||
Vector2 touchPosition = { 0.0f };
|
Vector2 touchPosition = { 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
|
||||||
//---------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------
|
||||||
|
|
@ -66,7 +68,7 @@ int main(void)
|
||||||
{
|
{
|
||||||
// Draw circle and touch index number
|
// Draw circle and touch index number
|
||||||
DrawCircleV(touchPosition, 34, ORANGE);
|
DrawCircleV(touchPosition, 34, ORANGE);
|
||||||
DrawText(FormatText("%d", i), touchPosition.x - 10, touchPosition.y - 70, 40, BLACK);
|
DrawText(TextFormat("%d", i), touchPosition.x - 10, touchPosition.y - 70, 40, BLACK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
131
examples/core/core_quat_conversion.c
Normal file
|
|
@ -0,0 +1,131 @@
|
||||||
|
/*******************************************************************************************
|
||||||
|
*
|
||||||
|
* raylib [core] example - quat conversions
|
||||||
|
*
|
||||||
|
* Welcome to raylib!
|
||||||
|
*
|
||||||
|
* generally you should really stick to eulers OR quats...
|
||||||
|
* 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)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2013-2020 Ramon Santamaria (@raysan5)
|
||||||
|
*
|
||||||
|
********************************************************************************************/
|
||||||
|
|
||||||
|
#include "raylib.h"
|
||||||
|
#include "raymath.h"
|
||||||
|
|
||||||
|
#ifndef PI2
|
||||||
|
#define PI2 PI*2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
// Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
const int screenWidth = 800;
|
||||||
|
const int screenHeight = 450;
|
||||||
|
|
||||||
|
InitWindow(screenWidth, screenHeight, "raylib [core] example - quat conversions");
|
||||||
|
|
||||||
|
Camera3D camera = { 0 };
|
||||||
|
camera.position = (Vector3){ 0.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
|
||||||
|
|
||||||
|
Mesh msh = GenMeshCylinder(.2, 1, 32);
|
||||||
|
Model mod = LoadModelFromMesh(msh);
|
||||||
|
|
||||||
|
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
|
||||||
|
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||||
|
{
|
||||||
|
// Update
|
||||||
|
if (!IsKeyDown(KEY_SPACE)) {
|
||||||
|
v1.x += 0.01;
|
||||||
|
v1.y += 0.03;
|
||||||
|
v1.z += 0.05;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (v1.x > PI2) v1.x-=PI2;
|
||||||
|
if (v1.y > PI2) v1.y-=PI2;
|
||||||
|
if (v1.z > PI2) v1.z-=PI2;
|
||||||
|
|
||||||
|
q1 = QuaternionFromEuler(v1.x, v1.y, v1.z);
|
||||||
|
m1 = MatrixRotateZYX(v1);
|
||||||
|
m2 = QuaternionToMatrix(q1);
|
||||||
|
|
||||||
|
q1 = QuaternionFromMatrix(m1);
|
||||||
|
m3 = QuaternionToMatrix(q1);
|
||||||
|
|
||||||
|
v2 = QuaternionToEuler(q1);
|
||||||
|
v2.x*=DEG2RAD; v2.y*=DEG2RAD; v2.z*=DEG2RAD;
|
||||||
|
|
||||||
|
m4 = MatrixRotateZYX(v2);
|
||||||
|
|
||||||
|
// Draw
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
BeginDrawing();
|
||||||
|
|
||||||
|
ClearBackground(RAYWHITE);
|
||||||
|
BeginMode3D(camera);
|
||||||
|
|
||||||
|
mod.transform = m1;
|
||||||
|
DrawModel(mod, (Vector3){-1,0,0},1.0,RED);
|
||||||
|
mod.transform = m2;
|
||||||
|
DrawModel(mod, (Vector3){1,0,0},1.0,RED);
|
||||||
|
mod.transform = m3;
|
||||||
|
DrawModel(mod, (Vector3){0,0,0},1.0,RED);
|
||||||
|
mod.transform = m4;
|
||||||
|
DrawModel(mod, (Vector3){0,0,-1},1.0,RED);
|
||||||
|
|
||||||
|
|
||||||
|
DrawGrid(10, 1.0f);
|
||||||
|
|
||||||
|
EndMode3D();
|
||||||
|
|
||||||
|
if (v2.x<0) v2.x+=PI2;
|
||||||
|
if (v2.y<0) v2.y+=PI2;
|
||||||
|
if (v2.z<0) v2.z+=PI2;
|
||||||
|
|
||||||
|
Color cx,cy,cz;
|
||||||
|
cx=cy=cz=BLACK;
|
||||||
|
if (v1.x == v2.x) cx = GREEN;
|
||||||
|
if (v1.y == v2.y) cy = GREEN;
|
||||||
|
if (v1.z == v2.z) cz = GREEN;
|
||||||
|
|
||||||
|
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.z),20,60,20,cz);
|
||||||
|
|
||||||
|
|
||||||
|
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.z),200,60,20,cz);
|
||||||
|
|
||||||
|
EndDrawing();
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
}
|
||||||
|
|
||||||
|
// De-Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
CloseWindow(); // Close window and OpenGL context
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
@ -50,7 +50,7 @@ int main(void)
|
||||||
|
|
||||||
DrawText("Every 2 seconds a new random value is generated:", 130, 100, 20, MAROON);
|
DrawText("Every 2 seconds a new random value is generated:", 130, 100, 20, MAROON);
|
||||||
|
|
||||||
DrawText(FormatText("%i", randValue), 360, 180, 80, LIGHTGRAY);
|
DrawText(TextFormat("%i", randValue), 360, 180, 80, LIGHTGRAY);
|
||||||
|
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -65,10 +65,10 @@ int main(void)
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
ClearBackground(RAYWHITE);
|
||||||
|
|
||||||
DrawText(FormatText("SCORE: %i", score), 280, 130, 40, MAROON);
|
DrawText(TextFormat("SCORE: %i", score), 280, 130, 40, MAROON);
|
||||||
DrawText(FormatText("HI-SCORE: %i", hiscore), 210, 200, 50, BLACK);
|
DrawText(TextFormat("HI-SCORE: %i", hiscore), 210, 200, 50, BLACK);
|
||||||
|
|
||||||
DrawText(FormatText("frames: %i", framesCounter), 10, 10, 20, LIME);
|
DrawText(TextFormat("frames: %i", framesCounter), 10, 10, 20, LIME);
|
||||||
|
|
||||||
DrawText("Press R to generate random numbers", 220, 40, 20, LIGHTGRAY);
|
DrawText("Press R to generate random numbers", 220, 40, 20, LIGHTGRAY);
|
||||||
DrawText("Press ENTER to SAVE values", 250, 310, 20, LIGHTGRAY);
|
DrawText("Press ENTER to SAVE values", 250, 310, 20, LIGHTGRAY);
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ int main(void)
|
||||||
hmd.chromaAbCorrection[3] = 0.0f; // HMD chromatic aberration correction parameter 3
|
hmd.chromaAbCorrection[3] = 0.0f; // HMD chromatic aberration correction parameter 3
|
||||||
|
|
||||||
// Distortion shader (uses device lens distortion and chroma)
|
// Distortion shader (uses device lens distortion and chroma)
|
||||||
Shader distortion = LoadShader(0, FormatText("resources/distortion%i.fs", GLSL_VERSION));
|
Shader distortion = LoadShader(0, TextFormat("resources/distortion%i.fs", GLSL_VERSION));
|
||||||
|
|
||||||
SetVrConfiguration(hmd, distortion); // Set Vr device parameters for stereo rendering
|
SetVrConfiguration(hmd, distortion); // Set Vr device parameters for stereo rendering
|
||||||
|
|
||||||
|
|
|
||||||
4
examples/core/resources/LICENSE
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
| resource | author | licence | notes |
|
||||||
|
| :------------ | :---------: | :------ | :---- |
|
||||||
|
| ps3.png | [@raysan5](https://github.com/raysan5) | [CC0](https://creativecommons.org/publicdomain/zero/1.0/) | - |
|
||||||
|
| xbox.png | [@raysan5](https://github.com/raysan5) | [CC0](https://creativecommons.org/publicdomain/zero/1.0/) | - |
|
||||||
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
|
@ -20,7 +20,7 @@
|
||||||
#define RLIGHTS_IMPLEMENTATION
|
#define RLIGHTS_IMPLEMENTATION
|
||||||
#include "rlights.h"
|
#include "rlights.h"
|
||||||
|
|
||||||
#define CUBEMAP_SIZE 512 // Cubemap texture size
|
#define CUBEMAP_SIZE 1024 // Cubemap texture size
|
||||||
#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
|
||||||
|
|
@ -51,9 +51,8 @@ int main(void)
|
||||||
|
|
||||||
// Mesh tangents are generated... and uploaded to GPU
|
// Mesh tangents are generated... and uploaded to GPU
|
||||||
// NOTE: New VBO for tangents is generated at default location and also binded to mesh VAO
|
// NOTE: New VBO for tangents is generated at default location and also binded to mesh VAO
|
||||||
MeshTangents(&model.meshes[0]);
|
//MeshTangents(&model.meshes[0]);
|
||||||
|
|
||||||
UnloadMaterial(model.materials[0]); // get rid of default material
|
|
||||||
model.materials[0] = LoadMaterialPBR((Color){ 255, 255, 255, 255 }, 1.0f, 1.0f);
|
model.materials[0] = LoadMaterialPBR((Color){ 255, 255, 255, 255 }, 1.0f, 1.0f);
|
||||||
|
|
||||||
// Create lights
|
// Create lights
|
||||||
|
|
@ -102,18 +101,7 @@ int main(void)
|
||||||
|
|
||||||
// De-Initialization
|
// De-Initialization
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
UnloadMaterial(model.materials[0]); // Unload material: shader and textures
|
||||||
// Shaders and textures must be unloaded by user,
|
|
||||||
// they could be in use by other models
|
|
||||||
UnloadTexture(model.materials[0].maps[MAP_ALBEDO].texture);
|
|
||||||
UnloadTexture(model.materials[0].maps[MAP_NORMAL].texture);
|
|
||||||
UnloadTexture(model.materials[0].maps[MAP_METALNESS].texture);
|
|
||||||
UnloadTexture(model.materials[0].maps[MAP_ROUGHNESS].texture);
|
|
||||||
UnloadTexture(model.materials[0].maps[MAP_OCCLUSION].texture);
|
|
||||||
UnloadTexture(model.materials[0].maps[MAP_IRRADIANCE].texture);
|
|
||||||
UnloadTexture(model.materials[0].maps[MAP_PREFILTER].texture);
|
|
||||||
UnloadTexture(model.materials[0].maps[MAP_BRDF].texture);
|
|
||||||
UnloadShader(model.materials[0].shader);
|
|
||||||
|
|
||||||
UnloadModel(model); // Unload model
|
UnloadModel(model); // Unload model
|
||||||
|
|
||||||
|
|
@ -129,6 +117,7 @@ static Material LoadMaterialPBR(Color albedo, float metalness, float roughness)
|
||||||
{
|
{
|
||||||
Material mat = LoadMaterialDefault(); // Initialize material to default
|
Material mat = LoadMaterialDefault(); // Initialize material to default
|
||||||
|
|
||||||
|
// Load PBR shader (requires several maps)
|
||||||
#if defined(PLATFORM_DESKTOP)
|
#if defined(PLATFORM_DESKTOP)
|
||||||
mat.shader = LoadShader("resources/shaders/glsl330/pbr.vs", "resources/shaders/glsl330/pbr.fs");
|
mat.shader = LoadShader("resources/shaders/glsl330/pbr.vs", "resources/shaders/glsl330/pbr.fs");
|
||||||
#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
|
#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
|
||||||
|
|
@ -160,53 +149,6 @@ static Material LoadMaterialPBR(Color albedo, float metalness, float roughness)
|
||||||
mat.maps[MAP_ROUGHNESS].texture = LoadTexture("resources/pbr/trooper_roughness.png");
|
mat.maps[MAP_ROUGHNESS].texture = LoadTexture("resources/pbr/trooper_roughness.png");
|
||||||
mat.maps[MAP_OCCLUSION].texture = LoadTexture("resources/pbr/trooper_ao.png");
|
mat.maps[MAP_OCCLUSION].texture = LoadTexture("resources/pbr/trooper_ao.png");
|
||||||
|
|
||||||
// Load equirectangular to cubemap shader
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
Shader shdrCubemap = LoadShader("resources/shaders/glsl330/cubemap.vs", "resources/shaders/glsl330/cubemap.fs");
|
|
||||||
#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
|
|
||||||
Shader shdrCubemap = LoadShader("resources/shaders/glsl100/cubemap.vs", "resources/shaders/glsl100/cubemap.fs");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Load irradiance (GI) calculation shader
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
Shader shdrIrradiance = LoadShader("resources/shaders/glsl330/skybox.vs", "resources/shaders/glsl330/irradiance.fs");
|
|
||||||
#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
|
|
||||||
Shader shdrIrradiance = LoadShader("resources/shaders/glsl100/skybox.vs", "resources/shaders/glsl100/irradiance.fs");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Load reflection prefilter calculation shader
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
Shader shdrPrefilter = LoadShader("resources/shaders/glsl330/skybox.vs", "resources/shaders/glsl330/prefilter.fs");
|
|
||||||
#else
|
|
||||||
Shader shdrPrefilter = LoadShader("resources/shaders/glsl100/skybox.vs", "resources/shaders/glsl100/prefilter.fs");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Load bidirectional reflectance distribution function shader
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
Shader shdrBRDF = LoadShader("resources/shaders/glsl330/brdf.vs", "resources/shaders/glsl330/brdf.fs");
|
|
||||||
#else
|
|
||||||
Shader shdrBRDF = LoadShader("resources/shaders/glsl100/brdf.vs", "resources/shaders/glsl100/brdf.fs");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Setup required shader locations
|
|
||||||
SetShaderValue(shdrCubemap, GetShaderLocation(shdrCubemap, "equirectangularMap"), (int[1]){ 0 }, UNIFORM_INT);
|
|
||||||
SetShaderValue(shdrIrradiance, GetShaderLocation(shdrIrradiance, "environmentMap"), (int[1]){ 0 }, UNIFORM_INT);
|
|
||||||
SetShaderValue(shdrPrefilter, GetShaderLocation(shdrPrefilter, "environmentMap"), (int[1]){ 0 }, UNIFORM_INT);
|
|
||||||
|
|
||||||
Texture2D texHDR = LoadTexture("resources/dresden_square.hdr");
|
|
||||||
Texture2D cubemap = GenTextureCubemap(shdrCubemap, texHDR, CUBEMAP_SIZE);
|
|
||||||
mat.maps[MAP_IRRADIANCE].texture = GenTextureIrradiance(shdrIrradiance, cubemap, IRRADIANCE_SIZE);
|
|
||||||
mat.maps[MAP_PREFILTER].texture = GenTexturePrefilter(shdrPrefilter, cubemap, PREFILTERED_SIZE);
|
|
||||||
mat.maps[MAP_BRDF].texture = GenTextureBRDF(shdrBRDF, BRDF_SIZE);
|
|
||||||
UnloadTexture(cubemap);
|
|
||||||
UnloadTexture(texHDR);
|
|
||||||
|
|
||||||
// Unload already used shaders (to create specific textures)
|
|
||||||
UnloadShader(shdrCubemap);
|
|
||||||
UnloadShader(shdrIrradiance);
|
|
||||||
UnloadShader(shdrPrefilter);
|
|
||||||
UnloadShader(shdrBRDF);
|
|
||||||
|
|
||||||
// Set textures filtering for better quality
|
// Set textures filtering for better quality
|
||||||
SetTextureFilter(mat.maps[MAP_ALBEDO].texture, FILTER_BILINEAR);
|
SetTextureFilter(mat.maps[MAP_ALBEDO].texture, FILTER_BILINEAR);
|
||||||
SetTextureFilter(mat.maps[MAP_NORMAL].texture, FILTER_BILINEAR);
|
SetTextureFilter(mat.maps[MAP_NORMAL].texture, FILTER_BILINEAR);
|
||||||
|
|
@ -233,5 +175,58 @@ static Material LoadMaterialPBR(Color albedo, float metalness, float roughness)
|
||||||
mat.maps[MAP_EMISSION].value = 0.5f;
|
mat.maps[MAP_EMISSION].value = 0.5f;
|
||||||
mat.maps[MAP_HEIGHT].value = 0.5f;
|
mat.maps[MAP_HEIGHT].value = 0.5f;
|
||||||
|
|
||||||
|
// Generate cubemap from panorama texture
|
||||||
|
//--------------------------------------------------------------------------------------------------------
|
||||||
|
Texture2D panorama = LoadTexture("resources/dresden_square.hdr");
|
||||||
|
// Load equirectangular to cubemap shader
|
||||||
|
#if defined(PLATFORM_DESKTOP)
|
||||||
|
Shader shdrCubemap = LoadShader("resources/shaders/glsl330/cubemap.vs", "resources/shaders/glsl330/cubemap.fs");
|
||||||
|
#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
|
||||||
|
Shader shdrCubemap = LoadShader("resources/shaders/glsl100/cubemap.vs", "resources/shaders/glsl100/cubemap.fs");
|
||||||
|
#endif
|
||||||
|
SetShaderValue(shdrCubemap, GetShaderLocation(shdrCubemap, "equirectangularMap"), (int[1]){ 0 }, UNIFORM_INT);
|
||||||
|
TextureCubemap cubemap = GenTextureCubemap(shdrCubemap, panorama, CUBEMAP_SIZE, UNCOMPRESSED_R32G32B32);
|
||||||
|
UnloadTexture(panorama);
|
||||||
|
UnloadShader(shdrCubemap);
|
||||||
|
//--------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Generate irradiance map from cubemap texture
|
||||||
|
//--------------------------------------------------------------------------------------------------------
|
||||||
|
// Load irradiance (GI) calculation shader
|
||||||
|
#if defined(PLATFORM_DESKTOP)
|
||||||
|
Shader shdrIrradiance = LoadShader("resources/shaders/glsl330/skybox.vs", "resources/shaders/glsl330/irradiance.fs");
|
||||||
|
#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
|
||||||
|
Shader shdrIrradiance = LoadShader("resources/shaders/glsl100/skybox.vs", "resources/shaders/glsl100/irradiance.fs");
|
||||||
|
#endif
|
||||||
|
SetShaderValue(shdrIrradiance, GetShaderLocation(shdrIrradiance, "environmentMap"), (int[1]){ 0 }, UNIFORM_INT);
|
||||||
|
mat.maps[MAP_IRRADIANCE].texture = GenTextureIrradiance(shdrIrradiance, cubemap, IRRADIANCE_SIZE);
|
||||||
|
UnloadShader(shdrIrradiance);
|
||||||
|
//--------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Generate prefilter map from cubemap texture
|
||||||
|
//--------------------------------------------------------------------------------------------------------
|
||||||
|
// Load reflection prefilter calculation shader
|
||||||
|
#if defined(PLATFORM_DESKTOP)
|
||||||
|
Shader shdrPrefilter = LoadShader("resources/shaders/glsl330/skybox.vs", "resources/shaders/glsl330/prefilter.fs");
|
||||||
|
#else
|
||||||
|
Shader shdrPrefilter = LoadShader("resources/shaders/glsl100/skybox.vs", "resources/shaders/glsl100/prefilter.fs");
|
||||||
|
#endif
|
||||||
|
SetShaderValue(shdrPrefilter, GetShaderLocation(shdrPrefilter, "environmentMap"), (int[1]){ 0 }, UNIFORM_INT);
|
||||||
|
mat.maps[MAP_PREFILTER].texture = GenTexturePrefilter(shdrPrefilter, cubemap, PREFILTERED_SIZE);
|
||||||
|
UnloadTexture(cubemap);
|
||||||
|
UnloadShader(shdrPrefilter);
|
||||||
|
//--------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Generate BRDF (bidirectional reflectance distribution function) texture (using shader)
|
||||||
|
//--------------------------------------------------------------------------------------------------------
|
||||||
|
#if defined(PLATFORM_DESKTOP)
|
||||||
|
Shader shdrBRDF = LoadShader("resources/shaders/glsl330/brdf.vs", "resources/shaders/glsl330/brdf.fs");
|
||||||
|
#else
|
||||||
|
Shader shdrBRDF = LoadShader("resources/shaders/glsl100/brdf.vs", "resources/shaders/glsl100/brdf.fs");
|
||||||
|
#endif
|
||||||
|
mat.maps[MAP_BRDF].texture = GenTextureBRDF(shdrBRDF, BRDF_SIZE);
|
||||||
|
UnloadShader(shdrBRDF);
|
||||||
|
//--------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
return mat;
|
return mat;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -160,25 +160,25 @@ int main(void)
|
||||||
EndMode3D();
|
EndMode3D();
|
||||||
|
|
||||||
// Draw some debug GUI text
|
// Draw some debug GUI text
|
||||||
DrawText(FormatText("Hit Object: %s", hitObjectName), 10, 50, 10, BLACK);
|
DrawText(TextFormat("Hit Object: %s", hitObjectName), 10, 50, 10, BLACK);
|
||||||
|
|
||||||
if (nearestHit.hit)
|
if (nearestHit.hit)
|
||||||
{
|
{
|
||||||
int ypos = 70;
|
int ypos = 70;
|
||||||
|
|
||||||
DrawText(FormatText("Distance: %3.2f", nearestHit.distance), 10, ypos, 10, BLACK);
|
DrawText(TextFormat("Distance: %3.2f", nearestHit.distance), 10, ypos, 10, BLACK);
|
||||||
|
|
||||||
DrawText(FormatText("Hit Pos: %3.2f %3.2f %3.2f",
|
DrawText(TextFormat("Hit Pos: %3.2f %3.2f %3.2f",
|
||||||
nearestHit.position.x,
|
nearestHit.position.x,
|
||||||
nearestHit.position.y,
|
nearestHit.position.y,
|
||||||
nearestHit.position.z), 10, ypos + 15, 10, BLACK);
|
nearestHit.position.z), 10, ypos + 15, 10, BLACK);
|
||||||
|
|
||||||
DrawText(FormatText("Hit Norm: %3.2f %3.2f %3.2f",
|
DrawText(TextFormat("Hit Norm: %3.2f %3.2f %3.2f",
|
||||||
nearestHit.normal.x,
|
nearestHit.normal.x,
|
||||||
nearestHit.normal.y,
|
nearestHit.normal.y,
|
||||||
nearestHit.normal.z), 10, ypos + 30, 10, BLACK);
|
nearestHit.normal.z), 10, ypos + 30, 10, BLACK);
|
||||||
|
|
||||||
if (hitTriangle) DrawText(FormatText("Barycenter: %3.2f %3.2f %3.2f", bary.x, bary.y, bary.z), 10, ypos + 45, 10, BLACK);
|
if (hitTriangle) DrawText(TextFormat("Barycenter: %3.2f %3.2f %3.2f", bary.x, bary.y, bary.z), 10, ypos + 45, 10, BLACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawText("Use Mouse to Move Camera", 10, 430, 10, GRAY);
|
DrawText("Use Mouse to Move Camera", 10, 430, 10, GRAY);
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,10 @@
|
||||||
*
|
*
|
||||||
* raylib [models] example - Skybox loading and drawing
|
* raylib [models] example - Skybox loading and drawing
|
||||||
*
|
*
|
||||||
* This example has been created using raylib 1.8 (www.raylib.com)
|
* This example has been created using raylib 3.1 (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 Ramon Santamaria (@raysan5)
|
* Copyright (c) 2017-2020 Ramon Santamaria (@raysan5)
|
||||||
*
|
*
|
||||||
********************************************************************************************/
|
********************************************************************************************/
|
||||||
|
|
||||||
|
|
@ -35,6 +35,7 @@ int main(void)
|
||||||
skybox.materials[0].shader = LoadShader("resources/shaders/glsl100/skybox.vs", "resources/shaders/glsl100/skybox.fs");
|
skybox.materials[0].shader = LoadShader("resources/shaders/glsl100/skybox.vs", "resources/shaders/glsl100/skybox.fs");
|
||||||
#endif
|
#endif
|
||||||
SetShaderValue(skybox.materials[0].shader, GetShaderLocation(skybox.materials[0].shader, "environmentMap"), (int[1]){ MAP_CUBEMAP }, UNIFORM_INT);
|
SetShaderValue(skybox.materials[0].shader, GetShaderLocation(skybox.materials[0].shader, "environmentMap"), (int[1]){ MAP_CUBEMAP }, UNIFORM_INT);
|
||||||
|
SetShaderValue(skybox.materials[0].shader, GetShaderLocation(skybox.materials[0].shader, "vflipped"), (int[1]){ 1 }, UNIFORM_INT);
|
||||||
|
|
||||||
// Load cubemap shader and setup required shader locations
|
// Load cubemap shader and setup required shader locations
|
||||||
#if defined(PLATFORM_DESKTOP)
|
#if defined(PLATFORM_DESKTOP)
|
||||||
|
|
@ -45,14 +46,17 @@ int main(void)
|
||||||
SetShaderValue(shdrCubemap, GetShaderLocation(shdrCubemap, "equirectangularMap"), (int[1]){ 0 }, UNIFORM_INT);
|
SetShaderValue(shdrCubemap, GetShaderLocation(shdrCubemap, "equirectangularMap"), (int[1]){ 0 }, UNIFORM_INT);
|
||||||
|
|
||||||
// Load HDR panorama (sphere) texture
|
// Load HDR panorama (sphere) texture
|
||||||
Texture2D texHDR = LoadTexture("resources/dresden_square.hdr");
|
char panoFileName[256] = { 0 };
|
||||||
|
TextCopy(panoFileName, "resources/dresden_square_2k.hdr");
|
||||||
|
Texture2D panorama = LoadTexture(panoFileName);
|
||||||
|
|
||||||
// Generate cubemap (texture with 6 quads-cube-mapping) from panorama HDR texture
|
// Generate cubemap (texture with 6 quads-cube-mapping) from panorama HDR texture
|
||||||
// NOTE: New texture is generated rendering to texture, shader computes the sphre->cube coordinates mapping
|
// NOTE 1: New texture is generated rendering to texture, shader calculates the sphere->cube coordinates mapping
|
||||||
skybox.materials[0].maps[MAP_CUBEMAP].texture = GenTextureCubemap(shdrCubemap, texHDR, 512);
|
// NOTE 2: It seems on some Android devices WebGL, fbo does not properly support a FLOAT-based attachment,
|
||||||
|
// despite texture can be successfully created.. so using UNCOMPRESSED_R8G8B8A8 instead of UNCOMPRESSED_R32G32B32A32
|
||||||
|
skybox.materials[0].maps[MAP_CUBEMAP].texture = GenTextureCubemap(shdrCubemap, panorama, 1024, UNCOMPRESSED_R8G8B8A8);
|
||||||
|
|
||||||
UnloadTexture(texHDR); // Texture not required anymore, cubemap already generated
|
UnloadTexture(panorama); // Texture not required anymore, cubemap already generated
|
||||||
UnloadShader(shdrCubemap); // Unload cubemap generation shader, not required anymore
|
|
||||||
|
|
||||||
SetCameraMode(camera, CAMERA_FIRST_PERSON); // Set a first person camera mode
|
SetCameraMode(camera, CAMERA_FIRST_PERSON); // Set a first person camera mode
|
||||||
|
|
||||||
|
|
@ -65,6 +69,30 @@ int main(void)
|
||||||
// Update
|
// Update
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
UpdateCamera(&camera); // Update camera
|
UpdateCamera(&camera); // Update camera
|
||||||
|
|
||||||
|
// Load new cubemap texture on drag&drop
|
||||||
|
if (IsFileDropped())
|
||||||
|
{
|
||||||
|
int count = 0;
|
||||||
|
char **droppedFiles = GetDroppedFiles(&count);
|
||||||
|
|
||||||
|
if (count == 1) // Only support one file dropped
|
||||||
|
{
|
||||||
|
if (IsFileExtension(droppedFiles[0], ".png;.jpg;.hdr;.bmp;.tga"))
|
||||||
|
{
|
||||||
|
// Unload current cubemap texture and load new one
|
||||||
|
UnloadTexture(skybox.materials[0].maps[MAP_CUBEMAP].texture);
|
||||||
|
panorama = LoadTexture(droppedFiles[0]);
|
||||||
|
TextCopy(panoFileName, droppedFiles[0]);
|
||||||
|
|
||||||
|
// Generate cubemap from panorama texture
|
||||||
|
skybox.materials[0].maps[MAP_CUBEMAP].texture = GenTextureCubemap(shdrCubemap, panorama, 1024, UNCOMPRESSED_R8G8B8A8);
|
||||||
|
UnloadTexture(panorama);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ClearDroppedFiles(); // Clear internal buffers
|
||||||
|
}
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Draw
|
// Draw
|
||||||
|
|
@ -74,13 +102,11 @@ int main(void)
|
||||||
ClearBackground(RAYWHITE);
|
ClearBackground(RAYWHITE);
|
||||||
|
|
||||||
BeginMode3D(camera);
|
BeginMode3D(camera);
|
||||||
|
|
||||||
DrawModel(skybox, (Vector3){0, 0, 0}, 1.0f, WHITE);
|
DrawModel(skybox, (Vector3){0, 0, 0}, 1.0f, WHITE);
|
||||||
|
|
||||||
DrawGrid(10, 1.0f);
|
DrawGrid(10, 1.0f);
|
||||||
|
|
||||||
EndMode3D();
|
EndMode3D();
|
||||||
|
|
||||||
|
DrawText(TextFormat("Panorama image from hdrihaven.com: %s", GetFileName(panoFileName)), 10, GetScreenHeight() - 20, 10, BLACK);
|
||||||
DrawFPS(10, 10);
|
DrawFPS(10, 10);
|
||||||
|
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,7 @@ int main()
|
||||||
};
|
};
|
||||||
|
|
||||||
// Pick a color with a hue depending on cube position for the rainbow color effect
|
// Pick a color with a hue depending on cube position for the rainbow color effect
|
||||||
Color cubeColor = ColorFromHSV((Vector3){ (float)(((x + y + z)*18)%360), 0.75f, 0.9f });
|
Color cubeColor = ColorFromHSV((float)(((x + y + z)*18)%360), 0.75f, 0.9f);
|
||||||
|
|
||||||
// Calculate cube size
|
// Calculate cube size
|
||||||
float cubeSize = (2.4f - scale)*blockScale;
|
float cubeSize = (2.4f - scale)*blockScale;
|
||||||
|
|
|
||||||
|
|
@ -195,6 +195,6 @@ void DrawAngleGauge(Texture2D angleGauge, int x, int y, float angle, char title[
|
||||||
|
|
||||||
DrawTexturePro(angleGauge, srcRec, dstRec, origin, angle, color);
|
DrawTexturePro(angleGauge, srcRec, dstRec, origin, angle, color);
|
||||||
|
|
||||||
DrawText(FormatText("%5.1f", angle), x - MeasureText(FormatText("%5.1f", angle), textSize) / 2, y + 10, textSize, DARKGRAY);
|
DrawText(TextFormat("%5.1f", angle), x - MeasureText(TextFormat("%5.1f", angle), textSize) / 2, y + 10, textSize, DARKGRAY);
|
||||||
DrawText(title, x - MeasureText(title, textSize) / 2, y + 60, textSize, DARKGRAY);
|
DrawText(title, x - MeasureText(title, textSize) / 2, y + 60, textSize, DARKGRAY);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 201 B After Width: | Height: | Size: 164 B |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
BIN
examples/models/resources/dresden_square_2k.hdr
Normal file
|
Before Width: | Height: | Size: 295 KiB After Width: | Height: | Size: 295 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
|
@ -1,219 +0,0 @@
|
||||||
{
|
|
||||||
"asset": {
|
|
||||||
"generator": "COLLADA2GLTF",
|
|
||||||
"version": "2.0"
|
|
||||||
},
|
|
||||||
"scene": 0,
|
|
||||||
"scenes": [
|
|
||||||
{
|
|
||||||
"nodes": [
|
|
||||||
0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
"children": [
|
|
||||||
2,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"matrix": [
|
|
||||||
0.009999999776482582,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.009999999776482582,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.009999999776482582,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
1.0
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"matrix": [
|
|
||||||
-0.7289686799049377,
|
|
||||||
0.0,
|
|
||||||
-0.6845470666885376,
|
|
||||||
0.0,
|
|
||||||
-0.4252049028873444,
|
|
||||||
0.7836934328079224,
|
|
||||||
0.4527972936630249,
|
|
||||||
0.0,
|
|
||||||
0.5364750623703003,
|
|
||||||
0.6211478114128113,
|
|
||||||
-0.571287989616394,
|
|
||||||
0.0,
|
|
||||||
400.1130065917969,
|
|
||||||
463.2640075683594,
|
|
||||||
-431.0780334472656,
|
|
||||||
1.0
|
|
||||||
],
|
|
||||||
"camera": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"mesh": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"cameras": [
|
|
||||||
{
|
|
||||||
"perspective": {
|
|
||||||
"aspectRatio": 1.5,
|
|
||||||
"yfov": 0.6605925559997559,
|
|
||||||
"zfar": 10000.0,
|
|
||||||
"znear": 1.0
|
|
||||||
},
|
|
||||||
"type": "perspective"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes": [
|
|
||||||
{
|
|
||||||
"primitives": [
|
|
||||||
{
|
|
||||||
"attributes": {
|
|
||||||
"NORMAL": 1,
|
|
||||||
"POSITION": 2,
|
|
||||||
"TEXCOORD_0": 3
|
|
||||||
},
|
|
||||||
"indices": 0,
|
|
||||||
"mode": 4,
|
|
||||||
"material": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "LOD3spShape"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"accessors": [
|
|
||||||
{
|
|
||||||
"bufferView": 0,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"componentType": 5123,
|
|
||||||
"count": 12636,
|
|
||||||
"max": [
|
|
||||||
2398
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"type": "SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 1,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 2399,
|
|
||||||
"max": [
|
|
||||||
0.9995989799499512,
|
|
||||||
0.999580979347229,
|
|
||||||
0.9984359741210938
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
-0.9990839958190918,
|
|
||||||
-1.0,
|
|
||||||
-0.9998319745063782
|
|
||||||
],
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 1,
|
|
||||||
"byteOffset": 28788,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 2399,
|
|
||||||
"max": [
|
|
||||||
96.17990112304688,
|
|
||||||
163.97000122070313,
|
|
||||||
53.92519760131836
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
-69.29850006103516,
|
|
||||||
9.929369926452637,
|
|
||||||
-61.32819747924805
|
|
||||||
],
|
|
||||||
"type": "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView": 2,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"componentType": 5126,
|
|
||||||
"count": 2399,
|
|
||||||
"max": [
|
|
||||||
0.9833459854125976,
|
|
||||||
0.9800369739532472
|
|
||||||
],
|
|
||||||
"min": [
|
|
||||||
0.026409000158309938,
|
|
||||||
0.01996302604675293
|
|
||||||
],
|
|
||||||
"type": "VEC2"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"materials": [
|
|
||||||
{
|
|
||||||
"pbrMetallicRoughness": {
|
|
||||||
"baseColorTexture": {
|
|
||||||
"index": 0
|
|
||||||
},
|
|
||||||
"metallicFactor": 0.0
|
|
||||||
},
|
|
||||||
"emissiveFactor": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"name": "blinn3-fx"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"textures": [
|
|
||||||
{
|
|
||||||
"sampler": 0,
|
|
||||||
"source": 0
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"images": [
|
|
||||||
{
|
|
||||||
"uri": "DuckCM.png"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"samplers": [
|
|
||||||
{
|
|
||||||
"magFilter": 9729,
|
|
||||||
"minFilter": 9986,
|
|
||||||
"wrapS": 10497,
|
|
||||||
"wrapT": 10497
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"bufferViews": [
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteOffset": 76768,
|
|
||||||
"byteLength": 25272,
|
|
||||||
"target": 34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteOffset": 0,
|
|
||||||
"byteLength": 57576,
|
|
||||||
"byteStride": 12,
|
|
||||||
"target": 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer": 0,
|
|
||||||
"byteOffset": 57576,
|
|
||||||
"byteLength": 19192,
|
|
||||||
"byteStride": 8,
|
|
||||||
"target": 34962
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buffers": [
|
|
||||||
{
|
|
||||||
"byteLength": 102040,
|
|
||||||
"uri": "Duck0.bin"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 16 KiB |
|
|
@ -1,14 +0,0 @@
|
||||||
# Duck
|
|
||||||
## Screenshot
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## License Information
|
|
||||||
|
|
||||||
Copyright 2006 Sony Computer Entertainment Inc.
|
|
||||||
|
|
||||||
Licensed under the SCEA Shared Source License, Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at:
|
|
||||||
|
|
||||||
http://research.scea.com/scea_shared_source_license.html
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
||||||
|
Before Width: | Height: | Size: 311 KiB After Width: | Height: | Size: 311 KiB |
|
Before Width: | Height: | Size: 434 KiB After Width: | Height: | Size: 434 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 384 KiB After Width: | Height: | Size: 383 KiB |
|
Before Width: | Height: | Size: 381 KiB After Width: | Height: | Size: 380 KiB |
|
Before Width: | Height: | Size: 372 KiB After Width: | Height: | Size: 371 KiB |
|
Before Width: | Height: | Size: 335 KiB After Width: | Height: | Size: 334 KiB |
|
|
@ -1,22 +1,13 @@
|
||||||
/*******************************************************************************************
|
#version 100
|
||||||
*
|
|
||||||
* rPBR [shader] - Equirectangular to cubemap fragment shader
|
|
||||||
*
|
|
||||||
* Copyright (c) 2017 Victor Fisac
|
|
||||||
*
|
|
||||||
**********************************************************************************************/
|
|
||||||
|
|
||||||
#version 330
|
precision mediump float;
|
||||||
|
|
||||||
// Input vertex attributes (from vertex shader)
|
// Input vertex attributes (from vertex shader)
|
||||||
in vec3 fragPosition;
|
varying vec3 fragPosition;
|
||||||
|
|
||||||
// Input uniform values
|
// Input uniform values
|
||||||
uniform sampler2D equirectangularMap;
|
uniform sampler2D equirectangularMap;
|
||||||
|
|
||||||
// Output fragment color
|
|
||||||
out vec4 finalColor;
|
|
||||||
|
|
||||||
vec2 SampleSphericalMap(vec3 v)
|
vec2 SampleSphericalMap(vec3 v)
|
||||||
{
|
{
|
||||||
vec2 uv = vec2(atan(v.z, v.x), asin(v.y));
|
vec2 uv = vec2(atan(v.z, v.x), asin(v.y));
|
||||||
|
|
@ -31,8 +22,8 @@ void main()
|
||||||
vec2 uv = SampleSphericalMap(normalize(fragPosition));
|
vec2 uv = SampleSphericalMap(normalize(fragPosition));
|
||||||
|
|
||||||
// Fetch color from texture map
|
// Fetch color from texture map
|
||||||
vec3 color = texture(equirectangularMap, uv).rgb;
|
vec3 color = texture2D(equirectangularMap, uv).rgb;
|
||||||
|
|
||||||
// Calculate final fragment color
|
// Calculate final fragment color
|
||||||
finalColor = vec4(color, 1.0);
|
gl_FragColor = vec4(color, 1.0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,14 @@
|
||||||
/*******************************************************************************************
|
#version 100
|
||||||
*
|
|
||||||
* rPBR [shader] - Equirectangular to cubemap vertex shader
|
|
||||||
*
|
|
||||||
* Copyright (c) 2017 Victor Fisac
|
|
||||||
*
|
|
||||||
**********************************************************************************************/
|
|
||||||
|
|
||||||
#version 330
|
|
||||||
|
|
||||||
// Input vertex attributes
|
// Input vertex attributes
|
||||||
in vec3 vertexPosition;
|
attribute vec3 vertexPosition;
|
||||||
|
|
||||||
// Input uniform values
|
// Input uniform values
|
||||||
uniform mat4 projection;
|
uniform mat4 projection;
|
||||||
uniform mat4 view;
|
uniform mat4 view;
|
||||||
|
|
||||||
// Output vertex attributes (to fragment shader)
|
// Output vertex attributes (to fragment shader)
|
||||||
out vec3 fragPosition;
|
varying vec3 fragPosition;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,31 +1,28 @@
|
||||||
/*******************************************************************************************
|
#version 100
|
||||||
*
|
|
||||||
* rPBR [shader] - Background skybox fragment shader
|
|
||||||
*
|
|
||||||
* Copyright (c) 2017 Victor Fisac
|
|
||||||
*
|
|
||||||
**********************************************************************************************/
|
|
||||||
|
|
||||||
#version 330
|
precision mediump float;
|
||||||
|
|
||||||
// Input vertex attributes (from vertex shader)
|
// Input vertex attributes (from vertex shader)
|
||||||
in vec3 fragPosition;
|
varying vec3 fragPosition;
|
||||||
|
|
||||||
// Input uniform values
|
// Input uniform values
|
||||||
uniform samplerCube environmentMap;
|
uniform samplerCube environmentMap;
|
||||||
|
uniform bool vflipped;
|
||||||
// Output fragment color
|
|
||||||
out vec4 finalColor;
|
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
// Fetch color from texture map
|
// Fetch color from texture map
|
||||||
vec3 color = texture(environmentMap, fragPosition).rgb;
|
vec4 texelColor = vec4(0.0);
|
||||||
|
|
||||||
|
if (vflipped) texelColor = textureCube(environmentMap, vec3(fragPosition.x, -fragPosition.y, fragPosition.z));
|
||||||
|
else texelColor = textureCube(environmentMap, fragPosition);
|
||||||
|
|
||||||
|
vec3 color = vec3(texelColor.x, texelColor.y, texelColor.z);
|
||||||
|
|
||||||
// Apply gamma correction
|
// Apply gamma correction
|
||||||
color = color/(color + vec3(1.0));
|
color = color/(color + vec3(1.0));
|
||||||
color = pow(color, vec3(1.0/2.2));
|
color = pow(color, vec3(1.0/2.2));
|
||||||
|
|
||||||
// Calculate final fragment color
|
// Calculate final fragment color
|
||||||
finalColor = vec4(color, 1.0);
|
gl_FragColor = vec4(color, 1.0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,14 @@
|
||||||
/*******************************************************************************************
|
#version 100
|
||||||
*
|
|
||||||
* rPBR [shader] - Background skybox vertex shader
|
|
||||||
*
|
|
||||||
* Copyright (c) 2017 Victor Fisac
|
|
||||||
*
|
|
||||||
**********************************************************************************************/
|
|
||||||
|
|
||||||
#version 330
|
|
||||||
|
|
||||||
// Input vertex attributes
|
// Input vertex attributes
|
||||||
in vec3 vertexPosition;
|
attribute vec3 vertexPosition;
|
||||||
|
|
||||||
// Input uniform values
|
// Input uniform values
|
||||||
uniform mat4 projection;
|
uniform mat4 projection;
|
||||||
uniform mat4 view;
|
uniform mat4 view;
|
||||||
|
|
||||||
// Output vertex attributes (to fragment shader)
|
// Output vertex attributes (to fragment shader)
|
||||||
out vec3 fragPosition;
|
varying vec3 fragPosition;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
@ -28,5 +20,5 @@ void main()
|
||||||
vec4 clipPos = projection*rotView*vec4(vertexPosition, 1.0);
|
vec4 clipPos = projection*rotView*vec4(vertexPosition, 1.0);
|
||||||
|
|
||||||
// Calculate final vertex position
|
// Calculate final vertex position
|
||||||
gl_Position = clipPos.xyww;
|
gl_Position = clipPos.xyzw;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,3 @@
|
||||||
/*******************************************************************************************
|
|
||||||
*
|
|
||||||
* rPBR [shader] - Equirectangular to cubemap fragment shader
|
|
||||||
*
|
|
||||||
* Copyright (c) 2017 Victor Fisac
|
|
||||||
*
|
|
||||||
**********************************************************************************************/
|
|
||||||
|
|
||||||
#version 330
|
#version 330
|
||||||
|
|
||||||
// Input vertex attributes (from vertex shader)
|
// Input vertex attributes (from vertex shader)
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@
|
||||||
*
|
*
|
||||||
* Copyright (c) 2017 Victor Fisac
|
* Copyright (c) 2017 Victor Fisac
|
||||||
*
|
*
|
||||||
|
* 19-Jun-2020 - modified by Giuseppe Mastrangelo (@peppemas) - VFlip Support
|
||||||
|
*
|
||||||
**********************************************************************************************/
|
**********************************************************************************************/
|
||||||
|
|
||||||
#version 330
|
#version 330
|
||||||
|
|
@ -13,6 +15,7 @@ in vec3 fragPosition;
|
||||||
|
|
||||||
// Input uniform values
|
// Input uniform values
|
||||||
uniform samplerCube environmentMap;
|
uniform samplerCube environmentMap;
|
||||||
|
uniform bool vflipped;
|
||||||
|
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
@ -20,7 +23,10 @@ out vec4 finalColor;
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
// Fetch color from texture map
|
// Fetch color from texture map
|
||||||
vec3 color = texture(environmentMap, fragPosition).rgb;
|
vec3 color = vec3(0.0);
|
||||||
|
|
||||||
|
if (vflipped) color = texture(environmentMap, vec3(fragPosition.x, -fragPosition.y, fragPosition.z)).rgb;
|
||||||
|
else color = texture(environmentMap, fragPosition).rgb;
|
||||||
|
|
||||||
// Apply gamma correction
|
// Apply gamma correction
|
||||||
color = color/(color + vec3(1.0));
|
color = color/(color + vec3(1.0));
|
||||||
|
|
|
||||||
103
examples/others/embedded_files_loading.c
Normal file
|
|
@ -0,0 +1,103 @@
|
||||||
|
/*******************************************************************************************
|
||||||
|
*
|
||||||
|
* raylib [others] example - Embedded files loading (Wave and Image)
|
||||||
|
*
|
||||||
|
* This example has been created using raylib 3.0 (www.raylib.com)
|
||||||
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
|
*
|
||||||
|
* Example contributed by Kristian Holmgren (@defutura) and reviewed by Ramon Santamaria (@raysan5)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 Kristian Holmgren (@defutura) and Ramon Santamaria (@raysan5)
|
||||||
|
*
|
||||||
|
********************************************************************************************/
|
||||||
|
|
||||||
|
#include "raylib.h"
|
||||||
|
|
||||||
|
#include "resources/audio_data.h" // Wave file exported with ExportWaveAsCode()
|
||||||
|
#include "resources/image_data.h" // Image file exported with ExportImageAsCode()
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
// Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
const int screenWidth = 800;
|
||||||
|
const int screenHeight = 450;
|
||||||
|
|
||||||
|
InitWindow(screenWidth, screenHeight, "raylib [others] example - embedded files loading");
|
||||||
|
|
||||||
|
InitAudioDevice(); // Initialize audio device
|
||||||
|
|
||||||
|
// Loaded in CPU memory (RAM) from header file (audio_data.h)
|
||||||
|
// Same as: Wave wave = LoadWave("sound.wav");
|
||||||
|
Wave wave = {
|
||||||
|
.data = AUDIO_DATA,
|
||||||
|
.sampleCount = AUDIO_SAMPLE_COUNT,
|
||||||
|
.sampleRate = AUDIO_SAMPLE_RATE,
|
||||||
|
.sampleSize = AUDIO_SAMPLE_SIZE,
|
||||||
|
.channels = AUDIO_CHANNELS
|
||||||
|
};
|
||||||
|
|
||||||
|
// Wave converted to Sound to be played
|
||||||
|
Sound sound = LoadSoundFromWave(wave);
|
||||||
|
|
||||||
|
// With a Wave loaded from file, after Sound is loaded, we can unload Wave
|
||||||
|
// but in our case, Wave is embedded in executable, in program .data segment
|
||||||
|
// we can not (and should not) try to free that private memory region
|
||||||
|
//UnloadWave(wave); // Do not unload wave data!
|
||||||
|
|
||||||
|
// Loaded in CPU memory (RAM) from header file (image_data.h)
|
||||||
|
// Same as: Image image = LoadImage("raylib_logo.png");
|
||||||
|
Image image = {
|
||||||
|
.data = IMAGE_DATA,
|
||||||
|
.width = IMAGE_WIDTH,
|
||||||
|
.height = IMAGE_HEIGHT,
|
||||||
|
.format = IMAGE_FORMAT,
|
||||||
|
.mipmaps = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
// Image converted to Texture (VRAM) to be drawn
|
||||||
|
Texture2D texture = LoadTextureFromImage(image);
|
||||||
|
|
||||||
|
// With an Image loaded from file, after Texture is loaded, we can unload Image
|
||||||
|
// but in our case, Image is embedded in executable, in program .data segment
|
||||||
|
// we can not (and should not) try to free that private memory region
|
||||||
|
//UnloadImage(image); // Do not unload image data!
|
||||||
|
|
||||||
|
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_SPACE)) PlaySound(sound); // Play sound
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Draw
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
BeginDrawing();
|
||||||
|
|
||||||
|
ClearBackground(RAYWHITE);
|
||||||
|
|
||||||
|
DrawTexture(texture, screenWidth/2 - texture.width/2, 40, WHITE);
|
||||||
|
|
||||||
|
DrawText("raylib logo and sound loaded from header files", 65, 320, 20, LIGHTGRAY);
|
||||||
|
DrawText("Press SPACE to PLAY the sound!", 200, 360, 20, LIGHTGRAY);
|
||||||
|
|
||||||
|
EndDrawing();
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
}
|
||||||
|
|
||||||
|
// De-Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
UnloadSound(sound); // Unload sound from VRAM
|
||||||
|
UnloadTexture(texture); // Unload texture from VRAM
|
||||||
|
|
||||||
|
CloseAudioDevice(); // Close audio device
|
||||||
|
|
||||||
|
CloseWindow(); // Close window and OpenGL context
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
@ -5,8 +5,9 @@
|
||||||
* NOTE: This example does not require any graphic device, it can run directly on console.
|
* NOTE: This example does not require any graphic device, it can run directly on console.
|
||||||
*
|
*
|
||||||
* DEPENDENCIES:
|
* DEPENDENCIES:
|
||||||
* mini_al.h - Audio device management lib (https://github.com/dr-soft/mini_al)
|
* miniaudio.h - Audio device management lib (https://github.com/dr-soft/miniaudio)
|
||||||
* stb_vorbis.h - Ogg audio files loading (http://www.nothings.org/stb_vorbis/)
|
* stb_vorbis.h - Ogg audio files loading (http://www.nothings.org/stb_vorbis/)
|
||||||
|
* dr_wav.h - WAV audio file loading (https://github.com/mackron/dr_libs)
|
||||||
* dr_mp3.h - MP3 audio file loading (https://github.com/mackron/dr_libs)
|
* dr_mp3.h - MP3 audio file loading (https://github.com/mackron/dr_libs)
|
||||||
* dr_flac.h - FLAC audio file loading (https://github.com/mackron/dr_libs)
|
* dr_flac.h - FLAC audio file loading (https://github.com/mackron/dr_libs)
|
||||||
* jar_xm.h - XM module file loading
|
* jar_xm.h - XM module file loading
|
||||||
|
|
@ -22,7 +23,7 @@
|
||||||
* 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,
|
||||||
* BSD-like license that allows static linking with closed source software:
|
* BSD-like license that allows static linking with closed source software:
|
||||||
*
|
*
|
||||||
* Copyright (c) 2014-2019 Ramon Santamaria (@raysan5)
|
* Copyright (c) 2014-2020 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.
|
||||||
|
|
@ -48,13 +49,73 @@
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
#include <conio.h> // Windows only, no stardard library
|
#include <conio.h> // Windows only, no stardard library
|
||||||
#else
|
#else
|
||||||
|
// Required for kbhit() function in non-Windows platforms
|
||||||
// Provide kbhit() function in non-Windows platforms
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <termios.h>
|
#include <termios.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define KEY_ESCAPE 27
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
// Module Functions Declaration
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
#if !defined(_WIN32)
|
||||||
|
static int kbhit(void); // Check if a key has been pressed
|
||||||
|
static char getch(); // Get pressed character
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------
|
||||||
|
// Program main entry point
|
||||||
|
//------------------------------------------------------------------------------------
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
// Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
static unsigned char key = 0;
|
||||||
|
|
||||||
|
InitAudioDevice();
|
||||||
|
|
||||||
|
Sound fxWav = LoadSound("resources/audio/weird.wav"); // Load WAV audio file
|
||||||
|
Sound fxOgg = LoadSound("resources/audio/target.ogg"); // Load OGG audio file
|
||||||
|
|
||||||
|
Music music = LoadMusicStream("resources/audio/country.mp3");
|
||||||
|
PlayMusicStream(music);
|
||||||
|
|
||||||
|
printf("\nPress s or d to play sounds, ESC to stop...\n");
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Main loop
|
||||||
|
while (key != KEY_ESCAPE)
|
||||||
|
{
|
||||||
|
if (kbhit()) key = getch();
|
||||||
|
|
||||||
|
if ((key == 's') || (key == 'S')) PlaySound(fxWav);
|
||||||
|
if ((key == 'd') || (key == 'D')) PlaySound(fxOgg);
|
||||||
|
|
||||||
|
key = 0;
|
||||||
|
|
||||||
|
UpdateMusicStream(music);
|
||||||
|
}
|
||||||
|
|
||||||
|
// De-Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
UnloadSound(fxWav); // Unload sound data
|
||||||
|
UnloadSound(fxOgg); // Unload sound data
|
||||||
|
|
||||||
|
UnloadMusicStream(music); // Unload music stream data
|
||||||
|
|
||||||
|
CloseAudioDevice();
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
// Module Functions Definition
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
#if !defined(_WIN32)
|
||||||
// Check if a key has been pressed
|
// Check if a key has been pressed
|
||||||
static int kbhit(void)
|
static int kbhit(void)
|
||||||
{
|
{
|
||||||
|
|
@ -85,57 +146,4 @@ static int kbhit(void)
|
||||||
|
|
||||||
// Get pressed character
|
// Get pressed character
|
||||||
static char getch() { return getchar(); }
|
static char getch() { return getchar(); }
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define KEY_ESCAPE 27
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
// Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
static unsigned char key = 0;
|
|
||||||
|
|
||||||
InitAudioDevice();
|
|
||||||
|
|
||||||
Sound fxWav = LoadSound("resources/audio/weird.wav"); // Load WAV audio file
|
|
||||||
Sound fxOgg = LoadSound("resources/audio/tanatana.ogg"); // Load OGG audio file
|
|
||||||
|
|
||||||
Music music = LoadMusicStream("resources/audio/guitar_noodling.ogg");
|
|
||||||
PlayMusicStream(music);
|
|
||||||
|
|
||||||
printf("\nPress s or d to play sounds...\n");
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Main loop
|
|
||||||
while (key != KEY_ESCAPE)
|
|
||||||
{
|
|
||||||
if (kbhit()) key = getch();
|
|
||||||
|
|
||||||
if (key == 's')
|
|
||||||
{
|
|
||||||
PlaySound(fxWav);
|
|
||||||
key = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == 'd')
|
|
||||||
{
|
|
||||||
PlaySound(fxOgg);
|
|
||||||
key = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
UpdateMusicStream(music);
|
|
||||||
}
|
|
||||||
|
|
||||||
// De-Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
UnloadSound(fxWav); // Unload sound data
|
|
||||||
UnloadSound(fxOgg); // Unload sound data
|
|
||||||
|
|
||||||
UnloadMusicStream(music); // Unload music stream data
|
|
||||||
|
|
||||||
CloseAudioDevice();
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
|
||||||
BIN
examples/others/resources/audio/country.mp3
Normal file
BIN
examples/others/resources/audio/target.ogg
Normal file
4893
examples/others/resources/audio_data.h
Normal file
9848
examples/others/resources/image_data.h
Normal file
|
|
@ -219,7 +219,7 @@ int main(void)
|
||||||
// GLFW3: Error callback
|
// GLFW3: Error callback
|
||||||
static void ErrorCallback(int error, const char *description)
|
static void ErrorCallback(int error, const char *description)
|
||||||
{
|
{
|
||||||
fprintf(stderr, description);
|
fprintf(stderr, "%s", description);
|
||||||
}
|
}
|
||||||
|
|
||||||
// GLFW3: Keyboard callback
|
// GLFW3: Keyboard callback
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 218 KiB After Width: | Height: | Size: 218 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 56 KiB |
4
examples/shaders/resources/models/LICENSE
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
Medieval City models and textures have been created by Alberto Cano,
|
||||||
|
and licensed as Creative Commons Attribution-NonCommercial 4.0.
|
||||||
|
|
||||||
|
Check for details: https://creativecommons.org/licenses/by-nc/4.0/legalcode
|
||||||
|
Before Width: | Height: | Size: 363 KiB After Width: | Height: | Size: 363 KiB |
|
Before Width: | Height: | Size: 350 KiB After Width: | Height: | Size: 350 KiB |
|
Before Width: | Height: | Size: 437 KiB After Width: | Height: | Size: 437 KiB |
|
Before Width: | Height: | Size: 568 KiB After Width: | Height: | Size: 567 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 5.6 KiB |
|
|
@ -0,0 +1,36 @@
|
||||||
|
#version 330
|
||||||
|
|
||||||
|
// Input vertex attributes
|
||||||
|
in vec3 vertexPosition;
|
||||||
|
in vec2 vertexTexCoord;
|
||||||
|
in vec3 vertexNormal;
|
||||||
|
in vec4 vertexColor;
|
||||||
|
|
||||||
|
layout (location = 12) in mat4 instance;
|
||||||
|
|
||||||
|
// Input uniform values
|
||||||
|
uniform mat4 mvp;
|
||||||
|
|
||||||
|
// Output vertex attributes (to fragment shader)
|
||||||
|
out vec3 fragPosition;
|
||||||
|
out vec2 fragTexCoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
out vec3 fragNormal;
|
||||||
|
|
||||||
|
// NOTE: Add here your custom variables
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
// Send vertex attributes to fragment shader
|
||||||
|
fragPosition = vec3(instance * vec4(vertexPosition, 1.0));
|
||||||
|
fragTexCoord = vertexTexCoord;
|
||||||
|
fragColor = vertexColor;
|
||||||
|
|
||||||
|
mat3 normalMatrix = transpose(inverse(mat3(instance)));
|
||||||
|
fragNormal = normalize(normalMatrix * vertexNormal);
|
||||||
|
|
||||||
|
mat4 mvpi = mvp * instance;
|
||||||
|
|
||||||
|
// Calculate final vertex position
|
||||||
|
gl_Position = mvpi * vec4(vertexPosition, 1.0);
|
||||||
|
}
|
||||||
|
|
@ -47,7 +47,7 @@ void main()
|
||||||
{
|
{
|
||||||
for (int i = 2; (i < max(2, sqrt(value) + 1)); i++)
|
for (int i = 2; (i < max(2, sqrt(value) + 1)); i++)
|
||||||
{
|
{
|
||||||
if ((value - i*floor(value/i)) == 0)
|
if ((value - i*floor(float(value)/float(i))) == 0)
|
||||||
{
|
{
|
||||||
color = Colorizer(float(i), scale);
|
color = Colorizer(float(i), scale);
|
||||||
//break; // Uncomment to color by the largest factor instead
|
//break; // Uncomment to color by the largest factor instead
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ void main()
|
||||||
}
|
}
|
||||||
|
|
||||||
finalColor = (texelColor*((colDiffuse + vec4(specular, 1.0))*vec4(lightDot, 1.0)));
|
finalColor = (texelColor*((colDiffuse + vec4(specular, 1.0))*vec4(lightDot, 1.0)));
|
||||||
finalColor += texelColor*(ambient/10.0);
|
finalColor += texelColor*(ambient/10.0)*colDiffuse;
|
||||||
|
|
||||||
// Gamma correction
|
// Gamma correction
|
||||||
finalColor = pow(finalColor, vec4(1.0/2.2));
|
finalColor = pow(finalColor, vec4(1.0/2.2));
|
||||||
|
|
|
||||||
40
examples/shaders/resources/shaders/glsl330/reload.fs
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
#version 330
|
||||||
|
|
||||||
|
// Input vertex attributes (from vertex shader)
|
||||||
|
in vec2 fragTexCoord; // Texture coordinates (sampler2D)
|
||||||
|
in vec4 fragColor; // Tint color
|
||||||
|
|
||||||
|
// Output fragment color
|
||||||
|
out vec4 finalColor; // Output fragment color
|
||||||
|
|
||||||
|
// Uniform inputs
|
||||||
|
uniform vec2 resolution; // Viewport resolution (in pixels)
|
||||||
|
uniform vec2 mouse; // Mouse pixel xy coordinates
|
||||||
|
uniform float time; // Total run time (in secods)
|
||||||
|
|
||||||
|
// Draw circle
|
||||||
|
vec4 DrawCircle(vec2 fragCoord, vec2 position, float radius, vec3 color)
|
||||||
|
{
|
||||||
|
float d = length(position - fragCoord) - radius;
|
||||||
|
float t = clamp(d, 0.0, 1.0);
|
||||||
|
return vec4(color, 1.0 - t);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
vec2 fragCoord = gl_FragCoord.xy;
|
||||||
|
vec2 position = vec2(mouse.x, resolution.y - mouse.y);
|
||||||
|
float radius = 40.0;
|
||||||
|
|
||||||
|
// Draw background layer
|
||||||
|
vec4 colorA = vec4(0.2,0.2,0.8, 1.0);
|
||||||
|
vec4 colorB = vec4(1.0,0.7,0.2, 1.0);
|
||||||
|
vec4 layer1 = mix(colorA, colorB, abs(sin(time*0.1)));
|
||||||
|
|
||||||
|
// Draw circle layer
|
||||||
|
vec3 color = vec3(0.9, 0.16, 0.21);
|
||||||
|
vec4 layer2 = DrawCircle(fragCoord, position, radius, color);
|
||||||
|
|
||||||
|
// Blend the two layers
|
||||||
|
finalColor = mix(layer1, layer2, layer2.a);
|
||||||
|
}
|
||||||