mirror of
https://github.com/godotengine/godot.git
synced 2025-12-07 22:00:10 +00:00
Merge pull request #105733 from akien-mga/4.1-ci-sync-with-4.4
[4.1] CI: Sync configuration with 4.4 branch
This commit is contained in:
commit
fb8d0634f2
95 changed files with 633 additions and 466 deletions
8
.github/actions/download-artifact/action.yml
vendored
8
.github/actions/download-artifact/action.yml
vendored
|
|
@ -1,15 +1,17 @@
|
|||
name: Download Godot artifact
|
||||
description: Download the Godot artifact.
|
||||
|
||||
inputs:
|
||||
name:
|
||||
description: The artifact name.
|
||||
default: "${{ github.job }}"
|
||||
default: ${{ github.job }}
|
||||
path:
|
||||
description: The path to download and extract to.
|
||||
required: true
|
||||
default: "./"
|
||||
default: ./
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
using: composite
|
||||
steps:
|
||||
- name: Download Godot Artifact
|
||||
uses: actions/download-artifact@v4
|
||||
|
|
|
|||
24
.github/actions/godot-api-dump/action.yml
vendored
24
.github/actions/godot-api-dump/action.yml
vendored
|
|
@ -1,24 +0,0 @@
|
|||
name: Dump Godot API
|
||||
description: Dump Godot API for GDExtension
|
||||
inputs:
|
||||
bin:
|
||||
description: The path to the Godot executable
|
||||
required: true
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
# Dump GDExtension interface and API
|
||||
- name: Dump GDExtension interface and API for godot-cpp build
|
||||
shell: sh
|
||||
run: |
|
||||
${{ inputs.bin }} --headless --dump-gdextension-interface --dump-extension-api
|
||||
mkdir godot-api
|
||||
cp -f gdextension_interface.h godot-api/
|
||||
cp -f extension_api.json godot-api/
|
||||
|
||||
- name: Upload API dump
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
name: 'godot-api-dump'
|
||||
path: './godot-api/*'
|
||||
|
||||
36
.github/actions/godot-build/action.yml
vendored
36
.github/actions/godot-build/action.yml
vendored
|
|
@ -1,36 +1,52 @@
|
|||
name: Build Godot
|
||||
description: Build Godot with the provided options.
|
||||
|
||||
inputs:
|
||||
target:
|
||||
description: Build target (editor, template_release, template_debug).
|
||||
default: "editor"
|
||||
default: editor
|
||||
tests:
|
||||
description: Unit tests.
|
||||
default: false
|
||||
required: false
|
||||
platform:
|
||||
description: Target platform.
|
||||
required: false
|
||||
sconsflags:
|
||||
description: Additional SCons flags.
|
||||
default: ""
|
||||
required: false
|
||||
scons-cache:
|
||||
description: The scons cache path.
|
||||
default: "${{ github.workspace }}/.scons-cache/"
|
||||
description: The SCons cache path.
|
||||
default: ${{ github.workspace }}/.scons_cache/
|
||||
scons-cache-limit:
|
||||
description: The scons cache size limit.
|
||||
description: The SCons cache size limit.
|
||||
# actions/cache has 10 GiB limit, and GitHub runners have a 14 GiB disk.
|
||||
# Limit to 7 GiB to avoid having the extracted cache fill the disk.
|
||||
default: 7168
|
||||
runs:
|
||||
using: "composite"
|
||||
using: composite
|
||||
steps:
|
||||
- name: Scons Build
|
||||
- name: SCons Build
|
||||
shell: sh
|
||||
env:
|
||||
SCONSFLAGS: ${{ inputs.sconsflags }}
|
||||
SCONS_CACHE: ${{ inputs.scons-cache }}
|
||||
SCONS_CACHE_LIMIT: ${{ inputs.scons-cache-limit }}
|
||||
SCONSFLAGS: ${{ inputs.sconsflags }}
|
||||
SCONS_CACHE: ${{ inputs.scons-cache }}
|
||||
SCONS_CACHE_LIMIT: ${{ inputs.scons-cache-limit }}
|
||||
run: |
|
||||
echo "Building with flags:" platform=${{ inputs.platform }} target=${{ inputs.target }} tests=${{ inputs.tests }} ${{ env.SCONSFLAGS }}
|
||||
if [ "${{ inputs.target }}" != "editor" ]; then rm -rf editor; fi # Ensure we don't include editor code.
|
||||
|
||||
if [ "${{ inputs.target }}" != "editor" ]; then
|
||||
# Ensure we don't include editor code in export template builds.
|
||||
rm -rf editor
|
||||
fi
|
||||
|
||||
if [ "${{ github.event.number }}" != "" ]; then
|
||||
# Set build identifier with pull request number if available. This is displayed throughout the editor.
|
||||
export BUILD_NAME="gh-${{ github.event.number }}"
|
||||
else
|
||||
export BUILD_NAME="gh"
|
||||
fi
|
||||
|
||||
scons platform=${{ inputs.platform }} target=${{ inputs.target }} tests=${{ inputs.tests }} ${{ env.SCONSFLAGS }}
|
||||
ls -l bin/
|
||||
|
|
|
|||
|
|
@ -1,21 +1,21 @@
|
|||
name: Setup Godot build cache
|
||||
description: Setup Godot build cache.
|
||||
name: Restore Godot build cache
|
||||
description: Restore Godot build cache.
|
||||
inputs:
|
||||
cache-name:
|
||||
description: The cache base name (job name by default).
|
||||
default: "${{github.job}}"
|
||||
default: ${{ github.job }}
|
||||
scons-cache:
|
||||
description: The scons cache path.
|
||||
default: "${{github.workspace}}/.scons-cache/"
|
||||
description: The SCons cache path.
|
||||
default: ${{ github.workspace }}/.scons_cache/
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
using: composite
|
||||
steps:
|
||||
# Upload cache on completion and check it out now
|
||||
- name: Load .scons_cache directory
|
||||
uses: actions/cache@v4
|
||||
- name: Restore SCons cache directory
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: ${{inputs.scons-cache}}
|
||||
key: ${{inputs.cache-name}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}}
|
||||
path: ${{ inputs.scons-cache }}
|
||||
key: ${{ inputs.cache-name }}-${{ env.GODOT_BASE_BRANCH }}-${{ github.ref }}-${{ github.sha }}
|
||||
|
||||
# We try to match an existing cache to restore from it. Each potential key is checked against
|
||||
# all existing caches as a prefix. E.g. 'linux-template-minimal' would match any cache that
|
||||
|
|
@ -29,7 +29,7 @@ runs:
|
|||
# 4. A partial match for the same base branch only (not ideal, matches any PR with the same base branch).
|
||||
|
||||
restore-keys: |
|
||||
${{inputs.cache-name}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}}
|
||||
${{inputs.cache-name}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}
|
||||
${{inputs.cache-name}}-${{env.GODOT_BASE_BRANCH}}-refs/heads/${{env.GODOT_BASE_BRANCH}}
|
||||
${{inputs.cache-name}}-${{env.GODOT_BASE_BRANCH}}
|
||||
${{ inputs.cache-name }}-${{ env.GODOT_BASE_BRANCH }}-${{ github.ref }}-${{ github.sha }}
|
||||
${{ inputs.cache-name }}-${{ env.GODOT_BASE_BRANCH }}-${{ github.ref }}
|
||||
${{ inputs.cache-name }}-${{ env.GODOT_BASE_BRANCH }}-refs/heads/${{ env.GODOT_BASE_BRANCH }}
|
||||
${{ inputs.cache-name }}-${{ env.GODOT_BASE_BRANCH }}
|
||||
18
.github/actions/godot-cache-save/action.yml
vendored
Normal file
18
.github/actions/godot-cache-save/action.yml
vendored
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
name: Save Godot build cache
|
||||
description: Save Godot build cache.
|
||||
inputs:
|
||||
cache-name:
|
||||
description: The cache base name (job name by default).
|
||||
default: ${{ github.job }}
|
||||
scons-cache:
|
||||
description: The SCons cache path.
|
||||
default: ${{ github.workspace }}/.scons_cache/
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Save SCons cache directory
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
path: ${{ inputs.scons-cache }}
|
||||
key: ${{ inputs.cache-name }}-${{ env.GODOT_BASE_BRANCH }}-${{ github.ref }}-${{ github.sha }}
|
||||
|
|
@ -1,11 +1,13 @@
|
|||
name: Test Godot project converter
|
||||
description: Test the Godot project converter.
|
||||
|
||||
inputs:
|
||||
bin:
|
||||
description: The path to the Godot executable
|
||||
required: true
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
using: composite
|
||||
steps:
|
||||
- name: Test 3-to-4 conversion
|
||||
shell: sh
|
||||
|
|
|
|||
40
.github/actions/godot-cpp-build/action.yml
vendored
Normal file
40
.github/actions/godot-cpp-build/action.yml
vendored
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
name: Build godot-cpp
|
||||
description: Build godot-cpp with the provided options.
|
||||
|
||||
inputs:
|
||||
bin:
|
||||
description: Path to the Godot binary.
|
||||
required: true
|
||||
type: string
|
||||
scons-flags:
|
||||
description: Additional SCons flags.
|
||||
type: string
|
||||
scons-cache:
|
||||
description: The SCons cache path.
|
||||
default: ${{ github.workspace }}/.scons_cache/
|
||||
type: string
|
||||
godot-cpp-branch:
|
||||
description: The godot-cpp branch.
|
||||
default: master
|
||||
type: string
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
repository: godotengine/godot-cpp
|
||||
ref: ${{ inputs.godot-cpp-branch }}
|
||||
path: godot-cpp
|
||||
|
||||
- name: Extract API
|
||||
shell: sh
|
||||
run: ${{ inputs.bin }} --headless --dump-gdextension-interface --dump-extension-api
|
||||
|
||||
- name: SCons Build
|
||||
shell: sh
|
||||
env:
|
||||
SCONS_CACHE: ${{ inputs.scons-cache }}
|
||||
run: scons --directory=./godot-cpp/test "gdextension_dir=${{ github.workspace }}" ${{ inputs.scons-flags }}
|
||||
28
.github/actions/godot-deps/action.yml
vendored
28
.github/actions/godot-deps/action.yml
vendored
|
|
@ -1,27 +1,31 @@
|
|||
name: Setup python and scons
|
||||
description: Setup python, install the pip version of scons.
|
||||
name: Setup Python and SCons
|
||||
description: Setup Python, install the pip version of SCons.
|
||||
|
||||
inputs:
|
||||
python-version:
|
||||
description: The python version to use.
|
||||
default: "3.x"
|
||||
description: The Python version to use.
|
||||
default: 3.x
|
||||
python-arch:
|
||||
description: The python architecture.
|
||||
default: "x64"
|
||||
description: The Python architecture.
|
||||
default: x64
|
||||
scons-version:
|
||||
description: The SCons version to use.
|
||||
default: 4.8.1
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
using: composite
|
||||
steps:
|
||||
# Use python 3.x release (works cross platform)
|
||||
- name: Set up Python 3.x
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
# Semantic version range syntax or exact version of a Python version
|
||||
# Semantic version range syntax or exact version of a Python version.
|
||||
python-version: ${{ inputs.python-version }}
|
||||
# Optional - x64 or x86 architecture, defaults to x64
|
||||
# Optional - x64 or x86 architecture, defaults to x64.
|
||||
architecture: ${{ inputs.python-arch }}
|
||||
|
||||
- name: Setup scons
|
||||
- name: Setup SCons
|
||||
shell: bash
|
||||
run: |
|
||||
python -c "import sys; print(sys.version)"
|
||||
python -m pip install scons==4.4.0
|
||||
python -m pip install scons==${{ inputs.scons-version }}
|
||||
scons --version
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
name: Test Godot project
|
||||
description: Run the test Godot project.
|
||||
|
||||
inputs:
|
||||
bin:
|
||||
description: The path to the Godot executable
|
||||
required: true
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
using: composite
|
||||
steps:
|
||||
# Download and extract zip archive with project, folder is renamed to be able to easy change used project
|
||||
- name: Download test project
|
||||
|
|
|
|||
11
.github/actions/upload-artifact/action.yml
vendored
11
.github/actions/upload-artifact/action.yml
vendored
|
|
@ -1,19 +1,22 @@
|
|||
name: Upload Godot artifact
|
||||
description: Upload the Godot artifact.
|
||||
|
||||
inputs:
|
||||
name:
|
||||
description: The artifact name.
|
||||
default: "${{ github.job }}"
|
||||
default: ${{ github.job }}
|
||||
path:
|
||||
description: The path to upload.
|
||||
required: true
|
||||
default: "bin/*"
|
||||
default: bin/*
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
using: composite
|
||||
steps:
|
||||
- name: Upload Godot Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ inputs.name }}
|
||||
path: ${{ inputs.path }}
|
||||
retention-days: 14
|
||||
# Default is 90 days.
|
||||
retention-days: 60
|
||||
|
|
|
|||
80
.github/workflows/android_builds.yml
vendored
80
.github/workflows/android_builds.yml
vendored
|
|
@ -5,56 +5,88 @@ on:
|
|||
# Global Settings
|
||||
env:
|
||||
# Used for the cache key. Add version suffix to force clean build.
|
||||
GODOT_BASE_BRANCH: '4.1'
|
||||
GODOT_BASE_BRANCH: 4.1
|
||||
SCONSFLAGS: verbose=yes warnings=extra werror=yes debug_symbols=no module_text_server_fb_enabled=yes
|
||||
|
||||
concurrency:
|
||||
group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-android
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
android-template:
|
||||
runs-on: "ubuntu-20.04"
|
||||
name: Template (target=template_release)
|
||||
build-android:
|
||||
runs-on: ubuntu-24.04
|
||||
name: ${{ matrix.name }}
|
||||
timeout-minutes: 60
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- name: Editor (target=editor)
|
||||
cache-name: android-editor
|
||||
target: editor
|
||||
tests: false
|
||||
sconsflags: arch=arm64 production=yes
|
||||
|
||||
- name: Template arm32 (target=template_release, arch=arm32)
|
||||
cache-name: android-template-arm32
|
||||
target: template_release
|
||||
tests: false
|
||||
sconsflags: arch=arm32
|
||||
|
||||
- name: Template arm64 (target=template_release, arch=arm64)
|
||||
cache-name: android-template-arm64
|
||||
target: template_release
|
||||
tests: false
|
||||
sconsflags: arch=arm64
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Set up Java 11
|
||||
- name: Set up Java 17
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: temurin
|
||||
java-version: 11
|
||||
java-version: 17
|
||||
|
||||
- name: Setup Godot build cache
|
||||
uses: ./.github/actions/godot-cache
|
||||
- name: Restore Godot build cache
|
||||
uses: ./.github/actions/godot-cache-restore
|
||||
with:
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Setup python and scons
|
||||
- name: Setup Python and SCons
|
||||
uses: ./.github/actions/godot-deps
|
||||
|
||||
- name: Compilation (arm32)
|
||||
- name: Compilation
|
||||
uses: ./.github/actions/godot-build
|
||||
with:
|
||||
sconsflags: ${{ env.SCONSFLAGS }} arch=arm32
|
||||
sconsflags: ${{ env.SCONSFLAGS }} ${{ matrix.sconsflags }}
|
||||
platform: android
|
||||
target: template_release
|
||||
tests: false
|
||||
target: ${{ matrix.target }}
|
||||
tests: ${{ matrix.tests }}
|
||||
|
||||
- name: Compilation (arm64)
|
||||
uses: ./.github/actions/godot-build
|
||||
- name: Save Godot build cache
|
||||
uses: ./.github/actions/godot-cache-save
|
||||
with:
|
||||
sconsflags: ${{ env.SCONSFLAGS }} arch=arm64
|
||||
platform: android
|
||||
target: template_release
|
||||
tests: false
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Generate Godot templates
|
||||
if: matrix.target == 'template_release'
|
||||
run: |
|
||||
cd platform/android/java
|
||||
./gradlew generateGodotTemplates
|
||||
cd ../../..
|
||||
ls -l bin/
|
||||
|
||||
- name: Generate Godot editor
|
||||
if: matrix.target == 'editor'
|
||||
run: |
|
||||
cd platform/android/java
|
||||
./gradlew generateGodotEditor
|
||||
cd ../../..
|
||||
ls -l bin/android_editor_builds/
|
||||
|
||||
- name: Upload artifact
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
name: ${{ matrix.cache-name }}
|
||||
|
|
|
|||
54
.github/workflows/godot_cpp_test.yml
vendored
54
.github/workflows/godot_cpp_test.yml
vendored
|
|
@ -1,54 +0,0 @@
|
|||
name: 🪲 Godot CPP
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
# Global Settings
|
||||
env:
|
||||
# Used for the cache key, and godot-cpp checkout. Add version suffix to force clean build.
|
||||
GODOT_BASE_BRANCH: '4.1'
|
||||
|
||||
concurrency:
|
||||
group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-cpp-tests
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
godot-cpp-tests:
|
||||
runs-on: "ubuntu-20.04"
|
||||
name: "Build and test Godot CPP"
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup python and scons
|
||||
uses: ./.github/actions/godot-deps
|
||||
|
||||
# Checkout godot-cpp
|
||||
- name: Checkout godot-cpp
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: godotengine/godot-cpp
|
||||
ref: ${{ env.GODOT_BASE_BRANCH }}
|
||||
submodules: 'recursive'
|
||||
path: 'godot-cpp'
|
||||
|
||||
# Download generated API dump
|
||||
- name: Download GDExtension interface and API dump
|
||||
uses: ./.github/actions/download-artifact
|
||||
with:
|
||||
name: 'godot-api-dump'
|
||||
path: './godot-api'
|
||||
|
||||
# Extract and override existing files with generated files
|
||||
- name: Extract GDExtension interface and API dump
|
||||
run: |
|
||||
cp -f godot-api/gdextension_interface.h godot-cpp/gdextension/
|
||||
cp -f godot-api/extension_api.json godot-cpp/gdextension/
|
||||
|
||||
# TODO: Add caching to the scons build and store it for CI via the godot-cache
|
||||
# action.
|
||||
|
||||
# Build godot-cpp test extension
|
||||
- name: Build godot-cpp test extension
|
||||
run: |
|
||||
cd godot-cpp/test
|
||||
scons target=template_debug dev_build=yes
|
||||
cd ../..
|
||||
24
.github/workflows/ios_builds.yml
vendored
24
.github/workflows/ios_builds.yml
vendored
|
|
@ -5,26 +5,26 @@ on:
|
|||
# Global Settings
|
||||
env:
|
||||
# Used for the cache key. Add version suffix to force clean build.
|
||||
GODOT_BASE_BRANCH: '4.1'
|
||||
GODOT_BASE_BRANCH: 4.1
|
||||
SCONSFLAGS: verbose=yes warnings=extra werror=yes debug_symbols=no module_text_server_fb_enabled=yes
|
||||
|
||||
concurrency:
|
||||
group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-ios
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
ios-template:
|
||||
runs-on: "macos-latest"
|
||||
runs-on: macos-latest
|
||||
name: Template (target=template_release)
|
||||
timeout-minutes: 60
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup Godot build cache
|
||||
uses: ./.github/actions/godot-cache
|
||||
- name: Restore Godot build cache
|
||||
uses: ./.github/actions/godot-cache-restore
|
||||
continue-on-error: true
|
||||
|
||||
- name: Setup python and scons
|
||||
- name: Setup Python and SCons
|
||||
uses: ./.github/actions/godot-deps
|
||||
|
||||
- name: Compilation (arm64)
|
||||
|
|
@ -35,5 +35,9 @@ jobs:
|
|||
target: template_release
|
||||
tests: false
|
||||
|
||||
- name: Save Godot build cache
|
||||
uses: ./.github/actions/godot-cache-save
|
||||
continue-on-error: true
|
||||
|
||||
- name: Upload artifact
|
||||
uses: ./.github/actions/upload-artifact
|
||||
|
|
|
|||
118
.github/workflows/linux_builds.yml
vendored
118
.github/workflows/linux_builds.yml
vendored
|
|
@ -5,19 +5,18 @@ on:
|
|||
# Global Settings
|
||||
env:
|
||||
# Used for the cache key. Add version suffix to force clean build.
|
||||
GODOT_BASE_BRANCH: '4.1'
|
||||
GODOT_BASE_BRANCH: 4.1
|
||||
GODOT_CPP_BRANCH: 4.1
|
||||
SCONSFLAGS: verbose=yes warnings=extra werror=yes module_text_server_fb_enabled=yes
|
||||
DOTNET_NOLOGO: true
|
||||
DOTNET_CLI_TELEMETRY_OPTOUT: true
|
||||
|
||||
concurrency:
|
||||
group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-linux
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build-linux:
|
||||
runs-on: "ubuntu-20.04"
|
||||
# Stay one LTS before latest to increase portability of Linux artifacts.
|
||||
runs-on: ubuntu-22.04
|
||||
name: ${{ matrix.name }}
|
||||
timeout-minutes: 120
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
|
|
@ -26,25 +25,25 @@ jobs:
|
|||
cache-name: linux-editor-mono
|
||||
target: editor
|
||||
sconsflags: module_mono_enabled=yes
|
||||
bin: "./bin/godot.linuxbsd.editor.x86_64.mono"
|
||||
bin: ./bin/godot.linuxbsd.editor.x86_64.mono
|
||||
build-mono: true
|
||||
tests: false # Disabled due freeze caused by mix Mono build and CI
|
||||
doc-test: true
|
||||
proj-conv: true
|
||||
api-compat: true
|
||||
artifact: true
|
||||
# Validate godot-cpp compatibility on one arbitrary editor build.
|
||||
godot-cpp: true
|
||||
|
||||
- name: Editor with doubles and GCC sanitizers (target=editor, tests=yes, dev_build=yes, scu_build=yes, precision=double, use_asan=yes, use_ubsan=yes, linker=gold)
|
||||
cache-name: linux-editor-double-sanitizers
|
||||
target: editor
|
||||
# Debug symbols disabled as they're huge on this build and we hit the 14 GB limit for runners.
|
||||
sconsflags: dev_build=yes scu_build=yes debug_symbols=no precision=double use_asan=yes use_ubsan=yes linker=gold
|
||||
bin: "./bin/godot.linuxbsd.editor.dev.double.x86_64.san"
|
||||
bin: ./bin/godot.linuxbsd.editor.dev.double.x86_64.san
|
||||
build-mono: false
|
||||
tests: true
|
||||
proj-test: true
|
||||
# Generate an API dump for godot-cpp tests.
|
||||
api-dump: true
|
||||
# Skip 2GiB artifact speeding up action.
|
||||
artifact: false
|
||||
|
||||
|
|
@ -52,16 +51,31 @@ jobs:
|
|||
cache-name: linux-editor-llvm-sanitizers
|
||||
target: editor
|
||||
sconsflags: dev_build=yes use_asan=yes use_ubsan=yes use_llvm=yes linker=lld
|
||||
bin: "./bin/godot.linuxbsd.editor.dev.x86_64.llvm.san"
|
||||
bin: ./bin/godot.linuxbsd.editor.dev.x86_64.llvm.san
|
||||
build-mono: false
|
||||
tests: true
|
||||
# Skip 2GiB artifact speeding up action.
|
||||
artifact: false
|
||||
# Test our oldest supported SCons/Python versions on one arbitrary editor build.
|
||||
legacy-scons: true
|
||||
|
||||
- name: Template w/ Mono (target=template_release)
|
||||
# Template builds need various fixes for unit tests to be supported in 4.1,
|
||||
# so we don't enable tests in this legacy branch.
|
||||
|
||||
- name: Template w/ Mono, release (target=template_release)
|
||||
cache-name: linux-template-mono
|
||||
target: template_release
|
||||
sconsflags: module_mono_enabled=yes
|
||||
bin: ./bin/godot.linuxbsd.template_release.x86_64.mono
|
||||
build-mono: false
|
||||
tests: false
|
||||
artifact: true
|
||||
|
||||
- name: Template w/ Mono, debug (target=template_debug)
|
||||
cache-name: linux-template-mono-debug
|
||||
target: template_debug
|
||||
sconsflags: module_mono_enabled=yes
|
||||
bin: ./bin/godot.linuxbsd.template_debug.x86_64.mono
|
||||
build-mono: false
|
||||
tests: false
|
||||
artifact: true
|
||||
|
|
@ -70,18 +84,23 @@ jobs:
|
|||
cache-name: linux-template-minimal
|
||||
target: template_release
|
||||
sconsflags: modules_enabled_by_default=no disable_3d=yes disable_advanced_gui=yes deprecated=no minizip=no
|
||||
bin: ./bin/godot.linuxbsd.template_release.x86_64
|
||||
tests: false
|
||||
artifact: true
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
# Need newer mesa for lavapipe to work properly.
|
||||
- name: Linux dependencies for tests
|
||||
if: ${{ matrix.proj-test }}
|
||||
if: matrix.proj-test
|
||||
run: |
|
||||
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
|
||||
sudo add-apt-repository ppa:kisak/kisak-mesa
|
||||
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EB8B81E14DA65431D7504EA8F63F0F2B90935439
|
||||
sudo add-apt-repository "deb https://ppa.launchpadcontent.net/kisak/turtle/ubuntu jammy main"
|
||||
sudo apt-get install -qq mesa-vulkan-drivers
|
||||
|
||||
- name: Free disk space on runner
|
||||
|
|
@ -90,20 +109,35 @@ jobs:
|
|||
sudo rm -rf /usr/local/lib/android
|
||||
echo "Disk usage after:" && df -h
|
||||
|
||||
- name: Setup Godot build cache
|
||||
uses: ./.github/actions/godot-cache
|
||||
- name: Restore Godot build cache
|
||||
uses: ./.github/actions/godot-cache-restore
|
||||
with:
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Setup python and scons
|
||||
- name: Setup Python and SCons
|
||||
if: "!matrix.legacy-scons"
|
||||
uses: ./.github/actions/godot-deps
|
||||
|
||||
- name: Set up .NET Sdk
|
||||
uses: actions/setup-dotnet@v3
|
||||
if: ${{ matrix.build-mono }}
|
||||
- name: Setup Python and SCons (legacy versions)
|
||||
if: matrix.legacy-scons
|
||||
uses: ./.github/actions/godot-deps
|
||||
with:
|
||||
dotnet-version: '6.0.x'
|
||||
# Sync with Ensure*Version in SConstruct.
|
||||
python-version: 3.8 # No Python < 3.8 available for Ubuntu 22.04.
|
||||
scons-version: 3.1.2
|
||||
|
||||
- name: Force remove preinstalled .NET SDKs
|
||||
if: matrix.build-mono
|
||||
run: |
|
||||
sudo rm -rf /usr/share/dotnet/sdk/*
|
||||
|
||||
- name: Setup older .NET SDK as baseline
|
||||
if: matrix.build-mono
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
# Targeting the oldest version we want to support to ensure it still builds.
|
||||
dotnet-version: 6.0.100
|
||||
|
||||
- name: Setup GCC problem matcher
|
||||
uses: ammaraskar/gcc-problem-matcher@master
|
||||
|
|
@ -116,37 +150,45 @@ jobs:
|
|||
target: ${{ matrix.target }}
|
||||
tests: ${{ matrix.tests }}
|
||||
|
||||
- name: Compilation (godot-cpp)
|
||||
uses: ./.github/actions/godot-cpp-build
|
||||
if: matrix.godot-cpp
|
||||
with:
|
||||
bin: ${{ matrix.bin }}
|
||||
scons-flags: target=template_debug dev_build=yes verbose=yes
|
||||
godot-cpp-branch: ${{ env.GODOT_CPP_BRANCH }}
|
||||
|
||||
- name: Save Godot build cache
|
||||
uses: ./.github/actions/godot-cache-save
|
||||
with:
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Generate C# glue
|
||||
if: ${{ matrix.build-mono }}
|
||||
if: matrix.build-mono
|
||||
run: |
|
||||
${{ matrix.bin }} --headless --generate-mono-glue ./modules/mono/glue
|
||||
|
||||
- name: Build .NET solutions
|
||||
if: ${{ matrix.build-mono }}
|
||||
if: matrix.build-mono
|
||||
run: |
|
||||
dotnet --info
|
||||
./modules/mono/build_scripts/build_assemblies.py --godot-output-dir=./bin --godot-platform=linuxbsd
|
||||
|
||||
- name: Prepare artifact
|
||||
if: ${{ matrix.artifact }}
|
||||
if: matrix.artifact
|
||||
run: |
|
||||
strip bin/godot.*
|
||||
chmod +x bin/godot.*
|
||||
|
||||
- name: Upload artifact
|
||||
uses: ./.github/actions/upload-artifact
|
||||
if: ${{ matrix.artifact }}
|
||||
if: matrix.artifact
|
||||
with:
|
||||
name: ${{ matrix.cache-name }}
|
||||
|
||||
- name: Dump Godot API
|
||||
uses: ./.github/actions/godot-api-dump
|
||||
if: ${{ matrix.api-dump }}
|
||||
with:
|
||||
bin: ${{ matrix.bin }}
|
||||
|
||||
# Execute unit tests for the editor
|
||||
- name: Unit tests
|
||||
if: ${{ matrix.tests }}
|
||||
if: matrix.tests
|
||||
run: |
|
||||
${{ matrix.bin }} --version
|
||||
${{ matrix.bin }} --help
|
||||
|
|
@ -154,7 +196,7 @@ jobs:
|
|||
|
||||
# Check class reference
|
||||
- name: Check for class reference updates
|
||||
if: ${{ matrix.doc-test }}
|
||||
if: matrix.doc-test
|
||||
run: |
|
||||
echo "Running --doctool to see if this changes the public API without updating the documentation."
|
||||
echo -e "If a diff is shown, it means that your code/doc changes are incomplete and you should update the class reference with --doctool.\n\n"
|
||||
|
|
@ -163,20 +205,20 @@ jobs:
|
|||
|
||||
# Check API backwards compatibility
|
||||
- name: Check for GDExtension compatibility
|
||||
if: ${{ matrix.api-compat }}
|
||||
if: matrix.api-compat
|
||||
run: |
|
||||
./misc/scripts/validate_extension_api.sh "${{ matrix.bin }}"
|
||||
|
||||
# Download and run the test project
|
||||
- name: Test Godot project
|
||||
uses: ./.github/actions/godot-project-test
|
||||
if: ${{ matrix.proj-test }}
|
||||
if: matrix.proj-test
|
||||
with:
|
||||
bin: ${{ matrix.bin }}
|
||||
|
||||
# Test the project converter
|
||||
- name: Test project converter
|
||||
uses: ./.github/actions/godot-converter-test
|
||||
if: ${{ matrix.proj-conv }}
|
||||
if: matrix.proj-conv
|
||||
with:
|
||||
bin: ${{ matrix.bin }}
|
||||
|
|
|
|||
35
.github/workflows/macos_builds.yml
vendored
35
.github/workflows/macos_builds.yml
vendored
|
|
@ -5,17 +5,14 @@ on:
|
|||
# Global Settings
|
||||
env:
|
||||
# Used for the cache key. Add version suffix to force clean build.
|
||||
GODOT_BASE_BRANCH: '4.1'
|
||||
GODOT_BASE_BRANCH: 4.1
|
||||
SCONSFLAGS: verbose=yes warnings=extra werror=yes module_text_server_fb_enabled=yes
|
||||
|
||||
concurrency:
|
||||
group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-macos
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build-macos:
|
||||
runs-on: "macos-latest"
|
||||
runs-on: macos-latest
|
||||
name: ${{ matrix.name }}
|
||||
timeout-minutes: 120
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
|
|
@ -24,24 +21,31 @@ jobs:
|
|||
cache-name: macos-editor
|
||||
target: editor
|
||||
tests: true
|
||||
bin: "./bin/godot.macos.editor.universal"
|
||||
bin: ./bin/godot.macos.editor.universal
|
||||
|
||||
# Template builds need various fixes for unit tests to be supported in 4.1,
|
||||
# so we don't enable tests in this legacy branch.
|
||||
|
||||
- name: Template (target=template_release)
|
||||
cache-name: macos-template
|
||||
target: template_release
|
||||
tests: false
|
||||
sconsflags: debug_symbols=no
|
||||
bin: ./bin/godot.macos.template_release.universal
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup Godot build cache
|
||||
uses: ./.github/actions/godot-cache
|
||||
- name: Restore Godot build cache
|
||||
uses: ./.github/actions/godot-cache-restore
|
||||
with:
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Setup python and scons
|
||||
- name: Setup Python and SCons
|
||||
uses: ./.github/actions/godot-deps
|
||||
|
||||
- name: Setup Vulkan SDK
|
||||
|
|
@ -64,6 +68,12 @@ jobs:
|
|||
target: ${{ matrix.target }}
|
||||
tests: ${{ matrix.tests }}
|
||||
|
||||
- name: Save Godot build cache
|
||||
uses: ./.github/actions/godot-cache-save
|
||||
with:
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Prepare artifact
|
||||
run: |
|
||||
lipo -create ./bin/godot.macos.${{ matrix.target }}.x86_64 ./bin/godot.macos.${{ matrix.target }}.arm64 -output ./bin/godot.macos.${{ matrix.target }}.universal
|
||||
|
|
@ -76,9 +86,8 @@ jobs:
|
|||
with:
|
||||
name: ${{ matrix.cache-name }}
|
||||
|
||||
# Execute unit tests for the editor
|
||||
- name: Unit tests
|
||||
if: ${{ matrix.tests }}
|
||||
if: matrix.tests
|
||||
run: |
|
||||
${{ matrix.bin }} --version
|
||||
${{ matrix.bin }} --help
|
||||
|
|
|
|||
25
.github/workflows/runner.yml
vendored
25
.github/workflows/runner.yml
vendored
|
|
@ -1,65 +1,46 @@
|
|||
name: 🔗 GHA
|
||||
on: [push, pull_request]
|
||||
on: [push, pull_request, merge_group]
|
||||
|
||||
concurrency:
|
||||
group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-runner
|
||||
group: ${{ github.workflow }}|${{ github.ref_name }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
# First stage: Only static checks, fast and prevent expensive builds from running.
|
||||
|
||||
static-checks:
|
||||
if: ${{ vars.DISABLE_GODOT_CI == '' }}
|
||||
if: "!vars.DISABLE_GODOT_CI"
|
||||
name: 📊 Static checks
|
||||
uses: ./.github/workflows/static_checks.yml
|
||||
|
||||
# Second stage: Run all the builds and some of the tests.
|
||||
|
||||
android-build:
|
||||
if: ${{ vars.DISABLE_GODOT_CI == '' }}
|
||||
name: 🤖 Android
|
||||
needs: static-checks
|
||||
uses: ./.github/workflows/android_builds.yml
|
||||
|
||||
ios-build:
|
||||
if: ${{ vars.DISABLE_GODOT_CI == '' }}
|
||||
name: 🍏 iOS
|
||||
needs: static-checks
|
||||
uses: ./.github/workflows/ios_builds.yml
|
||||
|
||||
linux-build:
|
||||
if: ${{ vars.DISABLE_GODOT_CI == '' }}
|
||||
name: 🐧 Linux
|
||||
needs: static-checks
|
||||
uses: ./.github/workflows/linux_builds.yml
|
||||
|
||||
macos-build:
|
||||
if: ${{ vars.DISABLE_GODOT_CI == '' }}
|
||||
name: 🍎 macOS
|
||||
needs: static-checks
|
||||
uses: ./.github/workflows/macos_builds.yml
|
||||
|
||||
windows-build:
|
||||
if: ${{ vars.DISABLE_GODOT_CI == '' }}
|
||||
name: 🏁 Windows
|
||||
needs: static-checks
|
||||
uses: ./.github/workflows/windows_builds.yml
|
||||
|
||||
web-build:
|
||||
if: ${{ vars.DISABLE_GODOT_CI == '' }}
|
||||
name: 🌐 Web
|
||||
needs: static-checks
|
||||
uses: ./.github/workflows/web_builds.yml
|
||||
|
||||
# Third stage: Run auxiliary tests using build artifacts from previous jobs.
|
||||
|
||||
# Can be turned off for PRs that intentionally break compat with godot-cpp,
|
||||
# until both the upstream PR and the matching godot-cpp changes are merged.
|
||||
godot-cpp-test:
|
||||
if: ${{ vars.DISABLE_GODOT_CI == '' }}
|
||||
name: 🪲 Godot CPP
|
||||
# This can be changed to depend on another platform, if we decide to use it for
|
||||
# godot-cpp instead. Make sure to move the .github/actions/godot-api-dump step
|
||||
# appropriately.
|
||||
needs: linux-build
|
||||
uses: ./.github/workflows/godot_cpp_test.yml
|
||||
|
|
|
|||
20
.github/workflows/static_checks.yml
vendored
20
.github/workflows/static_checks.yml
vendored
|
|
@ -2,14 +2,11 @@ name: 📊 Static Checks
|
|||
on:
|
||||
workflow_call:
|
||||
|
||||
concurrency:
|
||||
group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-static
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
static-checks:
|
||||
name: Code style, file formatting, and docs
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
|
@ -17,9 +14,9 @@ jobs:
|
|||
fetch-depth: 2
|
||||
|
||||
- name: Install APT dependencies
|
||||
uses: awalsh128/cache-apt-pkgs-action@latest
|
||||
with:
|
||||
packages: dos2unix libxml2-utils moreutils
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y dos2unix libxml2-utils moreutils
|
||||
|
||||
- name: Install Python dependencies and general setup
|
||||
run: |
|
||||
|
|
@ -38,7 +35,7 @@ jobs:
|
|||
fi
|
||||
echo "$files" >> changed.txt
|
||||
cat changed.txt
|
||||
files=$(echo "$files" | grep -v 'thirdparty' | xargs -I {} sh -c 'echo "./{}"' | tr '\n' ' ')
|
||||
files=$(echo "$files" | grep -v 'thirdparty' | xargs -I {} sh -c 'echo "\"./{}\""' | tr '\n' ' ')
|
||||
echo "CHANGED_FILES=$files" >> $GITHUB_ENV
|
||||
|
||||
- name: File formatting checks (file_format.sh)
|
||||
|
|
@ -86,6 +83,7 @@ jobs:
|
|||
|
||||
- name: Documentation checks
|
||||
run: |
|
||||
doc/tools/doc_status.py doc/classes modules/*/doc_classes platform/*/doc_classes
|
||||
doc/tools/make_rst.py --dry-run --color doc/classes modules platform
|
||||
|
||||
- name: Style checks via clang-format (clang_format.sh)
|
||||
|
|
@ -108,3 +106,7 @@ jobs:
|
|||
skip: "./bin,./thirdparty,*.desktop,*.gen.*,*.po,*.pot,*.rc,./AUTHORS.md,./COPYRIGHT.txt,./DONORS.md,./core/input/gamecontrollerdb.txt,./core/string/locales.h,./editor/project_converter_3_to_4.cpp,./misc/scripts/codespell.sh,./platform/android/java/lib/src/com,./platform/web/node_modules,./platform/web/package-lock.json"
|
||||
ignore_words_list: "breaked,checkin,curvelinear,doubleclick,expct,findn,gird,hel,inout,labelin,lod,mis,nd,numer,ot,pointin,requestor,te,textin,thirdparty,vai"
|
||||
path: ${{ env.CHANGED_FILES }}
|
||||
|
||||
- name: Run C compiler on `gdextension_interface.h`
|
||||
run: |
|
||||
gcc -c core/extension/gdextension_interface.h
|
||||
|
|
|
|||
55
.github/workflows/web_builds.yml
vendored
55
.github/workflows/web_builds.yml
vendored
|
|
@ -5,48 +5,67 @@ on:
|
|||
# Global Settings
|
||||
env:
|
||||
# Used for the cache key. Add version suffix to force clean build.
|
||||
GODOT_BASE_BRANCH: '4.1'
|
||||
GODOT_BASE_BRANCH: 4.1
|
||||
SCONSFLAGS: verbose=yes warnings=extra werror=yes debug_symbols=no
|
||||
EM_VERSION: 3.1.39
|
||||
EM_CACHE_FOLDER: "emsdk-cache"
|
||||
|
||||
concurrency:
|
||||
group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-web
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
web-template:
|
||||
runs-on: "ubuntu-22.04"
|
||||
name: Template (target=template_release)
|
||||
runs-on: ubuntu-24.04
|
||||
name: ${{ matrix.name }}
|
||||
timeout-minutes: 60
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- name: Template (target=template_release)
|
||||
cache-name: web-template
|
||||
target: template_release
|
||||
sconsflags:
|
||||
tests: false
|
||||
artifact: true
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Set up Emscripten latest
|
||||
uses: mymindstorm/setup-emsdk@v14
|
||||
with:
|
||||
version: ${{env.EM_VERSION}}
|
||||
actions-cache-folder: ${{env.EM_CACHE_FOLDER}}
|
||||
cache-key: emsdk-${{ matrix.cache-name }}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}}
|
||||
version: ${{ env.EM_VERSION }}
|
||||
no-cache: true
|
||||
|
||||
- name: Verify Emscripten setup
|
||||
run: |
|
||||
emcc -v
|
||||
|
||||
- name: Setup Godot build cache
|
||||
uses: ./.github/actions/godot-cache
|
||||
- name: Restore Godot build cache
|
||||
uses: ./.github/actions/godot-cache-restore
|
||||
with:
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Setup python and scons
|
||||
- name: Setup Python and SCons
|
||||
uses: ./.github/actions/godot-deps
|
||||
|
||||
- name: Compilation
|
||||
uses: ./.github/actions/godot-build
|
||||
with:
|
||||
sconsflags: ${{ env.SCONSFLAGS }}
|
||||
sconsflags: ${{ env.SCONSFLAGS }} ${{ matrix.sconsflags }}
|
||||
platform: web
|
||||
target: template_release
|
||||
tests: false
|
||||
target: ${{ matrix.target }}
|
||||
tests: ${{ matrix.tests }}
|
||||
|
||||
- name: Save Godot build cache
|
||||
uses: ./.github/actions/godot-cache-save
|
||||
with:
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Upload artifact
|
||||
uses: ./.github/actions/upload-artifact
|
||||
if: matrix.artifact
|
||||
with:
|
||||
name: ${{ matrix.cache-name }}
|
||||
|
|
|
|||
48
.github/workflows/windows_builds.yml
vendored
48
.github/workflows/windows_builds.yml
vendored
|
|
@ -6,19 +6,16 @@ on:
|
|||
# SCONS_CACHE for windows must be set in the build environment
|
||||
env:
|
||||
# Used for the cache key. Add version suffix to force clean build.
|
||||
GODOT_BASE_BRANCH: '4.1'
|
||||
GODOT_BASE_BRANCH: 4.1
|
||||
SCONSFLAGS: verbose=yes warnings=extra werror=yes module_text_server_fb_enabled=yes
|
||||
SCONS_CACHE_MSVC_CONFIG: true
|
||||
|
||||
concurrency:
|
||||
group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-windows
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build-windows:
|
||||
# Windows 10 with latest image
|
||||
runs-on: "windows-latest"
|
||||
runs-on: windows-latest
|
||||
name: ${{ matrix.name }}
|
||||
timeout-minutes: 120
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
|
|
@ -29,24 +26,42 @@ jobs:
|
|||
tests: true
|
||||
# Skip debug symbols, they're way too big with MSVC.
|
||||
sconsflags: debug_symbols=no vsproj=yes windows_subsystem=console
|
||||
bin: "./bin/godot.windows.editor.x86_64.exe"
|
||||
bin: ./bin/godot.windows.editor.x86_64.exe
|
||||
compiler: msvc
|
||||
|
||||
# Template builds need various fixes for unit tests to be supported in 4.1,
|
||||
# so we don't enable tests in this legacy branch.
|
||||
|
||||
- name: Template (target=template_release)
|
||||
cache-name: windows-template
|
||||
target: template_release
|
||||
tests: false
|
||||
sconsflags: debug_symbols=no
|
||||
bin: ./bin/godot.windows.template_release.x86_64.console.exe
|
||||
compiler: msvc
|
||||
|
||||
- name: Template w/ GCC (target=template_release, use_mingw=yes)
|
||||
cache-name: windows-template-gcc
|
||||
# MinGW takes MUCH longer to compile; save time by only targeting Template.
|
||||
target: template_release
|
||||
tests: false
|
||||
sconsflags: debug_symbols=no use_mingw=yes
|
||||
bin: ./bin/godot.windows.template_release.x86_64.console.exe
|
||||
compiler: gcc
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup Godot build cache
|
||||
uses: ./.github/actions/godot-cache
|
||||
- name: Restore Godot build cache
|
||||
uses: ./.github/actions/godot-cache-restore
|
||||
with:
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Setup python and scons
|
||||
- name: Setup Python and SCons
|
||||
uses: ./.github/actions/godot-deps
|
||||
|
||||
- name: Setup MSVC problem matcher
|
||||
|
|
@ -60,18 +75,25 @@ jobs:
|
|||
target: ${{ matrix.target }}
|
||||
tests: ${{ matrix.tests }}
|
||||
|
||||
- name: Save Godot build cache
|
||||
uses: ./.github/actions/godot-cache-save
|
||||
with:
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Prepare artifact
|
||||
if: matrix.compiler == 'msvc'
|
||||
run: |
|
||||
Remove-Item bin/* -Include *.exp,*.lib,*.pdb -Force
|
||||
|
||||
- name: Upload artifact
|
||||
if: matrix.compiler == 'msvc'
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
name: ${{ matrix.cache-name }}
|
||||
|
||||
# Execute unit tests for the editor
|
||||
- name: Unit tests
|
||||
if: ${{ matrix.tests }}
|
||||
if: matrix.tests
|
||||
run: |
|
||||
${{ matrix.bin }} --version
|
||||
${{ matrix.bin }} --help
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
EnsureSConsVersion(3, 0, 0)
|
||||
EnsureSConsVersion(3, 1, 2)
|
||||
EnsurePythonVersion(3, 6)
|
||||
|
||||
# System
|
||||
|
|
|
|||
|
|
@ -1085,7 +1085,7 @@ static void gdextension_editor_remove_plugin(GDExtensionConstStringNamePtr p_cla
|
|||
#endif
|
||||
}
|
||||
|
||||
#define REGISTER_INTERFACE_FUNC(m_name) GDExtension::register_interface_function(#m_name, (GDExtensionInterfaceFunctionPtr)&gdextension_##m_name)
|
||||
#define REGISTER_INTERFACE_FUNC(m_name) GDExtension::register_interface_function(#m_name, (GDExtensionInterfaceFunctionPtr) & gdextension_##m_name)
|
||||
|
||||
void gdextension_setup_interface() {
|
||||
REGISTER_INTERFACE_FUNC(get_godot_version);
|
||||
|
|
|
|||
|
|
@ -543,7 +543,7 @@ typedef void (*GDExtensionInterfaceMemFree)(void *p_ptr);
|
|||
*
|
||||
* Logs an error to Godot's built-in debugger and to the OS terminal.
|
||||
*
|
||||
* @param p_description The code trigging the error.
|
||||
* @param p_description The code triggering the error.
|
||||
* @param p_function The function name where the error occurred.
|
||||
* @param p_file The file where the error occurred.
|
||||
* @param p_line The line where the error occurred.
|
||||
|
|
@ -557,7 +557,7 @@ typedef void (*GDExtensionInterfacePrintError)(const char *p_description, const
|
|||
*
|
||||
* Logs an error with a message to Godot's built-in debugger and to the OS terminal.
|
||||
*
|
||||
* @param p_description The code trigging the error.
|
||||
* @param p_description The code triggering the error.
|
||||
* @param p_message The message to show along with the error.
|
||||
* @param p_function The function name where the error occurred.
|
||||
* @param p_file The file where the error occurred.
|
||||
|
|
@ -572,7 +572,7 @@ typedef void (*GDExtensionInterfacePrintErrorWithMessage)(const char *p_descript
|
|||
*
|
||||
* Logs a warning to Godot's built-in debugger and to the OS terminal.
|
||||
*
|
||||
* @param p_description The code trigging the warning.
|
||||
* @param p_description The code triggering the warning.
|
||||
* @param p_function The function name where the warning occurred.
|
||||
* @param p_file The file where the warning occurred.
|
||||
* @param p_line The line where the warning occurred.
|
||||
|
|
@ -586,7 +586,7 @@ typedef void (*GDExtensionInterfacePrintWarning)(const char *p_description, cons
|
|||
*
|
||||
* Logs a warning with a message to Godot's built-in debugger and to the OS terminal.
|
||||
*
|
||||
* @param p_description The code trigging the warning.
|
||||
* @param p_description The code triggering the warning.
|
||||
* @param p_message The message to show along with the warning.
|
||||
* @param p_function The function name where the warning occurred.
|
||||
* @param p_file The file where the warning occurred.
|
||||
|
|
@ -601,7 +601,7 @@ typedef void (*GDExtensionInterfacePrintWarningWithMessage)(const char *p_descri
|
|||
*
|
||||
* Logs a script error to Godot's built-in debugger and to the OS terminal.
|
||||
*
|
||||
* @param p_description The code trigging the error.
|
||||
* @param p_description The code triggering the error.
|
||||
* @param p_function The function name where the error occurred.
|
||||
* @param p_file The file where the error occurred.
|
||||
* @param p_line The line where the error occurred.
|
||||
|
|
@ -615,7 +615,7 @@ typedef void (*GDExtensionInterfacePrintScriptError)(const char *p_description,
|
|||
*
|
||||
* Logs a script error with a message to Godot's built-in debugger and to the OS terminal.
|
||||
*
|
||||
* @param p_description The code trigging the error.
|
||||
* @param p_description The code triggering the error.
|
||||
* @param p_message The message to show along with the error.
|
||||
* @param p_function The function name where the error occurred.
|
||||
* @param p_file The file where the error occurred.
|
||||
|
|
|
|||
|
|
@ -662,15 +662,16 @@ PackedByteArray HTTPClientTCP::read_response_body_chunk() {
|
|||
chunk_left -= rec;
|
||||
|
||||
if (chunk_left == 0) {
|
||||
if (chunk[chunk.size() - 2] != '\r' || chunk[chunk.size() - 1] != '\n') {
|
||||
const int chunk_size = chunk.size();
|
||||
if (chunk[chunk_size - 2] != '\r' || chunk[chunk_size - 1] != '\n') {
|
||||
ERR_PRINT("HTTP Invalid chunk terminator (not \\r\\n)");
|
||||
status = STATUS_CONNECTION_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
ret.resize(chunk.size() - 2);
|
||||
ret.resize(chunk_size - 2);
|
||||
uint8_t *w = ret.ptrw();
|
||||
memcpy(w, chunk.ptr(), chunk.size() - 2);
|
||||
memcpy(w, chunk.ptr(), chunk_size - 2);
|
||||
chunk.clear();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3755,7 +3755,7 @@ void Image::fix_alpha_edges() {
|
|||
}
|
||||
|
||||
int closest_dist = max_dist;
|
||||
uint8_t closest_color[3];
|
||||
uint8_t closest_color[3] = { 0 };
|
||||
|
||||
int from_x = MAX(0, j - max_radius);
|
||||
int to_x = MIN(width - 1, j + max_radius);
|
||||
|
|
|
|||
|
|
@ -105,6 +105,19 @@ Error PacketPeerUDP::get_packet(const uint8_t **r_buffer, int &r_buffer_size) {
|
|||
return ERR_UNAVAILABLE;
|
||||
}
|
||||
|
||||
/* Bogus GCC warning here:
|
||||
* In member function 'int RingBuffer<T>::read(T*, int, bool) [with T = unsigned char]',
|
||||
* inlined from 'virtual Error PacketPeerUDP::get_packet(const uint8_t**, int&)' at core/io/packet_peer_udp.cpp:112:9,
|
||||
* inlined from 'virtual Error PacketPeerUDP::get_packet(const uint8_t**, int&)' at core/io/packet_peer_udp.cpp:99:7:
|
||||
* Error: ./core/ring_buffer.h:68:46: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=]
|
||||
* 68 | p_buf[dst++] = read[pos + i];
|
||||
* | ~~~~~~~~~~~~~^~~~~~~
|
||||
*/
|
||||
#if defined(__GNUC__) && !defined(__clang__)
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic warning "-Wstringop-overflow=0"
|
||||
#endif
|
||||
|
||||
uint32_t size = 0;
|
||||
uint8_t ipv6[16];
|
||||
rb.read(ipv6, 16, true);
|
||||
|
|
@ -115,6 +128,11 @@ Error PacketPeerUDP::get_packet(const uint8_t **r_buffer, int &r_buffer_size) {
|
|||
--queue_count;
|
||||
*r_buffer = packet_buffer;
|
||||
r_buffer_size = size;
|
||||
|
||||
#if defined(__GNUC__) && !defined(__clang__)
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -223,13 +223,13 @@ void StreamPeer::put_var(const Variant &p_variant, bool p_full_objects) {
|
|||
}
|
||||
|
||||
uint8_t StreamPeer::get_u8() {
|
||||
uint8_t buf[1];
|
||||
uint8_t buf[1] = {};
|
||||
get_data(buf, 1);
|
||||
return buf[0];
|
||||
}
|
||||
|
||||
int8_t StreamPeer::get_8() {
|
||||
uint8_t buf[1];
|
||||
uint8_t buf[1] = {};
|
||||
get_data(buf, 1);
|
||||
return buf[0];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -393,7 +393,7 @@ static inline void _build_faces(uint8_t ***p_cell_status, int x, int y, int z, i
|
|||
return;
|
||||
}
|
||||
|
||||
#define vert(m_idx) Vector3(((m_idx)&4) >> 2, ((m_idx)&2) >> 1, (m_idx)&1)
|
||||
#define vert(m_idx) Vector3(((m_idx) & 4) >> 2, ((m_idx) & 2) >> 1, (m_idx) & 1)
|
||||
|
||||
static const uint8_t indices[6][4] = {
|
||||
{ 7, 6, 4, 5 },
|
||||
|
|
|
|||
|
|
@ -289,7 +289,7 @@ Error CowData<T>::resize(int p_size) {
|
|||
if (current_size == 0) {
|
||||
// alloc from scratch
|
||||
uint32_t *ptr = (uint32_t *)Memory::alloc_static(alloc_size, true);
|
||||
ERR_FAIL_COND_V(!ptr, ERR_OUT_OF_MEMORY);
|
||||
ERR_FAIL_NULL_V(ptr, ERR_OUT_OF_MEMORY);
|
||||
*(ptr - 1) = 0; //size, currently none
|
||||
new (ptr - 2) SafeNumeric<uint32_t>(1); //refcount
|
||||
|
||||
|
|
@ -297,7 +297,7 @@ Error CowData<T>::resize(int p_size) {
|
|||
|
||||
} else {
|
||||
uint32_t *_ptrnew = (uint32_t *)Memory::realloc_static(_ptr, alloc_size, true);
|
||||
ERR_FAIL_COND_V(!_ptrnew, ERR_OUT_OF_MEMORY);
|
||||
ERR_FAIL_NULL_V(_ptrnew, ERR_OUT_OF_MEMORY);
|
||||
new (_ptrnew - 2) SafeNumeric<uint32_t>(rc); //refcount
|
||||
|
||||
_ptr = (T *)(_ptrnew);
|
||||
|
|
@ -327,7 +327,7 @@ Error CowData<T>::resize(int p_size) {
|
|||
|
||||
if (alloc_size != current_alloc_size) {
|
||||
uint32_t *_ptrnew = (uint32_t *)Memory::realloc_static(_ptr, alloc_size, true);
|
||||
ERR_FAIL_COND_V(!_ptrnew, ERR_OUT_OF_MEMORY);
|
||||
ERR_FAIL_NULL_V(_ptrnew, ERR_OUT_OF_MEMORY);
|
||||
new (_ptrnew - 2) SafeNumeric<uint32_t>(rc); //refcount
|
||||
|
||||
_ptr = (T *)(_ptrnew);
|
||||
|
|
|
|||
|
|
@ -810,7 +810,7 @@ struct VariantInternalAccessor<bool> {
|
|||
#define VARIANT_ACCESSOR_NUMBER(m_type) \
|
||||
template <> \
|
||||
struct VariantInternalAccessor<m_type> { \
|
||||
static _FORCE_INLINE_ m_type get(const Variant *v) { return (m_type)*VariantInternal::get_int(v); } \
|
||||
static _FORCE_INLINE_ m_type get(const Variant *v) { return (m_type) * VariantInternal::get_int(v); } \
|
||||
static _FORCE_INLINE_ void set(Variant *v, m_type p_value) { *VariantInternal::get_int(v) = p_value; } \
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -428,9 +428,9 @@ Variant Variant::get_named(const StringName &p_member, bool &r_valid) const {
|
|||
} \
|
||||
m_assign_type num; \
|
||||
if (value->get_type() == Variant::INT) { \
|
||||
num = (m_assign_type)*VariantGetInternalPtr<int64_t>::get_ptr(value); \
|
||||
num = (m_assign_type) * VariantGetInternalPtr<int64_t>::get_ptr(value); \
|
||||
} else if (value->get_type() == Variant::FLOAT) { \
|
||||
num = (m_assign_type)*VariantGetInternalPtr<double>::get_ptr(value); \
|
||||
num = (m_assign_type) * VariantGetInternalPtr<double>::get_ptr(value); \
|
||||
} else { \
|
||||
*oob = false; \
|
||||
*valid = false; \
|
||||
|
|
@ -490,9 +490,9 @@ Variant Variant::get_named(const StringName &p_member, bool &r_valid) const {
|
|||
} \
|
||||
m_assign_type num; \
|
||||
if (value->get_type() == Variant::INT) { \
|
||||
num = (m_assign_type)*VariantGetInternalPtr<int64_t>::get_ptr(value); \
|
||||
num = (m_assign_type) * VariantGetInternalPtr<int64_t>::get_ptr(value); \
|
||||
} else if (value->get_type() == Variant::FLOAT) { \
|
||||
num = (m_assign_type)*VariantGetInternalPtr<double>::get_ptr(value); \
|
||||
num = (m_assign_type) * VariantGetInternalPtr<double>::get_ptr(value); \
|
||||
} else { \
|
||||
*oob = false; \
|
||||
*valid = false; \
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@
|
|||
The strength of the anisotropy effect. This is multiplied by [member anisotropy_flowmap]'s alpha channel if a texture is defined there and the texture contains an alpha channel.
|
||||
</member>
|
||||
<member name="anisotropy_enabled" type="bool" setter="set_feature" getter="get_feature" default="false">
|
||||
If [code]true[/code], anisotropy is enabled. Anisotropy changes the shape of the specular blob and aligns it to tangent space. This is useful for brushed aluminium and hair reflections.
|
||||
If [code]true[/code], anisotropy is enabled. Anisotropy changes the shape of the specular blob and aligns it to tangent space. This is useful for brushed aluminum and hair reflections.
|
||||
[b]Note:[/b] Mesh tangents are needed for anisotropy to work. If the mesh does not contain tangents, the anisotropy effect will appear broken.
|
||||
[b]Note:[/b] Material anisotropy should not to be confused with anisotropic texture filtering, which can be enabled by setting [member texture_filter] to [constant TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC].
|
||||
</member>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
A mathematic curve.
|
||||
</brief_description>
|
||||
<description>
|
||||
A curve that can be saved and re-used for other objects. By default, it ranges between [code]0[/code] and [code]1[/code] on the Y axis and positions points relative to the [code]0.5[/code] Y position.
|
||||
A curve that can be saved and reused for other objects. By default, it ranges between [code]0[/code] and [code]1[/code] on the Y axis and positions points relative to the [code]0.5[/code] Y position.
|
||||
See also [Gradient] which is designed for color interpolation. See also [Curve2D] and [Curve3D].
|
||||
</description>
|
||||
<tutorials>
|
||||
|
|
|
|||
|
|
@ -292,7 +292,7 @@
|
|||
Access to the node rotation as a [Quaternion]. This property is ideal for tweening complex rotations.
|
||||
</member>
|
||||
<member name="rotation" type="Vector3" setter="set_rotation" getter="get_rotation" default="Vector3(0, 0, 0)">
|
||||
Rotation part of the local transformation in radians, specified in terms of Euler angles. The angles construct a rotaton in the order specified by the [member rotation_order] property.
|
||||
Rotation part of the local transformation in radians, specified in terms of Euler angles. The angles construct a rotation in the order specified by the [member rotation_order] property.
|
||||
[b]Note:[/b] In the mathematical sense, rotation is a matrix and not a vector. The three Euler angles, which are the three independent parameters of the Euler-angle parametrization of the rotation matrix, are stored in a [Vector3] data structure not because the rotation is a vector, but only because [Vector3] exists as a convenient data-structure to store 3 floating-point numbers. Therefore, applying affine operations on the rotation "vector" is not meaningful.
|
||||
[b]Note:[/b] This property is edited in the inspector in degrees. If you want to use degrees in a script, use [member rotation_degrees].
|
||||
</member>
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@
|
|||
[/codeblocks]
|
||||
Some [Tweener]s use transitions and eases. The first accepts a [enum TransitionType] constant, and refers to the way the timing of the animation is handled (see [url=https://easings.net/]easings.net[/url] for some examples). The second accepts an [enum EaseType] constant, and controls where the [code]trans_type[/code] is applied to the interpolation (in the beginning, the end, or both). If you don't know which transition and easing to pick, you can try different [enum TransitionType] constants with [constant EASE_IN_OUT], and use the one that looks best.
|
||||
[url=https://raw.githubusercontent.com/godotengine/godot-docs/4.1/img/tween_cheatsheet.webp]Tween easing and transition types cheatsheet[/url]
|
||||
[b]Note:[/b] Tweens are not designed to be re-used and trying to do so results in an undefined behavior. Create a new Tween for each animation and every time you replay an animation from start. Keep in mind that Tweens start immediately, so only create a Tween when you want to start animating.
|
||||
[b]Note:[/b] Tweens are not designed to be reused and trying to do so results in an undefined behavior. Create a new Tween for each animation and every time you replay an animation from start. Keep in mind that Tweens start immediately, so only create a Tween when you want to start animating.
|
||||
[b]Note:[/b] The tween is processed after all of the nodes in the current frame, i.e. node's [method Node._process] method would be called before the timer (or [method Node._physics_process] depending on the value passed to [method set_process_mode]).
|
||||
</description>
|
||||
<tutorials>
|
||||
|
|
|
|||
|
|
@ -190,9 +190,7 @@ void main() {
|
|||
#endif
|
||||
|
||||
{
|
||||
|
||||
#CODE : SKY
|
||||
|
||||
}
|
||||
|
||||
color *= luminance_multiplier;
|
||||
|
|
|
|||
|
|
@ -81,9 +81,9 @@ public:
|
|||
virtual ~RenderSceneBuffersGLES3();
|
||||
virtual void configure(RID p_render_target, const Size2i p_internal_size, const Size2i p_target_size, RS::ViewportScaling3DMode p_scaling_3d_mode, float p_fsr_sharpness, float p_texture_mipmap_bias, RS::ViewportMSAA p_msaa, RenderingServer::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_taa, bool p_use_debanding, uint32_t p_view_count) override;
|
||||
|
||||
virtual void set_fsr_sharpness(float p_fsr_sharpness) override{};
|
||||
virtual void set_texture_mipmap_bias(float p_texture_mipmap_bias) override{};
|
||||
virtual void set_use_debanding(bool p_use_debanding) override{};
|
||||
virtual void set_fsr_sharpness(float p_fsr_sharpness) override {};
|
||||
virtual void set_texture_mipmap_bias(float p_texture_mipmap_bias) override {};
|
||||
virtual void set_use_debanding(bool p_use_debanding) override {};
|
||||
|
||||
void free_render_buffer_data();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -516,7 +516,7 @@ public:
|
|||
RID texture_create_external(Texture::Type p_type, Image::Format p_format, unsigned int p_image, int p_width, int p_height, int p_depth, int p_layers, RS::TextureLayeredType p_layered_type = RS::TEXTURE_LAYERED_2D_ARRAY);
|
||||
|
||||
virtual void texture_2d_update(RID p_texture, const Ref<Image> &p_image, int p_layer = 0) override;
|
||||
virtual void texture_3d_update(RID p_texture, const Vector<Ref<Image>> &p_data) override{};
|
||||
virtual void texture_3d_update(RID p_texture, const Vector<Ref<Image>> &p_data) override {};
|
||||
virtual void texture_proxy_update(RID p_proxy, RID p_base) override;
|
||||
|
||||
//these two APIs can be used together or in combination with the others.
|
||||
|
|
@ -579,7 +579,7 @@ public:
|
|||
|
||||
virtual RID decal_allocate() override;
|
||||
virtual void decal_initialize(RID p_rid) override;
|
||||
virtual void decal_free(RID p_rid) override{};
|
||||
virtual void decal_free(RID p_rid) override {};
|
||||
|
||||
virtual void decal_set_size(RID p_decal, const Vector3 &p_size) override;
|
||||
virtual void decal_set_texture(RID p_decal, RS::DecalTexture p_type, RID p_texture) override;
|
||||
|
|
|
|||
|
|
@ -45,11 +45,11 @@
|
|||
#endif
|
||||
|
||||
#ifdef MSVC
|
||||
#define S_ISREG(m) ((m)&_S_IFREG)
|
||||
#define S_ISREG(m) ((m) & _S_IFREG)
|
||||
#include <io.h>
|
||||
#endif
|
||||
#ifndef S_ISREG
|
||||
#define S_ISREG(m) ((m)&S_IFREG)
|
||||
#define S_ISREG(m) ((m) & S_IFREG)
|
||||
#endif
|
||||
|
||||
void FileAccessUnix::check_errors() const {
|
||||
|
|
|
|||
|
|
@ -1341,8 +1341,8 @@ Error VulkanContext::_create_physical_device(VkSurfaceKHR p_surface) {
|
|||
#define GET_INSTANCE_PROC_ADDR(inst, entrypoint) \
|
||||
{ \
|
||||
fp##entrypoint = (PFN_vk##entrypoint)vkGetInstanceProcAddr(inst, "vk" #entrypoint); \
|
||||
ERR_FAIL_COND_V_MSG(fp##entrypoint == nullptr, ERR_CANT_CREATE, \
|
||||
"vkGetInstanceProcAddr failed to find vk" #entrypoint); \
|
||||
ERR_FAIL_COND_V_MSG(fp##entrypoint == nullptr, ERR_CANT_CREATE, \
|
||||
"vkGetInstanceProcAddr failed to find vk" #entrypoint); \
|
||||
}
|
||||
|
||||
GET_INSTANCE_PROC_ADDR(inst, GetPhysicalDeviceSurfaceSupportKHR);
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@
|
|||
#include <wchar.h>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#define S_ISREG(m) ((m)&_S_IFREG)
|
||||
#define S_ISREG(m) ((m) & _S_IFREG)
|
||||
#endif
|
||||
|
||||
void FileAccessWindows::check_errors() const {
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ class EditorTitleBar : public HBoxContainer {
|
|||
|
||||
protected:
|
||||
virtual void gui_input(const Ref<InputEvent> &p_event) override;
|
||||
static void _bind_methods(){};
|
||||
static void _bind_methods() {};
|
||||
|
||||
public:
|
||||
void set_can_move_window(bool p_enabled);
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ class EditorPropertyFontMetaOverride : public EditorProperty {
|
|||
|
||||
protected:
|
||||
void _notification(int p_what);
|
||||
static void _bind_methods(){};
|
||||
static void _bind_methods() {};
|
||||
|
||||
void _edit_pressed();
|
||||
void _page_changed(int p_page);
|
||||
|
|
@ -140,7 +140,7 @@ class EditorPropertyOTVariation : public EditorProperty {
|
|||
|
||||
protected:
|
||||
void _notification(int p_what);
|
||||
static void _bind_methods(){};
|
||||
static void _bind_methods() {};
|
||||
|
||||
void _edit_pressed();
|
||||
void _page_changed(int p_page);
|
||||
|
|
@ -189,7 +189,7 @@ class EditorPropertyOTFeatures : public EditorProperty {
|
|||
|
||||
protected:
|
||||
void _notification(int p_what);
|
||||
static void _bind_methods(){};
|
||||
static void _bind_methods() {};
|
||||
|
||||
void _edit_pressed();
|
||||
void _page_changed(int p_page);
|
||||
|
|
@ -256,7 +256,7 @@ protected:
|
|||
virtual void _add_element() override;
|
||||
|
||||
void _add_font(int p_option);
|
||||
static void _bind_methods(){};
|
||||
static void _bind_methods() {};
|
||||
|
||||
public:
|
||||
EditorPropertyFontNamesArray();
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ protected:
|
|||
Vector<Face3> geometry;
|
||||
|
||||
bool _generate(Vector<Vector3> &points, Vector<Vector3> &normals);
|
||||
virtual void _generate_emission_points(){};
|
||||
virtual void _generate_emission_points() {};
|
||||
void _node_selected(const NodePath &p_path);
|
||||
|
||||
static void _bind_methods();
|
||||
|
|
|
|||
|
|
@ -125,8 +125,8 @@ public:
|
|||
virtual Variant get_navigation_state() override;
|
||||
virtual Vector<String> get_functions() override;
|
||||
virtual PackedInt32Array get_breakpoints() override;
|
||||
virtual void set_breakpoint(int p_line, bool p_enabled) override{};
|
||||
virtual void clear_breakpoints() override{};
|
||||
virtual void set_breakpoint(int p_line, bool p_enabled) override {};
|
||||
virtual void clear_breakpoints() override {};
|
||||
virtual void goto_line(int p_line, bool p_with_error = false) override;
|
||||
void goto_line_selection(int p_line, int p_begin, int p_end);
|
||||
virtual void set_executing_line(int p_line) override;
|
||||
|
|
|
|||
|
|
@ -1002,7 +1002,7 @@ void TileDataDefaultEditor::forward_draw_over_atlas(TileAtlasView *p_tile_atlas_
|
|||
}
|
||||
};
|
||||
|
||||
void TileDataDefaultEditor::forward_draw_over_alternatives(TileAtlasView *p_tile_atlas_view, TileSetAtlasSource *p_tile_set_atlas_source, CanvasItem *p_canvas_item, Transform2D p_transform){
|
||||
void TileDataDefaultEditor::forward_draw_over_alternatives(TileAtlasView *p_tile_atlas_view, TileSetAtlasSource *p_tile_set_atlas_source, CanvasItem *p_canvas_item, Transform2D p_transform) {
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ private:
|
|||
protected:
|
||||
Ref<TileSet> tile_set;
|
||||
TileData *_get_tile_data(TileMapCell p_cell);
|
||||
virtual void _tile_set_changed(){};
|
||||
virtual void _tile_set_changed() {};
|
||||
|
||||
static void _bind_methods();
|
||||
|
||||
|
|
@ -62,13 +62,13 @@ public:
|
|||
|
||||
// Input to handle painting.
|
||||
virtual Control *get_toolbar() { return nullptr; };
|
||||
virtual void forward_draw_over_atlas(TileAtlasView *p_tile_atlas_view, TileSetAtlasSource *p_tile_atlas_source, CanvasItem *p_canvas_item, Transform2D p_transform){};
|
||||
virtual void forward_draw_over_alternatives(TileAtlasView *p_tile_atlas_view, TileSetAtlasSource *p_tile_atlas_source, CanvasItem *p_canvas_item, Transform2D p_transform){};
|
||||
virtual void forward_painting_atlas_gui_input(TileAtlasView *p_tile_atlas_view, TileSetAtlasSource *p_tile_atlas_source, const Ref<InputEvent> &p_event){};
|
||||
virtual void forward_painting_alternatives_gui_input(TileAtlasView *p_tile_atlas_view, TileSetAtlasSource *p_tile_atlas_source, const Ref<InputEvent> &p_event){};
|
||||
virtual void forward_draw_over_atlas(TileAtlasView *p_tile_atlas_view, TileSetAtlasSource *p_tile_atlas_source, CanvasItem *p_canvas_item, Transform2D p_transform) {};
|
||||
virtual void forward_draw_over_alternatives(TileAtlasView *p_tile_atlas_view, TileSetAtlasSource *p_tile_atlas_source, CanvasItem *p_canvas_item, Transform2D p_transform) {};
|
||||
virtual void forward_painting_atlas_gui_input(TileAtlasView *p_tile_atlas_view, TileSetAtlasSource *p_tile_atlas_source, const Ref<InputEvent> &p_event) {};
|
||||
virtual void forward_painting_alternatives_gui_input(TileAtlasView *p_tile_atlas_view, TileSetAtlasSource *p_tile_atlas_source, const Ref<InputEvent> &p_event) {};
|
||||
|
||||
// Used to draw the tile data property value over a tile.
|
||||
virtual void draw_over_tile(CanvasItem *p_canvas_item, Transform2D p_transform, TileMapCell p_cell, bool p_selected = false){};
|
||||
virtual void draw_over_tile(CanvasItem *p_canvas_item, Transform2D p_transform, TileMapCell p_cell, bool p_selected = false) {};
|
||||
};
|
||||
|
||||
class DummyObject : public Object {
|
||||
|
|
|
|||
|
|
@ -60,9 +60,9 @@ public:
|
|||
};
|
||||
|
||||
virtual bool forward_canvas_gui_input(const Ref<InputEvent> &p_event) { return false; };
|
||||
virtual void forward_canvas_draw_over_viewport(Control *p_overlay){};
|
||||
virtual void tile_set_changed(){};
|
||||
virtual void edit(ObjectID p_tile_map_id, int p_tile_map_layer){};
|
||||
virtual void forward_canvas_draw_over_viewport(Control *p_overlay) {};
|
||||
virtual void tile_set_changed() {};
|
||||
virtual void edit(ObjectID p_tile_map_id, int p_tile_map_layer) {};
|
||||
};
|
||||
|
||||
class TileMapEditorTilesPlugin : public TileMapEditorPlugin {
|
||||
|
|
|
|||
21
methods.py
21
methods.py
|
|
@ -711,25 +711,30 @@ def detect_visual_c_compiler_version(tools_env):
|
|||
|
||||
|
||||
def find_visual_c_batch_file(env):
|
||||
from SCons.Tool.MSCommon.vc import (
|
||||
get_default_version,
|
||||
get_host_target,
|
||||
find_batch_file,
|
||||
)
|
||||
# TODO: We should investigate if we can avoid relying on SCons internals here.
|
||||
from SCons.Tool.MSCommon.vc import get_default_version, get_host_target, find_batch_file, find_vc_pdir
|
||||
|
||||
# Syntax changed in SCons 4.4.0.
|
||||
from SCons import __version__ as scons_raw_version
|
||||
|
||||
scons_ver = env._get_major_minor_revision(scons_raw_version)
|
||||
|
||||
version = get_default_version(env)
|
||||
msvc_version = get_default_version(env)
|
||||
|
||||
if scons_ver >= (4, 4, 0):
|
||||
(host_platform, target_platform, _) = get_host_target(env, version)
|
||||
(host_platform, target_platform, _) = get_host_target(env, msvc_version)
|
||||
else:
|
||||
(host_platform, target_platform, _) = get_host_target(env)
|
||||
|
||||
return find_batch_file(env, version, host_platform, target_platform)[0]
|
||||
if scons_ver < (4, 6, 0):
|
||||
return find_batch_file(env, msvc_version, host_platform, target_platform)[0]
|
||||
|
||||
# SCons 4.6.0+ removed passing env, so we need to get the product_dir ourselves first,
|
||||
# then pass that as the last param instead of env as the first param as before.
|
||||
# Param names need to be explicit, as they were shuffled around in SCons 4.8.0.
|
||||
product_dir = find_vc_pdir(msvc_version=msvc_version, env=env)
|
||||
|
||||
return find_batch_file(msvc_version, host_platform, target_platform, product_dir)[0]
|
||||
|
||||
|
||||
def generate_cpp_hint_file(filename):
|
||||
|
|
|
|||
|
|
@ -3,6 +3,6 @@ SKIP_LIST="./.*,./**/.*,./bin,./thirdparty,*.desktop,*.gen.*,*.po,*.pot,*.rc,./A
|
|||
SKIP_LIST+="./core/input/gamecontrollerdb.txt,./core/string/locales.h,./editor/renames_map_3_to_4.cpp,./misc/scripts/codespell.sh,"
|
||||
SKIP_LIST+="./platform/android/java/lib/src/com,./platform/web/node_modules,./platform/web/package-lock.json,"
|
||||
|
||||
IGNORE_LIST="breaked,checkin,curvelinear,doubleclick,expct,findn,gird,hel,inout,labelin,lod,mis,nd,numer,ot,outin,pointin,requestor,te,textin,thirdparty,vai"
|
||||
IGNORE_LIST="breaked,checkin,curvelinear,doubleclick,expct,findn,gird,hel,inout,labelin,lod,mis,nd,numer,ot,outin,pointin,reduct,requestor,te,textin,thirdparty,vai"
|
||||
|
||||
codespell -w -q 3 -S "${SKIP_LIST}" -L "${IGNORE_LIST}" --builtin "clear,rare,en-GB_to_en-US"
|
||||
|
|
|
|||
|
|
@ -1772,7 +1772,7 @@ void GDScriptByteCodeGenerator::end_block() {
|
|||
void GDScriptByteCodeGenerator::clean_temporaries() {
|
||||
List<int>::Element *E = temporaries_pending_clear.front();
|
||||
while (E) {
|
||||
// The temporary may have been re-used as something else than an object
|
||||
// The temporary may have been reused as something else than an object
|
||||
// since it was added to the list. In that case, there's no need to clear it.
|
||||
int slot_idx = E->get();
|
||||
const StackSlot &slot = temporaries[slot_idx];
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
#include "core/variant/variant.h"
|
||||
|
||||
#ifndef LINE_NUMBER_TO_INDEX
|
||||
#define LINE_NUMBER_TO_INDEX(p_line) ((p_line)-1)
|
||||
#define LINE_NUMBER_TO_INDEX(p_line) ((p_line) - 1)
|
||||
#endif
|
||||
|
||||
#ifndef SYMBOL_SEPERATOR
|
||||
|
|
|
|||
|
|
@ -664,7 +664,7 @@ class TextServerAdvanced : public TextServerExtension {
|
|||
};
|
||||
|
||||
protected:
|
||||
static void _bind_methods(){};
|
||||
static void _bind_methods() {};
|
||||
|
||||
void full_copy(ShapedTextDataAdvanced *p_shaped);
|
||||
void invalidate(ShapedTextDataAdvanced *p_shaped, bool p_text = false);
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ using namespace godot;
|
|||
|
||||
/*************************************************************************/
|
||||
|
||||
#define OT_TAG(c1, c2, c3, c4) ((int32_t)((((uint32_t)(c1)&0xff) << 24) | (((uint32_t)(c2)&0xff) << 16) | (((uint32_t)(c3)&0xff) << 8) | ((uint32_t)(c4)&0xff)))
|
||||
#define OT_TAG(c1, c2, c3, c4) ((int32_t)((((uint32_t)(c1) & 0xff) << 24) | (((uint32_t)(c2) & 0xff) << 16) | (((uint32_t)(c3) & 0xff) << 8) | ((uint32_t)(c4) & 0xff)))
|
||||
|
||||
bool TextServerFallback::_has_feature(Feature p_feature) const {
|
||||
switch (p_feature) {
|
||||
|
|
|
|||
|
|
@ -533,7 +533,7 @@ class TextServerFallback : public TextServerExtension {
|
|||
Mutex ft_mutex;
|
||||
|
||||
protected:
|
||||
static void _bind_methods(){};
|
||||
static void _bind_methods() {};
|
||||
|
||||
void full_copy(ShapedTextDataFallback *p_shaped);
|
||||
void invalidate(ShapedTextDataFallback *p_shaped);
|
||||
|
|
|
|||
|
|
@ -30,7 +30,8 @@ if env["builtin_miniupnpc"]:
|
|||
|
||||
env_upnp.Prepend(CPPPATH=[thirdparty_dir + "include"])
|
||||
env_upnp.Append(CPPDEFINES=["MINIUPNP_STATICLIB"])
|
||||
env_upnp.Append(CPPDEFINES=["MINIUPNPC_SET_SOCKET_TIMEOUT"])
|
||||
if env["platform"] != "windows":
|
||||
env_upnp.Append(CPPDEFINES=["MINIUPNPC_SET_SOCKET_TIMEOUT"])
|
||||
|
||||
env_thirdparty = env_upnp.Clone()
|
||||
env_thirdparty.disable_warnings()
|
||||
|
|
|
|||
|
|
@ -380,7 +380,7 @@ void EditorExportPlatformAndroid::_check_for_changes_poll_thread(void *ud) {
|
|||
d.description += "Chipset: " + p.get_slice("=", 1).strip_edges() + "\n";
|
||||
} else if (p.begins_with("ro.opengles.version=")) {
|
||||
uint32_t opengl = p.get_slice("=", 1).to_int();
|
||||
d.description += "OpenGL: " + itos(opengl >> 16) + "." + itos((opengl >> 8) & 0xFF) + "." + itos((opengl)&0xFF) + "\n";
|
||||
d.description += "OpenGL: " + itos(opengl >> 16) + "." + itos((opengl >> 8) & 0xFF) + "." + itos((opengl) & 0xFF) + "\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ public final class SignalInfo {
|
|||
}
|
||||
|
||||
this.name = signalName;
|
||||
this.paramTypes = paramTypes == null ? new Class<?>[ 0 ] : paramTypes;
|
||||
this.paramTypes = paramTypes == null ? new Class<?>[0] : paramTypes;
|
||||
this.paramTypesNames = new String[this.paramTypes.length];
|
||||
for (int i = 0; i < this.paramTypes.length; i++) {
|
||||
this.paramTypesNames[i] = this.paramTypes[i].getName();
|
||||
|
|
|
|||
|
|
@ -53,8 +53,8 @@
|
|||
#if defined(VULKAN_ENABLED)
|
||||
#include "servers/rendering/renderer_rd/renderer_compositor_rd.h"
|
||||
|
||||
#import <QuartzCore/CAMetalLayer.h>
|
||||
#include "drivers/vulkan/godot_vulkan.h"
|
||||
#import <QuartzCore/CAMetalLayer.h>
|
||||
#endif
|
||||
|
||||
// Initialization order between compilation units is not guaranteed,
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@
|
|||
|
||||
#define LONG_BITS (sizeof(long) * 8)
|
||||
#define test_bit(nr, addr) (((1UL << ((nr) % LONG_BITS)) & ((addr)[(nr) / LONG_BITS])) != 0)
|
||||
#define NBITS(x) ((((x)-1) / LONG_BITS) + 1)
|
||||
#define NBITS(x) ((((x) - 1) / LONG_BITS) + 1)
|
||||
|
||||
#ifdef UDEV_ENABLED
|
||||
static const char *ignore_str = "/dev/input/js";
|
||||
|
|
|
|||
|
|
@ -4389,7 +4389,7 @@ void DisplayServerX11::process_events() {
|
|||
XSync(x11_display, False);
|
||||
XGetWindowAttributes(x11_display, wd.x11_window, &xwa);
|
||||
|
||||
// Set focus when menu window is re-used.
|
||||
// Set focus when menu window is reused.
|
||||
// RevertToPointerRoot is used to make sure we don't lose all focus in case
|
||||
// a subwindow and its parent are both destroyed.
|
||||
if ((xwa.map_state == IsViewable) && !wd.no_focus && !wd.is_popup) {
|
||||
|
|
|
|||
|
|
@ -3390,7 +3390,7 @@ void DisplayServerMacOS::cursor_set_custom_image(const Ref<Resource> &p_cursor,
|
|||
uint8_t alpha = (color >> 24) & 0xFF;
|
||||
pixels[i * 4 + 0] = ((color >> 16) & 0xFF) * alpha / 255;
|
||||
pixels[i * 4 + 1] = ((color >> 8) & 0xFF) * alpha / 255;
|
||||
pixels[i * 4 + 2] = ((color)&0xFF) * alpha / 255;
|
||||
pixels[i * 4 + 2] = ((color) & 0xFF) * alpha / 255;
|
||||
pixels[i * 4 + 3] = alpha;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2285,9 +2285,9 @@ void DisplayServerWindows::set_context(Context p_context) {
|
|||
#define SIGNATURE_MASK 0xFFFFFF00
|
||||
// Keeping the name suggested by Microsoft, but this macro really answers:
|
||||
// Is this mouse event emulated from touch or pen input?
|
||||
#define IsPenEvent(dw) (((dw)&SIGNATURE_MASK) == MI_WP_SIGNATURE)
|
||||
#define IsPenEvent(dw) (((dw) & SIGNATURE_MASK) == MI_WP_SIGNATURE)
|
||||
// This one tells whether the event comes from touchscreen (and not from pen).
|
||||
#define IsTouchEvent(dw) (IsPenEvent(dw) && ((dw)&0x80))
|
||||
#define IsTouchEvent(dw) (IsPenEvent(dw) && ((dw) & 0x80))
|
||||
|
||||
void DisplayServerWindows::_touch_event(WindowID p_window, bool p_pressed, float p_x, float p_y, int idx) {
|
||||
if (touch_state.has(idx) == p_pressed) {
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ void GLManager_Windows::_nvapi_disable_threaded_optimization() {
|
|||
|
||||
void *(__cdecl * NvAPI_QueryInterface)(unsigned int interface_id) = 0;
|
||||
|
||||
NvAPI_QueryInterface = (void *(__cdecl *)(unsigned int))GetProcAddress(nvapi, "nvapi_QueryInterface");
|
||||
NvAPI_QueryInterface = (void *(__cdecl *)(unsigned int))(void *)GetProcAddress(nvapi, "nvapi_QueryInterface");
|
||||
|
||||
if (NvAPI_QueryInterface == NULL) {
|
||||
print_verbose("Error getting NVAPI NvAPI_QueryInterface");
|
||||
|
|
|
|||
|
|
@ -367,7 +367,7 @@ void LineBuilder::build() {
|
|||
}
|
||||
|
||||
if (intersection_result != SEGMENT_INTERSECT) {
|
||||
// In this case the joint is too corrupted to be re-used,
|
||||
// In this case the joint is too corrupted to be reused,
|
||||
// start again the strip with fallback points
|
||||
strip_begin(pos_up0, pos_down0, color1, uvx1);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2977,7 +2977,8 @@ void TileMap::_set_tile_data(int p_layer, const Vector<int> &p_data) {
|
|||
for (int i = 0; i < c; i += offset) {
|
||||
const uint8_t *ptr = (const uint8_t *)&r[i];
|
||||
uint8_t local[12];
|
||||
for (int j = 0; j < ((format >= FORMAT_2) ? 12 : 8); j++) {
|
||||
const int buffer_size = (format >= FORMAT_2) ? 12 : 8;
|
||||
for (int j = 0; j < buffer_size; j++) {
|
||||
local[j] = ptr[j];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -532,7 +532,7 @@ void VehicleBody3D::_resolve_single_bilateral(PhysicsDirectBodyState3D *s, const
|
|||
if (body2) {
|
||||
rel_pos2 = pos2 - body2->get_global_transform().origin;
|
||||
}
|
||||
//this jacobian entry could be re-used for all iterations
|
||||
//this jacobian entry could be reused for all iterations
|
||||
|
||||
Vector3 vel1 = s->get_linear_velocity() + (s->get_angular_velocity()).cross(rel_pos1); // * mPos);
|
||||
Vector3 vel2;
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ protected:
|
|||
float auto_exposure_max = 64.0;
|
||||
float auto_exposure_speed = 0.5;
|
||||
float auto_exposure_scale = 0.4;
|
||||
virtual void _update_auto_exposure(){};
|
||||
virtual void _update_auto_exposure() {};
|
||||
|
||||
public:
|
||||
virtual RID get_rid() const override;
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ protected:
|
|||
|
||||
Vector2 get_uv2_scale(Vector2 p_margin_scale = Vector2(1.0, 1.0)) const;
|
||||
float get_lightmap_texel_size() const;
|
||||
virtual void _update_lightmap_size(){};
|
||||
virtual void _update_lightmap_size() {};
|
||||
|
||||
public:
|
||||
virtual int get_surface_count() const override;
|
||||
|
|
|
|||
|
|
@ -557,25 +557,25 @@ public:
|
|||
// Not exposed.
|
||||
virtual void set_tile_set(const TileSet *p_tile_set);
|
||||
TileSet *get_tile_set() const;
|
||||
virtual void notify_tile_data_properties_should_change(){};
|
||||
virtual void add_occlusion_layer(int p_index){};
|
||||
virtual void move_occlusion_layer(int p_from_index, int p_to_pos){};
|
||||
virtual void remove_occlusion_layer(int p_index){};
|
||||
virtual void add_physics_layer(int p_index){};
|
||||
virtual void move_physics_layer(int p_from_index, int p_to_pos){};
|
||||
virtual void remove_physics_layer(int p_index){};
|
||||
virtual void add_terrain_set(int p_index){};
|
||||
virtual void move_terrain_set(int p_from_index, int p_to_pos){};
|
||||
virtual void remove_terrain_set(int p_index){};
|
||||
virtual void add_terrain(int p_terrain_set, int p_index){};
|
||||
virtual void move_terrain(int p_terrain_set, int p_from_index, int p_to_pos){};
|
||||
virtual void remove_terrain(int p_terrain_set, int p_index){};
|
||||
virtual void add_navigation_layer(int p_index){};
|
||||
virtual void move_navigation_layer(int p_from_index, int p_to_pos){};
|
||||
virtual void remove_navigation_layer(int p_index){};
|
||||
virtual void add_custom_data_layer(int p_index){};
|
||||
virtual void move_custom_data_layer(int p_from_index, int p_to_pos){};
|
||||
virtual void remove_custom_data_layer(int p_index){};
|
||||
virtual void notify_tile_data_properties_should_change() {};
|
||||
virtual void add_occlusion_layer(int p_index) {};
|
||||
virtual void move_occlusion_layer(int p_from_index, int p_to_pos) {};
|
||||
virtual void remove_occlusion_layer(int p_index) {};
|
||||
virtual void add_physics_layer(int p_index) {};
|
||||
virtual void move_physics_layer(int p_from_index, int p_to_pos) {};
|
||||
virtual void remove_physics_layer(int p_index) {};
|
||||
virtual void add_terrain_set(int p_index) {};
|
||||
virtual void move_terrain_set(int p_from_index, int p_to_pos) {};
|
||||
virtual void remove_terrain_set(int p_index) {};
|
||||
virtual void add_terrain(int p_terrain_set, int p_index) {};
|
||||
virtual void move_terrain(int p_terrain_set, int p_from_index, int p_to_pos) {};
|
||||
virtual void remove_terrain(int p_terrain_set, int p_index) {};
|
||||
virtual void add_navigation_layer(int p_index) {};
|
||||
virtual void move_navigation_layer(int p_from_index, int p_to_pos) {};
|
||||
virtual void remove_navigation_layer(int p_index) {};
|
||||
virtual void add_custom_data_layer(int p_index) {};
|
||||
virtual void move_custom_data_layer(int p_from_index, int p_to_pos) {};
|
||||
virtual void remove_custom_data_layer(int p_index) {};
|
||||
virtual void reset_state() override;
|
||||
|
||||
// Tiles.
|
||||
|
|
|
|||
|
|
@ -160,8 +160,13 @@ void SMBPitchShift::PitchShift(float pitchShift, long numSampsToProcess, long ff
|
|||
|
||||
/* ***************** PROCESSING ******************* */
|
||||
/* this does the actual pitch shifting */
|
||||
memset(gSynMagn, 0, fftFrameSize*sizeof(float));
|
||||
memset(gSynFreq, 0, fftFrameSize*sizeof(float));
|
||||
size_t fftBufferSize = static_cast<size_t>(fftFrameSize) * sizeof(float);
|
||||
if (unlikely(fftBufferSize > MAX_FRAME_LENGTH)) {
|
||||
ERR_PRINT_ONCE("Invalid FFT frame size for PitchShift. This is a bug, please report.");
|
||||
return;
|
||||
}
|
||||
memset(gSynMagn, 0, fftBufferSize);
|
||||
memset(gSynFreq, 0, fftBufferSize);
|
||||
for (k = 0; k <= fftFrameSize2; k++) {
|
||||
index = k*pitchShift;
|
||||
if (index <= fftFrameSize2) {
|
||||
|
|
@ -214,7 +219,7 @@ void SMBPitchShift::PitchShift(float pitchShift, long numSampsToProcess, long ff
|
|||
}
|
||||
|
||||
/* shift accumulator */
|
||||
memmove(gOutputAccum, gOutputAccum+stepSize, fftFrameSize*sizeof(float));
|
||||
memmove(gOutputAccum, gOutputAccum+stepSize, fftBufferSize);
|
||||
|
||||
/* move input FIFO */
|
||||
for (k = 0; k < inFifoLatency; k++) { gInFIFO[k] = gInFIFO[k+stepSize];
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ Ref<AudioEffectInstance> AudioEffectRecord::instantiate() {
|
|||
ins.instantiate();
|
||||
ins->is_recording = false;
|
||||
|
||||
//Re-using the buffer size calculations from audio_effect_delay.cpp
|
||||
//Reusing the buffer size calculations from audio_effect_delay.cpp
|
||||
float ring_buffer_max_size = IO_BUFFER_SIZE_MS;
|
||||
ring_buffer_max_size /= 1000.0; //convert to seconds
|
||||
ring_buffer_max_size *= AudioServer::get_singleton()->get_mix_rate();
|
||||
|
|
|
|||
|
|
@ -359,7 +359,7 @@ public:
|
|||
virtual void delete_sub_window(WindowID p_id);
|
||||
|
||||
virtual WindowID window_get_active_popup() const { return INVALID_WINDOW_ID; };
|
||||
virtual void window_set_popup_safe_rect(WindowID p_window, const Rect2i &p_rect){};
|
||||
virtual void window_set_popup_safe_rect(WindowID p_window, const Rect2i &p_rect) {};
|
||||
virtual Rect2i window_get_popup_safe_rect(WindowID p_window) const { return Rect2i(); };
|
||||
|
||||
virtual int64_t window_get_native_handle(HandleType p_handle_type, WindowID p_window = MAIN_WINDOW_ID) const;
|
||||
|
|
@ -503,7 +503,7 @@ public:
|
|||
virtual int tablet_get_driver_count() const { return 1; };
|
||||
virtual String tablet_get_driver_name(int p_driver) const { return "default"; };
|
||||
virtual String tablet_get_current_driver() const { return "default"; };
|
||||
virtual void tablet_set_current_driver(const String &p_driver){};
|
||||
virtual void tablet_set_current_driver(const String &p_driver) {};
|
||||
|
||||
virtual void process_events() = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -597,7 +597,7 @@ void GodotSoftBody3D::generate_bending_constraints(int p_distance) {
|
|||
const uint32_t adj_size = n * n;
|
||||
unsigned *adj = memnew_arr(unsigned, adj_size);
|
||||
|
||||
#define IDX(_x_, _y_) ((_y_)*n + (_x_))
|
||||
#define IDX(_x_, _y_) ((_y_) * n + (_x_))
|
||||
for (j = 0; j < n; ++j) {
|
||||
for (i = 0; i < n; ++i) {
|
||||
int idx_ij = j * n + i;
|
||||
|
|
|
|||
|
|
@ -464,7 +464,7 @@ static void _rest_cbk_result(const Vector3 &p_point_A, int p_index_A, const Vect
|
|||
real_t tested_len = is_best_result ? rd->best_result.len : len;
|
||||
for (; result_index < prev_result_count - 1; ++result_index) {
|
||||
if (tested_len > rd->other_results[result_index].len) {
|
||||
// Re-using a previous result.
|
||||
// Reusing a previous result.
|
||||
rd->result_count--;
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ void GodotPinJoint3D::solve(real_t p_step) {
|
|||
|
||||
Vector3 rel_pos1 = pivotAInW - A->get_transform().origin;
|
||||
Vector3 rel_pos2 = pivotBInW - B->get_transform().origin;
|
||||
//this jacobian entry could be re-used for all iterations
|
||||
//this jacobian entry could be reused for all iterations
|
||||
|
||||
Vector3 vel1 = A->get_velocity_in_local_point(rel_pos1);
|
||||
Vector3 vel2 = B->get_velocity_in_local_point(rel_pos2);
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ public:
|
|||
|
||||
virtual RID shader_allocate() override { return RID(); }
|
||||
virtual void shader_initialize(RID p_rid) override {}
|
||||
virtual void shader_free(RID p_rid) override{};
|
||||
virtual void shader_free(RID p_rid) override {};
|
||||
|
||||
virtual void shader_set_code(RID p_shader, const String &p_code) override {}
|
||||
virtual void shader_set_path_hint(RID p_shader, const String &p_code) override {}
|
||||
|
|
@ -77,7 +77,7 @@ public:
|
|||
/* MATERIAL API */
|
||||
virtual RID material_allocate() override { return RID(); }
|
||||
virtual void material_initialize(RID p_rid) override {}
|
||||
virtual void material_free(RID p_rid) override{};
|
||||
virtual void material_free(RID p_rid) override {};
|
||||
|
||||
virtual void material_set_render_priority(RID p_material, int priority) override {}
|
||||
virtual void material_set_shader(RID p_shader_material, RID p_shader) override {}
|
||||
|
|
|
|||
|
|
@ -58,14 +58,14 @@ public:
|
|||
/* Canvas Texture API */
|
||||
|
||||
virtual RID canvas_texture_allocate() override { return RID(); };
|
||||
virtual void canvas_texture_initialize(RID p_rid) override{};
|
||||
virtual void canvas_texture_free(RID p_rid) override{};
|
||||
virtual void canvas_texture_initialize(RID p_rid) override {};
|
||||
virtual void canvas_texture_free(RID p_rid) override {};
|
||||
|
||||
virtual void canvas_texture_set_channel(RID p_canvas_texture, RS::CanvasTextureChannel p_channel, RID p_texture) override{};
|
||||
virtual void canvas_texture_set_shading_parameters(RID p_canvas_texture, const Color &p_base_color, float p_shininess) override{};
|
||||
virtual void canvas_texture_set_channel(RID p_canvas_texture, RS::CanvasTextureChannel p_channel, RID p_texture) override {};
|
||||
virtual void canvas_texture_set_shading_parameters(RID p_canvas_texture, const Color &p_base_color, float p_shininess) override {};
|
||||
|
||||
virtual void canvas_texture_set_texture_filter(RID p_item, RS::CanvasItemTextureFilter p_filter) override{};
|
||||
virtual void canvas_texture_set_texture_repeat(RID p_item, RS::CanvasItemTextureRepeat p_repeat) override{};
|
||||
virtual void canvas_texture_set_texture_filter(RID p_item, RS::CanvasItemTextureFilter p_filter) override {};
|
||||
virtual void canvas_texture_set_texture_repeat(RID p_item, RS::CanvasItemTextureRepeat p_repeat) override {};
|
||||
|
||||
/* Texture API */
|
||||
|
||||
|
|
@ -90,18 +90,18 @@ public:
|
|||
ERR_FAIL_COND(!t);
|
||||
t->image = p_image->duplicate();
|
||||
};
|
||||
virtual void texture_2d_layered_initialize(RID p_texture, const Vector<Ref<Image>> &p_layers, RS::TextureLayeredType p_layered_type) override{};
|
||||
virtual void texture_3d_initialize(RID p_texture, Image::Format, int p_width, int p_height, int p_depth, bool p_mipmaps, const Vector<Ref<Image>> &p_data) override{};
|
||||
virtual void texture_proxy_initialize(RID p_texture, RID p_base) override{}; //all slices, then all the mipmaps, must be coherent
|
||||
virtual void texture_2d_layered_initialize(RID p_texture, const Vector<Ref<Image>> &p_layers, RS::TextureLayeredType p_layered_type) override {};
|
||||
virtual void texture_3d_initialize(RID p_texture, Image::Format, int p_width, int p_height, int p_depth, bool p_mipmaps, const Vector<Ref<Image>> &p_data) override {};
|
||||
virtual void texture_proxy_initialize(RID p_texture, RID p_base) override {}; //all slices, then all the mipmaps, must be coherent
|
||||
|
||||
virtual void texture_2d_update(RID p_texture, const Ref<Image> &p_image, int p_layer = 0) override{};
|
||||
virtual void texture_3d_update(RID p_texture, const Vector<Ref<Image>> &p_data) override{};
|
||||
virtual void texture_proxy_update(RID p_proxy, RID p_base) override{};
|
||||
virtual void texture_2d_update(RID p_texture, const Ref<Image> &p_image, int p_layer = 0) override {};
|
||||
virtual void texture_3d_update(RID p_texture, const Vector<Ref<Image>> &p_data) override {};
|
||||
virtual void texture_proxy_update(RID p_proxy, RID p_base) override {};
|
||||
|
||||
//these two APIs can be used together or in combination with the others.
|
||||
virtual void texture_2d_placeholder_initialize(RID p_texture) override{};
|
||||
virtual void texture_2d_layered_placeholder_initialize(RID p_texture, RenderingServer::TextureLayeredType p_layered_type) override{};
|
||||
virtual void texture_3d_placeholder_initialize(RID p_texture) override{};
|
||||
virtual void texture_2d_placeholder_initialize(RID p_texture) override {};
|
||||
virtual void texture_2d_layered_placeholder_initialize(RID p_texture, RenderingServer::TextureLayeredType p_layered_type) override {};
|
||||
virtual void texture_3d_placeholder_initialize(RID p_texture) override {};
|
||||
|
||||
virtual Ref<Image> texture_2d_get(RID p_texture) const override {
|
||||
DummyTexture *t = texture_owner.get_or_null(p_texture);
|
||||
|
|
@ -112,18 +112,18 @@ public:
|
|||
virtual Vector<Ref<Image>> texture_3d_get(RID p_texture) const override { return Vector<Ref<Image>>(); };
|
||||
|
||||
virtual void texture_replace(RID p_texture, RID p_by_texture) override { texture_free(p_by_texture); };
|
||||
virtual void texture_set_size_override(RID p_texture, int p_width, int p_height) override{};
|
||||
virtual void texture_set_size_override(RID p_texture, int p_width, int p_height) override {};
|
||||
|
||||
virtual void texture_set_path(RID p_texture, const String &p_path) override{};
|
||||
virtual void texture_set_path(RID p_texture, const String &p_path) override {};
|
||||
virtual String texture_get_path(RID p_texture) const override { return String(); };
|
||||
|
||||
virtual void texture_set_detect_3d_callback(RID p_texture, RS::TextureDetectCallback p_callback, void *p_userdata) override{};
|
||||
virtual void texture_set_detect_normal_callback(RID p_texture, RS::TextureDetectCallback p_callback, void *p_userdata) override{};
|
||||
virtual void texture_set_detect_roughness_callback(RID p_texture, RS::TextureDetectRoughnessCallback p_callback, void *p_userdata) override{};
|
||||
virtual void texture_set_detect_3d_callback(RID p_texture, RS::TextureDetectCallback p_callback, void *p_userdata) override {};
|
||||
virtual void texture_set_detect_normal_callback(RID p_texture, RS::TextureDetectCallback p_callback, void *p_userdata) override {};
|
||||
virtual void texture_set_detect_roughness_callback(RID p_texture, RS::TextureDetectRoughnessCallback p_callback, void *p_userdata) override {};
|
||||
|
||||
virtual void texture_debug_usage(List<RS::TextureInfo> *r_info) override{};
|
||||
virtual void texture_debug_usage(List<RS::TextureInfo> *r_info) override {};
|
||||
|
||||
virtual void texture_set_force_redraw_if_visible(RID p_texture, bool p_enable) override{};
|
||||
virtual void texture_set_force_redraw_if_visible(RID p_texture, bool p_enable) override {};
|
||||
|
||||
virtual Size2 texture_size_with_proxy(RID p_proxy) override { return Size2(); };
|
||||
|
||||
|
|
@ -133,7 +133,7 @@ public:
|
|||
/* DECAL API */
|
||||
virtual RID decal_allocate() override { return RID(); }
|
||||
virtual void decal_initialize(RID p_rid) override {}
|
||||
virtual void decal_free(RID p_rid) override{};
|
||||
virtual void decal_free(RID p_rid) override {};
|
||||
|
||||
virtual void decal_set_size(RID p_decal, const Vector3 &p_size) override {}
|
||||
virtual void decal_set_texture(RID p_decal, RS::DecalTexture p_type, RID p_texture) override {}
|
||||
|
|
|
|||
|
|
@ -314,8 +314,8 @@ public:
|
|||
|
||||
int last_shadow_filter = -1;
|
||||
|
||||
virtual void configure(RenderSceneBuffersRD *p_render_buffers) override{};
|
||||
virtual void free_data() override{};
|
||||
virtual void configure(RenderSceneBuffersRD *p_render_buffers) override {};
|
||||
virtual void free_data() override {};
|
||||
|
||||
bool sync_gi_dependent_sets_validity(bool p_ensure_freed = false);
|
||||
|
||||
|
|
|
|||
|
|
@ -461,7 +461,7 @@ public:
|
|||
|
||||
RID get_voxel_gi_buffer();
|
||||
|
||||
virtual void configure(RenderSceneBuffersRD *p_render_buffers) override{};
|
||||
virtual void configure(RenderSceneBuffersRD *p_render_buffers) override {};
|
||||
virtual void free_data() override;
|
||||
};
|
||||
|
||||
|
|
@ -672,7 +672,7 @@ public:
|
|||
int32_t cascade_dynamic_light_count[SDFGI::MAX_CASCADES]; //used dynamically
|
||||
RID integrate_sky_uniform_set;
|
||||
|
||||
virtual void configure(RenderSceneBuffersRD *p_render_buffers) override{};
|
||||
virtual void configure(RenderSceneBuffersRD *p_render_buffers) override {};
|
||||
virtual void free_data() override;
|
||||
~SDFGI();
|
||||
|
||||
|
|
|
|||
|
|
@ -200,7 +200,7 @@ RID RenderForwardMobile::RenderBufferDataForwardMobile::get_color_fbs(Framebuffe
|
|||
// Now define our subpasses
|
||||
Vector<RD::FramebufferPass> passes;
|
||||
|
||||
// Define our base pass, we'll be re-using this
|
||||
// Define our base pass, we'll be reusing this
|
||||
RD::FramebufferPass pass;
|
||||
pass.color_attachments.push_back(0);
|
||||
pass.depth_attachment = 1;
|
||||
|
|
@ -307,7 +307,7 @@ RID RenderForwardMobile::reflection_probe_create_framebuffer(RID p_color, RID p_
|
|||
Vector<RD::FramebufferPass> passes;
|
||||
RD::FramebufferPass pass;
|
||||
|
||||
// re-using the same attachments
|
||||
// reusing the same attachments
|
||||
pass.color_attachments.push_back(0);
|
||||
pass.depth_attachment = 1;
|
||||
|
||||
|
|
|
|||
|
|
@ -360,12 +360,12 @@ protected:
|
|||
virtual RID _render_buffers_get_normal_texture(Ref<RenderSceneBuffersRD> p_render_buffers) override;
|
||||
virtual RID _render_buffers_get_velocity_texture(Ref<RenderSceneBuffersRD> p_render_buffers) override;
|
||||
|
||||
virtual void environment_set_ssao_quality(RS::EnvironmentSSAOQuality p_quality, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to) override{};
|
||||
virtual void environment_set_ssil_quality(RS::EnvironmentSSILQuality p_quality, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to) override{};
|
||||
virtual void environment_set_ssr_roughness_quality(RS::EnvironmentSSRRoughnessQuality p_quality) override{};
|
||||
virtual void environment_set_ssao_quality(RS::EnvironmentSSAOQuality p_quality, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to) override {};
|
||||
virtual void environment_set_ssil_quality(RS::EnvironmentSSILQuality p_quality, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to) override {};
|
||||
virtual void environment_set_ssr_roughness_quality(RS::EnvironmentSSRRoughnessQuality p_quality) override {};
|
||||
|
||||
virtual void sub_surface_scattering_set_quality(RS::SubSurfaceScatteringQuality p_quality) override{};
|
||||
virtual void sub_surface_scattering_set_scale(float p_scale, float p_depth_scale) override{};
|
||||
virtual void sub_surface_scattering_set_quality(RS::SubSurfaceScatteringQuality p_quality) override {};
|
||||
virtual void sub_surface_scattering_set_scale(float p_scale, float p_depth_scale) override {};
|
||||
|
||||
/* Geometry instance */
|
||||
|
||||
|
|
|
|||
|
|
@ -204,9 +204,9 @@ public:
|
|||
|
||||
/* LIGHTING */
|
||||
|
||||
virtual void setup_added_reflection_probe(const Transform3D &p_transform, const Vector3 &p_half_size){};
|
||||
virtual void setup_added_light(const RS::LightType p_type, const Transform3D &p_transform, float p_radius, float p_spot_aperture){};
|
||||
virtual void setup_added_decal(const Transform3D &p_transform, const Vector3 &p_half_size){};
|
||||
virtual void setup_added_reflection_probe(const Transform3D &p_transform, const Vector3 &p_half_size) {};
|
||||
virtual void setup_added_light(const RS::LightType p_type, const Transform3D &p_transform, float p_radius, float p_spot_aperture) {};
|
||||
virtual void setup_added_decal(const Transform3D &p_transform, const Vector3 &p_half_size) {};
|
||||
|
||||
/* GI */
|
||||
|
||||
|
|
@ -278,7 +278,7 @@ public:
|
|||
RID render_buffers_get_default_voxel_gi_buffer();
|
||||
|
||||
virtual void base_uniforms_changed() = 0;
|
||||
virtual void update_uniform_sets(){};
|
||||
virtual void update_uniform_sets() {};
|
||||
|
||||
virtual void render_scene(const Ref<RenderSceneBuffers> &p_render_buffers, const CameraData *p_camera_data, const CameraData *p_prev_camera_data, const PagedArray<RenderGeometryInstance *> &p_instances, const PagedArray<RID> &p_lights, const PagedArray<RID> &p_reflection_probes, const PagedArray<RID> &p_voxel_gi_instances, const PagedArray<RID> &p_decals, const PagedArray<RID> &p_lightmaps, const PagedArray<RID> &p_fog_volumes, RID p_environment, RID p_camera_attributes, RID p_shadow_atlas, RID p_occluder_debug_tex, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, float p_screen_mesh_lod_threshold, const RenderShadowData *p_render_shadows, int p_render_shadow_count, const RenderSDFGIData *p_render_sdfgi_regions, int p_render_sdfgi_region_count, const RenderSDFGIUpdateData *p_sdfgi_update_data = nullptr, RenderingMethod::RenderInfo *r_render_info = nullptr) override;
|
||||
|
||||
|
|
|
|||
|
|
@ -27,11 +27,10 @@ layout(location = 3) out vec2 pixel_size_interp;
|
|||
#endif
|
||||
|
||||
#ifdef MATERIAL_UNIFORMS_USED
|
||||
layout(set = 1, binding = 0, std140) uniform MaterialUniforms{
|
||||
|
||||
layout(set = 1, binding = 0, std140) uniform MaterialUniforms {
|
||||
#MATERIAL_UNIFORMS
|
||||
|
||||
} material;
|
||||
}
|
||||
material;
|
||||
#endif
|
||||
|
||||
#GLOBALS
|
||||
|
|
@ -224,11 +223,10 @@ layout(location = 3) in vec2 pixel_size_interp;
|
|||
layout(location = 0) out vec4 frag_color;
|
||||
|
||||
#ifdef MATERIAL_UNIFORMS_USED
|
||||
layout(set = 1, binding = 0, std140) uniform MaterialUniforms{
|
||||
|
||||
layout(set = 1, binding = 0, std140) uniform MaterialUniforms {
|
||||
#MATERIAL_UNIFORMS
|
||||
|
||||
} material;
|
||||
}
|
||||
material;
|
||||
#endif
|
||||
|
||||
vec2 screen_uv_to_sdf(vec2 p_uv) {
|
||||
|
|
|
|||
|
|
@ -119,9 +119,10 @@ layout(set = 0, binding = 3, std140) uniform DirectionalLights {
|
|||
directional_lights;
|
||||
|
||||
#ifdef MATERIAL_UNIFORMS_USED
|
||||
layout(set = 1, binding = 0, std140) uniform MaterialUniforms{
|
||||
layout(set = 1, binding = 0, std140) uniform MaterialUniforms {
|
||||
#MATERIAL_UNIFORMS
|
||||
} material;
|
||||
}
|
||||
material;
|
||||
#endif
|
||||
|
||||
layout(set = 2, binding = 0) uniform textureCube radiance;
|
||||
|
|
@ -258,9 +259,7 @@ void main() {
|
|||
#endif //USE_CUBEMAP_PASS
|
||||
|
||||
{
|
||||
|
||||
#CODE : SKY
|
||||
|
||||
}
|
||||
|
||||
frag_color.rgb = color;
|
||||
|
|
|
|||
|
|
@ -90,9 +90,10 @@ layout(r32ui, set = 1, binding = 4) uniform volatile uimage3D light_only_map;
|
|||
#endif
|
||||
|
||||
#ifdef MATERIAL_UNIFORMS_USED
|
||||
layout(set = 2, binding = 0, std140) uniform MaterialUniforms{
|
||||
layout(set = 2, binding = 0, std140) uniform MaterialUniforms {
|
||||
#MATERIAL_UNIFORMS
|
||||
} material;
|
||||
}
|
||||
material;
|
||||
#endif
|
||||
|
||||
#GLOBALS
|
||||
|
|
|
|||
|
|
@ -96,9 +96,10 @@ layout(location = 8) out vec4 prev_screen_position;
|
|||
#endif
|
||||
|
||||
#ifdef MATERIAL_UNIFORMS_USED
|
||||
layout(set = MATERIAL_UNIFORM_SET, binding = 0, std140) uniform MaterialUniforms{
|
||||
layout(set = MATERIAL_UNIFORM_SET, binding = 0, std140) uniform MaterialUniforms {
|
||||
#MATERIAL_UNIFORMS
|
||||
} material;
|
||||
}
|
||||
material;
|
||||
#endif
|
||||
|
||||
float global_time;
|
||||
|
|
@ -590,11 +591,10 @@ vec2 multiview_uv(vec2 uv) {
|
|||
#endif
|
||||
|
||||
#ifdef MATERIAL_UNIFORMS_USED
|
||||
layout(set = MATERIAL_UNIFORM_SET, binding = 0, std140) uniform MaterialUniforms{
|
||||
|
||||
layout(set = MATERIAL_UNIFORM_SET, binding = 0, std140) uniform MaterialUniforms {
|
||||
#MATERIAL_UNIFORMS
|
||||
|
||||
} material;
|
||||
}
|
||||
material;
|
||||
#endif
|
||||
|
||||
#GLOBALS
|
||||
|
|
|
|||
|
|
@ -92,11 +92,10 @@ layout(location = 6) mediump out vec3 binormal_interp;
|
|||
#endif
|
||||
|
||||
#ifdef MATERIAL_UNIFORMS_USED
|
||||
layout(set = MATERIAL_UNIFORM_SET, binding = 0, std140) uniform MaterialUniforms{
|
||||
|
||||
layout(set = MATERIAL_UNIFORM_SET, binding = 0, std140) uniform MaterialUniforms {
|
||||
#MATERIAL_UNIFORMS
|
||||
|
||||
} material;
|
||||
}
|
||||
material;
|
||||
#endif
|
||||
|
||||
#ifdef MODE_DUAL_PARABOLOID
|
||||
|
|
@ -558,11 +557,10 @@ vec2 multiview_uv(vec2 uv) {
|
|||
#endif
|
||||
|
||||
#ifdef MATERIAL_UNIFORMS_USED
|
||||
layout(set = MATERIAL_UNIFORM_SET, binding = 0, std140) uniform MaterialUniforms{
|
||||
|
||||
layout(set = MATERIAL_UNIFORM_SET, binding = 0, std140) uniform MaterialUniforms {
|
||||
#MATERIAL_UNIFORMS
|
||||
|
||||
} material;
|
||||
}
|
||||
material;
|
||||
#endif
|
||||
|
||||
#GLOBALS
|
||||
|
|
|
|||
|
|
@ -179,11 +179,10 @@ layout(set = 2, binding = 1) uniform texture2D height_field_texture;
|
|||
/* SET 3: MATERIAL */
|
||||
|
||||
#ifdef MATERIAL_UNIFORMS_USED
|
||||
layout(set = 3, binding = 0, std140) uniform MaterialUniforms{
|
||||
|
||||
layout(set = 3, binding = 0, std140) uniform MaterialUniforms {
|
||||
#MATERIAL_UNIFORMS
|
||||
|
||||
} material;
|
||||
}
|
||||
material;
|
||||
#endif
|
||||
|
||||
layout(push_constant, std430) uniform Params {
|
||||
|
|
|
|||
|
|
@ -176,12 +176,20 @@ TextureStorage::TextureStorage() {
|
|||
tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_UPDATE_BIT | RD::TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT;
|
||||
tf.texture_type = RD::TEXTURE_TYPE_2D;
|
||||
|
||||
// MinGW-GCC gets confused here, though it's clear it can't overflow unless `resize` hits OOM.
|
||||
#if defined(__GNUC__) && !defined(__clang__)
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic warning "-Wstringop-overflow=0"
|
||||
#endif
|
||||
Vector<uint8_t> sv;
|
||||
sv.resize(16 * 2);
|
||||
uint16_t *ptr = (uint16_t *)sv.ptrw();
|
||||
for (int i = 0; i < 16; i++) {
|
||||
ptr[i] = Math::make_half_float(1.0f);
|
||||
}
|
||||
#if defined(__GNUC__) && !defined(__clang__)
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
Vector<Vector<uint8_t>> vpv;
|
||||
vpv.push_back(sv);
|
||||
|
|
@ -450,12 +458,19 @@ TextureStorage::TextureStorage() {
|
|||
tformat.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_UPDATE_BIT | RD::TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT;
|
||||
tformat.texture_type = RD::TEXTURE_TYPE_2D_ARRAY;
|
||||
|
||||
#if defined(__GNUC__) && !defined(__clang__)
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic warning "-Wstringop-overflow=0"
|
||||
#endif
|
||||
Vector<uint8_t> sv;
|
||||
sv.resize(16 * 2);
|
||||
uint16_t *ptr = (uint16_t *)sv.ptrw();
|
||||
for (int i = 0; i < 16; i++) {
|
||||
ptr[i] = Math::make_half_float(1.0f);
|
||||
}
|
||||
#if defined(__GNUC__) && !defined(__clang__)
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
{
|
||||
Vector<Vector<uint8_t>> vsv;
|
||||
|
|
|
|||
|
|
@ -133,10 +133,10 @@ public:
|
|||
virtual RID get_velocity_texture(); /* obtain velocity output texture (if applicable, used for spacewarp) */
|
||||
|
||||
virtual void process() = 0;
|
||||
virtual void pre_render(){};
|
||||
virtual void pre_render() {};
|
||||
virtual bool pre_draw_viewport(RID p_render_target) { return true; }; /* inform XR interface we are about to start our viewport draw process */
|
||||
virtual Vector<BlitToScreen> post_draw_viewport(RID p_render_target, const Rect2 &p_screen_rect) = 0; /* inform XR interface we finished our viewport draw process */
|
||||
virtual void end_frame(){};
|
||||
virtual void end_frame() {};
|
||||
|
||||
/** passthrough **/
|
||||
|
||||
|
|
|
|||
|
|
@ -353,7 +353,6 @@ TEST_CASE("[Vector2] Plane methods") {
|
|||
const Vector2 vector = Vector2(1.2, 3.4);
|
||||
const Vector2 vector_y = Vector2(0, 1);
|
||||
const Vector2 vector_normal = Vector2(0.95879811270838721622267, 0.2840883296913739899919);
|
||||
const Vector2 vector_non_normal = Vector2(5.4, 1.6);
|
||||
CHECK_MESSAGE(
|
||||
vector.bounce(vector_y) == Vector2(1.2, -3.4),
|
||||
"Vector2 bounce on a plane with normal of the Y axis should.");
|
||||
|
|
@ -379,6 +378,8 @@ TEST_CASE("[Vector2] Plane methods") {
|
|||
vector.slide(vector_normal).is_equal_approx(Vector2(-0.8292559899117276166456, 2.798738965952080706179)),
|
||||
"Vector2 slide with normal should return expected value.");
|
||||
// There's probably a better way to test these ones?
|
||||
#ifdef MATH_CHECKS
|
||||
const Vector2 vector_non_normal = Vector2(5.4, 1.6);
|
||||
ERR_PRINT_OFF;
|
||||
CHECK_MESSAGE(
|
||||
vector.bounce(vector_non_normal).is_equal_approx(Vector2()),
|
||||
|
|
@ -390,6 +391,7 @@ TEST_CASE("[Vector2] Plane methods") {
|
|||
vector.slide(vector_non_normal).is_equal_approx(Vector2()),
|
||||
"Vector2 slide should return empty Vector2 with non-normalized input.");
|
||||
ERR_PRINT_ON;
|
||||
#endif // MATH_CHECKS
|
||||
}
|
||||
|
||||
TEST_CASE("[Vector2] Rounding methods") {
|
||||
|
|
|
|||
|
|
@ -368,7 +368,6 @@ TEST_CASE("[Vector3] Plane methods") {
|
|||
const Vector3 vector = Vector3(1.2, 3.4, 5.6);
|
||||
const Vector3 vector_y = Vector3(0, 1, 0);
|
||||
const Vector3 vector_normal = Vector3(0.88763458893247992491, 0.26300284116517923701, 0.37806658417494515320);
|
||||
const Vector3 vector_non_normal = Vector3(5.4, 1.6, 2.3);
|
||||
CHECK_MESSAGE(
|
||||
vector.bounce(vector_y) == Vector3(1.2, -3.4, 5.6),
|
||||
"Vector3 bounce on a plane with normal of the Y axis should.");
|
||||
|
|
@ -394,6 +393,8 @@ TEST_CASE("[Vector3] Plane methods") {
|
|||
vector.slide(vector_normal).is_equal_approx(Vector3(-2.41848149148878681437, 2.32785733585517427722237, 4.0587949202918130235)),
|
||||
"Vector3 slide with normal should return expected value.");
|
||||
// There's probably a better way to test these ones?
|
||||
#ifdef MATH_CHECKS
|
||||
const Vector3 vector_non_normal = Vector3(5.4, 1.6, 2.3);
|
||||
ERR_PRINT_OFF;
|
||||
CHECK_MESSAGE(
|
||||
vector.bounce(vector_non_normal).is_equal_approx(Vector3()),
|
||||
|
|
@ -405,6 +406,7 @@ TEST_CASE("[Vector3] Plane methods") {
|
|||
vector.slide(vector_non_normal).is_equal_approx(Vector3()),
|
||||
"Vector3 slide should return empty Vector3 with non-normalized input.");
|
||||
ERR_PRINT_ON;
|
||||
#endif // MATH_CHECKS
|
||||
}
|
||||
|
||||
TEST_CASE("[Vector3] Rounding methods") {
|
||||
|
|
|
|||
|
|
@ -373,8 +373,10 @@ void validate_property(const Context &p_context, const ExposedClass &p_class, co
|
|||
}
|
||||
|
||||
void validate_argument(const Context &p_context, const ExposedClass &p_class, const String &p_owner_name, const String &p_owner_type, const ArgumentData &p_arg) {
|
||||
#ifdef DEBUG_METHODS_ENABLED
|
||||
TEST_COND((p_arg.name.is_empty() || p_arg.name.begins_with("_unnamed_arg")),
|
||||
vformat("Unnamed argument in position %d of %s '%s.%s'.", p_arg.position, p_owner_type, p_class.name, p_owner_name));
|
||||
#endif // DEBUG_METHODS_ENABLED
|
||||
|
||||
const ExposedClass *arg_class = p_context.find_exposed_class(p_arg.type);
|
||||
if (arg_class) {
|
||||
|
|
|
|||
|
|
@ -117,12 +117,14 @@ TEST_CASE("[OS] Processor count and memory information") {
|
|||
CHECK_MESSAGE(
|
||||
OS::get_singleton()->get_processor_count() >= 1,
|
||||
"The returned processor count should be greater than zero.");
|
||||
#ifdef DEBUG_ENABLED
|
||||
CHECK_MESSAGE(
|
||||
OS::get_singleton()->get_static_memory_usage() >= 1,
|
||||
"The returned static memory usage should be greater than zero.");
|
||||
CHECK_MESSAGE(
|
||||
OS::get_singleton()->get_static_memory_peak_usage() >= 1,
|
||||
"The returned static memory peak usage should be greater than zero.");
|
||||
#endif // DEBUG_ENABLED
|
||||
}
|
||||
|
||||
TEST_CASE("[OS] Execute") {
|
||||
|
|
|
|||
|
|
@ -161,11 +161,11 @@ int register_test_command(String p_command, TestFunc p_function);
|
|||
MessageQueue::get_singleton()->flush(); \
|
||||
}
|
||||
|
||||
#define _UPDATE_EVENT_MODIFERS(m_event, m_modifers) \
|
||||
m_event->set_shift_pressed(((m_modifers)&KeyModifierMask::SHIFT) != Key::NONE); \
|
||||
m_event->set_alt_pressed(((m_modifers)&KeyModifierMask::ALT) != Key::NONE); \
|
||||
m_event->set_ctrl_pressed(((m_modifers)&KeyModifierMask::CTRL) != Key::NONE); \
|
||||
m_event->set_meta_pressed(((m_modifers)&KeyModifierMask::META) != Key::NONE);
|
||||
#define _UPDATE_EVENT_MODIFERS(m_event, m_modifers) \
|
||||
m_event->set_shift_pressed(((m_modifers) & KeyModifierMask::SHIFT) != Key::NONE); \
|
||||
m_event->set_alt_pressed(((m_modifers) & KeyModifierMask::ALT) != Key::NONE); \
|
||||
m_event->set_ctrl_pressed(((m_modifers) & KeyModifierMask::CTRL) != Key::NONE); \
|
||||
m_event->set_meta_pressed(((m_modifers) & KeyModifierMask::META) != Key::NONE);
|
||||
|
||||
#define _CREATE_GUI_MOUSE_EVENT(m_screen_pos, m_input, m_mask, m_modifers) \
|
||||
Ref<InputEventMouseButton> event; \
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue