fully remove OTRGui (#2982)
* linux local debug working * built in extraction working on linux * try a thing * one more thing to try * try using dir * does this get the subdirectories? * component before pattern * loop i guess * maybe component was the issue? * zapd stuff i guess * maybe this * this feels promising * g != q * appimage is working, try fixing glfw issue on windows * don't copy zapd.exe * hopefully this gets the things we need in the assets dir * is that where those went? * try another thing * another thing to try * grasping at straws * cmake makes no sense sometimes * really just trying anything here now * this is what i was expecting to work * ls * try doing it without the cmake again * i think this might do the trick * try with a slash * one more thing to try * pal_oot.txt * maybe this makes things work on mac --------- Co-authored-by: briaguya <briaguya@alice>
3
.github/workflows/generate-builds.yml
vendored
@ -304,8 +304,7 @@ jobs:
|
|||||||
mv ./x64/Release/soh.pdb ./soh-windows/debug/soh.pdb
|
mv ./x64/Release/soh.pdb ./soh-windows/debug/soh.pdb
|
||||||
mv ./README.md ./soh-windows/readme.txt
|
mv ./README.md ./soh-windows/readme.txt
|
||||||
mv ./build-windows/gamecontrollerdb.txt ./soh-windows/gamecontrollerdb.txt
|
mv ./build-windows/gamecontrollerdb.txt ./soh-windows/gamecontrollerdb.txt
|
||||||
mv ./build-windows/OTRGui/assets ./soh-windows
|
mv ./x64/Release/assets ./soh-windows
|
||||||
mv ./build-windows/ZAPD/ZAPD.exe ./soh-windows/assets/extractor/ZAPD.exe
|
|
||||||
- name: Download soh.otr
|
- name: Download soh.otr
|
||||||
uses: actions/download-artifact@v3
|
uses: actions/download-artifact@v3
|
||||||
with:
|
with:
|
||||||
|
@ -91,9 +91,6 @@ add_subdirectory(libultraship ${CMAKE_BINARY_DIR}/libultraship)
|
|||||||
add_subdirectory(ZAPDTR/ZAPD ${CMAKE_BINARY_DIR}/ZAPD)
|
add_subdirectory(ZAPDTR/ZAPD ${CMAKE_BINARY_DIR}/ZAPD)
|
||||||
add_subdirectory(OTRExporter)
|
add_subdirectory(OTRExporter)
|
||||||
add_subdirectory(soh)
|
add_subdirectory(soh)
|
||||||
if(CMAKE_SYSTEM_NAME MATCHES "Windows|Linux")
|
|
||||||
add_subdirectory(OTRGui)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set_property(TARGET soh PROPERTY APPIMAGE_DESKTOP_FILE_TERMINAL YES)
|
set_property(TARGET soh PROPERTY APPIMAGE_DESKTOP_FILE_TERMINAL YES)
|
||||||
set_property(TARGET soh PROPERTY APPIMAGE_DESKTOP_FILE "${CMAKE_SOURCE_DIR}/scripts/linux/appimage/soh.desktop")
|
set_property(TARGET soh PROPERTY APPIMAGE_DESKTOP_FILE "${CMAKE_SOURCE_DIR}/scripts/linux/appimage/soh.desktop")
|
||||||
@ -102,6 +99,13 @@ set_property(TARGET soh PROPERTY APPIMAGE_ICON_FILE "${CMAKE_BINARY_DIR}/sohIcon
|
|||||||
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
|
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
|
||||||
install(PROGRAMS "${CMAKE_SOURCE_DIR}/scripts/linux/appimage/soh.sh" DESTINATION . COMPONENT appimage)
|
install(PROGRAMS "${CMAKE_SOURCE_DIR}/scripts/linux/appimage/soh.sh" DESTINATION . COMPONENT appimage)
|
||||||
install(FILES "${CMAKE_SOURCE_DIR}/soh.otr" DESTINATION . COMPONENT appimage)
|
install(FILES "${CMAKE_SOURCE_DIR}/soh.otr" DESTINATION . COMPONENT appimage)
|
||||||
|
install(TARGETS ZAPD DESTINATION ./assets/extractor COMPONENT appimage)
|
||||||
|
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets/extractor COMPONENT appimage)
|
||||||
|
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/extractor/xmls COMPONENT appimage)
|
||||||
|
install(DIRECTORY "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/filelists/" DESTINATION ./assets/extractor/filelists COMPONENT appimage)
|
||||||
|
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ActorList_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols COMPONENT appimage)
|
||||||
|
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ObjectList_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols COMPONENT appimage)
|
||||||
|
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/SymbolMap_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols COMPONENT appimage)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(Python3 COMPONENTS Interpreter)
|
find_package(Python3 COMPONENTS Interpreter)
|
||||||
@ -157,17 +161,17 @@ add_custom_target(CreateOSXIcons
|
|||||||
)
|
)
|
||||||
add_dependencies(soh CreateOSXIcons)
|
add_dependencies(soh CreateOSXIcons)
|
||||||
|
|
||||||
add_custom_target(Assets ALL
|
|
||||||
COMMAND ${CMAKE_COMMAND} -Dsrc_dir="${CMAKE_SOURCE_DIR}/OTRGui/assets/extractor" -Ddst_dir="${CMAKE_BINARY_DIR}/assets/extractor" -P "${CMAKE_SOURCE_DIR}/OTRGui/Overwrite.cmake"
|
|
||||||
COMMAND ${CMAKE_COMMAND} -Dsrc_dir="${CMAKE_SOURCE_DIR}/OTRExporter/assets" -Ddst_dir="${CMAKE_BINARY_DIR}/assets/game" -P "${CMAKE_SOURCE_DIR}/OTRGui/Overwrite.cmake"
|
|
||||||
COMMAND ${CMAKE_COMMAND} -Dsrc_dir="${CMAKE_SOURCE_DIR}/soh/assets/xml" -Ddst_dir="${CMAKE_BINARY_DIR}/assets/extractor/xmls" -P "${CMAKE_SOURCE_DIR}/OTRGui/Overwrite.cmake"
|
|
||||||
)
|
|
||||||
add_dependencies(soh Assets)
|
|
||||||
|
|
||||||
install(TARGETS ZAPD DESTINATION ${CMAKE_BINARY_DIR}/assets/extractor)
|
install(TARGETS ZAPD DESTINATION ${CMAKE_BINARY_DIR}/assets/extractor)
|
||||||
|
|
||||||
set(PROGRAM_PERMISSIONS_EXECUTE OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ)
|
set(PROGRAM_PERMISSIONS_EXECUTE OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ)
|
||||||
|
|
||||||
|
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets/extractor)
|
||||||
|
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/extractor/xmls)
|
||||||
|
install(DIRECTORY "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/filelists/" DESTINATION ./assets/extractor/filelists)
|
||||||
|
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ActorList_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols)
|
||||||
|
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ObjectList_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols)
|
||||||
|
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/SymbolMap_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols)
|
||||||
|
|
||||||
install(DIRECTORY ${CMAKE_BINARY_DIR}/assets
|
install(DIRECTORY ${CMAKE_BINARY_DIR}/assets
|
||||||
DESTINATION .
|
DESTINATION .
|
||||||
PATTERN ZAPD.out
|
PATTERN ZAPD.out
|
||||||
|
26
OTRGui/.gitignore
vendored
@ -1,26 +0,0 @@
|
|||||||
CMakeLists.txt.user
|
|
||||||
CMakeCache.txt
|
|
||||||
CMakeFiles
|
|
||||||
CMakeScripts
|
|
||||||
Testing
|
|
||||||
Makefile
|
|
||||||
cmake_install.cmake
|
|
||||||
install_manifest.txt
|
|
||||||
compile_commands.json
|
|
||||||
CTestTestfile.cmake
|
|
||||||
_deps
|
|
||||||
bin/
|
|
||||||
build/assets/
|
|
||||||
build/Debug
|
|
||||||
build/.vs
|
|
||||||
build/x64
|
|
||||||
build/libs/raylib/raylib
|
|
||||||
build/packages
|
|
||||||
*.vcxproj.user
|
|
||||||
build/OTRGui.dir
|
|
||||||
.vscode/
|
|
||||||
assets/extractor/xmls/
|
|
||||||
x64/
|
|
||||||
packages/
|
|
||||||
.vs/
|
|
||||||
build/
|
|
@ -1,12 +0,0 @@
|
|||||||
; DO NOT EDIT (unless you know what you are doing)
|
|
||||||
;
|
|
||||||
; This subdirectory is a git "subrepo", and this file is maintained by the
|
|
||||||
; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme
|
|
||||||
;
|
|
||||||
[subrepo]
|
|
||||||
remote = https://github.com/HarbourMasters/otrgui.git
|
|
||||||
branch = master
|
|
||||||
commit = a6066a25197b308d427139277f66529a35c3bd47
|
|
||||||
parent = 442a88f03bcb406dfcf693b4948412ab10d2cf08
|
|
||||||
method = rebase
|
|
||||||
cmdver = 0.4.1
|
|
@ -1,65 +0,0 @@
|
|||||||
################################################################################
|
|
||||||
# Command for variable_watch. This command issues error message, if a variable
|
|
||||||
# is changed. If variable PROPERTY_READER_GUARD_DISABLED is TRUE nothing happens
|
|
||||||
# variable_watch(<variable> property_reader_guard)
|
|
||||||
################################################################################
|
|
||||||
function(property_reader_guard VARIABLE ACCESS VALUE CURRENT_LIST_FILE STACK)
|
|
||||||
if("${PROPERTY_READER_GUARD_DISABLED}")
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if("${ACCESS}" STREQUAL "MODIFIED_ACCESS")
|
|
||||||
message(FATAL_ERROR
|
|
||||||
" Variable ${VARIABLE} is not supposed to be changed.\n"
|
|
||||||
" It is used only for reading target property ${VARIABLE}.\n"
|
|
||||||
" Use\n"
|
|
||||||
" set_target_properties(\"<target>\" PROPERTIES \"${VARIABLE}\" \"<value>\")\n"
|
|
||||||
" or\n"
|
|
||||||
" set_target_properties(\"<target>\" PROPERTIES \"${VARIABLE}_<CONFIG>\" \"<value>\")\n"
|
|
||||||
" instead.\n")
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Create variable <name> with generator expression that expands to value of
|
|
||||||
# target property <name>_<CONFIG>. If property is empty or not set then property
|
|
||||||
# <name> is used instead. Variable <name> has watcher property_reader_guard that
|
|
||||||
# doesn't allow to edit it.
|
|
||||||
# create_property_reader(<name>)
|
|
||||||
# Input:
|
|
||||||
# name - Name of watched property and output variable
|
|
||||||
################################################################################
|
|
||||||
function(create_property_reader NAME)
|
|
||||||
set(PROPERTY_READER_GUARD_DISABLED TRUE)
|
|
||||||
set(CONFIG_VALUE "$<TARGET_GENEX_EVAL:${PROPS_TARGET},$<TARGET_PROPERTY:${PROPS_TARGET},${NAME}_$<UPPER_CASE:$<CONFIG>>>>")
|
|
||||||
set(IS_CONFIG_VALUE_EMPTY "$<STREQUAL:${CONFIG_VALUE},>")
|
|
||||||
set(GENERAL_VALUE "$<TARGET_GENEX_EVAL:${PROPS_TARGET},$<TARGET_PROPERTY:${PROPS_TARGET},${NAME}>>")
|
|
||||||
set("${NAME}" "$<IF:${IS_CONFIG_VALUE_EMPTY},${GENERAL_VALUE},${CONFIG_VALUE}>" PARENT_SCOPE)
|
|
||||||
variable_watch("${NAME}" property_reader_guard)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Set property $<name>_${PROPS_CONFIG_U} of ${PROPS_TARGET} to <value>
|
|
||||||
# set_config_specific_property(<name> <value>)
|
|
||||||
# Input:
|
|
||||||
# name - Prefix of property name
|
|
||||||
# value - New value
|
|
||||||
################################################################################
|
|
||||||
function(set_config_specific_property NAME VALUE)
|
|
||||||
set_target_properties("${PROPS_TARGET}" PROPERTIES "${NAME}_${PROPS_CONFIG_U}" "${VALUE}")
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
create_property_reader("TARGET_NAME")
|
|
||||||
create_property_reader("OUTPUT_DIRECTORY")
|
|
||||||
|
|
||||||
set_config_specific_property("TARGET_NAME" "${PROPS_TARGET}")
|
|
||||||
set_config_specific_property("OUTPUT_NAME" "${TARGET_NAME}")
|
|
||||||
set_config_specific_property("ARCHIVE_OUTPUT_NAME" "${TARGET_NAME}")
|
|
||||||
set_config_specific_property("LIBRARY_OUTPUT_NAME" "${TARGET_NAME}")
|
|
||||||
set_config_specific_property("RUNTIME_OUTPUT_NAME" "${TARGET_NAME}")
|
|
||||||
|
|
||||||
set_config_specific_property("ARCHIVE_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
|
|
||||||
set_config_specific_property("LIBRARY_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
|
|
||||||
set_config_specific_property("RUNTIME_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
|
|
@ -1,12 +0,0 @@
|
|||||||
include("${CMAKE_CURRENT_LIST_DIR}/Default.cmake")
|
|
||||||
|
|
||||||
set_config_specific_property("OUTPUT_DIRECTORY" "${CMAKE_SOURCE_DIR}$<$<NOT:$<STREQUAL:${CMAKE_VS_PLATFORM_NAME},Win32>>:/${CMAKE_VS_PLATFORM_NAME}>/${PROPS_CONFIG}")
|
|
||||||
|
|
||||||
if(MSVC)
|
|
||||||
create_property_reader("DEFAULT_CXX_EXCEPTION_HANDLING")
|
|
||||||
create_property_reader("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT")
|
|
||||||
|
|
||||||
set_target_properties("${PROPS_TARGET}" PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
|
|
||||||
set_config_specific_property("DEFAULT_CXX_EXCEPTION_HANDLING" "/EHsc")
|
|
||||||
set_config_specific_property("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT" "/Zi")
|
|
||||||
endif()
|
|
@ -1,234 +0,0 @@
|
|||||||
# utils file for projects came from visual studio solution with cmake-converter.
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Wrap each token of the command with condition
|
|
||||||
################################################################################
|
|
||||||
cmake_policy(PUSH)
|
|
||||||
cmake_policy(SET CMP0054 NEW)
|
|
||||||
macro(prepare_commands)
|
|
||||||
unset(TOKEN_ROLE)
|
|
||||||
unset(COMMANDS)
|
|
||||||
foreach(TOKEN ${ARG_COMMANDS})
|
|
||||||
if("${TOKEN}" STREQUAL "COMMAND")
|
|
||||||
set(TOKEN_ROLE "KEYWORD")
|
|
||||||
elseif("${TOKEN_ROLE}" STREQUAL "KEYWORD")
|
|
||||||
set(TOKEN_ROLE "CONDITION")
|
|
||||||
elseif("${TOKEN_ROLE}" STREQUAL "CONDITION")
|
|
||||||
set(TOKEN_ROLE "COMMAND")
|
|
||||||
elseif("${TOKEN_ROLE}" STREQUAL "COMMAND")
|
|
||||||
set(TOKEN_ROLE "ARG")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if("${TOKEN_ROLE}" STREQUAL "KEYWORD")
|
|
||||||
list(APPEND COMMANDS "${TOKEN}")
|
|
||||||
elseif("${TOKEN_ROLE}" STREQUAL "CONDITION")
|
|
||||||
set(CONDITION ${TOKEN})
|
|
||||||
elseif("${TOKEN_ROLE}" STREQUAL "COMMAND")
|
|
||||||
list(APPEND COMMANDS "$<$<NOT:${CONDITION}>:${DUMMY}>$<${CONDITION}:${TOKEN}>")
|
|
||||||
elseif("${TOKEN_ROLE}" STREQUAL "ARG")
|
|
||||||
list(APPEND COMMANDS "$<${CONDITION}:${TOKEN}>")
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
endmacro()
|
|
||||||
cmake_policy(POP)
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Transform all the tokens to absolute paths
|
|
||||||
################################################################################
|
|
||||||
macro(prepare_output)
|
|
||||||
unset(OUTPUT)
|
|
||||||
foreach(TOKEN ${ARG_OUTPUT})
|
|
||||||
if(IS_ABSOLUTE ${TOKEN})
|
|
||||||
list(APPEND OUTPUT "${TOKEN}")
|
|
||||||
else()
|
|
||||||
list(APPEND OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${TOKEN}")
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Parse add_custom_command_if args.
|
|
||||||
#
|
|
||||||
# Input:
|
|
||||||
# PRE_BUILD - Pre build event option
|
|
||||||
# PRE_LINK - Pre link event option
|
|
||||||
# POST_BUILD - Post build event option
|
|
||||||
# TARGET - Target
|
|
||||||
# OUTPUT - List of output files
|
|
||||||
# DEPENDS - List of files on which the command depends
|
|
||||||
# COMMANDS - List of commands(COMMAND condition1 commannd1 args1 COMMAND
|
|
||||||
# condition2 commannd2 args2 ...)
|
|
||||||
# Output:
|
|
||||||
# OUTPUT - Output files
|
|
||||||
# DEPENDS - Files on which the command depends
|
|
||||||
# COMMENT - Comment
|
|
||||||
# PRE_BUILD - TRUE/FALSE
|
|
||||||
# PRE_LINK - TRUE/FALSE
|
|
||||||
# POST_BUILD - TRUE/FALSE
|
|
||||||
# TARGET - Target name
|
|
||||||
# COMMANDS - Prepared commands(every token is wrapped in CONDITION)
|
|
||||||
# NAME - Unique name for custom target
|
|
||||||
# STEP - PRE_BUILD/PRE_LINK/POST_BUILD
|
|
||||||
################################################################################
|
|
||||||
function(add_custom_command_if_parse_arguments)
|
|
||||||
cmake_parse_arguments("ARG" "PRE_BUILD;PRE_LINK;POST_BUILD" "TARGET;COMMENT" "DEPENDS;OUTPUT;COMMANDS" ${ARGN})
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
set(DUMMY "cd.")
|
|
||||||
elseif(UNIX)
|
|
||||||
set(DUMMY "true")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
prepare_commands()
|
|
||||||
prepare_output()
|
|
||||||
|
|
||||||
set(DEPENDS "${ARG_DEPENDS}")
|
|
||||||
set(COMMENT "${ARG_COMMENT}")
|
|
||||||
set(PRE_BUILD "${ARG_PRE_BUILD}")
|
|
||||||
set(PRE_LINK "${ARG_PRE_LINK}")
|
|
||||||
set(POST_BUILD "${ARG_POST_BUILD}")
|
|
||||||
set(TARGET "${ARG_TARGET}")
|
|
||||||
if(PRE_BUILD)
|
|
||||||
set(STEP "PRE_BUILD")
|
|
||||||
elseif(PRE_LINK)
|
|
||||||
set(STEP "PRE_LINK")
|
|
||||||
elseif(POST_BUILD)
|
|
||||||
set(STEP "POST_BUILD")
|
|
||||||
endif()
|
|
||||||
set(NAME "${TARGET}_${STEP}")
|
|
||||||
|
|
||||||
set(OUTPUT "${OUTPUT}" PARENT_SCOPE)
|
|
||||||
set(DEPENDS "${DEPENDS}" PARENT_SCOPE)
|
|
||||||
set(COMMENT "${COMMENT}" PARENT_SCOPE)
|
|
||||||
set(PRE_BUILD "${PRE_BUILD}" PARENT_SCOPE)
|
|
||||||
set(PRE_LINK "${PRE_LINK}" PARENT_SCOPE)
|
|
||||||
set(POST_BUILD "${POST_BUILD}" PARENT_SCOPE)
|
|
||||||
set(TARGET "${TARGET}" PARENT_SCOPE)
|
|
||||||
set(COMMANDS "${COMMANDS}" PARENT_SCOPE)
|
|
||||||
set(STEP "${STEP}" PARENT_SCOPE)
|
|
||||||
set(NAME "${NAME}" PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Add conditional custom command
|
|
||||||
#
|
|
||||||
# Generating Files
|
|
||||||
# The first signature is for adding a custom command to produce an output:
|
|
||||||
# add_custom_command_if(
|
|
||||||
# <OUTPUT output1 [output2 ...]>
|
|
||||||
# <COMMANDS>
|
|
||||||
# <COMMAND condition command1 [args1...]>
|
|
||||||
# [COMMAND condition command2 [args2...]]
|
|
||||||
# [DEPENDS [depends...]]
|
|
||||||
# [COMMENT comment]
|
|
||||||
#
|
|
||||||
# Build Events
|
|
||||||
# add_custom_command_if(
|
|
||||||
# <TARGET target>
|
|
||||||
# <PRE_BUILD | PRE_LINK | POST_BUILD>
|
|
||||||
# <COMMAND condition command1 [args1...]>
|
|
||||||
# [COMMAND condition command2 [args2...]]
|
|
||||||
# [COMMENT comment]
|
|
||||||
#
|
|
||||||
# Input:
|
|
||||||
# output - Output files the command is expected to produce
|
|
||||||
# condition - Generator expression for wrapping the command
|
|
||||||
# command - Command-line(s) to execute at build time.
|
|
||||||
# args - Command`s args
|
|
||||||
# depends - Files on which the command depends
|
|
||||||
# comment - Display the given message before the commands are executed at
|
|
||||||
# build time.
|
|
||||||
# PRE_BUILD - Run before any other rules are executed within the target
|
|
||||||
# PRE_LINK - Run after sources have been compiled but before linking the
|
|
||||||
# binary
|
|
||||||
# POST_BUILD - Run after all other rules within the target have been
|
|
||||||
# executed
|
|
||||||
################################################################################
|
|
||||||
function(add_custom_command_if)
|
|
||||||
add_custom_command_if_parse_arguments(${ARGN})
|
|
||||||
|
|
||||||
if(OUTPUT AND TARGET)
|
|
||||||
message(FATAL_ERROR "Wrong syntax. A TARGET and OUTPUT can not both be specified.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(OUTPUT)
|
|
||||||
add_custom_command(OUTPUT ${OUTPUT}
|
|
||||||
${COMMANDS}
|
|
||||||
DEPENDS ${DEPENDS}
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
||||||
COMMENT ${COMMENT})
|
|
||||||
elseif(TARGET)
|
|
||||||
if(PRE_BUILD AND NOT ${CMAKE_GENERATOR} MATCHES "Visual Studio")
|
|
||||||
add_custom_target(
|
|
||||||
${NAME}
|
|
||||||
${COMMANDS}
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
||||||
COMMENT ${COMMENT})
|
|
||||||
add_dependencies(${TARGET} ${NAME})
|
|
||||||
else()
|
|
||||||
add_custom_command(
|
|
||||||
TARGET ${TARGET}
|
|
||||||
${STEP}
|
|
||||||
${COMMANDS}
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
||||||
COMMENT ${COMMENT})
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "Wrong syntax. A TARGET or OUTPUT must be specified.")
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Use props file for a target and configs
|
|
||||||
# use_props(<target> <configs...> <props_file>)
|
|
||||||
# Inside <props_file> there are following variables:
|
|
||||||
# PROPS_TARGET - <target>
|
|
||||||
# PROPS_CONFIG - One of <configs...>
|
|
||||||
# PROPS_CONFIG_U - Uppercase PROPS_CONFIG
|
|
||||||
# Input:
|
|
||||||
# target - Target to apply props file
|
|
||||||
# configs - Build configurations to apply props file
|
|
||||||
# props_file - CMake script
|
|
||||||
################################################################################
|
|
||||||
macro(use_props TARGET CONFIGS PROPS_FILE)
|
|
||||||
set(PROPS_TARGET "${TARGET}")
|
|
||||||
foreach(PROPS_CONFIG ${CONFIGS})
|
|
||||||
string(TOUPPER "${PROPS_CONFIG}" PROPS_CONFIG_U)
|
|
||||||
|
|
||||||
get_filename_component(ABSOLUTE_PROPS_FILE "${PROPS_FILE}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_LIST_DIR}")
|
|
||||||
if(EXISTS "${ABSOLUTE_PROPS_FILE}")
|
|
||||||
include("${ABSOLUTE_PROPS_FILE}")
|
|
||||||
else()
|
|
||||||
message(WARNING "Corresponding cmake file from props \"${ABSOLUTE_PROPS_FILE}\" doesn't exist")
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Add compile options to source file
|
|
||||||
# source_file_compile_options(<source_file> [compile_options...])
|
|
||||||
# Input:
|
|
||||||
# source_file - Source file
|
|
||||||
# compile_options - Options to add to COMPILE_FLAGS property
|
|
||||||
################################################################################
|
|
||||||
function(source_file_compile_options SOURCE_FILE)
|
|
||||||
if("${ARGC}" LESS_EQUAL "1")
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
get_source_file_property(COMPILE_OPTIONS "${SOURCE_FILE}" COMPILE_OPTIONS)
|
|
||||||
|
|
||||||
if(COMPILE_OPTIONS)
|
|
||||||
list(APPEND COMPILE_OPTIONS ${ARGN})
|
|
||||||
else()
|
|
||||||
set(COMPILE_OPTIONS "${ARGN}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set_source_files_properties("${SOURCE_FILE}" PROPERTIES COMPILE_OPTIONS "${COMPILE_OPTIONS}")
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Default properties of visual studio projects
|
|
||||||
################################################################################
|
|
||||||
set(DEFAULT_CXX_PROPS "${CMAKE_CURRENT_LIST_DIR}/DefaultCXX.cmake")
|
|
||||||
set(DEFAULT_Fortran_PROPS "${CMAKE_CURRENT_LIST_DIR}/DefaultFortran.cmake")
|
|
@ -1,68 +0,0 @@
|
|||||||
cmake_minimum_required(VERSION 3.16)
|
|
||||||
project(OTRGui)
|
|
||||||
|
|
||||||
set(PLATFORM "Desktop")
|
|
||||||
set(CMAKE_CXX_STANDARD 20)
|
|
||||||
#set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build)
|
|
||||||
set(APP_ICON_RESOURCE_WINDOWS ${CMAKE_CURRENT_SOURCE_DIR}/appicon.rc)
|
|
||||||
|
|
||||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
||||||
set(OpenGL_GL_PREFERENCE "GLVND")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(CMake/Utils.cmake)
|
|
||||||
|
|
||||||
add_subdirectory(libs/raylib EXCLUDE_FROM_ALL)
|
|
||||||
|
|
||||||
include_directories(src)
|
|
||||||
include_directories(src/game)
|
|
||||||
include_directories(include)
|
|
||||||
|
|
||||||
if (NOT TARGET libultraship)
|
|
||||||
add_subdirectory(../libultraship ${CMAKE_BINARY_DIR}/libultraship)
|
|
||||||
endif()
|
|
||||||
if (NOT TARGET ZAPD)
|
|
||||||
add_subdirectory(../ZAPDTR/ZAPD ${CMAKE_BINARY_DIR}/ZAPD)
|
|
||||||
endif()
|
|
||||||
if (NOT TARGET ZAPDUtils)
|
|
||||||
add_subdirectory(../libultraship/extern/ZAPDUtils ${CMAKE_BINARY_DIR}/ZAPDUtils)
|
|
||||||
endif()
|
|
||||||
if (NOT TARGET OTRExporter)
|
|
||||||
add_subdirectory(../OTRExporter/OTRExporter ${CMAKE_BINARY_DIR}/OTRExporter)
|
|
||||||
endif()
|
|
||||||
if (NOT TARGET storm)
|
|
||||||
add_subdirectory(../libultraship/extern/StormLib ${CMAKE_BINARY_DIR}/StormLib)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
file(GLOB_RECURSE HEADERS src/*.h)
|
|
||||||
file(GLOB_RECURSE SOURCES src/*.cpp)
|
|
||||||
file(GLOB_RECURSE C_SOURCES src/*.c)
|
|
||||||
|
|
||||||
add_executable(${PROJECT_NAME} EXCLUDE_FROM_ALL ${SOURCES} ${C_SOURCES} ${HEADERS} ${APP_ICON_RESOURCE_WINDOWS})
|
|
||||||
|
|
||||||
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
|
||||||
use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_custom_target(Assets ALL
|
|
||||||
COMMAND ${CMAKE_COMMAND} -Dsrc_dir="${CMAKE_CURRENT_SOURCE_DIR}/assets" -Ddst_dir="${CMAKE_CURRENT_BINARY_DIR}/assets" -P "${CMAKE_CURRENT_SOURCE_DIR}/Overwrite.cmake"
|
|
||||||
COMMAND ${CMAKE_COMMAND} -Dsrc_dir="${CMAKE_CURRENT_SOURCE_DIR}/../OTRExporter/assets" -Ddst_dir="${CMAKE_CURRENT_BINARY_DIR}/assets/game" -P "${CMAKE_CURRENT_SOURCE_DIR}/Overwrite.cmake"
|
|
||||||
COMMAND ${CMAKE_COMMAND} -Dsrc_dir="${CMAKE_CURRENT_SOURCE_DIR}/../soh/assets/xml" -Ddst_dir="${CMAKE_CURRENT_BINARY_DIR}/assets/extractor/xmls" -P "${CMAKE_CURRENT_SOURCE_DIR}/Overwrite.cmake"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_dependencies(OTRGui Assets)
|
|
||||||
|
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC raylib)
|
|
||||||
|
|
||||||
target_include_directories(${PROJECT_NAME} PRIVATE
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship
|
|
||||||
.
|
|
||||||
)
|
|
||||||
|
|
||||||
INSTALL(TARGETS OTRGui DESTINATION . COMPONENT ship OPTIONAL)
|
|
||||||
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/assets
|
|
||||||
DESTINATION .
|
|
||||||
COMPONENT ship
|
|
||||||
)
|
|
||||||
INSTALL(TARGETS ZAPD DESTINATION assets/extractor COMPONENT ship)
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2022 Harbour Masters
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
@ -1,15 +0,0 @@
|
|||||||
include(CMakePrintHelpers)
|
|
||||||
|
|
||||||
string(REPLACE "\\ " " " sources_dir "${src_dir}")
|
|
||||||
string(REPLACE "\\ " " " destination_dir "${dst_dir}")
|
|
||||||
|
|
||||||
file(GLOB_RECURSE _file_list RELATIVE "${sources_dir}" "${sources_dir}/*")
|
|
||||||
|
|
||||||
foreach( each_file ${_file_list} )
|
|
||||||
set(destinationfile "${destination_dir}/${each_file}")
|
|
||||||
set(sourcefile "${sources_dir}/${each_file}")
|
|
||||||
if(NOT EXISTS ${destinationfile} OR ${sourcefile} IS_NEWER_THAN ${destinationfile})
|
|
||||||
get_filename_component(destinationdir ${destinationfile} DIRECTORY)
|
|
||||||
file(COPY ${sourcefile} DESTINATION ${destinationdir})
|
|
||||||
endif()
|
|
||||||
endforeach(each_file)
|
|
@ -1 +0,0 @@
|
|||||||
IDI_ICON1 ICON DISCARDABLE "rum.ico"
|
|
@ -1,472 +0,0 @@
|
|||||||
ACTOR_PLAYER
|
|
||||||
ACTOR_UNSET_1
|
|
||||||
ACTOR_EN_TEST
|
|
||||||
ACTOR_UNSET_3
|
|
||||||
ACTOR_EN_GIRLA
|
|
||||||
ACTOR_UNSET_5
|
|
||||||
ACTOR_UNSET_6
|
|
||||||
ACTOR_EN_PART
|
|
||||||
ACTOR_EN_LIGHT
|
|
||||||
ACTOR_EN_DOOR
|
|
||||||
ACTOR_EN_BOX
|
|
||||||
ACTOR_BG_DY_YOSEIZO
|
|
||||||
ACTOR_BG_HIDAN_FIREWALL
|
|
||||||
ACTOR_EN_POH
|
|
||||||
ACTOR_EN_OKUTA
|
|
||||||
ACTOR_BG_YDAN_SP
|
|
||||||
ACTOR_EN_BOM
|
|
||||||
ACTOR_EN_WALLMAS
|
|
||||||
ACTOR_EN_DODONGO
|
|
||||||
ACTOR_EN_FIREFLY
|
|
||||||
ACTOR_EN_HORSE
|
|
||||||
ACTOR_EN_ITEM00
|
|
||||||
ACTOR_EN_ARROW
|
|
||||||
ACTOR_UNSET_17
|
|
||||||
ACTOR_EN_ELF
|
|
||||||
ACTOR_EN_NIW
|
|
||||||
ACTOR_UNSET_1A
|
|
||||||
ACTOR_EN_TITE
|
|
||||||
ACTOR_EN_REEBA
|
|
||||||
ACTOR_EN_PEEHAT
|
|
||||||
ACTOR_EN_BUTTE
|
|
||||||
ACTOR_UNSET_1F
|
|
||||||
ACTOR_EN_INSECT
|
|
||||||
ACTOR_EN_FISH
|
|
||||||
ACTOR_UNSET_22
|
|
||||||
ACTOR_EN_HOLL
|
|
||||||
ACTOR_EN_SCENE_CHANGE
|
|
||||||
ACTOR_EN_ZF
|
|
||||||
ACTOR_EN_HATA
|
|
||||||
ACTOR_BOSS_DODONGO
|
|
||||||
ACTOR_BOSS_GOMA
|
|
||||||
ACTOR_EN_ZL1
|
|
||||||
ACTOR_EN_VIEWER
|
|
||||||
ACTOR_EN_GOMA
|
|
||||||
ACTOR_BG_PUSHBOX
|
|
||||||
ACTOR_EN_BUBBLE
|
|
||||||
ACTOR_DOOR_SHUTTER
|
|
||||||
ACTOR_EN_DODOJR
|
|
||||||
ACTOR_EN_BDFIRE
|
|
||||||
ACTOR_UNSET_31
|
|
||||||
ACTOR_EN_BOOM
|
|
||||||
ACTOR_EN_TORCH2
|
|
||||||
ACTOR_EN_BILI
|
|
||||||
ACTOR_EN_TP
|
|
||||||
ACTOR_UNSET_36
|
|
||||||
ACTOR_EN_ST
|
|
||||||
ACTOR_EN_BW
|
|
||||||
ACTOR_EN_A_OBJ
|
|
||||||
ACTOR_EN_EIYER
|
|
||||||
ACTOR_EN_RIVER_SOUND
|
|
||||||
ACTOR_EN_HORSE_NORMAL
|
|
||||||
ACTOR_EN_OSSAN
|
|
||||||
ACTOR_BG_TREEMOUTH
|
|
||||||
ACTOR_BG_DODOAGO
|
|
||||||
ACTOR_BG_HIDAN_DALM
|
|
||||||
ACTOR_BG_HIDAN_HROCK
|
|
||||||
ACTOR_EN_HORSE_GANON
|
|
||||||
ACTOR_BG_HIDAN_ROCK
|
|
||||||
ACTOR_BG_HIDAN_RSEKIZOU
|
|
||||||
ACTOR_BG_HIDAN_SEKIZOU
|
|
||||||
ACTOR_BG_HIDAN_SIMA
|
|
||||||
ACTOR_BG_HIDAN_SYOKU
|
|
||||||
ACTOR_EN_XC
|
|
||||||
ACTOR_BG_HIDAN_CURTAIN
|
|
||||||
ACTOR_BG_SPOT00_HANEBASI
|
|
||||||
ACTOR_EN_MB
|
|
||||||
ACTOR_EN_BOMBF
|
|
||||||
ACTOR_EN_ZL2
|
|
||||||
ACTOR_BG_HIDAN_FSLIFT
|
|
||||||
ACTOR_EN_OE2
|
|
||||||
ACTOR_BG_YDAN_HASI
|
|
||||||
ACTOR_BG_YDAN_MARUTA
|
|
||||||
ACTOR_BOSS_GANONDROF
|
|
||||||
ACTOR_UNSET_53
|
|
||||||
ACTOR_EN_AM
|
|
||||||
ACTOR_EN_DEKUBABA
|
|
||||||
ACTOR_EN_M_FIRE1
|
|
||||||
ACTOR_EN_M_THUNDER
|
|
||||||
ACTOR_BG_DDAN_JD
|
|
||||||
ACTOR_BG_BREAKWALL
|
|
||||||
ACTOR_EN_JJ
|
|
||||||
ACTOR_EN_HORSE_ZELDA
|
|
||||||
ACTOR_BG_DDAN_KD
|
|
||||||
ACTOR_DOOR_WARP1
|
|
||||||
ACTOR_OBJ_SYOKUDAI
|
|
||||||
ACTOR_ITEM_B_HEART
|
|
||||||
ACTOR_EN_DEKUNUTS
|
|
||||||
ACTOR_BG_MENKURI_KAITEN
|
|
||||||
ACTOR_BG_MENKURI_EYE
|
|
||||||
ACTOR_EN_VALI
|
|
||||||
ACTOR_BG_MIZU_MOVEBG
|
|
||||||
ACTOR_BG_MIZU_WATER
|
|
||||||
ACTOR_ARMS_HOOK
|
|
||||||
ACTOR_EN_FHG
|
|
||||||
ACTOR_BG_MORI_HINERI
|
|
||||||
ACTOR_EN_BB
|
|
||||||
ACTOR_BG_TOKI_HIKARI
|
|
||||||
ACTOR_EN_YUKABYUN
|
|
||||||
ACTOR_BG_TOKI_SWD
|
|
||||||
ACTOR_EN_FHG_FIRE
|
|
||||||
ACTOR_BG_MJIN
|
|
||||||
ACTOR_BG_HIDAN_KOUSI
|
|
||||||
ACTOR_DOOR_TOKI
|
|
||||||
ACTOR_BG_HIDAN_HAMSTEP
|
|
||||||
ACTOR_EN_BIRD
|
|
||||||
ACTOR_UNSET_73
|
|
||||||
ACTOR_UNSET_74
|
|
||||||
ACTOR_UNSET_75
|
|
||||||
ACTOR_UNSET_76
|
|
||||||
ACTOR_EN_WOOD02
|
|
||||||
ACTOR_UNSET_78
|
|
||||||
ACTOR_UNSET_79
|
|
||||||
ACTOR_UNSET_7A
|
|
||||||
ACTOR_UNSET_7B
|
|
||||||
ACTOR_EN_LIGHTBOX
|
|
||||||
ACTOR_EN_PU_BOX
|
|
||||||
ACTOR_UNSET_7E
|
|
||||||
ACTOR_UNSET_7F
|
|
||||||
ACTOR_EN_TRAP
|
|
||||||
ACTOR_EN_AROW_TRAP
|
|
||||||
ACTOR_EN_VASE
|
|
||||||
ACTOR_UNSET_83
|
|
||||||
ACTOR_EN_TA
|
|
||||||
ACTOR_EN_TK
|
|
||||||
ACTOR_BG_MORI_BIGST
|
|
||||||
ACTOR_BG_MORI_ELEVATOR
|
|
||||||
ACTOR_BG_MORI_KAITENKABE
|
|
||||||
ACTOR_BG_MORI_RAKKATENJO
|
|
||||||
ACTOR_EN_VM
|
|
||||||
ACTOR_DEMO_EFFECT
|
|
||||||
ACTOR_DEMO_KANKYO
|
|
||||||
ACTOR_BG_HIDAN_FWBIG
|
|
||||||
ACTOR_EN_FLOORMAS
|
|
||||||
ACTOR_EN_HEISHI1
|
|
||||||
ACTOR_EN_RD
|
|
||||||
ACTOR_EN_PO_SISTERS
|
|
||||||
ACTOR_BG_HEAVY_BLOCK
|
|
||||||
ACTOR_BG_PO_EVENT
|
|
||||||
ACTOR_OBJ_MURE
|
|
||||||
ACTOR_EN_SW
|
|
||||||
ACTOR_BOSS_FD
|
|
||||||
ACTOR_OBJECT_KANKYO
|
|
||||||
ACTOR_EN_DU
|
|
||||||
ACTOR_EN_FD
|
|
||||||
ACTOR_EN_HORSE_LINK_CHILD
|
|
||||||
ACTOR_DOOR_ANA
|
|
||||||
ACTOR_BG_SPOT02_OBJECTS
|
|
||||||
ACTOR_BG_HAKA
|
|
||||||
ACTOR_MAGIC_WIND
|
|
||||||
ACTOR_MAGIC_FIRE
|
|
||||||
ACTOR_UNSET_A0
|
|
||||||
ACTOR_EN_RU1
|
|
||||||
ACTOR_BOSS_FD2
|
|
||||||
ACTOR_EN_FD_FIRE
|
|
||||||
ACTOR_EN_DH
|
|
||||||
ACTOR_EN_DHA
|
|
||||||
ACTOR_EN_RL
|
|
||||||
ACTOR_EN_ENCOUNT1
|
|
||||||
ACTOR_DEMO_DU
|
|
||||||
ACTOR_DEMO_IM
|
|
||||||
ACTOR_DEMO_TRE_LGT
|
|
||||||
ACTOR_EN_FW
|
|
||||||
ACTOR_BG_VB_SIMA
|
|
||||||
ACTOR_EN_VB_BALL
|
|
||||||
ACTOR_BG_HAKA_MEGANE
|
|
||||||
ACTOR_BG_HAKA_MEGANEBG
|
|
||||||
ACTOR_BG_HAKA_SHIP
|
|
||||||
ACTOR_BG_HAKA_SGAMI
|
|
||||||
ACTOR_UNSET_B2
|
|
||||||
ACTOR_EN_HEISHI2
|
|
||||||
ACTOR_EN_ENCOUNT2
|
|
||||||
ACTOR_EN_FIRE_ROCK
|
|
||||||
ACTOR_EN_BROB
|
|
||||||
ACTOR_MIR_RAY
|
|
||||||
ACTOR_BG_SPOT09_OBJ
|
|
||||||
ACTOR_BG_SPOT18_OBJ
|
|
||||||
ACTOR_BOSS_VA
|
|
||||||
ACTOR_BG_HAKA_TUBO
|
|
||||||
ACTOR_BG_HAKA_TRAP
|
|
||||||
ACTOR_BG_HAKA_HUTA
|
|
||||||
ACTOR_BG_HAKA_ZOU
|
|
||||||
ACTOR_BG_SPOT17_FUNEN
|
|
||||||
ACTOR_EN_SYATEKI_ITM
|
|
||||||
ACTOR_EN_SYATEKI_MAN
|
|
||||||
ACTOR_EN_TANA
|
|
||||||
ACTOR_EN_NB
|
|
||||||
ACTOR_BOSS_MO
|
|
||||||
ACTOR_EN_SB
|
|
||||||
ACTOR_EN_BIGOKUTA
|
|
||||||
ACTOR_EN_KAREBABA
|
|
||||||
ACTOR_BG_BDAN_OBJECTS
|
|
||||||
ACTOR_DEMO_SA
|
|
||||||
ACTOR_DEMO_GO
|
|
||||||
ACTOR_EN_IN
|
|
||||||
ACTOR_EN_TR
|
|
||||||
ACTOR_BG_SPOT16_BOMBSTONE
|
|
||||||
ACTOR_UNSET_CE
|
|
||||||
ACTOR_BG_HIDAN_KOWARERUKABE
|
|
||||||
ACTOR_BG_BOMBWALL
|
|
||||||
ACTOR_BG_SPOT08_ICEBLOCK
|
|
||||||
ACTOR_EN_RU2
|
|
||||||
ACTOR_OBJ_DEKUJR
|
|
||||||
ACTOR_BG_MIZU_UZU
|
|
||||||
ACTOR_BG_SPOT06_OBJECTS
|
|
||||||
ACTOR_BG_ICE_OBJECTS
|
|
||||||
ACTOR_BG_HAKA_WATER
|
|
||||||
ACTOR_UNSET_D8
|
|
||||||
ACTOR_EN_MA2
|
|
||||||
ACTOR_EN_BOM_CHU
|
|
||||||
ACTOR_EN_HORSE_GAME_CHECK
|
|
||||||
ACTOR_BOSS_TW
|
|
||||||
ACTOR_EN_RR
|
|
||||||
ACTOR_EN_BA
|
|
||||||
ACTOR_EN_BX
|
|
||||||
ACTOR_EN_ANUBICE
|
|
||||||
ACTOR_EN_ANUBICE_FIRE
|
|
||||||
ACTOR_BG_MORI_HASHIGO
|
|
||||||
ACTOR_BG_MORI_HASHIRA4
|
|
||||||
ACTOR_BG_MORI_IDOMIZU
|
|
||||||
ACTOR_BG_SPOT16_DOUGHNUT
|
|
||||||
ACTOR_BG_BDAN_SWITCH
|
|
||||||
ACTOR_EN_MA1
|
|
||||||
ACTOR_BOSS_GANON
|
|
||||||
ACTOR_BOSS_SST
|
|
||||||
ACTOR_UNSET_EA
|
|
||||||
ACTOR_UNSET_EB
|
|
||||||
ACTOR_EN_NY
|
|
||||||
ACTOR_EN_FR
|
|
||||||
ACTOR_ITEM_SHIELD
|
|
||||||
ACTOR_BG_ICE_SHELTER
|
|
||||||
ACTOR_EN_ICE_HONO
|
|
||||||
ACTOR_ITEM_OCARINA
|
|
||||||
ACTOR_UNSET_F2
|
|
||||||
ACTOR_UNSET_F3
|
|
||||||
ACTOR_MAGIC_DARK
|
|
||||||
ACTOR_DEMO_6K
|
|
||||||
ACTOR_EN_ANUBICE_TAG
|
|
||||||
ACTOR_BG_HAKA_GATE
|
|
||||||
ACTOR_BG_SPOT15_SAKU
|
|
||||||
ACTOR_BG_JYA_GOROIWA
|
|
||||||
ACTOR_BG_JYA_ZURERUKABE
|
|
||||||
ACTOR_UNSET_FB
|
|
||||||
ACTOR_BG_JYA_COBRA
|
|
||||||
ACTOR_BG_JYA_KANAAMI
|
|
||||||
ACTOR_FISHING
|
|
||||||
ACTOR_OBJ_OSHIHIKI
|
|
||||||
ACTOR_BG_GATE_SHUTTER
|
|
||||||
ACTOR_EFF_DUST
|
|
||||||
ACTOR_BG_SPOT01_FUSYA
|
|
||||||
ACTOR_BG_SPOT01_IDOHASHIRA
|
|
||||||
ACTOR_BG_SPOT01_IDOMIZU
|
|
||||||
ACTOR_BG_PO_SYOKUDAI
|
|
||||||
ACTOR_BG_GANON_OTYUKA
|
|
||||||
ACTOR_BG_SPOT15_RRBOX
|
|
||||||
ACTOR_BG_UMAJUMP
|
|
||||||
ACTOR_UNSET_109
|
|
||||||
ACTOR_ARROW_FIRE
|
|
||||||
ACTOR_ARROW_ICE
|
|
||||||
ACTOR_ARROW_LIGHT
|
|
||||||
ACTOR_UNSET_10D
|
|
||||||
ACTOR_UNSET_10E
|
|
||||||
ACTOR_ITEM_ETCETERA
|
|
||||||
ACTOR_OBJ_KIBAKO
|
|
||||||
ACTOR_OBJ_TSUBO
|
|
||||||
ACTOR_EN_WONDER_ITEM
|
|
||||||
ACTOR_EN_IK
|
|
||||||
ACTOR_DEMO_IK
|
|
||||||
ACTOR_EN_SKJ
|
|
||||||
ACTOR_EN_SKJNEEDLE
|
|
||||||
ACTOR_EN_G_SWITCH
|
|
||||||
ACTOR_DEMO_EXT
|
|
||||||
ACTOR_DEMO_SHD
|
|
||||||
ACTOR_EN_DNS
|
|
||||||
ACTOR_ELF_MSG
|
|
||||||
ACTOR_EN_HONOTRAP
|
|
||||||
ACTOR_EN_TUBO_TRAP
|
|
||||||
ACTOR_OBJ_ICE_POLY
|
|
||||||
ACTOR_BG_SPOT03_TAKI
|
|
||||||
ACTOR_BG_SPOT07_TAKI
|
|
||||||
ACTOR_EN_FZ
|
|
||||||
ACTOR_EN_PO_RELAY
|
|
||||||
ACTOR_BG_RELAY_OBJECTS
|
|
||||||
ACTOR_EN_DIVING_GAME
|
|
||||||
ACTOR_EN_KUSA
|
|
||||||
ACTOR_OBJ_BEAN
|
|
||||||
ACTOR_OBJ_BOMBIWA
|
|
||||||
ACTOR_UNSET_128
|
|
||||||
ACTOR_UNSET_129
|
|
||||||
ACTOR_OBJ_SWITCH
|
|
||||||
ACTOR_OBJ_ELEVATOR
|
|
||||||
ACTOR_OBJ_LIFT
|
|
||||||
ACTOR_OBJ_HSBLOCK
|
|
||||||
ACTOR_EN_OKARINA_TAG
|
|
||||||
ACTOR_EN_YABUSAME_MARK
|
|
||||||
ACTOR_EN_GOROIWA
|
|
||||||
ACTOR_EN_EX_RUPPY
|
|
||||||
ACTOR_EN_TORYO
|
|
||||||
ACTOR_EN_DAIKU
|
|
||||||
ACTOR_UNSET_134
|
|
||||||
ACTOR_EN_NWC
|
|
||||||
ACTOR_EN_BLKOBJ
|
|
||||||
ACTOR_ITEM_INBOX
|
|
||||||
ACTOR_EN_GE1
|
|
||||||
ACTOR_OBJ_BLOCKSTOP
|
|
||||||
ACTOR_EN_SDA
|
|
||||||
ACTOR_EN_CLEAR_TAG
|
|
||||||
ACTOR_EN_NIW_LADY
|
|
||||||
ACTOR_EN_GM
|
|
||||||
ACTOR_EN_MS
|
|
||||||
ACTOR_EN_HS
|
|
||||||
ACTOR_BG_INGATE
|
|
||||||
ACTOR_EN_KANBAN
|
|
||||||
ACTOR_EN_HEISHI3
|
|
||||||
ACTOR_EN_SYATEKI_NIW
|
|
||||||
ACTOR_EN_ATTACK_NIW
|
|
||||||
ACTOR_BG_SPOT01_IDOSOKO
|
|
||||||
ACTOR_EN_SA
|
|
||||||
ACTOR_EN_WONDER_TALK
|
|
||||||
ACTOR_BG_GJYO_BRIDGE
|
|
||||||
ACTOR_EN_DS
|
|
||||||
ACTOR_EN_MK
|
|
||||||
ACTOR_EN_BOM_BOWL_MAN
|
|
||||||
ACTOR_EN_BOM_BOWL_PIT
|
|
||||||
ACTOR_EN_OWL
|
|
||||||
ACTOR_EN_ISHI
|
|
||||||
ACTOR_OBJ_HANA
|
|
||||||
ACTOR_OBJ_LIGHTSWITCH
|
|
||||||
ACTOR_OBJ_MURE2
|
|
||||||
ACTOR_EN_GO
|
|
||||||
ACTOR_EN_FU
|
|
||||||
ACTOR_UNSET_154
|
|
||||||
ACTOR_EN_CHANGER
|
|
||||||
ACTOR_BG_JYA_MEGAMI
|
|
||||||
ACTOR_BG_JYA_LIFT
|
|
||||||
ACTOR_BG_JYA_BIGMIRROR
|
|
||||||
ACTOR_BG_JYA_BOMBCHUIWA
|
|
||||||
ACTOR_BG_JYA_AMISHUTTER
|
|
||||||
ACTOR_BG_JYA_BOMBIWA
|
|
||||||
ACTOR_BG_SPOT18_BASKET
|
|
||||||
ACTOR_UNSET_15D
|
|
||||||
ACTOR_EN_GANON_ORGAN
|
|
||||||
ACTOR_EN_SIOFUKI
|
|
||||||
ACTOR_EN_STREAM
|
|
||||||
ACTOR_UNSET_161
|
|
||||||
ACTOR_EN_MM
|
|
||||||
ACTOR_EN_KO
|
|
||||||
ACTOR_EN_KZ
|
|
||||||
ACTOR_EN_WEATHER_TAG
|
|
||||||
ACTOR_BG_SST_FLOOR
|
|
||||||
ACTOR_EN_ANI
|
|
||||||
ACTOR_EN_EX_ITEM
|
|
||||||
ACTOR_BG_JYA_IRONOBJ
|
|
||||||
ACTOR_EN_JS
|
|
||||||
ACTOR_EN_JSJUTAN
|
|
||||||
ACTOR_EN_CS
|
|
||||||
ACTOR_EN_MD
|
|
||||||
ACTOR_EN_HY
|
|
||||||
ACTOR_EN_GANON_MANT
|
|
||||||
ACTOR_EN_OKARINA_EFFECT
|
|
||||||
ACTOR_EN_MAG
|
|
||||||
ACTOR_DOOR_GERUDO
|
|
||||||
ACTOR_ELF_MSG2
|
|
||||||
ACTOR_DEMO_GT
|
|
||||||
ACTOR_EN_PO_FIELD
|
|
||||||
ACTOR_EFC_ERUPC
|
|
||||||
ACTOR_BG_ZG
|
|
||||||
ACTOR_EN_HEISHI4
|
|
||||||
ACTOR_EN_ZL3
|
|
||||||
ACTOR_BOSS_GANON2
|
|
||||||
ACTOR_EN_KAKASI
|
|
||||||
ACTOR_EN_TAKARA_MAN
|
|
||||||
ACTOR_OBJ_MAKEOSHIHIKI
|
|
||||||
ACTOR_OCEFF_SPOT
|
|
||||||
ACTOR_END_TITLE
|
|
||||||
ACTOR_UNSET_180
|
|
||||||
ACTOR_EN_TORCH
|
|
||||||
ACTOR_DEMO_EC
|
|
||||||
ACTOR_SHOT_SUN
|
|
||||||
ACTOR_EN_DY_EXTRA
|
|
||||||
ACTOR_EN_WONDER_TALK2
|
|
||||||
ACTOR_EN_GE2
|
|
||||||
ACTOR_OBJ_ROOMTIMER
|
|
||||||
ACTOR_EN_SSH
|
|
||||||
ACTOR_EN_STH
|
|
||||||
ACTOR_OCEFF_WIPE
|
|
||||||
ACTOR_OCEFF_STORM
|
|
||||||
ACTOR_EN_WEIYER
|
|
||||||
ACTOR_BG_SPOT05_SOKO
|
|
||||||
ACTOR_BG_JYA_1FLIFT
|
|
||||||
ACTOR_BG_JYA_HAHENIRON
|
|
||||||
ACTOR_BG_SPOT12_GATE
|
|
||||||
ACTOR_BG_SPOT12_SAKU
|
|
||||||
ACTOR_EN_HINTNUTS
|
|
||||||
ACTOR_EN_NUTSBALL
|
|
||||||
ACTOR_BG_SPOT00_BREAK
|
|
||||||
ACTOR_EN_SHOPNUTS
|
|
||||||
ACTOR_EN_IT
|
|
||||||
ACTOR_EN_GELDB
|
|
||||||
ACTOR_OCEFF_WIPE2
|
|
||||||
ACTOR_OCEFF_WIPE3
|
|
||||||
ACTOR_EN_NIW_GIRL
|
|
||||||
ACTOR_EN_DOG
|
|
||||||
ACTOR_EN_SI
|
|
||||||
ACTOR_BG_SPOT01_OBJECTS2
|
|
||||||
ACTOR_OBJ_COMB
|
|
||||||
ACTOR_BG_SPOT11_BAKUDANKABE
|
|
||||||
ACTOR_OBJ_KIBAKO2
|
|
||||||
ACTOR_EN_DNT_DEMO
|
|
||||||
ACTOR_EN_DNT_JIJI
|
|
||||||
ACTOR_EN_DNT_NOMAL
|
|
||||||
ACTOR_EN_GUEST
|
|
||||||
ACTOR_BG_BOM_GUARD
|
|
||||||
ACTOR_EN_HS2
|
|
||||||
ACTOR_DEMO_KEKKAI
|
|
||||||
ACTOR_BG_SPOT08_BAKUDANKABE
|
|
||||||
ACTOR_BG_SPOT17_BAKUDANKABE
|
|
||||||
ACTOR_UNSET_1AA
|
|
||||||
ACTOR_OBJ_MURE3
|
|
||||||
ACTOR_EN_TG
|
|
||||||
ACTOR_EN_MU
|
|
||||||
ACTOR_EN_GO2
|
|
||||||
ACTOR_EN_WF
|
|
||||||
ACTOR_EN_SKB
|
|
||||||
ACTOR_DEMO_GJ
|
|
||||||
ACTOR_DEMO_GEFF
|
|
||||||
ACTOR_BG_GND_FIREMEIRO
|
|
||||||
ACTOR_BG_GND_DARKMEIRO
|
|
||||||
ACTOR_BG_GND_SOULMEIRO
|
|
||||||
ACTOR_BG_GND_NISEKABE
|
|
||||||
ACTOR_BG_GND_ICEBLOCK
|
|
||||||
ACTOR_EN_GB
|
|
||||||
ACTOR_EN_GS
|
|
||||||
ACTOR_BG_MIZU_BWALL
|
|
||||||
ACTOR_BG_MIZU_SHUTTER
|
|
||||||
ACTOR_EN_DAIKU_KAKARIKO
|
|
||||||
ACTOR_BG_BOWL_WALL
|
|
||||||
ACTOR_EN_WALL_TUBO
|
|
||||||
ACTOR_EN_PO_DESERT
|
|
||||||
ACTOR_EN_CROW
|
|
||||||
ACTOR_DOOR_KILLER
|
|
||||||
ACTOR_BG_SPOT11_OASIS
|
|
||||||
ACTOR_BG_SPOT18_FUTA
|
|
||||||
ACTOR_BG_SPOT18_SHUTTER
|
|
||||||
ACTOR_EN_MA3
|
|
||||||
ACTOR_EN_COW
|
|
||||||
ACTOR_BG_ICE_TURARA
|
|
||||||
ACTOR_BG_ICE_SHUTTER
|
|
||||||
ACTOR_EN_KAKASI2
|
|
||||||
ACTOR_EN_KAKASI3
|
|
||||||
ACTOR_OCEFF_WIPE4
|
|
||||||
ACTOR_EN_EG
|
|
||||||
ACTOR_BG_MENKURI_NISEKABE
|
|
||||||
ACTOR_EN_ZO
|
|
||||||
ACTOR_OBJ_MAKEKINSUTA
|
|
||||||
ACTOR_EN_GE3
|
|
||||||
ACTOR_OBJ_TIMEBLOCK
|
|
||||||
ACTOR_OBJ_HAMISHI
|
|
||||||
ACTOR_EN_ZL4
|
|
||||||
ACTOR_EN_MM2
|
|
||||||
ACTOR_BG_JYA_BLOCK
|
|
||||||
ACTOR_OBJ_WARP2BLOCK
|
|
||||||
ACTOR_ID_MAX
|
|
@ -1,402 +0,0 @@
|
|||||||
OBJECT_INVALID
|
|
||||||
OBJECT_GAMEPLAY_KEEP
|
|
||||||
OBJECT_GAMEPLAY_FIELD_KEEP
|
|
||||||
OBJECT_GAMEPLAY_DANGEON_KEEP
|
|
||||||
OBJECT_UNSET_4
|
|
||||||
OBJECT_UNSET_5
|
|
||||||
OBJECT_HUMAN
|
|
||||||
OBJECT_OKUTA
|
|
||||||
OBJECT_CROW
|
|
||||||
OBJECT_POH
|
|
||||||
OBJECT_DY_OBJ
|
|
||||||
OBJECT_WALLMASTER
|
|
||||||
OBJECT_DODONGO
|
|
||||||
OBJECT_FIREFLY
|
|
||||||
OBJECT_BOX
|
|
||||||
OBJECT_FIRE
|
|
||||||
OBJECT_UNSET_10
|
|
||||||
OBJECT_UNSET_11
|
|
||||||
OBJECT_BUBBLE
|
|
||||||
OBJECT_NIW
|
|
||||||
OBJECT_LINK_BOY
|
|
||||||
OBJECT_LINK_CHILD
|
|
||||||
OBJECT_TITE
|
|
||||||
OBJECT_REEBA
|
|
||||||
OBJECT_PEEHAT
|
|
||||||
OBJECT_KINGDODONGO
|
|
||||||
OBJECT_HORSE
|
|
||||||
OBJECT_ZF
|
|
||||||
OBJECT_GOMA
|
|
||||||
OBJECT_ZL1
|
|
||||||
OBJECT_GOL
|
|
||||||
OBJECT_DODOJR
|
|
||||||
OBJECT_TORCH2
|
|
||||||
OBJECT_BL
|
|
||||||
OBJECT_TP
|
|
||||||
OBJECT_OA1
|
|
||||||
OBJECT_ST
|
|
||||||
OBJECT_BW
|
|
||||||
OBJECT_EI
|
|
||||||
OBJECT_HORSE_NORMAL
|
|
||||||
OBJECT_OB1
|
|
||||||
OBJECT_O_ANIME
|
|
||||||
OBJECT_SPOT04_OBJECTS
|
|
||||||
OBJECT_DDAN_OBJECTS
|
|
||||||
OBJECT_HIDAN_OBJECTS
|
|
||||||
OBJECT_HORSE_GANON
|
|
||||||
OBJECT_OA2
|
|
||||||
OBJECT_SPOT00_OBJECTS
|
|
||||||
OBJECT_MB
|
|
||||||
OBJECT_BOMBF
|
|
||||||
OBJECT_SK2
|
|
||||||
OBJECT_OE1
|
|
||||||
OBJECT_OE_ANIME
|
|
||||||
OBJECT_OE2
|
|
||||||
OBJECT_YDAN_OBJECTS
|
|
||||||
OBJECT_GND
|
|
||||||
OBJECT_AM
|
|
||||||
OBJECT_DEKUBABA
|
|
||||||
OBJECT_UNSET_3A
|
|
||||||
OBJECT_OA3
|
|
||||||
OBJECT_OA4
|
|
||||||
OBJECT_OA5
|
|
||||||
OBJECT_OA6
|
|
||||||
OBJECT_OA7
|
|
||||||
OBJECT_JJ
|
|
||||||
OBJECT_OA8
|
|
||||||
OBJECT_OA9
|
|
||||||
OBJECT_OB2
|
|
||||||
OBJECT_OB3
|
|
||||||
OBJECT_OB4
|
|
||||||
OBJECT_HORSE_ZELDA
|
|
||||||
OBJECT_OPENING_DEMO1
|
|
||||||
OBJECT_WARP1
|
|
||||||
OBJECT_B_HEART
|
|
||||||
OBJECT_DEKUNUTS
|
|
||||||
OBJECT_OE3
|
|
||||||
OBJECT_OE4
|
|
||||||
OBJECT_MENKURI_OBJECTS
|
|
||||||
OBJECT_OE5
|
|
||||||
OBJECT_OE6
|
|
||||||
OBJECT_OE7
|
|
||||||
OBJECT_OE8
|
|
||||||
OBJECT_OE9
|
|
||||||
OBJECT_OE10
|
|
||||||
OBJECT_OE11
|
|
||||||
OBJECT_OE12
|
|
||||||
OBJECT_VALI
|
|
||||||
OBJECT_OA10
|
|
||||||
OBJECT_OA11
|
|
||||||
OBJECT_MIZU_OBJECTS
|
|
||||||
OBJECT_FHG
|
|
||||||
OBJECT_OSSAN
|
|
||||||
OBJECT_MORI_HINERI1
|
|
||||||
OBJECT_BB
|
|
||||||
OBJECT_TOKI_OBJECTS
|
|
||||||
OBJECT_YUKABYUN
|
|
||||||
OBJECT_ZL2
|
|
||||||
OBJECT_MJIN
|
|
||||||
OBJECT_MJIN_FLASH
|
|
||||||
OBJECT_MJIN_DARK
|
|
||||||
OBJECT_MJIN_FLAME
|
|
||||||
OBJECT_MJIN_ICE
|
|
||||||
OBJECT_MJIN_SOUL
|
|
||||||
OBJECT_MJIN_WIND
|
|
||||||
OBJECT_MJIN_OKA
|
|
||||||
OBJECT_HAKA_OBJECTS
|
|
||||||
OBJECT_SPOT06_OBJECTS
|
|
||||||
OBJECT_ICE_OBJECTS
|
|
||||||
OBJECT_RELAY_OBJECTS
|
|
||||||
OBJECT_PO_FIELD
|
|
||||||
OBJECT_PO_COMPOSER
|
|
||||||
OBJECT_MORI_HINERI1A
|
|
||||||
OBJECT_MORI_HINERI2
|
|
||||||
OBJECT_MORI_HINERI2A
|
|
||||||
OBJECT_MORI_OBJECTS
|
|
||||||
OBJECT_MORI_TEX
|
|
||||||
OBJECT_SPOT08_OBJ
|
|
||||||
OBJECT_WARP2
|
|
||||||
OBJECT_HATA
|
|
||||||
OBJECT_BIRD
|
|
||||||
OBJECT_UNSET_78
|
|
||||||
OBJECT_UNSET_79
|
|
||||||
OBJECT_UNSET_7A
|
|
||||||
OBJECT_UNSET_7B
|
|
||||||
OBJECT_WOOD02
|
|
||||||
OBJECT_UNSET_7D
|
|
||||||
OBJECT_UNSET_7E
|
|
||||||
OBJECT_UNSET_7F
|
|
||||||
OBJECT_UNSET_80
|
|
||||||
OBJECT_LIGHTBOX
|
|
||||||
OBJECT_PU_BOX
|
|
||||||
OBJECT_UNSET_83
|
|
||||||
OBJECT_UNSET_84
|
|
||||||
OBJECT_TRAP
|
|
||||||
OBJECT_VASE
|
|
||||||
OBJECT_IM
|
|
||||||
OBJECT_TA
|
|
||||||
OBJECT_TK
|
|
||||||
OBJECT_XC
|
|
||||||
OBJECT_VM
|
|
||||||
OBJECT_BV
|
|
||||||
OBJECT_HAKACH_OBJECTS
|
|
||||||
OBJECT_EFC_CRYSTAL_LIGHT
|
|
||||||
OBJECT_EFC_FIRE_BALL
|
|
||||||
OBJECT_EFC_FLASH
|
|
||||||
OBJECT_EFC_LGT_SHOWER
|
|
||||||
OBJECT_EFC_STAR_FIELD
|
|
||||||
OBJECT_GOD_LGT
|
|
||||||
OBJECT_LIGHT_RING
|
|
||||||
OBJECT_TRIFORCE_SPOT
|
|
||||||
OBJECT_BDAN_OBJECTS
|
|
||||||
OBJECT_SD
|
|
||||||
OBJECT_RD
|
|
||||||
OBJECT_PO_SISTERS
|
|
||||||
OBJECT_HEAVY_OBJECT
|
|
||||||
OBJECT_GNDD
|
|
||||||
OBJECT_FD
|
|
||||||
OBJECT_DU
|
|
||||||
OBJECT_FW
|
|
||||||
OBJECT_MEDAL
|
|
||||||
OBJECT_HORSE_LINK_CHILD
|
|
||||||
OBJECT_SPOT02_OBJECTS
|
|
||||||
OBJECT_HAKA
|
|
||||||
OBJECT_RU1
|
|
||||||
OBJECT_SYOKUDAI
|
|
||||||
OBJECT_FD2
|
|
||||||
OBJECT_DH
|
|
||||||
OBJECT_RL
|
|
||||||
OBJECT_EFC_TW
|
|
||||||
OBJECT_DEMO_TRE_LGT
|
|
||||||
OBJECT_GI_KEY
|
|
||||||
OBJECT_MIR_RAY
|
|
||||||
OBJECT_BROB
|
|
||||||
OBJECT_GI_JEWEL
|
|
||||||
OBJECT_SPOT09_OBJ
|
|
||||||
OBJECT_SPOT18_OBJ
|
|
||||||
OBJECT_BDOOR
|
|
||||||
OBJECT_SPOT17_OBJ
|
|
||||||
OBJECT_SHOP_DUNGEN
|
|
||||||
OBJECT_NB
|
|
||||||
OBJECT_MO
|
|
||||||
OBJECT_SB
|
|
||||||
OBJECT_GI_MELODY
|
|
||||||
OBJECT_GI_HEART
|
|
||||||
OBJECT_GI_COMPASS
|
|
||||||
OBJECT_GI_BOSSKEY
|
|
||||||
OBJECT_GI_MEDAL
|
|
||||||
OBJECT_GI_NUTS
|
|
||||||
OBJECT_SA
|
|
||||||
OBJECT_GI_HEARTS
|
|
||||||
OBJECT_GI_ARROWCASE
|
|
||||||
OBJECT_GI_BOMBPOUCH
|
|
||||||
OBJECT_IN
|
|
||||||
OBJECT_TR
|
|
||||||
OBJECT_SPOT16_OBJ
|
|
||||||
OBJECT_OE1S
|
|
||||||
OBJECT_OE4S
|
|
||||||
OBJECT_OS_ANIME
|
|
||||||
OBJECT_GI_BOTTLE
|
|
||||||
OBJECT_GI_STICK
|
|
||||||
OBJECT_GI_MAP
|
|
||||||
OBJECT_OF1D_MAP
|
|
||||||
OBJECT_RU2
|
|
||||||
OBJECT_GI_SHIELD_1
|
|
||||||
OBJECT_DEKUJR
|
|
||||||
OBJECT_GI_MAGICPOT
|
|
||||||
OBJECT_GI_BOMB_1
|
|
||||||
OBJECT_OF1S
|
|
||||||
OBJECT_MA2
|
|
||||||
OBJECT_GI_PURSE
|
|
||||||
OBJECT_HNI
|
|
||||||
OBJECT_TW
|
|
||||||
OBJECT_RR
|
|
||||||
OBJECT_BXA
|
|
||||||
OBJECT_ANUBICE
|
|
||||||
OBJECT_GI_GERUDO
|
|
||||||
OBJECT_GI_ARROW
|
|
||||||
OBJECT_GI_BOMB_2
|
|
||||||
OBJECT_GI_EGG
|
|
||||||
OBJECT_GI_SCALE
|
|
||||||
OBJECT_GI_SHIELD_2
|
|
||||||
OBJECT_GI_HOOKSHOT
|
|
||||||
OBJECT_GI_OCARINA
|
|
||||||
OBJECT_GI_MILK
|
|
||||||
OBJECT_MA1
|
|
||||||
OBJECT_GANON
|
|
||||||
OBJECT_SST
|
|
||||||
OBJECT_NY_UNUSED
|
|
||||||
OBJECT_UNSET_E4
|
|
||||||
OBJECT_NY
|
|
||||||
OBJECT_FR
|
|
||||||
OBJECT_GI_PACHINKO
|
|
||||||
OBJECT_GI_BOOMERANG
|
|
||||||
OBJECT_GI_BOW
|
|
||||||
OBJECT_GI_GLASSES
|
|
||||||
OBJECT_GI_LIQUID
|
|
||||||
OBJECT_ANI
|
|
||||||
OBJECT_DEMO_6K
|
|
||||||
OBJECT_GI_SHIELD_3
|
|
||||||
OBJECT_GI_LETTER
|
|
||||||
OBJECT_SPOT15_OBJ
|
|
||||||
OBJECT_JYA_OBJ
|
|
||||||
OBJECT_GI_CLOTHES
|
|
||||||
OBJECT_GI_BEAN
|
|
||||||
OBJECT_GI_FISH
|
|
||||||
OBJECT_GI_SAW
|
|
||||||
OBJECT_GI_HAMMER
|
|
||||||
OBJECT_GI_GRASS
|
|
||||||
OBJECT_GI_LONGSWORD
|
|
||||||
OBJECT_SPOT01_OBJECTS
|
|
||||||
OBJECT_MD_UNUSED
|
|
||||||
OBJECT_MD
|
|
||||||
OBJECT_KM1
|
|
||||||
OBJECT_KW1
|
|
||||||
OBJECT_ZO
|
|
||||||
OBJECT_KZ
|
|
||||||
OBJECT_UMAJUMP
|
|
||||||
OBJECT_MASTERKOKIRI
|
|
||||||
OBJECT_MASTERKOKIRIHEAD
|
|
||||||
OBJECT_MASTERGOLON
|
|
||||||
OBJECT_MASTERZOORA
|
|
||||||
OBJECT_AOB
|
|
||||||
OBJECT_IK
|
|
||||||
OBJECT_AHG
|
|
||||||
OBJECT_CNE
|
|
||||||
OBJECT_GI_NIWATORI
|
|
||||||
OBJECT_SKJ
|
|
||||||
OBJECT_GI_BOTTLE_LETTER
|
|
||||||
OBJECT_BJI
|
|
||||||
OBJECT_BBA
|
|
||||||
OBJECT_GI_OCARINA_0
|
|
||||||
OBJECT_DS
|
|
||||||
OBJECT_ANE
|
|
||||||
OBJECT_BOJ
|
|
||||||
OBJECT_SPOT03_OBJECT
|
|
||||||
OBJECT_SPOT07_OBJECT
|
|
||||||
OBJECT_FZ
|
|
||||||
OBJECT_BOB
|
|
||||||
OBJECT_GE1
|
|
||||||
OBJECT_YABUSAME_POINT
|
|
||||||
OBJECT_GI_BOOTS_2
|
|
||||||
OBJECT_GI_SEED
|
|
||||||
OBJECT_GND_MAGIC
|
|
||||||
OBJECT_D_ELEVATOR
|
|
||||||
OBJECT_D_HSBLOCK
|
|
||||||
OBJECT_D_LIFT
|
|
||||||
OBJECT_MAMENOKI
|
|
||||||
OBJECT_GOROIWA
|
|
||||||
OBJECT_UNSET_120
|
|
||||||
OBJECT_TORYO
|
|
||||||
OBJECT_DAIKU
|
|
||||||
OBJECT_UNSET_123
|
|
||||||
OBJECT_NWC
|
|
||||||
OBJECT_BLKOBJ
|
|
||||||
OBJECT_GM
|
|
||||||
OBJECT_MS
|
|
||||||
OBJECT_HS
|
|
||||||
OBJECT_INGATE
|
|
||||||
OBJECT_LIGHTSWITCH
|
|
||||||
OBJECT_KUSA
|
|
||||||
OBJECT_TSUBO
|
|
||||||
OBJECT_GI_GLOVES
|
|
||||||
OBJECT_GI_COIN
|
|
||||||
OBJECT_KANBAN
|
|
||||||
OBJECT_GJYO_OBJECTS
|
|
||||||
OBJECT_OWL
|
|
||||||
OBJECT_MK
|
|
||||||
OBJECT_FU
|
|
||||||
OBJECT_GI_KI_TAN_MASK
|
|
||||||
OBJECT_GI_REDEAD_MASK
|
|
||||||
OBJECT_GI_SKJ_MASK
|
|
||||||
OBJECT_GI_RABIT_MASK
|
|
||||||
OBJECT_GI_TRUTH_MASK
|
|
||||||
OBJECT_GANON_OBJECTS
|
|
||||||
OBJECT_SIOFUKI
|
|
||||||
OBJECT_STREAM
|
|
||||||
OBJECT_MM
|
|
||||||
OBJECT_FA
|
|
||||||
OBJECT_OS
|
|
||||||
OBJECT_GI_EYE_LOTION
|
|
||||||
OBJECT_GI_POWDER
|
|
||||||
OBJECT_GI_MUSHROOM
|
|
||||||
OBJECT_GI_TICKETSTONE
|
|
||||||
OBJECT_GI_BROKENSWORD
|
|
||||||
OBJECT_JS
|
|
||||||
OBJECT_CS
|
|
||||||
OBJECT_GI_PRESCRIPTION
|
|
||||||
OBJECT_GI_BRACELET
|
|
||||||
OBJECT_GI_SOLDOUT
|
|
||||||
OBJECT_GI_FROG
|
|
||||||
OBJECT_MAG
|
|
||||||
OBJECT_DOOR_GERUDO
|
|
||||||
OBJECT_GT
|
|
||||||
OBJECT_EFC_ERUPC
|
|
||||||
OBJECT_ZL2_ANIME1
|
|
||||||
OBJECT_ZL2_ANIME2
|
|
||||||
OBJECT_GI_GOLONMASK
|
|
||||||
OBJECT_GI_ZORAMASK
|
|
||||||
OBJECT_GI_GERUDOMASK
|
|
||||||
OBJECT_GANON2
|
|
||||||
OBJECT_KA
|
|
||||||
OBJECT_TS
|
|
||||||
OBJECT_ZG
|
|
||||||
OBJECT_GI_HOVERBOOTS
|
|
||||||
OBJECT_GI_M_ARROW
|
|
||||||
OBJECT_DS2
|
|
||||||
OBJECT_EC
|
|
||||||
OBJECT_FISH
|
|
||||||
OBJECT_GI_SUTARU
|
|
||||||
OBJECT_GI_GODDESS
|
|
||||||
OBJECT_SSH
|
|
||||||
OBJECT_BIGOKUTA
|
|
||||||
OBJECT_BG
|
|
||||||
OBJECT_SPOT05_OBJECTS
|
|
||||||
OBJECT_SPOT12_OBJ
|
|
||||||
OBJECT_BOMBIWA
|
|
||||||
OBJECT_HINTNUTS
|
|
||||||
OBJECT_RS
|
|
||||||
OBJECT_SPOT00_BREAK
|
|
||||||
OBJECT_GLA
|
|
||||||
OBJECT_SHOPNUTS
|
|
||||||
OBJECT_GELDB
|
|
||||||
OBJECT_GR
|
|
||||||
OBJECT_DOG
|
|
||||||
OBJECT_JYA_IRON
|
|
||||||
OBJECT_JYA_DOOR
|
|
||||||
OBJECT_UNSET_16E
|
|
||||||
OBJECT_SPOT11_OBJ
|
|
||||||
OBJECT_KIBAKO2
|
|
||||||
OBJECT_DNS
|
|
||||||
OBJECT_DNK
|
|
||||||
OBJECT_GI_FIRE
|
|
||||||
OBJECT_GI_INSECT
|
|
||||||
OBJECT_GI_BUTTERFLY
|
|
||||||
OBJECT_GI_GHOST
|
|
||||||
OBJECT_GI_SOUL
|
|
||||||
OBJECT_BOWL
|
|
||||||
OBJECT_DEMO_KEKKAI
|
|
||||||
OBJECT_EFC_DOUGHNUT
|
|
||||||
OBJECT_GI_DEKUPOUCH
|
|
||||||
OBJECT_GANON_ANIME1
|
|
||||||
OBJECT_GANON_ANIME2
|
|
||||||
OBJECT_GANON_ANIME3
|
|
||||||
OBJECT_GI_RUPY
|
|
||||||
OBJECT_SPOT01_MATOYA
|
|
||||||
OBJECT_SPOT01_MATOYAB
|
|
||||||
OBJECT_MU
|
|
||||||
OBJECT_WF
|
|
||||||
OBJECT_SKB
|
|
||||||
OBJECT_GJ
|
|
||||||
OBJECT_GEFF
|
|
||||||
OBJECT_HAKA_DOOR
|
|
||||||
OBJECT_GS
|
|
||||||
OBJECT_PS
|
|
||||||
OBJECT_BWALL
|
|
||||||
OBJECT_COW
|
|
||||||
OBJECT_COB
|
|
||||||
OBJECT_GI_SWORD_1
|
|
||||||
OBJECT_DOOR_KILLER
|
|
||||||
OBJECT_OUKE_HAKA
|
|
||||||
OBJECT_TIMEBLOCK
|
|
||||||
OBJECT_ZL4
|
|
@ -1 +0,0 @@
|
|||||||
8012DB20 gMtxClear
|
|
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 919 B |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 292 B |
@ -1,32 +0,0 @@
|
|||||||
#version 330
|
|
||||||
|
|
||||||
// Input vertex attributes
|
|
||||||
in vec3 vertexPosition;
|
|
||||||
in vec2 vertexTexCoord;
|
|
||||||
in vec3 vertexNormal;
|
|
||||||
in vec4 vertexColor;
|
|
||||||
|
|
||||||
// Input uniform values
|
|
||||||
uniform mat4 mvp;
|
|
||||||
uniform mat4 matModel;
|
|
||||||
uniform mat4 matNormal;
|
|
||||||
|
|
||||||
// Output vertex attributes (to fragment shader)
|
|
||||||
out vec3 fragPosition;
|
|
||||||
out vec2 fragTexCoord;
|
|
||||||
out vec4 fragColor;
|
|
||||||
out vec3 fragNormal;
|
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
// Send vertex attributes to fragment shader
|
|
||||||
fragPosition = vec3(matModel*vec4(vertexPosition, 1.0));
|
|
||||||
fragTexCoord = vertexTexCoord;
|
|
||||||
fragColor = vertexColor;
|
|
||||||
fragNormal = normalize(vec3(matNormal*vec4(vertexNormal, 1.0)));
|
|
||||||
|
|
||||||
// Calculate final vertex position
|
|
||||||
gl_Position = mvp*vec4(vertexPosition, 1.0);
|
|
||||||
}
|
|
@ -1,78 +0,0 @@
|
|||||||
#version 330
|
|
||||||
|
|
||||||
// Input vertex attributes (from vertex shader)
|
|
||||||
in vec3 fragPosition;
|
|
||||||
in vec2 fragTexCoord;
|
|
||||||
in vec4 fragColor;
|
|
||||||
in vec3 fragNormal;
|
|
||||||
|
|
||||||
// Input uniform values
|
|
||||||
uniform sampler2D texture0;
|
|
||||||
uniform vec4 colDiffuse;
|
|
||||||
|
|
||||||
// Output fragment color
|
|
||||||
out vec4 finalColor;
|
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
|
||||||
|
|
||||||
#define MAX_LIGHTS 4
|
|
||||||
#define LIGHT_DIRECTIONAL 0
|
|
||||||
#define LIGHT_POINT 1
|
|
||||||
|
|
||||||
struct MaterialProperty {
|
|
||||||
vec3 color;
|
|
||||||
int useSampler;
|
|
||||||
sampler2D sampler;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Light {
|
|
||||||
int enabled;
|
|
||||||
int type;
|
|
||||||
vec3 position;
|
|
||||||
vec3 target;
|
|
||||||
vec4 color;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Input lighting values
|
|
||||||
uniform Light lights[MAX_LIGHTS];
|
|
||||||
uniform vec4 ambient;
|
|
||||||
uniform vec3 viewPos;
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
// Texel color fetching from texture sampler
|
|
||||||
vec4 texelColor = texture(texture0, fragTexCoord);
|
|
||||||
vec3 lightDot = vec3(0.0);
|
|
||||||
vec3 normal = normalize(fragNormal);
|
|
||||||
vec3 viewD = normalize(viewPos - fragPosition);
|
|
||||||
vec3 specular = vec3(0.0);
|
|
||||||
|
|
||||||
// NOTE: Implement here your fragment shader code
|
|
||||||
|
|
||||||
for (int i = 0; i < MAX_LIGHTS; i++)
|
|
||||||
{
|
|
||||||
if (lights[i].enabled == 1)
|
|
||||||
{
|
|
||||||
vec3 light = vec3(0.0);
|
|
||||||
|
|
||||||
if (lights[i].type == LIGHT_DIRECTIONAL)
|
|
||||||
{
|
|
||||||
light = -normalize(lights[i].target - lights[i].position);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lights[i].type == LIGHT_POINT)
|
|
||||||
{
|
|
||||||
light = normalize(lights[i].position - fragPosition);
|
|
||||||
}
|
|
||||||
|
|
||||||
float NdotL = max(dot(normal, light), 0.0);
|
|
||||||
lightDot += lights[i].color.rgb*NdotL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
finalColor = (texelColor*((colDiffuse + vec4(specular, 1.0))*vec4(lightDot, 1.0)));
|
|
||||||
finalColor += texelColor*(ambient/10.0)*colDiffuse;
|
|
||||||
|
|
||||||
// Gamma correction
|
|
||||||
finalColor = pow(finalColor, vec4(1.0/2.2));
|
|
||||||
}
|
|
Before Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 2.6 KiB |
@ -1,547 +0,0 @@
|
|||||||
//////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// //
|
|
||||||
// raygui Icons exporter v1.1 - Icons data exported as a values array //
|
|
||||||
// //
|
|
||||||
// more info and bugs-report: github.com/raysan5/raygui //
|
|
||||||
// feedback and support: ray[at]raylibtech.com //
|
|
||||||
// //
|
|
||||||
// Copyright (c) 2019-2021 raylib technologies (@raylibtech) //
|
|
||||||
// //
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// Defines and Macros
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
#define RAYGUI_ICON_SIZE 16 // Size of icons (squared)
|
|
||||||
#define RAYGUI_ICON_MAX_ICONS 256 // Maximum number of icons
|
|
||||||
#define RAYGUI_ICON_MAX_NAME_LENGTH 32 // Maximum length of icon name id
|
|
||||||
|
|
||||||
// Icons data is defined by bit array (every bit represents one pixel)
|
|
||||||
// Those arrays are stored as unsigned int data arrays, so every array
|
|
||||||
// element defines 32 pixels (bits) of information
|
|
||||||
// Number of elemens depend on RAYGUI_ICON_SIZE (by default 16x16 pixels)
|
|
||||||
#define RAYGUI_ICON_DATA_ELEMENTS (RAYGUI_ICON_SIZE*RAYGUI_ICON_SIZE/32)
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// Icons enumeration
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
typedef enum {
|
|
||||||
RAYGUI_ICON_NONE = 0,
|
|
||||||
RAYGUI_ICON_FOLDER_FILE_OPEN = 1,
|
|
||||||
RAYGUI_ICON_FILE_SAVE_CLASSIC = 2,
|
|
||||||
RAYGUI_ICON_FOLDER_OPEN = 3,
|
|
||||||
RAYGUI_ICON_FOLDER_SAVE = 4,
|
|
||||||
RAYGUI_ICON_FILE_OPEN = 5,
|
|
||||||
RAYGUI_ICON_FILE_SAVE = 6,
|
|
||||||
RAYGUI_ICON_FILE_EXPORT = 7,
|
|
||||||
RAYGUI_ICON_FILE_NEW = 8,
|
|
||||||
RAYGUI_ICON_FILE_DELETE = 9,
|
|
||||||
RAYGUI_ICON_FILETYPE_TEXT = 10,
|
|
||||||
RAYGUI_ICON_FILETYPE_AUDIO = 11,
|
|
||||||
RAYGUI_ICON_FILETYPE_IMAGE = 12,
|
|
||||||
RAYGUI_ICON_FILETYPE_PLAY = 13,
|
|
||||||
RAYGUI_ICON_FILETYPE_VIDEO = 14,
|
|
||||||
RAYGUI_ICON_FILETYPE_INFO = 15,
|
|
||||||
RAYGUI_ICON_FILE_COPY = 16,
|
|
||||||
RAYGUI_ICON_FILE_CUT = 17,
|
|
||||||
RAYGUI_ICON_FILE_PASTE = 18,
|
|
||||||
RAYGUI_ICON_CURSOR_HAND = 19,
|
|
||||||
RAYGUI_ICON_CURSOR_POINTER = 20,
|
|
||||||
RAYGUI_ICON_CURSOR_CLASSIC = 21,
|
|
||||||
RAYGUI_ICON_PENCIL = 22,
|
|
||||||
RAYGUI_ICON_PENCIL_BIG = 23,
|
|
||||||
RAYGUI_ICON_BRUSH_CLASSIC = 24,
|
|
||||||
RAYGUI_ICON_BRUSH_PAINTER = 25,
|
|
||||||
RAYGUI_ICON_WATER_DROP = 26,
|
|
||||||
RAYGUI_ICON_COLOR_PICKER = 27,
|
|
||||||
RAYGUI_ICON_RUBBER = 28,
|
|
||||||
RAYGUI_ICON_COLOR_BUCKET = 29,
|
|
||||||
RAYGUI_ICON_TEXT_T = 30,
|
|
||||||
RAYGUI_ICON_TEXT_A = 31,
|
|
||||||
RAYGUI_ICON_SCALE = 32,
|
|
||||||
RAYGUI_ICON_RESIZE = 33,
|
|
||||||
RAYGUI_ICON_FILTER_POINT = 34,
|
|
||||||
RAYGUI_ICON_FILTER_BILINEAR = 35,
|
|
||||||
RAYGUI_ICON_CROP = 36,
|
|
||||||
RAYGUI_ICON_CROP_ALPHA = 37,
|
|
||||||
RAYGUI_ICON_SQUARE_TOGGLE = 38,
|
|
||||||
RAYGUI_ICON_SIMMETRY = 39,
|
|
||||||
RAYGUI_ICON_SIMMETRY_HORIZONTAL = 40,
|
|
||||||
RAYGUI_ICON_SIMMETRY_VERTICAL = 41,
|
|
||||||
RAYGUI_ICON_LENS = 42,
|
|
||||||
RAYGUI_ICON_LENS_BIG = 43,
|
|
||||||
RAYGUI_ICON_EYE_ON = 44,
|
|
||||||
RAYGUI_ICON_EYE_OFF = 45,
|
|
||||||
RAYGUI_ICON_FILTER_TOP = 46,
|
|
||||||
RAYGUI_ICON_FILTER = 47,
|
|
||||||
RAYGUI_ICON_TARGET_POINT = 48,
|
|
||||||
RAYGUI_ICON_TARGET_SMALL = 49,
|
|
||||||
RAYGUI_ICON_TARGET_BIG = 50,
|
|
||||||
RAYGUI_ICON_TARGET_MOVE = 51,
|
|
||||||
RAYGUI_ICON_CURSOR_MOVE = 52,
|
|
||||||
RAYGUI_ICON_CURSOR_SCALE = 53,
|
|
||||||
RAYGUI_ICON_CURSOR_SCALE_RIGHT = 54,
|
|
||||||
RAYGUI_ICON_CURSOR_SCALE_LEFT = 55,
|
|
||||||
RAYGUI_ICON_UNDO = 56,
|
|
||||||
RAYGUI_ICON_REDO = 57,
|
|
||||||
RAYGUI_ICON_REREDO = 58,
|
|
||||||
RAYGUI_ICON_MUTATE = 59,
|
|
||||||
RAYGUI_ICON_ROTATE = 60,
|
|
||||||
RAYGUI_ICON_REPEAT = 61,
|
|
||||||
RAYGUI_ICON_SHUFFLE = 62,
|
|
||||||
RAYGUI_ICON_EMPTYBOX = 63,
|
|
||||||
RAYGUI_ICON_TARGET = 64,
|
|
||||||
RAYGUI_ICON_TARGET_SMALL_FILL = 65,
|
|
||||||
RAYGUI_ICON_TARGET_BIG_FILL = 66,
|
|
||||||
RAYGUI_ICON_TARGET_MOVE_FILL = 67,
|
|
||||||
RAYGUI_ICON_CURSOR_MOVE_FILL = 68,
|
|
||||||
RAYGUI_ICON_CURSOR_SCALE_FILL = 69,
|
|
||||||
RAYGUI_ICON_CURSOR_SCALE_RIGHT_FILL = 70,
|
|
||||||
RAYGUI_ICON_CURSOR_SCALE_LEFT_FILL = 71,
|
|
||||||
RAYGUI_ICON_UNDO_FILL = 72,
|
|
||||||
RAYGUI_ICON_REDO_FILL = 73,
|
|
||||||
RAYGUI_ICON_REREDO_FILL = 74,
|
|
||||||
RAYGUI_ICON_MUTATE_FILL = 75,
|
|
||||||
RAYGUI_ICON_ROTATE_FILL = 76,
|
|
||||||
RAYGUI_ICON_REPEAT_FILL = 77,
|
|
||||||
RAYGUI_ICON_SHUFFLE_FILL = 78,
|
|
||||||
RAYGUI_ICON_EMPTYBOX_SMALL = 79,
|
|
||||||
RAYGUI_ICON_BOX = 80,
|
|
||||||
RAYGUI_ICON_BOX_TOP = 81,
|
|
||||||
RAYGUI_ICON_BOX_TOP_RIGHT = 82,
|
|
||||||
RAYGUI_ICON_BOX_RIGHT = 83,
|
|
||||||
RAYGUI_ICON_BOX_BOTTOM_RIGHT = 84,
|
|
||||||
RAYGUI_ICON_BOX_BOTTOM = 85,
|
|
||||||
RAYGUI_ICON_BOX_BOTTOM_LEFT = 86,
|
|
||||||
RAYGUI_ICON_BOX_LEFT = 87,
|
|
||||||
RAYGUI_ICON_BOX_TOP_LEFT = 88,
|
|
||||||
RAYGUI_ICON_BOX_CENTER = 89,
|
|
||||||
RAYGUI_ICON_BOX_CIRCLE_MASK = 90,
|
|
||||||
RAYGUI_ICON_POT = 91,
|
|
||||||
RAYGUI_ICON_ALPHA_MULTIPLY = 92,
|
|
||||||
RAYGUI_ICON_ALPHA_CLEAR = 93,
|
|
||||||
RAYGUI_ICON_DITHERING = 94,
|
|
||||||
RAYGUI_ICON_MIPMAPS = 95,
|
|
||||||
RAYGUI_ICON_BOX_GRID = 96,
|
|
||||||
RAYGUI_ICON_GRID = 97,
|
|
||||||
RAYGUI_ICON_BOX_CORNERS_SMALL = 98,
|
|
||||||
RAYGUI_ICON_BOX_CORNERS_BIG = 99,
|
|
||||||
RAYGUI_ICON_FOUR_BOXES = 100,
|
|
||||||
RAYGUI_ICON_GRID_FILL = 101,
|
|
||||||
RAYGUI_ICON_BOX_MULTISIZE = 102,
|
|
||||||
RAYGUI_ICON_ZOOM_SMALL = 103,
|
|
||||||
RAYGUI_ICON_ZOOM_MEDIUM = 104,
|
|
||||||
RAYGUI_ICON_ZOOM_BIG = 105,
|
|
||||||
RAYGUI_ICON_ZOOM_ALL = 106,
|
|
||||||
RAYGUI_ICON_ZOOM_CENTER = 107,
|
|
||||||
RAYGUI_ICON_BOX_DOTS_SMALL = 108,
|
|
||||||
RAYGUI_ICON_BOX_DOTS_BIG = 109,
|
|
||||||
RAYGUI_ICON_BOX_CONCENTRIC = 110,
|
|
||||||
RAYGUI_ICON_BOX_GRID_BIG = 111,
|
|
||||||
RAYGUI_ICON_OK_TICK = 112,
|
|
||||||
RAYGUI_ICON_CROSS = 113,
|
|
||||||
RAYGUI_ICON_ARROW_LEFT = 114,
|
|
||||||
RAYGUI_ICON_ARROW_RIGHT = 115,
|
|
||||||
RAYGUI_ICON_ARROW_BOTTOM = 116,
|
|
||||||
RAYGUI_ICON_ARROW_TOP = 117,
|
|
||||||
RAYGUI_ICON_ARROW_LEFT_FILL = 118,
|
|
||||||
RAYGUI_ICON_ARROW_RIGHT_FILL = 119,
|
|
||||||
RAYGUI_ICON_ARROW_BOTTOM_FILL = 120,
|
|
||||||
RAYGUI_ICON_ARROW_TOP_FILL = 121,
|
|
||||||
RAYGUI_ICON_AUDIO = 122,
|
|
||||||
RAYGUI_ICON_FX = 123,
|
|
||||||
RAYGUI_ICON_WAVE = 124,
|
|
||||||
RAYGUI_ICON_WAVE_SINUS = 125,
|
|
||||||
RAYGUI_ICON_WAVE_SQUARE = 126,
|
|
||||||
RAYGUI_ICON_WAVE_TRIANGULAR = 127,
|
|
||||||
RAYGUI_ICON_CROSS_SMALL = 128,
|
|
||||||
RAYGUI_ICON_PLAYER_PREVIOUS = 129,
|
|
||||||
RAYGUI_ICON_PLAYER_PLAY_BACK = 130,
|
|
||||||
RAYGUI_ICON_PLAYER_PLAY = 131,
|
|
||||||
RAYGUI_ICON_PLAYER_PAUSE = 132,
|
|
||||||
RAYGUI_ICON_PLAYER_STOP = 133,
|
|
||||||
RAYGUI_ICON_PLAYER_NEXT = 134,
|
|
||||||
RAYGUI_ICON_PLAYER_RECORD = 135,
|
|
||||||
RAYGUI_ICON_MAGNET = 136,
|
|
||||||
RAYGUI_ICON_LOCK_CLOSE = 137,
|
|
||||||
RAYGUI_ICON_LOCK_OPEN = 138,
|
|
||||||
RAYGUI_ICON_CLOCK = 139,
|
|
||||||
RAYGUI_ICON_TOOLS = 140,
|
|
||||||
RAYGUI_ICON_GEAR = 141,
|
|
||||||
RAYGUI_ICON_GEAR_BIG = 142,
|
|
||||||
RAYGUI_ICON_BIN = 143,
|
|
||||||
RAYGUI_ICON_HAND_POINTER = 144,
|
|
||||||
RAYGUI_ICON_LASER = 145,
|
|
||||||
RAYGUI_ICON_COIN = 146,
|
|
||||||
RAYGUI_ICON_EXPLOSION = 147,
|
|
||||||
RAYGUI_ICON_1UP = 148,
|
|
||||||
RAYGUI_ICON_PLAYER = 149,
|
|
||||||
RAYGUI_ICON_PLAYER_JUMP = 150,
|
|
||||||
RAYGUI_ICON_KEY = 151,
|
|
||||||
RAYGUI_ICON_DEMON = 152,
|
|
||||||
RAYGUI_ICON_TEXT_POPUP = 153,
|
|
||||||
RAYGUI_ICON_GEAR_EX = 154,
|
|
||||||
RAYGUI_ICON_CRACK = 155,
|
|
||||||
RAYGUI_ICON_CRACK_POINTS = 156,
|
|
||||||
RAYGUI_ICON_STAR = 157,
|
|
||||||
RAYGUI_ICON_DOOR = 158,
|
|
||||||
RAYGUI_ICON_EXIT = 159,
|
|
||||||
RAYGUI_ICON_MODE_2D = 160,
|
|
||||||
RAYGUI_ICON_MODE_3D = 161,
|
|
||||||
RAYGUI_ICON_CUBE = 162,
|
|
||||||
RAYGUI_ICON_CUBE_FACE_TOP = 163,
|
|
||||||
RAYGUI_ICON_CUBE_FACE_LEFT = 164,
|
|
||||||
RAYGUI_ICON_CUBE_FACE_FRONT = 165,
|
|
||||||
RAYGUI_ICON_CUBE_FACE_BOTTOM = 166,
|
|
||||||
RAYGUI_ICON_CUBE_FACE_RIGHT = 167,
|
|
||||||
RAYGUI_ICON_CUBE_FACE_BACK = 168,
|
|
||||||
RAYGUI_ICON_CAMERA = 169,
|
|
||||||
RAYGUI_ICON_SPECIAL = 170,
|
|
||||||
RAYGUI_ICON_LINK_NET = 171,
|
|
||||||
RAYGUI_ICON_LINK_BOXES = 172,
|
|
||||||
RAYGUI_ICON_LINK_MULTI = 173,
|
|
||||||
RAYGUI_ICON_LINK = 174,
|
|
||||||
RAYGUI_ICON_LINK_BROKE = 175,
|
|
||||||
RAYGUI_ICON_TEXT_NOTES = 176,
|
|
||||||
RAYGUI_ICON_NOTEBOOK = 177,
|
|
||||||
RAYGUI_ICON_SUITCASE = 178,
|
|
||||||
RAYGUI_ICON_SUITCASE_ZIP = 179,
|
|
||||||
RAYGUI_ICON_MAILBOX = 180,
|
|
||||||
RAYGUI_ICON_MONITOR = 181,
|
|
||||||
RAYGUI_ICON_PRINTER = 182,
|
|
||||||
RAYGUI_ICON_PHOTO_CAMERA = 183,
|
|
||||||
RAYGUI_ICON_PHOTO_CAMERA_FLASH = 184,
|
|
||||||
RAYGUI_ICON_HOUSE = 185,
|
|
||||||
RAYGUI_ICON_HEART = 186,
|
|
||||||
RAYGUI_ICON_CORNER = 187,
|
|
||||||
RAYGUI_ICON_VERTICAL_BARS = 188,
|
|
||||||
RAYGUI_ICON_VERTICAL_BARS_FILL = 189,
|
|
||||||
RAYGUI_ICON_LIFE_BARS = 190,
|
|
||||||
RAYGUI_ICON_INFO = 191,
|
|
||||||
RAYGUI_ICON_CROSSLINE = 192,
|
|
||||||
RAYGUI_ICON_HELP = 193,
|
|
||||||
RAYGUI_ICON_FILETYPE_ALPHA = 194,
|
|
||||||
RAYGUI_ICON_FILETYPE_HOME = 195,
|
|
||||||
RAYGUI_ICON_LAYERS_VISIBLE = 196,
|
|
||||||
RAYGUI_ICON_LAYERS = 197,
|
|
||||||
RAYGUI_ICON_WINDOW = 198,
|
|
||||||
RAYGUI_ICON_199 = 199,
|
|
||||||
RAYGUI_ICON_200 = 200,
|
|
||||||
RAYGUI_ICON_201 = 201,
|
|
||||||
RAYGUI_ICON_202 = 202,
|
|
||||||
RAYGUI_ICON_203 = 203,
|
|
||||||
RAYGUI_ICON_204 = 204,
|
|
||||||
RAYGUI_ICON_205 = 205,
|
|
||||||
RAYGUI_ICON_206 = 206,
|
|
||||||
RAYGUI_ICON_207 = 207,
|
|
||||||
RAYGUI_ICON_208 = 208,
|
|
||||||
RAYGUI_ICON_209 = 209,
|
|
||||||
RAYGUI_ICON_210 = 210,
|
|
||||||
RAYGUI_ICON_211 = 211,
|
|
||||||
RAYGUI_ICON_212 = 212,
|
|
||||||
RAYGUI_ICON_213 = 213,
|
|
||||||
RAYGUI_ICON_214 = 214,
|
|
||||||
RAYGUI_ICON_215 = 215,
|
|
||||||
RAYGUI_ICON_216 = 216,
|
|
||||||
RAYGUI_ICON_217 = 217,
|
|
||||||
RAYGUI_ICON_218 = 218,
|
|
||||||
RAYGUI_ICON_219 = 219,
|
|
||||||
RAYGUI_ICON_220 = 220,
|
|
||||||
RAYGUI_ICON_221 = 221,
|
|
||||||
RAYGUI_ICON_222 = 222,
|
|
||||||
RAYGUI_ICON_223 = 223,
|
|
||||||
RAYGUI_ICON_224 = 224,
|
|
||||||
RAYGUI_ICON_225 = 225,
|
|
||||||
RAYGUI_ICON_226 = 226,
|
|
||||||
RAYGUI_ICON_227 = 227,
|
|
||||||
RAYGUI_ICON_228 = 228,
|
|
||||||
RAYGUI_ICON_229 = 229,
|
|
||||||
RAYGUI_ICON_230 = 230,
|
|
||||||
RAYGUI_ICON_231 = 231,
|
|
||||||
RAYGUI_ICON_232 = 232,
|
|
||||||
RAYGUI_ICON_233 = 233,
|
|
||||||
RAYGUI_ICON_234 = 234,
|
|
||||||
RAYGUI_ICON_235 = 235,
|
|
||||||
RAYGUI_ICON_236 = 236,
|
|
||||||
RAYGUI_ICON_237 = 237,
|
|
||||||
RAYGUI_ICON_238 = 238,
|
|
||||||
RAYGUI_ICON_239 = 239,
|
|
||||||
RAYGUI_ICON_240 = 240,
|
|
||||||
RAYGUI_ICON_241 = 241,
|
|
||||||
RAYGUI_ICON_242 = 242,
|
|
||||||
RAYGUI_ICON_243 = 243,
|
|
||||||
RAYGUI_ICON_244 = 244,
|
|
||||||
RAYGUI_ICON_245 = 245,
|
|
||||||
RAYGUI_ICON_246 = 246,
|
|
||||||
RAYGUI_ICON_247 = 247,
|
|
||||||
RAYGUI_ICON_248 = 248,
|
|
||||||
RAYGUI_ICON_249 = 249,
|
|
||||||
RAYGUI_ICON_250 = 250,
|
|
||||||
RAYGUI_ICON_251 = 251,
|
|
||||||
RAYGUI_ICON_252 = 252,
|
|
||||||
RAYGUI_ICON_253 = 253,
|
|
||||||
RAYGUI_ICON_254 = 254,
|
|
||||||
RAYGUI_ICON_255 = 255,
|
|
||||||
} guiIconName;
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// Icons data
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
static unsigned int guiIcons[RAYGUI_ICON_MAX_ICONS*RAYGUI_ICON_DATA_ELEMENTS] = {
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_NONE
|
|
||||||
0x3ff80000, 0x2f082008, 0x2042207e, 0x40027fc2, 0x40024002, 0x40024002, 0x40024002, 0x00007ffe, // RAYGUI_ICON_FOLDER_FILE_OPEN
|
|
||||||
0x3ffe0000, 0x44226422, 0x400247e2, 0x5ffa4002, 0x57ea500a, 0x500a500a, 0x40025ffa, 0x00007ffe, // RAYGUI_ICON_FILE_SAVE_CLASSIC
|
|
||||||
0x00000000, 0x0042007e, 0x40027fc2, 0x40024002, 0x41024002, 0x44424282, 0x793e4102, 0x00000100, // RAYGUI_ICON_FOLDER_OPEN
|
|
||||||
0x00000000, 0x0042007e, 0x40027fc2, 0x40024002, 0x41024102, 0x44424102, 0x793e4282, 0x00000000, // RAYGUI_ICON_FOLDER_SAVE
|
|
||||||
0x3ff00000, 0x201c2010, 0x20042004, 0x21042004, 0x24442284, 0x21042104, 0x20042104, 0x00003ffc, // RAYGUI_ICON_FILE_OPEN
|
|
||||||
0x3ff00000, 0x201c2010, 0x20042004, 0x21042004, 0x21042104, 0x22842444, 0x20042104, 0x00003ffc, // RAYGUI_ICON_FILE_SAVE
|
|
||||||
0x3ff00000, 0x201c2010, 0x00042004, 0x20041004, 0x20844784, 0x00841384, 0x20042784, 0x00003ffc, // RAYGUI_ICON_FILE_EXPORT
|
|
||||||
0x3ff00000, 0x201c2010, 0x20042004, 0x20042004, 0x22042204, 0x22042f84, 0x20042204, 0x00003ffc, // RAYGUI_ICON_FILE_NEW
|
|
||||||
0x3ff00000, 0x201c2010, 0x20042004, 0x20042004, 0x25042884, 0x25042204, 0x20042884, 0x00003ffc, // RAYGUI_ICON_FILE_DELETE
|
|
||||||
0x3ff00000, 0x201c2010, 0x20042004, 0x20042ff4, 0x20042ff4, 0x20042ff4, 0x20042004, 0x00003ffc, // RAYGUI_ICON_FILETYPE_TEXT
|
|
||||||
0x3ff00000, 0x201c2010, 0x27042004, 0x244424c4, 0x26442444, 0x20642664, 0x20042004, 0x00003ffc, // RAYGUI_ICON_FILETYPE_AUDIO
|
|
||||||
0x3ff00000, 0x201c2010, 0x26042604, 0x20042004, 0x35442884, 0x2414222c, 0x20042004, 0x00003ffc, // RAYGUI_ICON_FILETYPE_IMAGE
|
|
||||||
0x3ff00000, 0x201c2010, 0x20c42004, 0x22442144, 0x22442444, 0x20c42144, 0x20042004, 0x00003ffc, // RAYGUI_ICON_FILETYPE_PLAY
|
|
||||||
0x3ff00000, 0x3ffc2ff0, 0x3f3c2ff4, 0x3dbc2eb4, 0x3dbc2bb4, 0x3f3c2eb4, 0x3ffc2ff4, 0x00002ff4, // RAYGUI_ICON_FILETYPE_VIDEO
|
|
||||||
0x3ff00000, 0x201c2010, 0x21842184, 0x21842004, 0x21842184, 0x21842184, 0x20042184, 0x00003ffc, // RAYGUI_ICON_FILETYPE_INFO
|
|
||||||
0x0ff00000, 0x381c0810, 0x28042804, 0x28042804, 0x28042804, 0x28042804, 0x20102ffc, 0x00003ff0, // RAYGUI_ICON_FILE_COPY
|
|
||||||
0x00000000, 0x701c0000, 0x079c1e14, 0x55a000f0, 0x079c00f0, 0x701c1e14, 0x00000000, 0x00000000, // RAYGUI_ICON_FILE_CUT
|
|
||||||
0x01c00000, 0x13e41bec, 0x3f841004, 0x204420c4, 0x20442044, 0x20442044, 0x207c2044, 0x00003fc0, // RAYGUI_ICON_FILE_PASTE
|
|
||||||
0x00000000, 0x3aa00fe0, 0x2abc2aa0, 0x2aa42aa4, 0x20042aa4, 0x20042004, 0x3ffc2004, 0x00000000, // RAYGUI_ICON_CURSOR_HAND
|
|
||||||
0x00000000, 0x003c000c, 0x030800c8, 0x30100c10, 0x10202020, 0x04400840, 0x01800280, 0x00000000, // RAYGUI_ICON_CURSOR_POINTER
|
|
||||||
0x00000000, 0x00180000, 0x01f00078, 0x03e007f0, 0x07c003e0, 0x04000e40, 0x00000000, 0x00000000, // RAYGUI_ICON_CURSOR_CLASSIC
|
|
||||||
0x00000000, 0x04000000, 0x11000a00, 0x04400a80, 0x01100220, 0x00580088, 0x00000038, 0x00000000, // RAYGUI_ICON_PENCIL
|
|
||||||
0x04000000, 0x15000a00, 0x50402880, 0x14102820, 0x05040a08, 0x015c028c, 0x007c00bc, 0x00000000, // RAYGUI_ICON_PENCIL_BIG
|
|
||||||
0x01c00000, 0x01400140, 0x01400140, 0x0ff80140, 0x0ff80808, 0x0aa80808, 0x0aa80aa8, 0x00000ff8, // RAYGUI_ICON_BRUSH_CLASSIC
|
|
||||||
0x1ffc0000, 0x5ffc7ffe, 0x40004000, 0x00807f80, 0x01c001c0, 0x01c001c0, 0x01c001c0, 0x00000080, // RAYGUI_ICON_BRUSH_PAINTER
|
|
||||||
0x00000000, 0x00800000, 0x01c00080, 0x03e001c0, 0x07f003e0, 0x036006f0, 0x000001c0, 0x00000000, // RAYGUI_ICON_WATER_DROP
|
|
||||||
0x00000000, 0x3e003800, 0x1f803f80, 0x0c201e40, 0x02080c10, 0x00840104, 0x00380044, 0x00000000, // RAYGUI_ICON_COLOR_PICKER
|
|
||||||
0x00000000, 0x07800300, 0x1fe00fc0, 0x3f883fd0, 0x0e021f04, 0x02040402, 0x00f00108, 0x00000000, // RAYGUI_ICON_RUBBER
|
|
||||||
0x00c00000, 0x02800140, 0x08200440, 0x20081010, 0x2ffe3004, 0x03f807fc, 0x00e001f0, 0x00000040, // RAYGUI_ICON_COLOR_BUCKET
|
|
||||||
0x00000000, 0x21843ffc, 0x01800180, 0x01800180, 0x01800180, 0x01800180, 0x03c00180, 0x00000000, // RAYGUI_ICON_TEXT_T
|
|
||||||
0x00800000, 0x01400180, 0x06200340, 0x0c100620, 0x1ff80c10, 0x380c1808, 0x70067004, 0x0000f80f, // RAYGUI_ICON_TEXT_A
|
|
||||||
0x78000000, 0x50004000, 0x00004800, 0x03c003c0, 0x03c003c0, 0x00100000, 0x0002000a, 0x0000000e, // RAYGUI_ICON_SCALE
|
|
||||||
0x75560000, 0x5e004002, 0x54001002, 0x41001202, 0x408200fe, 0x40820082, 0x40820082, 0x00006afe, // RAYGUI_ICON_RESIZE
|
|
||||||
0x00000000, 0x3f003f00, 0x3f003f00, 0x3f003f00, 0x00400080, 0x001c0020, 0x001c001c, 0x00000000, // RAYGUI_ICON_FILTER_POINT
|
|
||||||
0x6d800000, 0x00004080, 0x40804080, 0x40800000, 0x00406d80, 0x001c0020, 0x001c001c, 0x00000000, // RAYGUI_ICON_FILTER_BILINEAR
|
|
||||||
0x40080000, 0x1ffe2008, 0x14081008, 0x11081208, 0x10481088, 0x10081028, 0x10047ff8, 0x00001002, // RAYGUI_ICON_CROP
|
|
||||||
0x00100000, 0x3ffc0010, 0x2ab03550, 0x22b02550, 0x20b02150, 0x20302050, 0x2000fff0, 0x00002000, // RAYGUI_ICON_CROP_ALPHA
|
|
||||||
0x40000000, 0x1ff82000, 0x04082808, 0x01082208, 0x00482088, 0x00182028, 0x35542008, 0x00000002, // RAYGUI_ICON_SQUARE_TOGGLE
|
|
||||||
0x00000000, 0x02800280, 0x06c006c0, 0x0ea00ee0, 0x1e901eb0, 0x3e883e98, 0x7efc7e8c, 0x00000000, // RAYGUI_ICON_SIMMETRY
|
|
||||||
0x01000000, 0x05600100, 0x1d480d50, 0x7d423d44, 0x3d447d42, 0x0d501d48, 0x01000560, 0x00000100, // RAYGUI_ICON_SIMMETRY_HORIZONTAL
|
|
||||||
0x01800000, 0x04200240, 0x10080810, 0x00001ff8, 0x00007ffe, 0x0ff01ff8, 0x03c007e0, 0x00000180, // RAYGUI_ICON_SIMMETRY_VERTICAL
|
|
||||||
0x00000000, 0x010800f0, 0x02040204, 0x02040204, 0x07f00308, 0x1c000e00, 0x30003800, 0x00000000, // RAYGUI_ICON_LENS
|
|
||||||
0x00000000, 0x061803f0, 0x08240c0c, 0x08040814, 0x0c0c0804, 0x23f01618, 0x18002400, 0x00000000, // RAYGUI_ICON_LENS_BIG
|
|
||||||
0x00000000, 0x00000000, 0x1c7007c0, 0x638e3398, 0x1c703398, 0x000007c0, 0x00000000, 0x00000000, // RAYGUI_ICON_EYE_ON
|
|
||||||
0x00000000, 0x10002000, 0x04700fc0, 0x610e3218, 0x1c703098, 0x001007a0, 0x00000008, 0x00000000, // RAYGUI_ICON_EYE_OFF
|
|
||||||
0x00000000, 0x00007ffc, 0x40047ffc, 0x10102008, 0x04400820, 0x02800280, 0x02800280, 0x00000100, // RAYGUI_ICON_FILTER_TOP
|
|
||||||
0x00000000, 0x40027ffe, 0x10082004, 0x04200810, 0x02400240, 0x02400240, 0x01400240, 0x000000c0, // RAYGUI_ICON_FILTER
|
|
||||||
0x00800000, 0x00800080, 0x00000080, 0x3c9e0000, 0x00000000, 0x00800080, 0x00800080, 0x00000000, // RAYGUI_ICON_TARGET_POINT
|
|
||||||
0x00800000, 0x00800080, 0x00800080, 0x3f7e01c0, 0x008001c0, 0x00800080, 0x00800080, 0x00000000, // RAYGUI_ICON_TARGET_SMALL
|
|
||||||
0x00800000, 0x00800080, 0x03e00080, 0x3e3e0220, 0x03e00220, 0x00800080, 0x00800080, 0x00000000, // RAYGUI_ICON_TARGET_BIG
|
|
||||||
0x01000000, 0x04400280, 0x01000100, 0x43842008, 0x43849ab2, 0x01002008, 0x04400100, 0x01000280, // RAYGUI_ICON_TARGET_MOVE
|
|
||||||
0x01000000, 0x04400280, 0x01000100, 0x41042108, 0x41049ff2, 0x01002108, 0x04400100, 0x01000280, // RAYGUI_ICON_CURSOR_MOVE
|
|
||||||
0x781e0000, 0x500a4002, 0x04204812, 0x00000240, 0x02400000, 0x48120420, 0x4002500a, 0x0000781e, // RAYGUI_ICON_CURSOR_SCALE
|
|
||||||
0x00000000, 0x20003c00, 0x24002800, 0x01000200, 0x00400080, 0x00140024, 0x003c0004, 0x00000000, // RAYGUI_ICON_CURSOR_SCALE_RIGHT
|
|
||||||
0x00000000, 0x0004003c, 0x00240014, 0x00800040, 0x02000100, 0x28002400, 0x3c002000, 0x00000000, // RAYGUI_ICON_CURSOR_SCALE_LEFT
|
|
||||||
0x00000000, 0x00100020, 0x10101fc8, 0x10001020, 0x10001000, 0x10001000, 0x00001fc0, 0x00000000, // RAYGUI_ICON_UNDO
|
|
||||||
0x00000000, 0x08000400, 0x080813f8, 0x00080408, 0x00080008, 0x00080008, 0x000003f8, 0x00000000, // RAYGUI_ICON_REDO
|
|
||||||
0x00000000, 0x3ffc0000, 0x20042004, 0x20002000, 0x20402000, 0x3f902020, 0x00400020, 0x00000000, // RAYGUI_ICON_REREDO
|
|
||||||
0x00000000, 0x3ffc0000, 0x20042004, 0x27fc2004, 0x20202000, 0x3fc82010, 0x00200010, 0x00000000, // RAYGUI_ICON_MUTATE
|
|
||||||
0x00000000, 0x0ff00000, 0x10081818, 0x11801008, 0x10001180, 0x18101020, 0x00100fc8, 0x00000020, // RAYGUI_ICON_ROTATE
|
|
||||||
0x00000000, 0x04000200, 0x240429fc, 0x20042204, 0x20442004, 0x3f942024, 0x00400020, 0x00000000, // RAYGUI_ICON_REPEAT
|
|
||||||
0x00000000, 0x20001000, 0x22104c0e, 0x00801120, 0x11200040, 0x4c0e2210, 0x10002000, 0x00000000, // RAYGUI_ICON_SHUFFLE
|
|
||||||
0x7ffe0000, 0x50024002, 0x44024802, 0x41024202, 0x40424082, 0x40124022, 0x4002400a, 0x00007ffe, // RAYGUI_ICON_EMPTYBOX
|
|
||||||
0x00800000, 0x03e00080, 0x08080490, 0x3c9e0808, 0x08080808, 0x03e00490, 0x00800080, 0x00000000, // RAYGUI_ICON_TARGET
|
|
||||||
0x00800000, 0x00800080, 0x00800080, 0x3ffe01c0, 0x008001c0, 0x00800080, 0x00800080, 0x00000000, // RAYGUI_ICON_TARGET_SMALL_FILL
|
|
||||||
0x00800000, 0x00800080, 0x03e00080, 0x3ffe03e0, 0x03e003e0, 0x00800080, 0x00800080, 0x00000000, // RAYGUI_ICON_TARGET_BIG_FILL
|
|
||||||
0x01000000, 0x07c00380, 0x01000100, 0x638c2008, 0x638cfbbe, 0x01002008, 0x07c00100, 0x01000380, // RAYGUI_ICON_TARGET_MOVE_FILL
|
|
||||||
0x01000000, 0x07c00380, 0x01000100, 0x610c2108, 0x610cfffe, 0x01002108, 0x07c00100, 0x01000380, // RAYGUI_ICON_CURSOR_MOVE_FILL
|
|
||||||
0x781e0000, 0x6006700e, 0x04204812, 0x00000240, 0x02400000, 0x48120420, 0x700e6006, 0x0000781e, // RAYGUI_ICON_CURSOR_SCALE_FILL
|
|
||||||
0x00000000, 0x38003c00, 0x24003000, 0x01000200, 0x00400080, 0x000c0024, 0x003c001c, 0x00000000, // RAYGUI_ICON_CURSOR_SCALE_RIGHT_FILL
|
|
||||||
0x00000000, 0x001c003c, 0x0024000c, 0x00800040, 0x02000100, 0x30002400, 0x3c003800, 0x00000000, // RAYGUI_ICON_CURSOR_SCALE_LEFT_FILL
|
|
||||||
0x00000000, 0x00300020, 0x10301ff8, 0x10001020, 0x10001000, 0x10001000, 0x00001fc0, 0x00000000, // RAYGUI_ICON_UNDO_FILL
|
|
||||||
0x00000000, 0x0c000400, 0x0c081ff8, 0x00080408, 0x00080008, 0x00080008, 0x000003f8, 0x00000000, // RAYGUI_ICON_REDO_FILL
|
|
||||||
0x00000000, 0x3ffc0000, 0x20042004, 0x20002000, 0x20402000, 0x3ff02060, 0x00400060, 0x00000000, // RAYGUI_ICON_REREDO_FILL
|
|
||||||
0x00000000, 0x3ffc0000, 0x20042004, 0x27fc2004, 0x20202000, 0x3ff82030, 0x00200030, 0x00000000, // RAYGUI_ICON_MUTATE_FILL
|
|
||||||
0x00000000, 0x0ff00000, 0x10081818, 0x11801008, 0x10001180, 0x18301020, 0x00300ff8, 0x00000020, // RAYGUI_ICON_ROTATE_FILL
|
|
||||||
0x00000000, 0x06000200, 0x26042ffc, 0x20042204, 0x20442004, 0x3ff42064, 0x00400060, 0x00000000, // RAYGUI_ICON_REPEAT_FILL
|
|
||||||
0x00000000, 0x30001000, 0x32107c0e, 0x00801120, 0x11200040, 0x7c0e3210, 0x10003000, 0x00000000, // RAYGUI_ICON_SHUFFLE_FILL
|
|
||||||
0x00000000, 0x30043ffc, 0x24042804, 0x21042204, 0x20442084, 0x20142024, 0x3ffc200c, 0x00000000, // RAYGUI_ICON_EMPTYBOX_SMALL
|
|
||||||
0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // RAYGUI_ICON_BOX
|
|
||||||
0x00000000, 0x23c43ffc, 0x23c423c4, 0x200423c4, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // RAYGUI_ICON_BOX_TOP
|
|
||||||
0x00000000, 0x3e043ffc, 0x3e043e04, 0x20043e04, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // RAYGUI_ICON_BOX_TOP_RIGHT
|
|
||||||
0x00000000, 0x20043ffc, 0x20042004, 0x3e043e04, 0x3e043e04, 0x20042004, 0x3ffc2004, 0x00000000, // RAYGUI_ICON_BOX_RIGHT
|
|
||||||
0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x3e042004, 0x3e043e04, 0x3ffc3e04, 0x00000000, // RAYGUI_ICON_BOX_BOTTOM_RIGHT
|
|
||||||
0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x23c42004, 0x23c423c4, 0x3ffc23c4, 0x00000000, // RAYGUI_ICON_BOX_BOTTOM
|
|
||||||
0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x207c2004, 0x207c207c, 0x3ffc207c, 0x00000000, // RAYGUI_ICON_BOX_BOTTOM_LEFT
|
|
||||||
0x00000000, 0x20043ffc, 0x20042004, 0x207c207c, 0x207c207c, 0x20042004, 0x3ffc2004, 0x00000000, // RAYGUI_ICON_BOX_LEFT
|
|
||||||
0x00000000, 0x207c3ffc, 0x207c207c, 0x2004207c, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // RAYGUI_ICON_BOX_TOP_LEFT
|
|
||||||
0x00000000, 0x20043ffc, 0x20042004, 0x23c423c4, 0x23c423c4, 0x20042004, 0x3ffc2004, 0x00000000, // RAYGUI_ICON_BOX_CENTER
|
|
||||||
0x7ffe0000, 0x40024002, 0x47e24182, 0x4ff247e2, 0x47e24ff2, 0x418247e2, 0x40024002, 0x00007ffe, // RAYGUI_ICON_BOX_CIRCLE_MASK
|
|
||||||
0x7fff0000, 0x40014001, 0x40014001, 0x49555ddd, 0x4945495d, 0x400149c5, 0x40014001, 0x00007fff, // RAYGUI_ICON_POT
|
|
||||||
0x7ffe0000, 0x53327332, 0x44ce4cce, 0x41324332, 0x404e40ce, 0x48125432, 0x4006540e, 0x00007ffe, // RAYGUI_ICON_ALPHA_MULTIPLY
|
|
||||||
0x7ffe0000, 0x53327332, 0x44ce4cce, 0x41324332, 0x5c4e40ce, 0x44124432, 0x40065c0e, 0x00007ffe, // RAYGUI_ICON_ALPHA_CLEAR
|
|
||||||
0x7ffe0000, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x00007ffe, // RAYGUI_ICON_DITHERING
|
|
||||||
0x07fe0000, 0x1ffa0002, 0x7fea000a, 0x402a402a, 0x5b2a512a, 0x5128552a, 0x40205128, 0x00007fe0, // RAYGUI_ICON_MIPMAPS
|
|
||||||
0x00000000, 0x1ff80000, 0x12481248, 0x12481ff8, 0x1ff81248, 0x12481248, 0x00001ff8, 0x00000000, // RAYGUI_ICON_BOX_GRID
|
|
||||||
0x12480000, 0x7ffe1248, 0x12481248, 0x12487ffe, 0x7ffe1248, 0x12481248, 0x12487ffe, 0x00001248, // RAYGUI_ICON_GRID
|
|
||||||
0x00000000, 0x1c380000, 0x1c3817e8, 0x08100810, 0x08100810, 0x17e81c38, 0x00001c38, 0x00000000, // RAYGUI_ICON_BOX_CORNERS_SMALL
|
|
||||||
0x700e0000, 0x700e5ffa, 0x20042004, 0x20042004, 0x20042004, 0x20042004, 0x5ffa700e, 0x0000700e, // RAYGUI_ICON_BOX_CORNERS_BIG
|
|
||||||
0x3f7e0000, 0x21422142, 0x21422142, 0x00003f7e, 0x21423f7e, 0x21422142, 0x3f7e2142, 0x00000000, // RAYGUI_ICON_FOUR_BOXES
|
|
||||||
0x00000000, 0x3bb80000, 0x3bb83bb8, 0x3bb80000, 0x3bb83bb8, 0x3bb80000, 0x3bb83bb8, 0x00000000, // RAYGUI_ICON_GRID_FILL
|
|
||||||
0x7ffe0000, 0x7ffe7ffe, 0x77fe7000, 0x77fe77fe, 0x777e7700, 0x777e777e, 0x777e777e, 0x0000777e, // RAYGUI_ICON_BOX_MULTISIZE
|
|
||||||
0x781e0000, 0x40024002, 0x00004002, 0x01800000, 0x00000180, 0x40020000, 0x40024002, 0x0000781e, // RAYGUI_ICON_ZOOM_SMALL
|
|
||||||
0x781e0000, 0x40024002, 0x00004002, 0x03c003c0, 0x03c003c0, 0x40020000, 0x40024002, 0x0000781e, // RAYGUI_ICON_ZOOM_MEDIUM
|
|
||||||
0x781e0000, 0x40024002, 0x07e04002, 0x07e007e0, 0x07e007e0, 0x400207e0, 0x40024002, 0x0000781e, // RAYGUI_ICON_ZOOM_BIG
|
|
||||||
0x781e0000, 0x5ffa4002, 0x1ff85ffa, 0x1ff81ff8, 0x1ff81ff8, 0x5ffa1ff8, 0x40025ffa, 0x0000781e, // RAYGUI_ICON_ZOOM_ALL
|
|
||||||
0x00000000, 0x2004381c, 0x00002004, 0x00000000, 0x00000000, 0x20040000, 0x381c2004, 0x00000000, // RAYGUI_ICON_ZOOM_CENTER
|
|
||||||
0x00000000, 0x1db80000, 0x10081008, 0x10080000, 0x00001008, 0x10081008, 0x00001db8, 0x00000000, // RAYGUI_ICON_BOX_DOTS_SMALL
|
|
||||||
0x35560000, 0x00002002, 0x00002002, 0x00002002, 0x00002002, 0x00002002, 0x35562002, 0x00000000, // RAYGUI_ICON_BOX_DOTS_BIG
|
|
||||||
0x7ffe0000, 0x40024002, 0x48124ff2, 0x49924812, 0x48124992, 0x4ff24812, 0x40024002, 0x00007ffe, // RAYGUI_ICON_BOX_CONCENTRIC
|
|
||||||
0x00000000, 0x10841ffc, 0x10841084, 0x1ffc1084, 0x10841084, 0x10841084, 0x00001ffc, 0x00000000, // RAYGUI_ICON_BOX_GRID_BIG
|
|
||||||
0x00000000, 0x00000000, 0x10000000, 0x04000800, 0x01040200, 0x00500088, 0x00000020, 0x00000000, // RAYGUI_ICON_OK_TICK
|
|
||||||
0x00000000, 0x10080000, 0x04200810, 0x01800240, 0x02400180, 0x08100420, 0x00001008, 0x00000000, // RAYGUI_ICON_CROSS
|
|
||||||
0x00000000, 0x02000000, 0x00800100, 0x00200040, 0x00200010, 0x00800040, 0x02000100, 0x00000000, // RAYGUI_ICON_ARROW_LEFT
|
|
||||||
0x00000000, 0x00400000, 0x01000080, 0x04000200, 0x04000800, 0x01000200, 0x00400080, 0x00000000, // RAYGUI_ICON_ARROW_RIGHT
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x08081004, 0x02200410, 0x00800140, 0x00000000, 0x00000000, // RAYGUI_ICON_ARROW_BOTTOM
|
|
||||||
0x00000000, 0x00000000, 0x01400080, 0x04100220, 0x10040808, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_ARROW_TOP
|
|
||||||
0x00000000, 0x02000000, 0x03800300, 0x03e003c0, 0x03e003f0, 0x038003c0, 0x02000300, 0x00000000, // RAYGUI_ICON_ARROW_LEFT_FILL
|
|
||||||
0x00000000, 0x00400000, 0x01c000c0, 0x07c003c0, 0x07c00fc0, 0x01c003c0, 0x004000c0, 0x00000000, // RAYGUI_ICON_ARROW_RIGHT_FILL
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x0ff81ffc, 0x03e007f0, 0x008001c0, 0x00000000, 0x00000000, // RAYGUI_ICON_ARROW_BOTTOM_FILL
|
|
||||||
0x00000000, 0x00000000, 0x01c00080, 0x07f003e0, 0x1ffc0ff8, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_ARROW_TOP_FILL
|
|
||||||
0x00000000, 0x18a008c0, 0x32881290, 0x24822686, 0x26862482, 0x12903288, 0x08c018a0, 0x00000000, // RAYGUI_ICON_AUDIO
|
|
||||||
0x00000000, 0x04800780, 0x004000c0, 0x662000f0, 0x08103c30, 0x130a0e18, 0x0000318e, 0x00000000, // RAYGUI_ICON_FX
|
|
||||||
0x00000000, 0x00800000, 0x08880888, 0x2aaa0a8a, 0x0a8a2aaa, 0x08880888, 0x00000080, 0x00000000, // RAYGUI_ICON_WAVE
|
|
||||||
0x00000000, 0x00600000, 0x01080090, 0x02040108, 0x42044204, 0x24022402, 0x00001800, 0x00000000, // RAYGUI_ICON_WAVE_SINUS
|
|
||||||
0x00000000, 0x07f80000, 0x04080408, 0x04080408, 0x04080408, 0x7c0e0408, 0x00000000, 0x00000000, // RAYGUI_ICON_WAVE_SQUARE
|
|
||||||
0x00000000, 0x00000000, 0x00a00040, 0x22084110, 0x08021404, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_WAVE_TRIANGULAR
|
|
||||||
0x00000000, 0x00000000, 0x04200000, 0x01800240, 0x02400180, 0x00000420, 0x00000000, 0x00000000, // RAYGUI_ICON_CROSS_SMALL
|
|
||||||
0x00000000, 0x18380000, 0x12281428, 0x10a81128, 0x112810a8, 0x14281228, 0x00001838, 0x00000000, // RAYGUI_ICON_PLAYER_PREVIOUS
|
|
||||||
0x00000000, 0x18000000, 0x11801600, 0x10181060, 0x10601018, 0x16001180, 0x00001800, 0x00000000, // RAYGUI_ICON_PLAYER_PLAY_BACK
|
|
||||||
0x00000000, 0x00180000, 0x01880068, 0x18080608, 0x06081808, 0x00680188, 0x00000018, 0x00000000, // RAYGUI_ICON_PLAYER_PLAY
|
|
||||||
0x00000000, 0x1e780000, 0x12481248, 0x12481248, 0x12481248, 0x12481248, 0x00001e78, 0x00000000, // RAYGUI_ICON_PLAYER_PAUSE
|
|
||||||
0x00000000, 0x1ff80000, 0x10081008, 0x10081008, 0x10081008, 0x10081008, 0x00001ff8, 0x00000000, // RAYGUI_ICON_PLAYER_STOP
|
|
||||||
0x00000000, 0x1c180000, 0x14481428, 0x15081488, 0x14881508, 0x14281448, 0x00001c18, 0x00000000, // RAYGUI_ICON_PLAYER_NEXT
|
|
||||||
0x00000000, 0x03c00000, 0x08100420, 0x10081008, 0x10081008, 0x04200810, 0x000003c0, 0x00000000, // RAYGUI_ICON_PLAYER_RECORD
|
|
||||||
0x00000000, 0x0c3007e0, 0x13c81818, 0x14281668, 0x14281428, 0x1c381c38, 0x08102244, 0x00000000, // RAYGUI_ICON_MAGNET
|
|
||||||
0x07c00000, 0x08200820, 0x3ff80820, 0x23882008, 0x21082388, 0x20082108, 0x1ff02008, 0x00000000, // RAYGUI_ICON_LOCK_CLOSE
|
|
||||||
0x07c00000, 0x08000800, 0x3ff80800, 0x23882008, 0x21082388, 0x20082108, 0x1ff02008, 0x00000000, // RAYGUI_ICON_LOCK_OPEN
|
|
||||||
0x01c00000, 0x0c180770, 0x3086188c, 0x60832082, 0x60034781, 0x30062002, 0x0c18180c, 0x01c00770, // RAYGUI_ICON_CLOCK
|
|
||||||
0x0a200000, 0x1b201b20, 0x04200e20, 0x04200420, 0x04700420, 0x0e700e70, 0x0e700e70, 0x04200e70, // RAYGUI_ICON_TOOLS
|
|
||||||
0x01800000, 0x3bdc318c, 0x0ff01ff8, 0x7c3e1e78, 0x1e787c3e, 0x1ff80ff0, 0x318c3bdc, 0x00000180, // RAYGUI_ICON_GEAR
|
|
||||||
0x01800000, 0x3ffc318c, 0x1c381ff8, 0x781e1818, 0x1818781e, 0x1ff81c38, 0x318c3ffc, 0x00000180, // RAYGUI_ICON_GEAR_BIG
|
|
||||||
0x00000000, 0x08080ff8, 0x08081ffc, 0x0aa80aa8, 0x0aa80aa8, 0x0aa80aa8, 0x08080aa8, 0x00000ff8, // RAYGUI_ICON_BIN
|
|
||||||
0x00000000, 0x00000000, 0x20043ffc, 0x08043f84, 0x04040f84, 0x04040784, 0x000007fc, 0x00000000, // RAYGUI_ICON_HAND_POINTER
|
|
||||||
0x00000000, 0x24400400, 0x00001480, 0x6efe0e00, 0x00000e00, 0x24401480, 0x00000400, 0x00000000, // RAYGUI_ICON_LASER
|
|
||||||
0x00000000, 0x03c00000, 0x08300460, 0x11181118, 0x11181118, 0x04600830, 0x000003c0, 0x00000000, // RAYGUI_ICON_COIN
|
|
||||||
0x00000000, 0x10880080, 0x06c00810, 0x366c07e0, 0x07e00240, 0x00001768, 0x04200240, 0x00000000, // RAYGUI_ICON_EXPLOSION
|
|
||||||
0x00000000, 0x3d280000, 0x2528252c, 0x3d282528, 0x05280528, 0x05e80528, 0x00000000, 0x00000000, // RAYGUI_ICON_1UP
|
|
||||||
0x01800000, 0x03c003c0, 0x018003c0, 0x0ff007e0, 0x0bd00bd0, 0x0a500bd0, 0x02400240, 0x02400240, // RAYGUI_ICON_PLAYER
|
|
||||||
0x01800000, 0x03c003c0, 0x118013c0, 0x03c81ff8, 0x07c003c8, 0x04400440, 0x0c080478, 0x00000000, // RAYGUI_ICON_PLAYER_JUMP
|
|
||||||
0x3ff80000, 0x30183ff8, 0x30183018, 0x3ff83ff8, 0x03000300, 0x03c003c0, 0x03e00300, 0x000003e0, // RAYGUI_ICON_KEY
|
|
||||||
0x3ff80000, 0x3ff83ff8, 0x33983ff8, 0x3ff83398, 0x3ff83ff8, 0x00000540, 0x0fe00aa0, 0x00000fe0, // RAYGUI_ICON_DEMON
|
|
||||||
0x00000000, 0x0ff00000, 0x20041008, 0x25442004, 0x10082004, 0x06000bf0, 0x00000300, 0x00000000, // RAYGUI_ICON_TEXT_POPUP
|
|
||||||
0x00000000, 0x11440000, 0x07f00be8, 0x1c1c0e38, 0x1c1c0c18, 0x07f00e38, 0x11440be8, 0x00000000, // RAYGUI_ICON_GEAR_EX
|
|
||||||
0x00000000, 0x20080000, 0x0c601010, 0x07c00fe0, 0x07c007c0, 0x0c600fe0, 0x20081010, 0x00000000, // RAYGUI_ICON_CRACK
|
|
||||||
0x00000000, 0x20080000, 0x0c601010, 0x04400fe0, 0x04405554, 0x0c600fe0, 0x20081010, 0x00000000, // RAYGUI_ICON_CRACK_POINTS
|
|
||||||
0x00000000, 0x00800080, 0x01c001c0, 0x1ffc3ffe, 0x03e007f0, 0x07f003e0, 0x0c180770, 0x00000808, // RAYGUI_ICON_STAR
|
|
||||||
0x0ff00000, 0x08180810, 0x08100818, 0x0a100810, 0x08180810, 0x08100818, 0x08100810, 0x00001ff8, // RAYGUI_ICON_DOOR
|
|
||||||
0x0ff00000, 0x08100810, 0x08100810, 0x10100010, 0x4f902010, 0x10102010, 0x08100010, 0x00000ff0, // RAYGUI_ICON_EXIT
|
|
||||||
0x00040000, 0x001f000e, 0x0ef40004, 0x12f41284, 0x0ef41214, 0x10040004, 0x7ffc3004, 0x10003000, // RAYGUI_ICON_MODE_2D
|
|
||||||
0x78040000, 0x501f600e, 0x0ef44004, 0x12f41284, 0x0ef41284, 0x10140004, 0x7ffc300c, 0x10003000, // RAYGUI_ICON_MODE_3D
|
|
||||||
0x7fe00000, 0x50286030, 0x47fe4804, 0x44224402, 0x44224422, 0x241275e2, 0x0c06140a, 0x000007fe, // RAYGUI_ICON_CUBE
|
|
||||||
0x7fe00000, 0x5ff87ff0, 0x47fe4ffc, 0x44224402, 0x44224422, 0x241275e2, 0x0c06140a, 0x000007fe, // RAYGUI_ICON_CUBE_FACE_TOP
|
|
||||||
0x7fe00000, 0x50386030, 0x47fe483c, 0x443e443e, 0x443e443e, 0x241e75fe, 0x0c06140e, 0x000007fe, // RAYGUI_ICON_CUBE_FACE_LEFT
|
|
||||||
0x7fe00000, 0x50286030, 0x47fe4804, 0x47fe47fe, 0x47fe47fe, 0x27fe77fe, 0x0ffe17fe, 0x000007fe, // RAYGUI_ICON_CUBE_FACE_FRONT
|
|
||||||
0x7fe00000, 0x50286030, 0x47fe4804, 0x44224402, 0x44224422, 0x3ff27fe2, 0x0ffe1ffa, 0x000007fe, // RAYGUI_ICON_CUBE_FACE_BOTTOM
|
|
||||||
0x7fe00000, 0x70286030, 0x7ffe7804, 0x7c227c02, 0x7c227c22, 0x3c127de2, 0x0c061c0a, 0x000007fe, // RAYGUI_ICON_CUBE_FACE_RIGHT
|
|
||||||
0x7fe00000, 0x7fe87ff0, 0x7ffe7fe4, 0x7fe27fe2, 0x7fe27fe2, 0x24127fe2, 0x0c06140a, 0x000007fe, // RAYGUI_ICON_CUBE_FACE_BACK
|
|
||||||
0x00000000, 0x2a0233fe, 0x22022602, 0x22022202, 0x2a022602, 0x00a033fe, 0x02080110, 0x00000000, // RAYGUI_ICON_CAMERA
|
|
||||||
0x00000000, 0x200c3ffc, 0x000c000c, 0x3ffc000c, 0x30003000, 0x30003000, 0x3ffc3004, 0x00000000, // RAYGUI_ICON_SPECIAL
|
|
||||||
0x00000000, 0x0022003e, 0x012201e2, 0x0100013e, 0x01000100, 0x79000100, 0x4f004900, 0x00007800, // RAYGUI_ICON_LINK_NET
|
|
||||||
0x00000000, 0x44007c00, 0x45004600, 0x00627cbe, 0x00620022, 0x45007cbe, 0x44004600, 0x00007c00, // RAYGUI_ICON_LINK_BOXES
|
|
||||||
0x00000000, 0x0044007c, 0x0010007c, 0x3f100010, 0x3f1021f0, 0x3f100010, 0x3f0021f0, 0x00000000, // RAYGUI_ICON_LINK_MULTI
|
|
||||||
0x00000000, 0x0044007c, 0x00440044, 0x0010007c, 0x00100010, 0x44107c10, 0x440047f0, 0x00007c00, // RAYGUI_ICON_LINK
|
|
||||||
0x00000000, 0x0044007c, 0x00440044, 0x0000007c, 0x00000010, 0x44007c10, 0x44004550, 0x00007c00, // RAYGUI_ICON_LINK_BROKE
|
|
||||||
0x02a00000, 0x22a43ffc, 0x20042004, 0x20042ff4, 0x20042ff4, 0x20042ff4, 0x20042004, 0x00003ffc, // RAYGUI_ICON_TEXT_NOTES
|
|
||||||
0x3ffc0000, 0x20042004, 0x245e27c4, 0x27c42444, 0x2004201e, 0x201e2004, 0x20042004, 0x00003ffc, // RAYGUI_ICON_NOTEBOOK
|
|
||||||
0x00000000, 0x07e00000, 0x04200420, 0x24243ffc, 0x24242424, 0x24242424, 0x3ffc2424, 0x00000000, // RAYGUI_ICON_SUITCASE
|
|
||||||
0x00000000, 0x0fe00000, 0x08200820, 0x40047ffc, 0x7ffc5554, 0x40045554, 0x7ffc4004, 0x00000000, // RAYGUI_ICON_SUITCASE_ZIP
|
|
||||||
0x00000000, 0x20043ffc, 0x3ffc2004, 0x13c81008, 0x100813c8, 0x10081008, 0x1ff81008, 0x00000000, // RAYGUI_ICON_MAILBOX
|
|
||||||
0x00000000, 0x40027ffe, 0x5ffa5ffa, 0x5ffa5ffa, 0x40025ffa, 0x03c07ffe, 0x1ff81ff8, 0x00000000, // RAYGUI_ICON_MONITOR
|
|
||||||
0x0ff00000, 0x6bfe7ffe, 0x7ffe7ffe, 0x68167ffe, 0x08106816, 0x08100810, 0x0ff00810, 0x00000000, // RAYGUI_ICON_PRINTER
|
|
||||||
0x3ff80000, 0xfffe2008, 0x870a8002, 0x904a888a, 0x904a904a, 0x870a888a, 0xfffe8002, 0x00000000, // RAYGUI_ICON_PHOTO_CAMERA
|
|
||||||
0x0fc00000, 0xfcfe0cd8, 0x8002fffe, 0x84428382, 0x84428442, 0x80028382, 0xfffe8002, 0x00000000, // RAYGUI_ICON_PHOTO_CAMERA_FLASH
|
|
||||||
0x00000000, 0x02400180, 0x08100420, 0x20041008, 0x23c42004, 0x22442244, 0x3ffc2244, 0x00000000, // RAYGUI_ICON_HOUSE
|
|
||||||
0x00000000, 0x1c700000, 0x3ff83ef8, 0x3ff83ff8, 0x0fe01ff0, 0x038007c0, 0x00000100, 0x00000000, // RAYGUI_ICON_HEART
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0xe000c000, // RAYGUI_ICON_CORNER
|
|
||||||
0x00000000, 0x14001c00, 0x15c01400, 0x15401540, 0x155c1540, 0x15541554, 0x1ddc1554, 0x00000000, // RAYGUI_ICON_VERTICAL_BARS
|
|
||||||
0x00000000, 0x03000300, 0x1b001b00, 0x1b601b60, 0x1b6c1b60, 0x1b6c1b6c, 0x1b6c1b6c, 0x00000000, // RAYGUI_ICON_VERTICAL_BARS_FILL
|
|
||||||
0x00000000, 0x00000000, 0x403e7ffe, 0x7ffe403e, 0x7ffe0000, 0x43fe43fe, 0x00007ffe, 0x00000000, // RAYGUI_ICON_LIFE_BARS
|
|
||||||
0x7ffc0000, 0x43844004, 0x43844284, 0x43844004, 0x42844284, 0x42844284, 0x40044384, 0x00007ffc, // RAYGUI_ICON_INFO
|
|
||||||
0x40008000, 0x10002000, 0x04000800, 0x01000200, 0x00400080, 0x00100020, 0x00040008, 0x00010002, // RAYGUI_ICON_CROSSLINE
|
|
||||||
0x00000000, 0x1ff01ff0, 0x18301830, 0x1f001830, 0x03001f00, 0x00000300, 0x03000300, 0x00000000, // RAYGUI_ICON_HELP
|
|
||||||
0x3ff00000, 0x2abc3550, 0x2aac3554, 0x2aac3554, 0x2aac3554, 0x2aac3554, 0x2aac3554, 0x00003ffc, // RAYGUI_ICON_FILETYPE_ALPHA
|
|
||||||
0x3ff00000, 0x201c2010, 0x22442184, 0x28142424, 0x29942814, 0x2ff42994, 0x20042004, 0x00003ffc, // RAYGUI_ICON_FILETYPE_HOME
|
|
||||||
0x07fe0000, 0x04020402, 0x7fe20402, 0x44224422, 0x44224422, 0x402047fe, 0x40204020, 0x00007fe0, // RAYGUI_ICON_LAYERS_VISIBLE
|
|
||||||
0x07fe0000, 0x04020402, 0x7c020402, 0x44024402, 0x44024402, 0x402047fe, 0x40204020, 0x00007fe0, // RAYGUI_ICON_LAYERS
|
|
||||||
0x00000000, 0x40027ffe, 0x7ffe4002, 0x40024002, 0x40024002, 0x40024002, 0x7ffe4002, 0x00000000, // RAYGUI_ICON_WINDOW
|
|
||||||
0x09100000, 0x09f00910, 0x09100910, 0x00000910, 0x24a2779e, 0x27a224a2, 0x709e20a2, 0x00000000, // RAYGUI_ICON_199
|
|
||||||
0x00000000, 0x01000100, 0x01000100, 0x3ff80100, 0x01000100, 0x01000100, 0x00000100, 0x00000000, // RAYGUI_ICON_200
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_201
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_202
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_203
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_204
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_205
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_206
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_207
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_208
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_209
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_210
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_211
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_212
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_213
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_214
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_215
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_216
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_217
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_218
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_219
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_220
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_221
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_222
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_223
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_224
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_225
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_226
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_227
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_228
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_229
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_230
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_231
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_232
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_233
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_234
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_235
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_236
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_237
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_238
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_239
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_240
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_241
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_242
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_243
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_244
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_245
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_246
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_247
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_248
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_249
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_250
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_251
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_252
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_253
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_254
|
|
||||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_255
|
|
||||||
};
|
|
@ -1,183 +0,0 @@
|
|||||||
/**********************************************************************************************
|
|
||||||
*
|
|
||||||
* raylib.lights - Some useful functions to deal with lights data
|
|
||||||
*
|
|
||||||
* CONFIGURATION:
|
|
||||||
*
|
|
||||||
* #define RLIGHTS_IMPLEMENTATION
|
|
||||||
* Generates the implementation of the library into the included file.
|
|
||||||
* If not defined, the library is in header only mode and can be included in other headers
|
|
||||||
* or source files without problems. But only ONE file should hold the implementation.
|
|
||||||
*
|
|
||||||
* LICENSE: zlib/libpng
|
|
||||||
*
|
|
||||||
* Copyright (c) 2017-2020 Victor Fisac (@victorfisac) and Ramon Santamaria (@raysan5)
|
|
||||||
*
|
|
||||||
* This software is provided "as-is", without any express or implied warranty. In no event
|
|
||||||
* will the authors be held liable for any damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any purpose, including commercial
|
|
||||||
* applications, and to alter it and redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you must not claim that you
|
|
||||||
* wrote the original software. If you use this software in a product, an acknowledgment
|
|
||||||
* in the product documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and must not be misrepresented
|
|
||||||
* as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
|
||||||
*
|
|
||||||
**********************************************************************************************/
|
|
||||||
|
|
||||||
#ifndef RLIGHTS_H
|
|
||||||
#define RLIGHTS_H
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// Defines and Macros
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
#define MAX_LIGHTS 4 // Max dynamic lights supported by shader
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// Types and Structures Definition
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Light data
|
|
||||||
typedef struct {
|
|
||||||
int type;
|
|
||||||
Vector3 position;
|
|
||||||
Vector3 target;
|
|
||||||
Color color;
|
|
||||||
bool enabled;
|
|
||||||
|
|
||||||
// Shader locations
|
|
||||||
int enabledLoc;
|
|
||||||
int typeLoc;
|
|
||||||
int posLoc;
|
|
||||||
int targetLoc;
|
|
||||||
int colorLoc;
|
|
||||||
} Light;
|
|
||||||
|
|
||||||
// Light type
|
|
||||||
typedef enum {
|
|
||||||
LIGHT_DIRECTIONAL,
|
|
||||||
LIGHT_POINT
|
|
||||||
} LightType;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" { // Prevents name mangling of functions
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// Module Functions Declaration
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
Light CreateLight(int type, Vector3 position, Vector3 target, Color color, Shader shader); // Create a light and get shader locations
|
|
||||||
void UpdateLightValues(Shader shader, Light light); // Send light properties to shader
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // RLIGHTS_H
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************************
|
|
||||||
*
|
|
||||||
* RLIGHTS IMPLEMENTATION
|
|
||||||
*
|
|
||||||
************************************************************************************/
|
|
||||||
|
|
||||||
#if defined(RLIGHTS_IMPLEMENTATION)
|
|
||||||
|
|
||||||
#include "raylib.h"
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// Defines and Macros
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// ...
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// Types and Structures Definition
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// ...
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// Global Variables Definition
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
static int lightsCount = 0; // Current amount of created lights
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// Module specific Functions Declaration
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// ...
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// Module Functions Definition
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Create a light and get shader locations
|
|
||||||
Light CreateLight(int type, Vector3 position, Vector3 target, Color color, Shader shader)
|
|
||||||
{
|
|
||||||
Light light = { 0 };
|
|
||||||
|
|
||||||
if (lightsCount < MAX_LIGHTS)
|
|
||||||
{
|
|
||||||
light.enabled = true;
|
|
||||||
light.type = type;
|
|
||||||
light.position = position;
|
|
||||||
light.target = target;
|
|
||||||
light.color = color;
|
|
||||||
|
|
||||||
// TODO: Below code doesn't look good to me,
|
|
||||||
// it assumes a specific shader naming and structure
|
|
||||||
// Probably this implementation could be improved
|
|
||||||
char enabledName[32] = "lights[x].enabled\0";
|
|
||||||
char typeName[32] = "lights[x].type\0";
|
|
||||||
char posName[32] = "lights[x].position\0";
|
|
||||||
char targetName[32] = "lights[x].target\0";
|
|
||||||
char colorName[32] = "lights[x].color\0";
|
|
||||||
|
|
||||||
// Set location name [x] depending on lights count
|
|
||||||
enabledName[7] = '0' + lightsCount;
|
|
||||||
typeName[7] = '0' + lightsCount;
|
|
||||||
posName[7] = '0' + lightsCount;
|
|
||||||
targetName[7] = '0' + lightsCount;
|
|
||||||
colorName[7] = '0' + lightsCount;
|
|
||||||
|
|
||||||
light.enabledLoc = GetShaderLocation(shader, enabledName);
|
|
||||||
light.typeLoc = GetShaderLocation(shader, typeName);
|
|
||||||
light.posLoc = GetShaderLocation(shader, posName);
|
|
||||||
light.targetLoc = GetShaderLocation(shader, targetName);
|
|
||||||
light.colorLoc = GetShaderLocation(shader, colorName);
|
|
||||||
|
|
||||||
UpdateLightValues(shader, light);
|
|
||||||
|
|
||||||
lightsCount++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return light;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send light properties to shader
|
|
||||||
// NOTE: Light shader locations should be available
|
|
||||||
void UpdateLightValues(Shader shader, Light light)
|
|
||||||
{
|
|
||||||
// Send to shader light enabled state and type
|
|
||||||
SetShaderValue(shader, light.enabledLoc, &light.enabled, SHADER_UNIFORM_INT);
|
|
||||||
SetShaderValue(shader, light.typeLoc, &light.type, SHADER_UNIFORM_INT);
|
|
||||||
|
|
||||||
// Send to shader light position values
|
|
||||||
float position[3] = { light.position.x, light.position.y, light.position.z };
|
|
||||||
SetShaderValue(shader, light.posLoc, position, SHADER_UNIFORM_VEC3);
|
|
||||||
|
|
||||||
// Send to shader light target position values
|
|
||||||
float target[3] = { light.target.x, light.target.y, light.target.z };
|
|
||||||
SetShaderValue(shader, light.targetLoc, target, SHADER_UNIFORM_VEC3);
|
|
||||||
|
|
||||||
// Send to shader light color values
|
|
||||||
float color[4] = { (float)light.color.r/(float)255, (float)light.color.g/(float)255,
|
|
||||||
(float)light.color.b/(float)255, (float)light.color.a/(float)255 };
|
|
||||||
SetShaderValue(shader, light.colorLoc, color, SHADER_UNIFORM_VEC4);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // RLIGHTS_IMPLEMENTATION
|
|
106
OTRGui/libs/raylib/.gitignore
vendored
@ -1,106 +0,0 @@
|
|||||||
# Ignore generated files
|
|
||||||
# ...
|
|
||||||
|
|
||||||
# Ignore VIM's backup generated files
|
|
||||||
*.swp
|
|
||||||
*.swo
|
|
||||||
*~
|
|
||||||
|
|
||||||
# Ignore thumbnails created by windows
|
|
||||||
Thumbs.db
|
|
||||||
|
|
||||||
# Ignore files build by Visual Studio
|
|
||||||
# *.obj --> Can be confused with 3d model!
|
|
||||||
*.pdb
|
|
||||||
*.aps
|
|
||||||
*.user
|
|
||||||
# *.vcproj
|
|
||||||
# *.vcxproj*
|
|
||||||
# *.sln
|
|
||||||
*.vspscc
|
|
||||||
*_i.c
|
|
||||||
*.i
|
|
||||||
*.icf
|
|
||||||
*_p.c
|
|
||||||
*.ncb
|
|
||||||
*.suo
|
|
||||||
*.tlb
|
|
||||||
*.tlh
|
|
||||||
*.bak
|
|
||||||
*.cache
|
|
||||||
*.ilk
|
|
||||||
*.log
|
|
||||||
.vs
|
|
||||||
|
|
||||||
[Bb]in
|
|
||||||
[Dd]ebug/
|
|
||||||
*.sbr
|
|
||||||
*.sdf
|
|
||||||
obj/
|
|
||||||
[R]elease/
|
|
||||||
_ReSharper*/
|
|
||||||
[Tt]est[Rr]esult*
|
|
||||||
ipch/
|
|
||||||
*.opensdf
|
|
||||||
*.db
|
|
||||||
*.opendb
|
|
||||||
packages/
|
|
||||||
!examples/models/resources/models/obj/
|
|
||||||
|
|
||||||
# Ignore compiled binaries
|
|
||||||
*.o
|
|
||||||
*.exe
|
|
||||||
*.a
|
|
||||||
*.bc
|
|
||||||
*.so
|
|
||||||
*.so.*
|
|
||||||
|
|
||||||
# Ignore wasm data in examples/
|
|
||||||
examples/**/*.wasm
|
|
||||||
examples/**/*.data
|
|
||||||
examples/**/*.js
|
|
||||||
examples/**/*.html
|
|
||||||
|
|
||||||
# Ignore files build by xcode
|
|
||||||
*.mode*v*
|
|
||||||
*.pbxuser
|
|
||||||
*.xcbkptlist
|
|
||||||
*.xcscheme
|
|
||||||
*.xcworkspacedata
|
|
||||||
*.xcuserstate
|
|
||||||
*.xccheckout
|
|
||||||
xcschememanagement.plist
|
|
||||||
.DS_Store
|
|
||||||
._.*
|
|
||||||
xcuserdata/
|
|
||||||
DerivedData/
|
|
||||||
|
|
||||||
# Jetbrains project
|
|
||||||
.idea/
|
|
||||||
cmake-build-*/
|
|
||||||
|
|
||||||
# CMake stuff
|
|
||||||
CMakeCache.txt
|
|
||||||
CMakeFiles
|
|
||||||
CMakeScripts
|
|
||||||
Testing
|
|
||||||
cmake_install.cmake
|
|
||||||
install_manifest.txt
|
|
||||||
compile_commands.json
|
|
||||||
CTestTestfile.cmake
|
|
||||||
build
|
|
||||||
|
|
||||||
# Ignore GNU global tags
|
|
||||||
GPATH
|
|
||||||
GRTAGS
|
|
||||||
GTAGS
|
|
||||||
|
|
||||||
# Zig programming language
|
|
||||||
zig-cache/
|
|
||||||
zig-out/
|
|
||||||
build/
|
|
||||||
build-*/
|
|
||||||
docgen_tmp/
|
|
||||||
|
|
||||||
# Parser stuff
|
|
||||||
parser/raylib_parser
|
|
@ -1,131 +0,0 @@
|
|||||||
# raylib bindings and wrappers
|
|
||||||
|
|
||||||
Some people ported raylib to other languages in form of bindings or wrappers to the library. Here is a list with all the ports available. Feel free to send a PR if you know of any binding/wrapper not in this list.
|
|
||||||
|
|
||||||
### Language Bindings
|
|
||||||
|
|
||||||
| name | raylib version | language | license | repo |
|
|
||||||
|:------------------:|:---------------:|:---------:|:----------:|-----------------------------------------------------------|
|
|
||||||
| raylib | **4.0** | [C/C++](https://en.wikipedia.org/wiki/C_(programming_language)) | Zlib | https://github.com/raysan5/raylib |
|
|
||||||
| Raylib-cs | **4.0** | [C#](https://en.wikipedia.org/wiki/C_Sharp_(programming_language)) | Zlib | https://github.com/ChrisDill/Raylib-cs |
|
|
||||||
| Raylib-CsLo | **4.0** | [C#](https://en.wikipedia.org/wiki/C_Sharp_(programming_language)) | MPL-2.0 | https://github.com/NotNotTech/Raylib-CsLo |
|
|
||||||
| raylib-boo | 3.7 | [Boo](http://boo-language.github.io/)| MIT | https://github.com/Rabios/raylib-boo |
|
|
||||||
| bindbc-raylib3 | **4.0** | [D](https://dlang.org/) | BSL-1.0 | https://github.com/o3o/bindbc-raylib3 |
|
|
||||||
| dray | **4.0** | [D](https://dlang.org/) | Apache-2.0 | https://github.com/xdrie/dray |
|
|
||||||
| raylib-d | **4.0** | [D](https://dlang.org/) | Zlib | https://github.com/schveiguy/raylib-d |
|
|
||||||
| raylib-go | **4.0** | [Go](https://golang.org/) | Zlib | https://github.com/gen2brain/raylib-go |
|
|
||||||
| raylib-guile | auto | [Guile](https://www.gnu.org/software/guile/) | Zlib | https://github.com/petelliott/raylib-guile |
|
|
||||||
| raylib-rs | 3.5 | [Rust](https://www.rust-lang.org/) | Zlib | https://github.com/deltaphc/raylib-rs |
|
|
||||||
| raylib-lua | **4.0** | [Lua](http://www.lua.org/) | ISC | https://github.com/TSnake41/raylib-lua |
|
|
||||||
| raylua | **4.0** | [Lua](http://www.lua.org/) | MIT | https://github.com/Rabios/raylua |
|
|
||||||
| nelua-raylib | 4.0 | [nelua](https://nelua.io/) | MIT | https://github.com/AKDev21/nelua-raylib |
|
|
||||||
| NimraylibNow! | 4.0 | [Nim](https://nim-lang.org/) | MIT | https://github.com/greenfork/nimraylib_now |
|
|
||||||
| raylib-Forever | auto | [Nim](https://nim-lang.org/) | ? | https://github.com/Guevara-chan/Raylib-Forever |
|
|
||||||
| Ray4Laz | **4.0** | [Pascal](https://en.wikipedia.org/wiki/Pascal_(programming_language))| Zlib | https://github.com/GuvaCode/Ray4Laz |
|
|
||||||
| pyraylib | 3.7 | [Python](https://www.python.org/) | Zlib | https://github.com/Ho011/pyraylib |
|
|
||||||
| raylib-python-cffi | **4.0** | [Python](https://www.python.org/) | EPL-2.0 | https://github.com/electronstudio/raylib-python-cffi |
|
|
||||||
| jaylib | **4.0** | [Java](https://en.wikipedia.org/wiki/Java_(programming_language)) | GPLv3 | https://github.com/electronstudio/jaylib/ |
|
|
||||||
| raylib-j | **4.0** | [Java](https://en.wikipedia.org/wiki/Java_(programming_language)) | Zlib | https://github.com/CreedVI/Raylib-J |
|
|
||||||
| node-raylib | 3.5 | [Node.js](https://nodejs.org/en/) | Zlib | https://github.com/RobLoach/node-raylib |
|
|
||||||
| raylib-php | 3.5 | [PHP](https://en.wikipedia.org/wiki/PHP) | Zlib | https://github.com/joseph-montanez/raylib-php |
|
|
||||||
| raylib-phpcpp | 3.5 | [PHP](https://en.wikipedia.org/wiki/PHP) | Zlib | https://github.com/oraoto/raylib-phpcpp |
|
|
||||||
| raylib-factor | 3.5 | [Factor](https://factorcode.org/) | MIT | https://github.com/ArnautDaniel/raylib-factor |
|
|
||||||
| gforth-raylib | 3.5 | [Gforth](https://gforth.org/) | MIT | https://github.com/ArnautDaniel/gforth-raylib |
|
|
||||||
| hxRaylib | 4.0 | [Haxe](https://haxe.org/) | Zlib | https://github.com/ForeignSasquatch/hxRaylib |
|
|
||||||
| raylib-wren | **4.0** | [Wren](http://wren.io/) | ISC | https://github.com/TSnake41/raylib-wren |
|
|
||||||
| raylib_odin_bindings | 4.0-dev | [Odin](https://odin-lang.org/) | MIT | https://github.com/Deathbat2190/raylib_odin_bindings |
|
|
||||||
| raylib-odin | **4.0** | [Odin](https://odin-lang.org/) | BSD-3Clause | https://github.com/odin-lang/Odin/tree/master/vendor/raylib |
|
|
||||||
| raylib.v | **4.0** | [V](https://vlang.io/) | Zlib | https://github.com/irishgreencitrus/raylib.v |
|
|
||||||
| raylib-ocaml | **4.0** | [OCaml](https://ocaml.org/) | MIT | https://github.com/tjammer/raylib-ocaml |
|
|
||||||
| raylib-swift | **4.0** | [Swift](https://swift.org/) | MIT | https://github.com/STREGAsGate/Raylib |
|
|
||||||
| hb-raylib | 3.5 | [Harbour](https://harbour.github.io) | MIT | https://github.com/MarcosLeonardoMendezGerencir/hb-raylib |
|
|
||||||
| Relib | 3.5 | [ReCT](https://github.com/RedCubeDev-ByteSpace/ReCT) | ? | https://github.com/RedCubeDev-ByteSpace/Relib |
|
|
||||||
| rayex | 3.7 | [elixir](https://elixir-lang.org/) | Apache-2.0 | https://github.com/shiryel/rayex |
|
|
||||||
| kaylib | 3.7 | [Kotlin/native](https://kotlinlang.org) | ? | https://github.com/electronstudio/kaylib |
|
|
||||||
| dlang_raylib | 3.7 | [D](https://dlang.org) | ? |https://github.com/rc-05/dlang_raylib |
|
|
||||||
| raylib-freebasic | **4.0** | [FreeBASIC](https://www.freebasic.net/) | MIT | https://github.com/WIITD/raylib-freebasic |
|
|
||||||
| raylib-cr | **4.0** | [Crystal](https://crystal-lang.org/) | Apache-2.0 | https://github.com/sol-vin/raylib-cr |
|
|
||||||
| dart-raylib | **4.0** | [Dart](https://dart.dev/) | MIT | https://gitlab.com/wolfenrain/dart-raylib |
|
|
||||||
| raylib-scopes | auto | [Scopes](http://scopes.rocks) | MIT | https://github.com/salotz/raylib-scopes |
|
|
||||||
| raylib-smallBasic | 4.1-dev | [SmallBASIC](https://github.com/smallbasic/SmallBASIC) | GPLv3 | https://github.com/smallbasic/smallbasic.plugins/tree/master/raylib |
|
|
||||||
|
|
||||||
### Utility Wrapers
|
|
||||||
These are utility wrappers for specific languages, they are not required to use raylib in the language but may adapt the raylib API to be more inline with the language's pardigm.
|
|
||||||
| name | raylib version | language | license | repo |
|
|
||||||
|:------------------:|:-------------: | :--------:|:-------:|:-------------------------------------------------------------|
|
|
||||||
| raylib-cpp | **4.0** | [C++](https://en.wikipedia.org/wiki/C%2B%2B) | Zlib | https://github.com/robloach/raylib-cpp |
|
|
||||||
|
|
||||||
### Older or Unmaintained Language Bindings
|
|
||||||
These are older raylib bindings that are more than 2 versions old or have not been maintained.
|
|
||||||
| name | raylib version | language | repo |
|
|
||||||
|:------------------:|:-------------: | :--------:|----------------------------------------------------------------------|
|
|
||||||
| raylib-cppsharp | 2.5 | [C#](https://en.wikipedia.org/wiki/C_Sharp_(programming_language)) | https://github.com/phxvyper/raylib-cppsharp |
|
|
||||||
| RaylibFS | 2.5 | [F#](https://fsharp.org/) | https://github.com/dallinbeutler/RaylibFS |
|
|
||||||
| raylib_d | 2.5 | [D](https://dlang.org/) | https://github.com/Sepheus/raylib_d |
|
|
||||||
| bindbc-raylib | 3.0 | [D](https://dlang.org/) | https://github.com/o3o/bindbc-raylib |
|
|
||||||
| go-raylib | 3.5 | [Go](https://golang.org/) | https://github.com/chunqian/go-raylib |
|
|
||||||
| raylib-goplus | 2.6-dev | [Go](https://golang.org/) | https://github.com/Lachee/raylib-goplus |
|
|
||||||
| ray-go | 2.6-dev | [Go](https://golang.org/) | https://github.com/hecate-tech/ray-go |
|
|
||||||
| raylib-luamore | 3.0 | [Lua](http://www.lua.org/) | https://github.com/HDPLocust/raylib-luamore |
|
|
||||||
| LuaJIT-Raylib | 2.6 | [Lua](http://www.lua.org/) | https://github.com/Bambofy/LuaJIT-Raylib |
|
|
||||||
| raylib-lua-sol | 2.5 | [Lua](http://www.lua.org/) | https://github.com/RobLoach/raylib-lua-sol |
|
|
||||||
| raylib-lua-ffi | 2.0 | [Lua](http://www.lua.org/) | https://github.com/raysan5/raylib/issues/693 |
|
|
||||||
| raylib-lua | 1.7 | [Lua](http://www.lua.org/) | https://github.com/raysan5/raylib-lua |
|
|
||||||
| raylib-nelua | 3.0 | [Nelua](https://nelua.io/) | https://github.com/Andre-LA/raylib-nelua |
|
|
||||||
| raylib-nim | 2.0 | [Nim](https://nim-lang.org/) | https://github.com/Skrylar/raylib-nim |
|
|
||||||
| raylib-Nim | 1.7 | [Nim](https://nim-lang.org/) | https://gitlab.com/define-private-public/raylib-Nim |
|
|
||||||
| nim-raylib | 3.1-dev | [Nim](https://nim-lang.org/) | https://github.com/tomc1998/nim-raylib |
|
|
||||||
| raylib-haskell | 2.0 | [Haskell](https://www.haskell.org/) | https://github.com/DevJac/raylib-haskell |
|
|
||||||
| raylib-cr | 2.5-dev | [Crystal](https://crystal-lang.org/) | https://github.com/AregevDev/raylib-cr |
|
|
||||||
| raylib.cr | 2.0 | [Crystal](https://crystal-lang.org/) | https://github.com/sam0x17/raylib.cr |
|
|
||||||
| cray | 1.8 | [Crystal](https://crystal-lang.org/) | https://gitlab.com/Zatherz/cray |
|
|
||||||
| raylib-pas | 3.0 | [Pascal](https://en.wikipedia.org/wiki/Pascal_(programming_language)) | https://github.com/tazdij/raylib-pas |
|
|
||||||
| raylib-pascal | 2.0 | [Pascal](https://en.wikipedia.org/wiki/Pascal_(programming_language)) | https://github.com/drezgames/raylib-pascal |
|
|
||||||
| Graphics-Raylib | 1.4 | [Perl](https://www.perl.org/) | https://github.com/athreef/Graphics-Raylib |
|
|
||||||
| raylib-ruby | 2.6 | [Ruby](https://www.ruby-lang.org/en/) | https://github.com/a0/raylib-ruby |
|
|
||||||
| raylib-ruby-ffi | 2.0 | [Ruby](https://www.ruby-lang.org/en/) | https://github.com/D3nX/raylib-ruby-ffi |
|
|
||||||
| raylib-mruby | 2.5-dev | [mruby](https://github.com/mruby/mruby) | https://github.com/lihaochen910/raylib-mruby |
|
|
||||||
| raylib-py-ctbg | 2.6 | [Python](https://www.python.org/) | https://github.com/overdev/raylib-py-ctbg |
|
|
||||||
| raylib-py | 2.0 | [Python](https://www.python.org/) | https://github.com/overdev/raylib-py |
|
|
||||||
| raylib-java | 2.0 | [Java](https://en.wikipedia.org/wiki/Java_(programming_language)) | https://github.com/XoanaIO/raylib-java |
|
|
||||||
| clj-raylib | 3.0 | [Clojure](https://clojure.org/) | https://github.com/lsevero/clj-raylib |
|
|
||||||
| QuickJS-raylib | 3.0 | [QuickJS](https://bellard.org/quickjs/) | https://github.com/sntg-p/QuickJS-raylib |
|
|
||||||
| raylib-duktape | 2.6 | [JavaScript (Duktape)](https://en.wikipedia.org/wiki/JavaScript) | https://github.com/RobLoach/raylib-duktape |
|
|
||||||
| raylib-v7 | 3.5 | [JavaScript (v7)](https://en.wikipedia.org/wiki/JavaScript) | https://github.com/Rabios/raylib-v7 |
|
|
||||||
| raylib-chaiscript | 2.6 | [ChaiScript](http://chaiscript.com/) | https://github.com/RobLoach/raylib-chaiscript |
|
|
||||||
| raylib-squirrel | 2.5 | [Squirrel](http://www.squirrel-lang.org/) | https://github.com/RobLoach/raylib-squirrel |
|
|
||||||
| racket-raylib-2d | 2.5 | [Racket](https://racket-lang.org/) | https://github.com/arvyy/racket-raylib-2d |
|
|
||||||
| raylib-php-ffi | 2.4-dev | [PHP](https://en.wikipedia.org/wiki/PHP) | https://github.com/oraoto/raylib-php-ffi |
|
|
||||||
| raylib-haxe | 2.4 | [Haxe](https://haxe.org/) | https://github.com/ibilon/raylib-haxe |
|
|
||||||
| ringraylib | 2.6 | [Ring](http://ring-lang.sourceforge.net/) | https://github.com/ringpackages/ringraylib |
|
|
||||||
| cl-raylib | 3.0 | [Common Lisp](https://common-lisp.net/) | https://github.com/longlene/cl-raylib |
|
|
||||||
| raylib-scm | 2.5 | [Chicken Scheme](https://www.call-cc.org/) | https://github.com/yashrk/raylib-scm |
|
|
||||||
| raylib-chibi | 2.5 | [Chibi-Scheme](https://github.com/ashinn/chibi-scheme) | https://github.com/VincentToups/raylib-chibi |
|
|
||||||
| raylib-gambit-scheme | 3.1-dev | [Gambit Scheme](https://github.com/gambit/gambit) | https://github.com/georgjz/raylib-gambit-scheme |
|
|
||||||
| Euraylib | 3.0 | [Euphoria](https://openeuphoria.org/) | https://github.com/gAndy50/Euraylib |
|
|
||||||
| raylib-odin | 3.0 | [Odin](https://odin-lang.org/) | https://github.com/kevinw/raylib-odin |
|
|
||||||
| vraylib | 3.5 | [V](https://vlang.io/) | https://github.com/waotzi/vraylib |
|
|
||||||
| raylib-zig | 3.0 | [Zig](https://ziglang.org/) | https://github.com/Not-Nik/raylib-zig |
|
|
||||||
| raylib-jai | 3.1-dev | [Jai](https://github.com/BSVino/JaiPrimer/blob/master/JaiPrimer.md) | https://github.com/kevinw/raylib-jai |
|
|
||||||
| ray.zig | 2.5 | [Zig](https://ziglang.org/) | https://github.com/BitPuffin/zig-raylib-experiments |
|
|
||||||
| raylib-Ada | 3.0 | [Ada](https://www.adacore.com/about-ada) | https://github.com/mimo/raylib-Ada |
|
|
||||||
| jaylib | 3.0 | [Janet](https://janet-lang.org/) | https://github.com/janet-lang/jaylib |
|
|
||||||
| raykit | ? | [Kit](https://www.kitlang.org/) | https://github.com/Gamerfiend/raykit |
|
|
||||||
| ray.mod | 3.0 | [BlitzMax](https://blitzmax.org/) | https://github.com/bmx-ng/ray.mod |
|
|
||||||
| raylib-mosaic | 3.0 | [Mosaic](https://github.com/sal55/langs/tree/master/Mosaic) | https://github.com/pluckyporcupine/raylib-mosaic |
|
|
||||||
| raylib-xdpw | 2.6 | [XD Pascal](https://github.com/vtereshkov/xdpw) | https://github.com/vtereshkov/raylib-xdpw |
|
|
||||||
| raylib-carp | 3.0 | [Carp](https://github.com/carp-lang/Carp) | https://github.com/pluckyporcupine/raylib-carp |
|
|
||||||
| raylib-fb | 3.0 | [FreeBasic](https://www.freebasic.net/) | https://github.com/IchMagBier/raylib-fb |
|
|
||||||
| raylib-purebasic | 3.0 | [PureBasic](https://www.purebasic.com/) | https://github.com/D-a-n-i-l-o/raylib-purebasic |
|
|
||||||
| raylib-ats2 | 3.0 | [ATS2](http://www.ats-lang.org/) | https://github.com/mephistopheles-8/raylib-ats2 |
|
|
||||||
| raylib-beef | 3.0 | [Beef](https://www.beeflang.org/) | https://github.com/M0n7y5/raylib-beef |
|
|
||||||
| raylib-never | 3.0 | [Never](https://github.com/never-lang/never) | https://github.com/never-lang/raylib-never |
|
|
||||||
| raylib.cbl | 2.0 | [COBOL](https://en.wikipedia.org/wiki/COBOL) | *[code examples](https://github.com/Martinfx/Cobol/tree/master/OpenCobol/Games/raylib)* |
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Missing some language or wrapper? Feel free to create a new one! :)
|
|
||||||
|
|
||||||
Usually, raylib bindings follow the convention: `raylib-{language}`
|
|
||||||
|
|
||||||
Let me know if you're writing a new binding for raylib, I will list it here!
|
|
@ -1,33 +0,0 @@
|
|||||||
cmake_minimum_required(VERSION 3.0)
|
|
||||||
project(raylib)
|
|
||||||
|
|
||||||
# Directory for easier includes
|
|
||||||
# Anywhere you see include(...) you can check <root>/cmake for that file
|
|
||||||
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
|
||||||
|
|
||||||
# RAYLIB_IS_MAIN determines whether the project is being used from root
|
|
||||||
# or if it is added as a dependency (through add_subdirectory for example).
|
|
||||||
if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
||||||
set(RAYLIB_IS_MAIN TRUE)
|
|
||||||
else()
|
|
||||||
set(RAYLIB_IS_MAIN FALSE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Sets compiler flags and language standard
|
|
||||||
include(CompilerFlags)
|
|
||||||
|
|
||||||
# Registers build options that are exposed to cmake
|
|
||||||
include(CMakeOptions.txt)
|
|
||||||
|
|
||||||
# Enforces a few environment and compiler configurations
|
|
||||||
include(BuildOptions)
|
|
||||||
|
|
||||||
# Main sources directory (the second parameter sets the output directory name to raylib)
|
|
||||||
add_subdirectory(src raylib)
|
|
||||||
|
|
||||||
if (${BUILD_EXAMPLES})
|
|
||||||
MESSAGE(STATUS "Building examples is enabled")
|
|
||||||
add_subdirectory(examples)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
enable_testing()
|
|
@ -1,95 +0,0 @@
|
|||||||
### Config options ###
|
|
||||||
include(CMakeDependentOption)
|
|
||||||
include(EnumOption)
|
|
||||||
|
|
||||||
enum_option(PLATFORM "Desktop;Web;Android;Raspberry Pi;DRM" "Platform to build for.")
|
|
||||||
|
|
||||||
enum_option(OPENGL_VERSION "OFF;4.3;3.3;2.1;1.1;ES 2.0" "Force a specific OpenGL Version?")
|
|
||||||
|
|
||||||
# Configuration options
|
|
||||||
option(BUILD_EXAMPLES "Build the examples." ${RAYLIB_IS_MAIN})
|
|
||||||
option(CUSTOMIZE_BUILD "Show options for customizing your Raylib library build." OFF)
|
|
||||||
option(ENABLE_ASAN "Enable AddressSanitizer (ASAN) for debugging (degrades performance)" OFF)
|
|
||||||
option(ENABLE_UBSAN "Enable UndefinedBehaviorSanitizer (UBSan) for debugging" OFF)
|
|
||||||
option(ENABLE_MSAN "Enable MemorySanitizer (MSan) for debugging (not recommended to run with ASAN)" OFF)
|
|
||||||
|
|
||||||
# Shared library is always PIC. Static library should be PIC too if linked into a shared library
|
|
||||||
option(WITH_PIC "Compile static library as position-independent code" OFF)
|
|
||||||
option(BUILD_SHARED_LIBS "Build raylib as a shared library" OFF)
|
|
||||||
option(MACOS_FATLIB "Build fat library for both i386 and x86_64 on macOS" OFF)
|
|
||||||
cmake_dependent_option(USE_AUDIO "Build raylib with audio module" ON CUSTOMIZE_BUILD ON)
|
|
||||||
|
|
||||||
enum_option(USE_EXTERNAL_GLFW "OFF;IF_POSSIBLE;ON" "Link raylib against system GLFW instead of embedded one")
|
|
||||||
if(UNIX AND NOT APPLE)
|
|
||||||
option(USE_WAYLAND "Use Wayland for window creation" OFF)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(INCLUDE_EVERYTHING "Include everything disabled by default (for CI usage" OFF)
|
|
||||||
set(OFF ${INCLUDE_EVERYTHING} CACHE INTERNAL "Replace any OFF by default with \${OFF} to have it covered by this option")
|
|
||||||
|
|
||||||
# raylib modules included
|
|
||||||
cmake_dependent_option(SUPPORT_MODULE_RSHAPES "Include module: rshapes" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_MODULE_RTEXTURES "Include module: rtextures" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_MODULE_RTEXT "Include module: rtext" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_MODULE_RMODELS "Include module: rmodels" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_MODULE_RAUDIO "Include module: raudio" ON CUSTOMIZE_BUILD ON)
|
|
||||||
|
|
||||||
# rcore.c
|
|
||||||
cmake_dependent_option(SUPPORT_CAMERA_SYSTEM "Provide camera module (rcamera.h) with multiple predefined cameras: free, 1st/3rd person, orbital" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_GESTURES_SYSTEM "Gestures module is included (rgestures.h) to support gestures detection: tap, hold, swipe, drag" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_MOUSE_GESTURES "Mouse gestures are directly mapped like touches and processed by gestures system" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_SSH_KEYBOARD_RPI "Reconfigure standard input to receive key inputs, works with SSH connection" OFF CUSTOMIZE_BUILD OFF)
|
|
||||||
cmake_dependent_option(SUPPORT_DEFAULT_FONT "Default font is loaded on window initialization to be available for the user to render simple text. If enabled, uses external module functions to load default raylib font (module: text)" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_SCREEN_CAPTURE "Allow automatic screen capture of current screen pressing F12, defined in KeyCallback()" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_GIF_RECORDING "Allow automatic gif recording of current screen pressing CTRL+F12, defined in KeyCallback()" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_BUSY_WAIT_LOOP "Use busy wait loop for timing sync instead of a high-resolution timer" OFF CUSTOMIZE_BUILD OFF)
|
|
||||||
cmake_dependent_option(SUPPORT_EVENTS_WAITING "Wait for events passively (sleeping while no events) instead of polling them actively every frame" OFF CUSTOMIZE_BUILD OFF)
|
|
||||||
cmake_dependent_option(SUPPORT_WINMM_HIGHRES_TIMER "Setting a higher resolution can improve the accuracy of time-out intervals in wait functions" OFF CUSTOMIZE_BUILD OFF)
|
|
||||||
cmake_dependent_option(SUPPORT_DATA_STORAGE "Support for persistent data storage" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_COMPRESSION_API "Support for compression API" ON CUSTOMIZE_BUILD ON)
|
|
||||||
|
|
||||||
# rshapes.c
|
|
||||||
cmake_dependent_option(SUPPORT_QUADS_DRAW_MODE "Use QUADS instead of TRIANGLES for drawing when possible. Some lines-based shapes could still use lines" ON CUSTOMIZE_BUILD ON)
|
|
||||||
|
|
||||||
# rtextures.c
|
|
||||||
cmake_dependent_option(SUPPORT_IMAGE_EXPORT "Support image exporting to file" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_IMAGE_GENERATION "Support procedural image generation functionality (gradient, spot, perlin-noise, cellular)" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_IMAGE_MANIPULATION "Support multiple image editing functions to scale, adjust colors, flip, draw on images, crop... If not defined only three image editing functions supported: ImageFormat(), ImageAlphaMask(), ImageToPOT()" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_PNG "Support loading PNG as textures" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_DDS "Support loading DDS as textures" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_HDR "Support loading HDR as textures" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_KTX "Support loading KTX as textures" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_ASTC "Support loading ASTC as textures" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_BMP "Support loading BMP as textures" ${OFF} CUSTOMIZE_BUILD OFF)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_TGA "Support loading TGA as textures" ${OFF} CUSTOMIZE_BUILD OFF)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_JPG "Support loading JPG as textures" ${OFF} CUSTOMIZE_BUILD OFF)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_GIF "Support loading GIF as textures" ${OFF} CUSTOMIZE_BUILD OFF)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_QOI "Support loading QOI as textures" ${OFF} CUSTOMIZE_BUILD OFF)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_PSD "Support loading PSD as textures" ${OFF} CUSTOMIZE_BUILD OFF)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_PKM "Support loading PKM as textures" ${OFF} CUSTOMIZE_BUILD OFF)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_PVR "Support loading PVR as textures" ${OFF} CUSTOMIZE_BUILD OFF)
|
|
||||||
|
|
||||||
# rtext.c
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_FNT "Support loading fonts in FNT format" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_TTF "Support loading font in TTF/OTF format" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_TEXT_MANIPULATION "Support text manipulation functions" ON CUSTOMIZE_BUILD ON)
|
|
||||||
|
|
||||||
# rmodels.c
|
|
||||||
cmake_dependent_option(SUPPORT_MESH_GENERATION "Support procedural mesh generation functions, uses external par_shapes.h library. NOTE: Some generated meshes DO NOT include generated texture coordinates" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_OBJ "Support loading OBJ file format" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_MTL "Support loading MTL file format" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_IQM "Support loading IQM file format" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_GLTF "Support loading GLTF file format" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_VOX "Support loading VOX file format" ON CUSTOMIZE_BUILD ON)
|
|
||||||
|
|
||||||
# raudio.c
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_WAV "Support loading WAV for sound" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_OGG "Support loading OGG for sound" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_XM "Support loading XM for sound" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_MOD "Support loading MOD for sound" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_MP3 "Support loading MP3 for sound" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_FILEFORMAT_FLAC "Support loading FLAC for sound" ${OFF} CUSTOMIZE_BUILD OFF)
|
|
||||||
|
|
||||||
# utils.c
|
|
||||||
cmake_dependent_option(SUPPORT_STANDARD_FILEIO "Support standard file io library (stdio.h)" ON CUSTOMIZE_BUILD ON)
|
|
||||||
cmake_dependent_option(SUPPORT_TRACELOG "Show TraceLog() output messages. NOTE: By default LOG_DEBUG traces not shown" ON CUSTOMIZE_BUILD ON)
|
|
@ -1,76 +0,0 @@
|
|||||||
## Contributing to raylib
|
|
||||||
|
|
||||||
Hello contributors! Welcome to raylib!
|
|
||||||
|
|
||||||
Do you enjoy raylib and want to contribute? Nice! You can help with the following points:
|
|
||||||
|
|
||||||
- `C programming` - Can you write/review/test/improve the code?
|
|
||||||
- `Documentation/Tutorials/Example` - Can you write some tutorial/example?
|
|
||||||
- `Porting to other platforms` - Can you port/adapt/compile raylib on other systems?
|
|
||||||
- `Web Development` - Can you help [with the website](https://github.com/raysan5/raylib.com)?
|
|
||||||
- `Testing` - Can you find some bugs in raylib?
|
|
||||||
|
|
||||||
This document contains a set of guidelines to contribute to the project. These are mostly guidelines, not rules.
|
|
||||||
Use your best judgement, and feel free to propose changes to this document in a pull request.
|
|
||||||
|
|
||||||
### raylib philosophy
|
|
||||||
|
|
||||||
- raylib is a tool to **ENJOY** videogames programming, every function in raylib is designed as a mini-tutorial on itself.
|
|
||||||
- raylib is **SIMPLE** and **EASY-TO-USE**, I tried to keep it compact with a small set of functions, if a function is too complex, better not including it.
|
|
||||||
- raylib is open source and free; educators and institutions can use this tool to **TEACH** videogames programming completely for free.
|
|
||||||
- raylib is collaborative; contribution of tutorials / code examples / bug fixes / code comments are highly appreciated.
|
|
||||||
- raylib's license (and its external libs respective licenses) allow using raylib on commercial projects.
|
|
||||||
|
|
||||||
### Some interesting reads to start with
|
|
||||||
|
|
||||||
- [raylib history](HISTORY.md)
|
|
||||||
- [raylib architecture](https://github.com/raysan5/raylib/wiki/raylib-architecture)
|
|
||||||
- [raylib license](LICENSE)
|
|
||||||
- [raylib roadmap](ROADMAP.md)
|
|
||||||
|
|
||||||
[raylib Wiki](https://github.com/raysan5/raylib/wiki) contains some information about the library and is open to anyone for edit.
|
|
||||||
Feel free to review it if required, just take care not to break something.
|
|
||||||
|
|
||||||
### raylib C coding conventions
|
|
||||||
|
|
||||||
Despite being written in C, raylib does not follow the standard Hungarian notation for C,
|
|
||||||
it [follows Pascal-case/camel-case notation](https://github.com/raysan5/raylib/wiki/raylib-coding-conventions),
|
|
||||||
more common on C# language. All code formatting decisions have been carefully taken
|
|
||||||
to make it easier for students/users to read, write and understand code.
|
|
||||||
|
|
||||||
Source code is extensively commented for that purpose, raylib primary learning method is:
|
|
||||||
|
|
||||||
> `Learn by reading code and examples`
|
|
||||||
|
|
||||||
For detailed information on building raylib and examples, please check [raylib Wiki](https://github.com/raysan5/raylib/wiki).
|
|
||||||
|
|
||||||
### Opening new Issues
|
|
||||||
|
|
||||||
To open new issue for raylib (bug, enhancement, discussion...), just try to follow these rules:
|
|
||||||
|
|
||||||
- Make sure the issue has not already been reported before by searching on GitHub under Issues.
|
|
||||||
- If you're unable to find an open issue addressing the problem, open a new one. Be sure to include a
|
|
||||||
title and clear description, as much relevant information as possible, and a code sample demonstrating the unexpected behavior.
|
|
||||||
- If applies, attach some screenshot of the issue and a .zip file with the code sample and required resources.
|
|
||||||
- On issue description, add a brackets tag about the raylib module that relates to this issue.
|
|
||||||
If don't know which module, just report the issue, I will review it.
|
|
||||||
- You can check other issues to see how is being done!
|
|
||||||
|
|
||||||
### Sending a Pull-Request
|
|
||||||
|
|
||||||
- Make sure the PR description clearly describes the problem and solution. Include the relevant issue number if applicable.
|
|
||||||
- Don't send big pull requests (lots of changelists), they are difficult to review. It's better to send small pull requests, one at a time.
|
|
||||||
- Verify that changes don't break the build (at least on Windows platform). As many platforms where you can test it, the better, but don't worry
|
|
||||||
if you cannot test all the platforms.
|
|
||||||
|
|
||||||
### Contact information
|
|
||||||
|
|
||||||
If you have any doubt, don't hesitate to [contact me](mailto:ray@raylib.com)!.
|
|
||||||
You can write me a direct mail but you can also contact me on the following networks:
|
|
||||||
|
|
||||||
- [raylib Discord](https://discord.gg/raylib) - A direct communication channel for project discussions.
|
|
||||||
- [raylib twitter](https://twitter.com/raysan5) - My personal twitter account, I usually post about raylib, you can send me PMs.
|
|
||||||
- [raylib reddit](https://www.reddit.com/r/raylib/) - A good place for discussions or to ask for help.
|
|
||||||
- [raylib web](http://www.raylib.com/) - On top-right corner there is a bunch of networks where you can find me.
|
|
||||||
|
|
||||||
Thank you very much for your time! :)
|
|
@ -1,63 +0,0 @@
|
|||||||
### WARNING: This file is unmaintained! This list of contributors is uncomplete!
|
|
||||||
|
|
||||||
### Check CHANGELOG for some of the contributors details or just the official contributors list of the repo
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Here is a list of raylib contributors, these people have invested part of their time
|
|
||||||
contributing (in some way or another) to make the raylib project better. Huge thanks to all of them!
|
|
||||||
|
|
||||||
- [Zopokx](https://github.com/Zopokx) for testing the web.
|
|
||||||
- [Elendow](http://www.elendow.com) for testing and helping on web development.
|
|
||||||
- Victor Dual for implementing and testing 3D shapes functions.
|
|
||||||
- Marc Palau for implementing and testing 3D shapes functions and contribute on camera and gestures modules.
|
|
||||||
- Kevin Gato for improving texture internal formats support and helping on raygui development.
|
|
||||||
- Daniel Nicolas for improving texture internal formats support and helping on raygui development.
|
|
||||||
- Marc Agüera for testing and using raylib on a real product ([Koala Seasons](http://www.koalaseasons.com))
|
|
||||||
- Daniel Moreno for testing and using raylib on a real product ([Koala Seasons](http://www.koalaseasons.com))
|
|
||||||
- Daniel Gomez for testing and using raylib on a real product ([Koala Seasons](http://www.koalaseasons.com))
|
|
||||||
- [Sergio Martinez](https://github.com/anidealgift) for helping on raygui development and tools development (raygui_styler).
|
|
||||||
- [Victor Fisac](https://github.com/victorfisac) for developing physics raylib module (physac) and implementing PBR materials and lighting systems... among multiple other improvements and multiple tools and games.
|
|
||||||
- Albert Martos for helping on raygui and porting examples and game-templates to Android and HTML5.
|
|
||||||
- Ian Eito for helping on raygui and porting examples and game-templates to Android and HTML5.
|
|
||||||
- [procedural](https://github.com/procedural) for testing raylib on Linux, correcting some bugs and adding several mouse functions.
|
|
||||||
- [Chris Hemingway](https://github.com/cHemingway) for improving raylib on OSX build system.
|
|
||||||
- [Emanuele Petriglia](https://github.com/LelixSuper) for working on multiple GNU/Linux improvements and developing [TicTacToe](https://github.com/LelixSuper/TicTacToe) raylib game.
|
|
||||||
- [Joshua Reisenauer](https://github.com/kd7tck) for adding audio modules support (XM, MOD) and reviewing audio system.
|
|
||||||
- [Marcelo Paez](https://github.com/paezao) for helping on OSX High DPI display issue.
|
|
||||||
- [Ghassan Al-Mashareqa](https://github.com/ghassanpl) for an amazing contribution to raylib Lua module.
|
|
||||||
- [Teodor Stoenescu](https://github.com/teodor-stoenescu) for improvements on OBJ object loading.
|
|
||||||
- [RDR8](https://github.com/RDR8) for helping with Linux build improvements.
|
|
||||||
- [Saggi Mizrahi](https://github.com/ficoos) for multiple fixes on Linux and audio system.
|
|
||||||
- [Daniel Lemos](https://github.com/xspager) for fixing issues on Linux games building.
|
|
||||||
- [Joel Davis](https://github.com/joeld42) for adding raycast picking utilities and a [great example](https://github.com/raysan5/raylib/blob/master/examples/models/models_mesh_picking.c)
|
|
||||||
- [Richard Goodwin](https://github.com/AudioMorphology) for adding RPI touchscreen support.
|
|
||||||
- [Milan Nikolic](https://github.com/gen2brain) for adding Android build support with custom standalone toolchain.
|
|
||||||
- [Michael Vetter](https://github.com/jubalh) for improvements on build system and his work on Suse Linux package... and multiple fixes!
|
|
||||||
- [Wilhem Barbier](https://github.com/nounoursheureux) for adding Image generation functions, shaders work and some fixes.
|
|
||||||
- [Benjamin Summerton](https://github.com/define-private-public) for improving OSX building and his amazing work on CMake build sytem.
|
|
||||||
- [MartinFX](https://github.com/Martinfx) for adding compilation support for FreeBSD OS and derivatives.
|
|
||||||
- [Ahmad Fatoum](https://github.com/a3f) for implementing CI support for raylib (Travis and AppVeyor) and great improvements on build system.
|
|
||||||
- [SamNChiet](https://github.com/SamNChiet) for a greatly improved UWP input implementation.
|
|
||||||
- [David Reid](https://github.com/mackron) for a complete review of audio module to support his amazing miniaudio library.
|
|
||||||
- [Kai](https://github.com/questor) for multiple code reviews and improvements.
|
|
||||||
- [Max Danielsson](https://github.com/autious) for adding support for orthographic 3d camera projection
|
|
||||||
- [Lumaio](https://github.com/TheLumaio) for his great work on GBuffers and GetCollisionRayModel().
|
|
||||||
- [Jonas Daeyaert](https://github.com/culacant) for an amazing work on IQM animated models support.
|
|
||||||
- [Seth Archambault](https://github.com/SethArchambault) for the work on Android Gamepad support (SNES model).
|
|
||||||
- [D3nX](https://github.com/D3nX) for adding Code::Blocks project template.
|
|
||||||
- [Jak Barnes](https://github.com/Syphonx) for a great work on `rnet`, new raylib network module
|
|
||||||
- [Vlad Adrian](https://github.com/Demizdor) for an amazing work on Unicode support, new shapes functions and raygui.
|
|
||||||
- [Reece Mackie](https://github.com/Rover656) for a great work on improving UWP support
|
|
||||||
- [flashback-fx](flashback-fx) for improving easings library and example
|
|
||||||
- [Jorge A. Gomes](https://github.com/overdev) for adding nine-patch textures support and example
|
|
||||||
- [Berni8k](https://github.com/Berni8k) for improving Raspberry Pi input system, using evdev
|
|
||||||
- [Wilhem Barbier](https://github.com/wbrbr) for implementing glTF loading support and solving several issues
|
|
||||||
- [Marco Lizza](https://github.com/MarcoLizza) for improving logging system and multiple issues
|
|
||||||
- [Anata](https://github.com/anatagawa) for creating amazing examples and contributing with them
|
|
||||||
- [Narice](https://github.com/narice) made easings.h includable as standalone header
|
|
||||||
- [Eric J.](https://github.com/ProfJski) for shaders_eratosthenes example contribution
|
|
||||||
- [PompPenguin](https://github.com/PompPenguin) for reviewing 3rd person camera
|
|
||||||
- [Mohamed Shazan](https://github.com/msmshazan) for adding support for ANGLE graphics backend
|
|
||||||
|
|
||||||
Please, if I forget someone in this list, excuse me and send me a PR!
|
|
@ -1,95 +0,0 @@
|
|||||||
## C Coding Style Conventions
|
|
||||||
|
|
||||||
Here it is a list with some of the code conventions used by raylib:
|
|
||||||
|
|
||||||
Code element | Convention | Example
|
|
||||||
--- | :---: | ---
|
|
||||||
Defines | ALL_CAPS | `#define PLATFORM_DESKTOP`
|
|
||||||
Macros | ALL_CAPS | `#define MIN(a,b) (((a)<(b))?(a):(b))`
|
|
||||||
Variables | lowerCase | `int screenWidth = 0;`, `float targetFrameTime = 0.016f;`
|
|
||||||
Local variables | lowerCase | `Vector2 playerPosition = { 0 };`
|
|
||||||
Global variables | lowerCase | `bool windowReady = false;`
|
|
||||||
Constants | lowerCase | `const int maxValue = 8;`
|
|
||||||
Pointers | MyType *pointer | `Texture2D *array = NULL;`
|
|
||||||
float values | always x.xf | `float gravity = 10.0f`
|
|
||||||
Operators | value1*value2 | `int product = value*6;`
|
|
||||||
Operators | value1/value2 | `int division = value/4;`
|
|
||||||
Operators | value1 + value2 | `int sum = value + 10;`
|
|
||||||
Operators | value1 - value2 | `int res = value - 5;`
|
|
||||||
Enum | TitleCase | `enum TextureFormat`
|
|
||||||
Enum members | ALL_CAPS | `PIXELFORMAT_UNCOMPRESSED_R8G8B8`
|
|
||||||
Struct | TitleCase | `struct Texture2D`, `struct Material`
|
|
||||||
Struct members |lowerCase | `texture.width`, `color.r`
|
|
||||||
Functions | TitleCase | `InitWindow()`, `LoadImageFromMemory()`
|
|
||||||
Functions params | lowerCase | `width`, `height`
|
|
||||||
Ternary Operator | (condition)? result1 : result2 | `printf("Value is 0: %s", (value == 0)? "yes" : "no");`
|
|
||||||
|
|
||||||
Some other conventions to follow:
|
|
||||||
- **ALWAYS** initialize all defined variables.
|
|
||||||
- **Do not use TABS**, use 4 spaces instead.
|
|
||||||
- Avoid trailing spaces, please, avoid them
|
|
||||||
- Control flow statements always are followed **by a space**:
|
|
||||||
```c
|
|
||||||
if (condition) value = 0;
|
|
||||||
|
|
||||||
while (!WindowShouldClose())
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < NUM_VALUES; i++) printf("%i", i);
|
|
||||||
|
|
||||||
// Be careful with the switch formatting!
|
|
||||||
switch (value)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
{
|
|
||||||
|
|
||||||
} break;
|
|
||||||
case 2: break;
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
- All conditions checks are **always between parenthesis** but not boolean values:
|
|
||||||
```c
|
|
||||||
if ((value > 1) && (value < 50) && valueActive))
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
```
|
|
||||||
- When dealing with braces or curly brackets, open-close them in aligned mode:
|
|
||||||
```c
|
|
||||||
void SomeFunction()
|
|
||||||
{
|
|
||||||
// TODO: Do something here!
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
**If proposing new functions, please try to use a clear naming for function-name and functions-parameters, in case of doubt, open an issue for discussion.**
|
|
||||||
|
|
||||||
## Files and Directories Naming Conventions
|
|
||||||
|
|
||||||
- Directories will be named using `snake_case`: `resources/models`, `resources/fonts`
|
|
||||||
|
|
||||||
- Files will be named using `snake_case`: `main_title.png`, `cubicmap.png`, `sound.wav`
|
|
||||||
|
|
||||||
_NOTE: Avoid any space or special character in the files/dir naming!_
|
|
||||||
|
|
||||||
## Games/Examples Directories Organization Conventions
|
|
||||||
|
|
||||||
- Data files should be organized by context and usage in the game, think about the loading requirements for data and put all the resources that need to be loaded at the same time together.
|
|
||||||
- Use descriptive names for the files, it would be perfect if just reading the name of the file, it was possible to know what is that file and where fits in the game.
|
|
||||||
- Here it is an example, note that some resources require to be loaded all at once while other require to be loaded only at initialization (gui, font).
|
|
||||||
|
|
||||||
```
|
|
||||||
resources/audio/fx/long_jump.wav
|
|
||||||
resources/audio/music/main_theme.ogg
|
|
||||||
resources/screens/logo/logo.png
|
|
||||||
resources/screens/title/title.png
|
|
||||||
resources/screens/gameplay/background.png
|
|
||||||
resources/characters/player.png
|
|
||||||
resources/characters/enemy_slime.png
|
|
||||||
resources/common/font_arial.ttf
|
|
||||||
resources/common/gui.png
|
|
||||||
```
|
|
||||||
|
|
@ -1,364 +0,0 @@
|
|||||||
![raylib logo](logo/raylib_256x256.png)
|
|
||||||
|
|
||||||
introduction
|
|
||||||
------------
|
|
||||||
|
|
||||||
I started developing videogames in 2006 and some years later I started teaching videogames development to young people with artistic profile, most of students had never written a single line of code.
|
|
||||||
|
|
||||||
I decided to start with C language basis and, after searching for the most simple and easy-to-use library to teach videogames programming, I found [WinBGI](http://www.codecutter.net/tools/winbgim/); it was great and it worked very well with students, in just a couple of weeks, those students that had never written a single line of code were able to program (and understand) a simple PONG game, some of them even a BREAKOUT!
|
|
||||||
|
|
||||||
But WinBGI was not the clearer and most organized library for my taste. There were lots of things I found confusing and some function names were not clear enough for most of the students; not to mention the lack of transparencies support and no hardware acceleration.
|
|
||||||
|
|
||||||
So, I decided to create my own library, hardware accelerated, clear function names, quite organized, well structured, plain C coding and, the most important, primarily intended to learn videogames programming.
|
|
||||||
|
|
||||||
My previous videogames development experience was mostly in C# and [XNA](https://en.wikipedia.org/wiki/Microsoft_XNA) and I really loved it, so, I decided to use C# language style notation and XNA naming conventions. That way, students were able to move from raylib to XNA, MonoGame or similar libs extremely easily.
|
|
||||||
|
|
||||||
raylib started as a weekend project and after three months of hard work, **raylib 1.0 was published on November 2013**.
|
|
||||||
|
|
||||||
Enjoy it.
|
|
||||||
|
|
||||||
notes on raylib 1.1
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
On April 2014, after 6 month of first raylib release, raylib 1.1 has been released. This new version presents a complete internal redesign of the library to support OpenGL 1.1, OpenGL 3.3+ and OpenGL ES 2.0.
|
|
||||||
|
|
||||||
- A new module named [rlgl](https://github.com/raysan5/raylib/blob/master/src/rlgl.h) has been added to the library. This new module translates raylib-OpenGL-style immediate mode functions (i.e. rlVertex3f(), rlBegin(), ...) to different versions of OpenGL (1.1, 3.3+, ES2), selectable by one define.
|
|
||||||
|
|
||||||
- [rlgl](https://github.com/raysan5/raylib/blob/master/src/rlgl.h) also comes with a second new module named [raymath](https://github.com/raysan5/raylib/blob/master/src/raymath.h), which includes a bunch of useful functions for 3d-math with vectors, matrices and quaternions.
|
|
||||||
|
|
||||||
Some other big changes of this new version have been the support for OGG files loading and stream playing, and the support of DDS texture files (compressed and uncompressed) along with mipmaps support.
|
|
||||||
|
|
||||||
Lots of code changes and lot of testing have concluded in this amazing new raylib 1.1.
|
|
||||||
|
|
||||||
notes on raylib 1.2
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
On September 2014, after 5 month of raylib 1.1 release, it comes raylib 1.2. Again, this version presents a complete internal redesign of [core](https://github.com/raysan5/raylib/blob/master/src/rcore.c) module to support two new platforms: [Android](http://www.android.com/) and [Raspberry Pi](http://www.raspberrypi.org/).
|
|
||||||
|
|
||||||
It's been some month of really hard work to accomodate raylib to those new platforms while keeping it easy for the users. On Android, raylib manages internally the activity cicle, as well as the inputs; on Raspberry Pi, a complete raw input system has been written from scratch.
|
|
||||||
|
|
||||||
- A new display initialization system has been created to support multiple resolutions, adding black bars if required; user only defines desired screen size and it gets properly displayed.
|
|
||||||
|
|
||||||
- Now raylib can easily deploy games to Android devices and Raspberry Pi (console mode).
|
|
||||||
|
|
||||||
Lots of code changes and lot of testing have concluded in this amazing new raylib 1.2.
|
|
||||||
|
|
||||||
In December 2014, new raylib 1.2.2 was published with support to compile directly for web (html5) using [emscripten](http://kripken.github.io/emscripten-site/) and [asm.js](http://asmjs.org/).
|
|
||||||
|
|
||||||
notes on raylib 1.3
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
On September 2015, after 1 year of raylib 1.2 release, arrives raylib 1.3. This version adds shaders functionality, improves tremendously textures module and also provides some new modules (camera system, gestures system, immediate-mode gui).
|
|
||||||
|
|
||||||
- Shaders support is the biggest addition to raylib 1.3, with support for easy shaders loading and use. Loaded shaders can be attached to 3d models or used as fullscreen postrocessing effects. A bunch of postprocessing shaders are also included in this release, check raylib/shaders folder.
|
|
||||||
|
|
||||||
- Textures module has grown to support most of the internal texture formats available in OpenGL (RGB565, RGB888, RGBA5551, RGBA4444, etc.), including compressed texture formats (DXT, ETC1, ETC2, ASTC, PVRT); raylib 1.3 can load .dds, .pkm, .ktx, .astc and .pvr files.
|
|
||||||
|
|
||||||
- A brand new [camera](https://github.com/raysan5/raylib/blob/master/src/rcamera.c) module offers to the user multiple preconfigured ready-to-use camera systems (free camera, 1st person, 3rd person). Camera modes are very easy to use, just check examples: [core_3d_camera_free.c](https://github.com/raysan5/raylib/blob/master/examples/core_3d_camera_free.c) and [core_3d_camera_first_person.c](https://github.com/raysan5/raylib/blob/master/examples/core_3d_camera_first_person.c).
|
|
||||||
|
|
||||||
- New [gestures](https://github.com/raysan5/raylib/blob/master/src/rgestures.h) module simplifies gestures detection on Android and HTML5 programs.
|
|
||||||
|
|
||||||
- [raygui](https://github.com/raysan5/raylib/blob/master/src/raygui.h), the new immediate-mode GUI module offers a set of functions to create simple user interfaces, primary intended for tools development. It's still in experimental state but already fully functional.
|
|
||||||
|
|
||||||
Most of the examples have been completely rewritten and +10 new examples have been added to show the new raylib features.
|
|
||||||
|
|
||||||
Lots of code changes and lot of testing have concluded in this amazing new raylib 1.3.
|
|
||||||
|
|
||||||
notes on raylib 1.4
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
On February 2016, after 4 months of raylib 1.3 release, it comes raylib 1.4. For this new version, lots of parts of the library have been reviewed, lots of bugs have been solved and some interesting features have been added.
|
|
||||||
|
|
||||||
- First big addition is a set of [Image manipulation functions](https://github.com/raysan5/raylib/blob/master/src/raylib.h#L673) have been added to crop, resize, colorize, flip, dither and even draw image-to-image or text-to-image. Now a basic image processing can be done before converting the image to texture for usage.
|
|
||||||
|
|
||||||
- SpriteFonts system has been improved, adding support for AngelCode fonts (.fnt) and TrueType Fonts (using [stb_truetype](https://github.com/nothings/stb/blob/master/stb_truetype.h) helper library). Now raylib can read standard .fnt font data and also generate at loading a SpriteFont from a TTF file.
|
|
||||||
|
|
||||||
- New [physac](https://github.com/raysan5/raylib/blob/master/src/physac.h) physics module for basic 2D physics support. Still in development but already functional. Module comes with some usage examples for basic jump and level interaction and also force-based physic movements.
|
|
||||||
|
|
||||||
- [raymath](https://github.com/raysan5/raylib/blob/master/src/raymath.h) module has been reviewed; some bugs have been solved and the module has been converted to a header-only file for easier portability, optionally, functions can also be used as inline.
|
|
||||||
|
|
||||||
- [gestures](https://github.com/raysan5/raylib/blob/master/src/rgestures.c) module has redesigned and simplified, now it can process touch events from any source, including mouse. This way, gestures system can be used on any platform providing an unified way to work with inputs and allowing the user to create multiplatform games with only one source code.
|
|
||||||
|
|
||||||
- Raspberry Pi input system has been redesigned to better read raw inputs using generic Linux event handlers (keyboard:`stdin`, mouse:`/dev/input/mouse0`, gamepad:`/dev/input/js0`). Gamepad support has also been added (experimental).
|
|
||||||
|
|
||||||
Other important improvements are the functional raycast system for 3D picking, including some ray collision-detection functions,
|
|
||||||
and the addition of two simple functions for persistent data storage. Now raylib user can save and load game data in a file (only some platforms supported). A simple [easings](https://github.com/raysan5/raylib/blob/master/src/easings.h) module has also been added for values animation.
|
|
||||||
|
|
||||||
Up to 8 new code examples have been added to show the new raylib features and +10 complete game samples have been provided to learn
|
|
||||||
how to create some classic games like Arkanoid, Asteroids, Missile Commander, Snake or Tetris.
|
|
||||||
|
|
||||||
Lots of code changes and lots of hours of hard work have concluded in this amazing new raylib 1.4.
|
|
||||||
|
|
||||||
notes on raylib 1.5
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
On July 2016, after 5 months of raylib 1.4 release, arrives raylib 1.5. This new version is the biggest boost of the library until now, lots of parts of the library have been redesigned, lots of bugs have been solved and some **AMAZING** new features have been added.
|
|
||||||
|
|
||||||
- VR support: raylib supports **Oculus Rift CV1**, one of the most anticipated VR devices in the market. Additionally, raylib supports simulated VR stereo rendering, independent of the VR device; it means, raylib can generate stereo renders with custom head-mounted-display device parameteres, that way, any VR device in the market can be **simulated in any platform** just configuring device parameters (and consequently, lens distortion). To enable VR is [extremely easy](https://github.com/raysan5/raylib/blob/master/examples/core_oculus_rift.c).
|
|
||||||
|
|
||||||
- New materials system: now raylib supports standard material properties for 3D models, including diffuse-ambient-specular colors and diffuse-normal-specular textures. Just assign values to standard material and everything is processed internally.
|
|
||||||
|
|
||||||
- New lighting system: added support for up to 8 configurable lights and 3 light types: **point**, **directional** and **spot** lights. Just create a light, configure its parameters and raylib manages render internally for every 3d object using standard material.
|
|
||||||
|
|
||||||
- Complete gamepad support on Raspberry Pi: Gamepad system has been completely redesigned. Now multiple gamepads can be easily configured and used; gamepad data is read and processed in raw mode in a second thread.
|
|
||||||
|
|
||||||
- Redesigned physics module: [physac](https://github.com/raysan5/raylib/blob/master/src/physac.h) module has been converted to header only and usage [has been simplified](https://github.com/raysan5/raylib/blob/master/examples/physics_basic_rigidbody.c). Performance has also been singnificantly improved, now physic objects are managed internally in a second thread.
|
|
||||||
|
|
||||||
- Audio chiptunese support and mixing channels: Added support for module audio music (.xm, .mod) loading and playing. Multiple mixing channels are now also supported. All this features thanks to the amazing work of @kd7tck.
|
|
||||||
|
|
||||||
Other additions include a [2D camera system](https://github.com/raysan5/raylib/blob/master/examples/core_2d_rcamera.c), render textures for offline render (and most comprehensive [postprocessing](https://github.com/raysan5/raylib/blob/master/examples/shaders_postprocessing.c)) or support for legacy OpenGL 2.1 on desktop platforms.
|
|
||||||
|
|
||||||
This new version is so massive that is difficult to list all the improvements, most of raylib modules have been reviewed and [rlgl](https://github.com/raysan5/raylib/blob/master/src/rlgl.c) module has been completely redesigned to accomodate to new material-lighting systems and stereo rendering. You can check [CHANGELOG](https://github.com/raysan5/raylib/blob/master/CHANGELOG) file for a more detailed list of changes.
|
|
||||||
|
|
||||||
Up to 8 new code examples have been added to show the new raylib features and also some samples to show the usage of [rlgl](https://github.com/raysan5/raylib/blob/master/examples/rlgl_standalone.c) and [audio](https://github.com/raysan5/raylib/blob/master/examples/audio_standalone.c) raylib modules as standalone libraries.
|
|
||||||
|
|
||||||
Lots of code changes (+400 commits) and lots of hours of hard work have concluded in this amazing new raylib 1.5.
|
|
||||||
|
|
||||||
notes on raylib 1.6
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
On November 2016, only 4 months after raylib 1.5, arrives raylib 1.6. This new version represents another big review of the library and includes some interesting additions. This version conmmemorates raylib 3rd anniversary (raylib 1.0 was published on November 2013) and it is a stepping stone for raylib future. raylib roadmap has been reviewed and redefined to focus on its primary objective: create a simple and easy-to-use library to learn videogames programming. Some of the new features:
|
|
||||||
|
|
||||||
- Complete [raylib Lua binding](https://github.com/raysan5/raylib-lua). All raylib functions plus the +60 code examples have been ported to Lua, now Lua users can enjoy coding videogames in Lua while using all the internal power of raylib. This addition also open the doors to Lua scripting support for a future raylib-based engine, being able to move game logic (Init, Update, Draw, De-Init) to Lua scripts while keep using raylib functionality.
|
|
||||||
|
|
||||||
- Completely redesigned [audio module](https://github.com/raysan5/raylib/blob/master/src/raudio.c). Based on the new direction taken in raylib 1.5, it has been further improved and more functionality added (+20 new functions) to allow raw audio processing and streaming. [FLAC file format support](https://github.com/raysan5/raylib/blob/master/src/external/dr_flac.h) has also been added. In the same line, [OpenAL Soft](https://github.com/kcat/openal-soft) backend is now provided as a static library in Windows to allow static linking and get ride of OpenAL32.dll. Now raylib Windows games are completey self-contained, no external libraries required any more!
|
|
||||||
|
|
||||||
- [Physac](https://github.com/victorfisac/Physac) module has been moved to its own repository and it has been improved A LOT, actually, library has been completely rewritten from scratch by [@victorfisac](https://github.com/victorfisac), multiple samples have been added together with countless new features to match current standard 2D physic libraries. Results are amazing!
|
|
||||||
|
|
||||||
- Camera and gestures modules have been reviewed, highly simplified and ported to single-file header-only libraries for easier portability and usage flexibility. Consequently, camera system usage has been simplified in all examples.
|
|
||||||
|
|
||||||
- Improved Gamepad support on Windows and Raspberry Pi with the addition of new functions for custom gamepad configurations but supporting by default PS3 and Xbox-based gamepads.
|
|
||||||
|
|
||||||
- Improved textures and text functionality, adding new functions for texture filtering control and better TTF/AngelCode fonts loading and generation support.
|
|
||||||
|
|
||||||
Build system improvement. Added support for raylib dynamic library generation (raylib.dll) for users that prefer dynamic library linking. Also thinking on advance users, it has been added pre-configured [Visual Studio C++ 2015 solution](https://github.com/raysan5/raylib/tree/master/project/vs2015) with raylib project and C/C++ examples for users that prefer that professional IDE and compiler.
|
|
||||||
|
|
||||||
New examples, new functions, complete code-base review, multiple bugs corrected... this is raylib 1.6. Enjoy making games.
|
|
||||||
|
|
||||||
notes on raylib 1.7
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
On May 2017, around 6 month after raylib 1.6, comes another raylib instalment, raylib 1.7. This time library has been improved a lot in terms of consistency and cleanness. As stated in [this patreon article](https://www.patreon.com/posts/raylib-future-7501034), this new raylib version has focused efforts in becoming more simple and easy-to-use to learn videogames programming. Some highlights of this new version are:
|
|
||||||
|
|
||||||
- More than 30 new functions added to the library, functions to control Window, utils to work with filenames and extensions, functions to draw lines with custom thick, mesh loading, functions for 3d ray collisions detailed detection, funtions for VR simulation and much more... Just check [CHANGELOG](CHANGELOG) for a detailed list of additions!
|
|
||||||
|
|
||||||
- Support of [configuration flags](https://github.com/raysan5/raylib/issues/200) on every raylib module. Advance users can customize raylib just choosing desired features, defining some configuration flags on modules compilation. That way users can control library size and available functionality.
|
|
||||||
|
|
||||||
- Improved [build system](https://github.com/raysan5/raylib/blob/master/src/Makefile) for all supported platforms (Windows, Linux, OSX, RPI, Android, HTML5) with a unique Makefile to compile sources. Added support for Android compilation with a custom standalone toolchain and also multiple build compliation flags.
|
|
||||||
|
|
||||||
- New [examples](http://www.raylib.com/examples.html) and [sample games](http://www.raylib.com/games.html) added. All samples material has been reviewed, removing useless examples and adding more comprehensive ones; all material has been ported to latest raylib version and tested in multiple platforms. Examples folder structure has been improved and also build systems.
|
|
||||||
|
|
||||||
- Improved library consistency and organization in general. Functions and parameters have been renamed, some parts of the library have been cleaned and simplyfied, some functions has been moved to examples (lighting, Oculus Rift CV1 support) towards a more generic library implementation. Lots of hours have been invested in this process...
|
|
||||||
|
|
||||||
Some other features: Gamepad support on HTML5, RPI touch screen support, 32bit audio support, frames timing improvements, public log system, rres file format support, automatic GIF recording...
|
|
||||||
|
|
||||||
And here it is another version of **raylib, a simple and easy-to-use library to enjoy videogames programming**. Enjoy it.
|
|
||||||
|
|
||||||
notes on raylib 1.8
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
October 2017, around 5 months after latest raylib version, another release is published: raylib 1.8. Again, several modules of the library have been reviewed and some new functionality added. Main changes of this new release are:
|
|
||||||
|
|
||||||
- [Procedural image generation](https://github.com/raysan5/raylib/blob/master/examples/textures/textures_image_generation.c) function, a set of new functions have been added to generate gradients, checked, noise and cellular images from scratch. Image generation could be useful for certain textures or learning pourpouses.
|
|
||||||
|
|
||||||
- [Parametric mesh generation](https://github.com/raysan5/raylib/blob/master/examples/models/models_mesh_generation.c) functions, create 3d meshes from scratch just defining a set of parameters, meshes like cube, sphere, cylinder, torus, knot and more can be very useful for prototyping or for lighting and texture testing.
|
|
||||||
|
|
||||||
- PBR Materials support, a completely redesigned shaders and material system allows advance materials definition and usage, with fully customizable shaders. Some new functions have been added to generate the environment textures required for PBR shading and a a new complete [PBR material example](https://github.com/raysan5/raylib/blob/master/examples/models/models_material_pbr.c) is also provided for reference.
|
|
||||||
|
|
||||||
- Custom Android APK build pipeline with [simple Makefile](https://github.com/raysan5/raylib/blob/master/templates/simple_game/Makefile). Actually, full code building mechanism based on plain Makefile has been completely reviewed and Android building has been added for sources and also for examples and templates building into final APK package. This way, raylib Android building has been greatly simplified and integrated seamlessly into standard build scripts.
|
|
||||||
|
|
||||||
- [rlgl](https://github.com/raysan5/raylib/blob/master/src/rlgl.h) module has been completely reviewed and most of the functions renamed for consistency. This way, standalone usage of rlgl is promoted, with a [complete example provided](https://github.com/raysan5/raylib/blob/master/examples/others/rlgl_standalone.c). rlgl offers a pseudo-OpenGL 1.1 immediate-mode programming-style layer, with backends to multiple OpenGL versions.
|
|
||||||
|
|
||||||
- [raymath](https://github.com/raysan5/raylib/blob/master/src/raymath.h) library has been also reviewed to align with other advance math libraries like [GLM](https://github.com/g-truc/glm). Matrix math has been improved and simplified, some new Quaternion functions have been added and Vector3 functions have been renamed all around the library for consistency with new Vector2 functionality.
|
|
||||||
|
|
||||||
Additionally, as always, examples and templates have been reviewed to work with new version (some new examples have been added), all external libraries have been updated to latest stable version and latest Notepad++ and MinGW have been configured to work with new raylib. For a full list of changes, just check [CHANGELOG](CHANGELOG).
|
|
||||||
|
|
||||||
New installer provided, web updated, examples re-builded, documentation reviewed... **new raylib 1.8 published**. Enjoy coding games.
|
|
||||||
|
|
||||||
notes on raylib 2.0
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
It's been 9 month since last raylib version was published, a lots of things have changed since then... This new raylib version represents an inflexion point in the development of the library and so, we jump to a new major version... Here it is the result of almost **5 years and thousands of hours of hard work**... here it is... **raylib 2.0**
|
|
||||||
|
|
||||||
In **raylib 2.0** the full API has been carefully reviewed for better consistency, some new functionality has been added and the overall raylib experience has been greatly improved... The key features of new version are:
|
|
||||||
|
|
||||||
- **Complete removal of external dependencies.** Finally, raylib does not require external libraries to be installed and linked along with raylib, all required libraries are contained and compiled within raylib. Obviously some external libraries are required but only the strictly platform-dependant ones, the ones that come installed with the OS. So, raylib becomes a self-contained platform-independent games development library.
|
|
||||||
|
|
||||||
- **Full redesign of audio module to use the amazing miniaudio library**, along with external dependencies removal, OpenAL library has been replaced by [miniaudio](https://github.com/dr-soft/miniaudio), this brand new library offers automatic dynamic linking with default OS audio systems. Undoubtly, the perfect low-level companion for raylib audio module!
|
|
||||||
|
|
||||||
- **Support for continuous integration building*** through AppVeyor and Travis CI. Consequently, raylib GitHub develop branch has been removed, simplyfing the code-base to a single master branch, always stable. Every time a new commit is deployed, library is compiled for **up-to 12 different configurations**, including multiple platforms, 32bit/64bit and multiple compiler options! All those binaries are automatically attached to any new release!
|
|
||||||
|
|
||||||
- **More platforms supported and tested**, including BSD family (FreeBSD, openBSD, NetBSD, DragonFly) and Linux-based family platforms (openSUSE, Debian, Ubuntu, Arch, NixOS...). raylib has already been added to some package managers! Oh, and last but not less important, **Android 64bit** is already supported by raylib!
|
|
||||||
|
|
||||||
- **Support for TCC compiler!** Thanks to the lack of external dependencies, raylib can now be easily compiled with a **minimal toolchain**, like the one provide by Tiny C Compiler. It opens the door to an amazing future, allowing, for example, static linkage of libtcc for **runtime compilation of raylib-based code**... and the library itself if required! Moreover, TCC is blazing fast, it can compile all raylib in a couple of seconds!
|
|
||||||
|
|
||||||
- Refactored all raylib configuration #defines into a **centralized `config.h` header**, with more than **40 possible configuration options** to compile a totally customizable raylib version including only desired options like supported file-formats or specific functionality support. It allows generating a trully ligth-weight version of the library if desired!
|
|
||||||
|
|
||||||
A part of that, lots of new features, like a brand **new font rendering and packaging system** for TTF fonts with **SDF support** (thanks to the amazing STB headers), new functions for **CPU image data manipulation**, new orthographic 3d camera mode, a complete review of `raymath.h` single-file header-only library for better consistency and performance, new examples and way, [way more](https://github.com/raysan5/raylib/blob/master/CHANGELOG).
|
|
||||||
|
|
||||||
Probably by now, **raylib 2.0 is the simplest and easiest-to-use library to enjoy (and learn) videogames programming**... but, undoubtly its development has exceeded any initial objective; raylib has become a simple and easy-to-use trully multiplatform portable standalone media library with thousands of possibilities... and that's just the beginning!
|
|
||||||
|
|
||||||
notes on raylib 2.5
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
After almost one years since latest raylib installment, here it is **raylib 2.5**. A lot of work has been put on this new version and consequently I decided to bump versioning several digits. The complete list of changes and additions is humungous, details can be found in the [CHANGELOG](CHANGELOG), and here it is a short recap with the highlight improvements.
|
|
||||||
|
|
||||||
- New **window management and file system functions** to query monitor information, deal with clipboard, check directory files info and even launch a URL with default system web browser. Experimental **High-DPI monitor support** has also been added through a compile flag.
|
|
||||||
|
|
||||||
- **Redesigned Gamepad mechanism**, now generic for all platforms and gamepads, no more specific gamepad configurations.
|
|
||||||
**Redesigned UWP input system**, now raylib supports UWP seamlessly, previous implementation required a custom input system implemented in user code.
|
|
||||||
|
|
||||||
- `rlgl` module has been redesigned to **support a unique buffer for shapes drawing batching**, including LINES, TRIANGLES, QUADS in the same indexed buffer, also added support for multi-buffering if required. Additionally, `rlPushMatrix()`/`rlPopMatrix()` functionality has been reviewed to behave exactly like OpenGL 1.1, `models_rlgl_solar_system` example has been added to illustrate this behaviour.
|
|
||||||
|
|
||||||
- **VR simulator** has been reviewed to **allow custom configuration of Head-Mounted-Device parameters and distortion shader**, `core_vr_simulator` has been properly adapted to showcase this new functionality, now the VR simulator is a generic configurable stereo rendering system that allows any VR device simulation with just a few lines of code or even dynamic tweaking of HMD parameters.
|
|
||||||
|
|
||||||
- Support for **Unicode text drawing**; now raylib processes UTF8 strings on drawing, supporting Unicode codepoints, allowing rendering mostly any existent language (as long as the font with the glyphs is provided). An amazing example showing this feature has also been added: `text_unicode`.
|
|
||||||
|
|
||||||
- Brand **new text management API**, with the addition of multiple functions to deal with string data, including functionality like replace, insert, join, split, append, to uppercase, to lower... Note that most of those functions are intended for text management on rendering, using pre-loaded internal buffers, avoiding new memory allocation that user should free manually.
|
|
||||||
|
|
||||||
- Multiple **new shapes and textures drawing functions** to support rings (`DrawRing()`, `DrawRingLines()`), circle sectors (`DrawCircleSector()`, `DrawCircleSectorLines()`), rounded rectangles (`DrawRectangleRounded()`, `DrawRectangleRoundedLines()`) and also n-patch textures (`DrawTextureNPatch()`), detailed examples have been added to illustrate all this new functionality.
|
|
||||||
|
|
||||||
- Experimental **cubemap support**, to automatically load multiple cubemap layouts (`LoadTextureCubemap()`). It required some internal `rlgl` redesign to allow cubemap textures.
|
|
||||||
|
|
||||||
- **Skeletal animation support for 3d models**, this addition implied a redesign of `Model` data structure to accomodate multiple mesh/multiple materials support and bones information. Multiple models functions have been reviewed and added on this process, also **glTF models loading support** has been added.
|
|
||||||
|
|
||||||
This is a just a brief list with some of the changes of the new **raylib 2.5** but there is way more, about **70 new functions** have been added and several subsystems have been redesigned. More than **30 new examples** have been created to show the new functionalities and better illustrate already available ones.
|
|
||||||
|
|
||||||
It has been a long year of hard work to make raylib a solid technology to develop new products over it.
|
|
||||||
|
|
||||||
notes on raylib 3.0
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
After **10 months of intense development**, new raylib version is ready. Despite primary intended as a minor release, the [CHANGELIST](CHANGELOG) has grown so big and the library has changed so much internally that it finally became a major release. Library **internal ABI** has reveived a big redesign and review, targeting portability, integration with other platforms and making it a perfect option for other progamming [language bindings](BINDINGS.md).
|
|
||||||
|
|
||||||
- All **global variables** from the multiple raylib modules have been moved to a **global context state**, it has several benefits, first, better code readability with more comprehensive variables naming and categorization (organized by types, i.e. `CORE.Window.display.width`, `CORE.Input.Keyboard.currentKeyState` or `RLGL.State.modelview`). Second, it allows better memory management to load global context state dynamically when required (not at the moment), making it easy to implement a **hot-reloading mechanism** if desired.
|
|
||||||
|
|
||||||
- All **memory allocations** on raylib and its dependencies now use `RL_MALLOC`, `RL_FREE` and similar macros. Now users can easely hook their own memory allocations mechanism if desired, having more control over memory allocated internally by the library. Additionally, it makes it easier to port the library to embedded devices where memory control is critical. For more info check raylib issue #1074.
|
|
||||||
|
|
||||||
- All **I/O file accesses** from raylib are being moved to **memory data access**, now all I/O file access is centralized into just four functions: `LoadFileData()`, `SaveFileData()`, `LoadFileText()`, `SaveFileText()`. Users can just update those functions to any I/O file system. This change makes it easier to integrate raylib with **Virtual File Systems** or custom I/O file implementations.
|
|
||||||
|
|
||||||
- All **raylib data structures** have been reviewed and optimized for pass-by-value usage. One of raylib distinctive design decisions is that most of its functions receive and return data by value. This design makes raylib really simple for newcomers, avoiding pointers and allowing complete access to all structures data in a simple way. The downside is that data is copied on stack every function call and that copy could be costly so, all raylib data structures have been optimized to **stay under 64 bytes** for fast copy and retrieve.
|
|
||||||
|
|
||||||
- All **raylib tracelog messages** have been reviewd and categorized for a more comprehensive output information when developing raylib applications, now all display, input, timer, platform, auxiliar libraries, file-accesses, data loading/unloading issues are properly reported with more detailed and visual messages.
|
|
||||||
|
|
||||||
- `raudio` module has been internally reviewed to accomodate the new `Music` structure (converted from previous pointer format) and the module has been adapted to the **highly improved** [`miniaudio v0.10`](https://github.com/dr-soft/miniaudio).
|
|
||||||
|
|
||||||
- `text` module reviewed to **improve fonts generation** and text management functions, `Font` structure has been redesigned to better accomodate characters data, decoupling individual characters as `Image` glyphs from the font atlas parameters. Several improvements have been made to better support Unicode strings with UTF-8 encoding.
|
|
||||||
|
|
||||||
- **Multiple new examples added** (most of them contributed by raylib users) and all examples reviewed for correct execution on most of the supported platforms, specially Web and Raspberry Pi. A detailed categorized table has been created on github for easy examples navigation and code access.
|
|
||||||
|
|
||||||
- New **GitHub Actions CI** system has been implemented for Windows, Linux and macOS code and examples compilation on every new commit or PR to make sure library keeps stable and usable with no breaking bugs.
|
|
||||||
|
|
||||||
Note that only key changes are listed here but there is way more! About **30 new functions**, multiple functions reviewed, bindings to [+40 programming languages](https://github.com/raysan5/raylib/blob/master/BINDINGS.md) and great samples/demos/tutorials [created by the community](https://discord.gg/raylib), including raylib integration with [Spine](https://github.com/WEREMSOFT/spine-raylib-runtimes), [Unity](https://unitycoder.com/blog/2019/12/09/using-raylib-dll-in-unity/), [Tiled](https://github.com/OnACoffeeBreak/raylib_tiled_import_with_tmx), [Nuklear](http://bedroomcoders.co.uk/implementing-a-3d-gui-with-raylib/), [enet](https://github.com/nxrighthere/NetDynamics) and [more](https://github.com/raysan5/raylib/issues/1079)!
|
|
||||||
|
|
||||||
It has been **10 months of improvements** to create the best raylib ever.
|
|
||||||
|
|
||||||
Welcome to **raylib 3.0**.
|
|
||||||
|
|
||||||
notes on raylib 3.5 - 7th Anniversary Edition
|
|
||||||
---------------------------------------------
|
|
||||||
|
|
||||||
It's December 25th... this crazy 2020 is about to finish and finally the holidays gave me some time to put a new version of raylib. It's been **9 months since last release** and last November raylib become 7 years old... I was not able to release this new version back then but here it is. Many changes and improvements have happened in those months and, even, last August, raylib was awarded with an [Epic Megagrant](https://www.unrealengine.com/en-US/blog/epic-megagrants-fall-2020-update)! Bindings list kept growing to [+50 programming languages](BINDINGS.md) and some new platforms have been supported. Let's see this new version details:
|
|
||||||
|
|
||||||
First, some general numbers of this new update:
|
|
||||||
|
|
||||||
- **+650** commits since previous RELEASE
|
|
||||||
- **+30** functions ADDED (for a TOTAL of **475**!)
|
|
||||||
- **+90** functions REVIEWED/REDESIGNED
|
|
||||||
- **+30** contributors (for a TOTAL of **170**!)
|
|
||||||
- **+8** new examples (for a TOTAL of **+120**!)
|
|
||||||
|
|
||||||
Here the list with some highlights for `raylib 3.5`.
|
|
||||||
|
|
||||||
- NEW **Platform** supported: **Raspberry Pi 4 native mode** (no X11 windows) through [DRM](https://en.wikipedia.org/wiki/Direct_Rendering_Manager) subsystem and GBM API. Actually this is a really interesting improvement because it opens the door to raylib to support other embedded platforms (Odroid, GameShell, NanoPi...). Also worth mentioning the un-official homebrew ports of raylib for [PS4](https://github.com/orbisdev/orbisdev-orbisGl2) and [PSVita](https://github.com/psp2dev/raylib4Vita).
|
|
||||||
|
|
||||||
- NEW **configuration options** exposed: For custom raylib builds, `config.h` now exposes **more than 150 flags and defines** to build raylib with only the desired features, for example, it allows to build a minimal raylib library in just some KB removing all external data filetypes supported, very useful to generate **small executables or embedded devices**.
|
|
||||||
|
|
||||||
- NEW **automatic GIF recording** feature: Actually, automatic GIF recording (**CTRL+F12**) for any raylib application has been available for some versions but this feature was really slow and low-performant using an old gif library with many file-accesses. It has been replaced by a **high-performant alternative** (`msf_gif.h`) that operates directly on memory... and actually works very well! Try it out!
|
|
||||||
|
|
||||||
- NEW **RenderBatch** system: `rlgl` module has been redesigned to support custom **render batches** to allow grouping draw calls as desired, previous implementation just had one default render batch. This feature has not been exposed to raylib API yet but it can be used by advance users dealing with `rlgl` directly. For example, multiple `RenderBatch` can be created for 2D sprites and 3D geometry independently.
|
|
||||||
|
|
||||||
- NEW **Framebuffer** system: `rlgl` module now exposes an API for custom **Framebuffer attachments** (including cubemaps!). raylib `RenderTexture` is a basic use-case, just allowing color and depth textures, but this new API allows the creation of more advance Framebuffers with multiple attachments, like the **G-Buffers**. `GenTexture*()` functions have been redesigned to use this new API.
|
|
||||||
|
|
||||||
- Improved **software rendering**: raylib `Image*()` API is intended for software rendering, for those cases when **no GPU or no Window is available**. Those functions operate directly with **multi-format** pixel data on RAM and they have been completely redesigned to be way faster, specially for small resolutions and retro-gaming. Low-end embedded devices like **microcontrollers with custom displays** could benefit of this raylib functionality!
|
|
||||||
|
|
||||||
- File **loading from memory**: Multiple functions have been redesigned to load data from memory buffers **instead of directly accessing the files**, now all raylib file loading/saving goes through a couple of functions that load data into memory. This feature allows **custom virtual-file-systems** and it gives more control to the user to access data already loaded in memory (i.e. images, fonts, sounds...).
|
|
||||||
|
|
||||||
- NEW **Window states** management system: raylib `core` module has been redesigned to support Window **state check and setup more easily** and also **before/after Window initialization**, `SetConfigFlags()` has been reviewed and `SetWindowState()` has been added to control Window minification, maximization, hidding, focusing, topmost and more.
|
|
||||||
|
|
||||||
- NEW **GitHub Actions** CI/CD system: Previous CI implementation has been reviewed and improved a lot to support **multiple build configurations** (platforms, compilers, static/shared build) and also an **automatic deploy system** has been implemented to automatically attach the diferent generated artifacts to every new release. As the system seems to work very good, previous CI platforms (AppVeyor/TravisCI) have been removed.
|
|
||||||
|
|
||||||
A part of those changes, many new functions have been added, some redundant functions removed and many functions have been reviewed for consistency with the full API (function name, parameters name and order, code formatting...). Again, this release represents is a **great improvement for raylib and marks the way forward** for the library. Make sure to check [CHANGELOG](CHANGELOG) for details! Hope you enjoy it!
|
|
||||||
|
|
||||||
Happy holidays! :)
|
|
||||||
|
|
||||||
notes on raylib 3.7
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
April 2021, it's been about 4 months since last raylib release and here it is already a new one, this time with a bunch of internal redesigns and improvements. Surprisingly, on April the 8th I was awarded for a second time with the [Google Open Source Peer Bonus Award](https://opensource.googleblog.com/2021/04/announcing-first-group-of-google-open-source-peer-bonus-winners.html) for my contribution to open source world with raylib and it seems the library is getting some traction, what a better moment for a new release? Let's see what can be found in this new version:
|
|
||||||
|
|
||||||
Let's start with some numbers:
|
|
||||||
|
|
||||||
- **+100** closed issues (for a TOTAL of **+900**!)
|
|
||||||
- **+400** commits since previous RELEASE
|
|
||||||
- **+50** functions ADDED (**+30** of them to rlgl API)
|
|
||||||
- **+30** functions REVIEWED/REDESIGNED
|
|
||||||
- **+40** new contributors (for a TOTAL of **+210**!)
|
|
||||||
|
|
||||||
Highlights for `raylib 3.7`:
|
|
||||||
|
|
||||||
- **REDESIGNED: `rlgl` module for greater abstraction level**. This suppose an **important change in raylib architecture**, now `rlgl` functionality is self-contained in the module and used by higher-level layers (specially by `core` module), those upper layers are the ones that expose functionality to the main API when required, for example the `Shaders`, `Mesh` and `Materials` functionality. Multiple `rlgl` functions have been renamed for consistency, in this case, following the `rl*()` prefix convention. Functions have also been reorganized internally by categories and `GenTexture*()` functions have been removed from the library and moved to [`models_material_pbr`](https://github.com/raysan5/raylib/blob/master/examples/models/models_material_pbr.c) example.
|
|
||||||
|
|
||||||
- **REDESIGNED: VR simulator and stereo rendering mechanism**. A **brand new API** has been added, more comprehensive and better integrated with raylib, the **new stereo rendering** can be combined with `RenderTexture` and `Shader` API allowing the user to **manage fbo and distortion shader directly**. Also, the new rendering mechanism supports **instancing on stereo rendering**! Check the updated [`core_vr_simulator`](https://github.com/raysan5/raylib/blob/master/examples/core/core_vr_simulator.c) example for reference!
|
|
||||||
|
|
||||||
- **ADDED: New file access callbacks system**. Several new callback functions have been added to the API to allow custom file loaders. A [nice example](https://github.com/RobLoach/raylib-physfs) it's the **raylib integration with a virtual file system** [PhysFS](https://icculus.org/physfs/).
|
|
||||||
|
|
||||||
- **ADDED: glTF animations support**. glTF is the preferred models file format to be used with raylib and along the addition of a models animation API on latest raylib versions, now animations support for glTF format has come to raylib, thanks for this great contribution to [Hristo Stamenov](@object71)
|
|
||||||
|
|
||||||
- **ADDED: Music streaming support from memory**. raylib has been adding the `Load*FromMemory()` option to all its supported file formats but **music streaming** was not supported yet... until now. Thanks to this great contribution by [Agnis "NeZvērs" Aldiņš](@nezvers), now raylib supports music streamming from memory data for all supported file formats: WAV, OGG, MP3, FLAC, XM and MOD.
|
|
||||||
|
|
||||||
- **RENAMED: enums values for consistency**. Most raylib enums names and values names have been renamed for consistency, now all value names start with the type of data they represent. It increases clarity and readability when using those values and also **improves overall library consistency**.
|
|
||||||
|
|
||||||
Beside those key changes, many functions have been reviewed with improvements and bug fixes, many of them contributed by the community! Thanks! And again, this release sets a **new milestone for raylib library**. Make sure to check [CHANGELOG](CHANGELOG) for detailed list of changes! Hope you enjoy this new raylib installment!
|
|
||||||
|
|
||||||
Happy **gamedev/tools/graphics** programming! :)
|
|
||||||
|
|
||||||
notes on raylib 4.0 - 8th Anniversary Edition
|
|
||||||
---------------------------------------------
|
|
||||||
|
|
||||||
It's been about 6 months since last raylib release and it's been **8 years since I started with this project**, what an adventure! It's time for a new release: `raylib 4.0`, **the biggest release ever** and an inflexion point for the library. Many hours have been put in this release to make it special, **many library details have been polished**: syntax, naming conventions, code comments, functions descriptions, log outputs... Almost all the issues have been closed (only 3 remain open at the moment of this writing) and some amazing new features have been added. I expect this **`raylib 4.0`** to be a long term version (LTS), stable and complete enough for any new graphic/game/tool application development.
|
|
||||||
|
|
||||||
Let's start with some numbers:
|
|
||||||
|
|
||||||
- **+130** closed issues (for a TOTAL of **+1030**!)
|
|
||||||
- **+550** commits since previous RELEASE
|
|
||||||
- **+20** functions ADDED to raylib API
|
|
||||||
- **+60** functions ADDED to rlgl API
|
|
||||||
- **+40** functions RENAMED/REVIEWED/REDESIGNED
|
|
||||||
- **+60** new contributors (for a TOTAL of **+275**!)
|
|
||||||
|
|
||||||
Highlights for `raylib 4.0`:
|
|
||||||
|
|
||||||
- **Naming consistency and coherency**: `raylib` API has been completely reviewed to be consistent on naming conventions for data structures and functions, comments and descriptions have been reviewed, also the syntax of many symbols for consistency; some functions and structs have been renamed (i.e. `struct CharInfo` to `struct GlyphInfo`). Output log messages have been also improved to show more info to the users. Several articles have been writen in this process: [raylib_syntax analysis](https://github.com/raysan5/raylib/wiki/raylib-syntax-analysis) and [raylib API usage analysis](https://gist.github.com/raysan5/7c0c9fff1b6c19af24bb4a51b7383f1e). In general, a big polishment of the library to make it more consistent and coherent.
|
|
||||||
|
|
||||||
- **Event Automation System**: This new _experimental_ feature has been added for future usage, it allows to **record input events and re-play them automatically**. This feature could be very useful to automatize examples testing but also for tutorials with assited game playing, in-game cinematics, speedruns, AI playing and more! Note this feature is still experimental.
|
|
||||||
|
|
||||||
- **Custom game-loop control**: As requested by some advance users, **the game-loop control can be exposed** compiling raylib with the config flag: `SUPPORT_CUSTOM_FRAME_CONTROL`. It's intended for advance users that want to control the events polling and also the timming mechanisms of their games.
|
|
||||||
|
|
||||||
- [**`rlgl 4.0`**](https://github.com/raysan5/raylib/blob/master/src/rlgl.h): This module has been completely **decoupled from platform layer** and raylib, now `rlgl` single-file header-only library only depends on the multiple OpenGL backends supported, even the dependency on `raymath` has been removed. Additionally, **support for OpenGL 4.3** has been added, supporting compute shaders and Shader Storage Buffer Objects (SSBO). Now `rlgl` can be used as a complete standalone portable library to wrap several OpenGL version and providing **a simple and easy-to-use pseudo-OpenGL immediate-mode API**.
|
|
||||||
|
|
||||||
- [**`raymath 1.5`**](https://github.com/raysan5/raylib/blob/master/src/raymath.h): This module has been reviewed and some new conventions have been adopted to make it **more portable and self-contained**:
|
|
||||||
- Functions are self-contained, no function use other raymath function inside, required code is directly re-implemented
|
|
||||||
- Functions input parameters are always received by value
|
|
||||||
- Functions use always a "result" variable for return
|
|
||||||
- Angles are always in radians (`DEG2RAD`/`RAD2DEG` macros provided for convenience)
|
|
||||||
|
|
||||||
- [**`raygui 3.0`**](https://github.com/raysan5/raygui): The **official raylib immediate-mode gui library** (included in `raylib/src/extras`) has been updated to a new version, embedding the icons collection and adding mulstiple improvements. It has been simplified and constrained for a better focus on its task: provide a simple and easy-to-use immediate-mode-gui library for small tools development.
|
|
||||||
|
|
||||||
- [**`raylib_parser`**](https://github.com/raysan5/raylib/tree/master/parser): Added **new tool to parse `raylib.h`** and tokenize its enums, structs and functions, extracting all required info (name, params, descriptions...) into custom output formats (TXT, XML, JSON...) for further processing. This tool is specially useful to **automatize bindings generation**. Hopefully, this tool will make life easier to binding creators to update their bindings for raylib 4.0 or adding new ones!
|
|
||||||
|
|
||||||
- **Zig and Odin official support for raylib**: Those two new amazing programming languages are officially supporting raylib, `Zig` lists raylib as an [official example for C interoperatibility](https://ziglang.org/learn/samples/#c-interoperability) and Odin [officially supports raylib as a vendor library](https://github.com/odin-lang/Odin/tree/master/vendor/raylib). Both languages also have several bingings to raylib. Additionally, Zig build system supported has been added to compile raylib library and examples.
|
|
||||||
|
|
||||||
Those are some of the key features for this new release but actually there is way more! **Support for `VOX` ([MagikaVoxel](https://ephtracy.github.io/)) 3d model format** has been added, **new [raylib_game_template](https://github.com/raysan5/raylib-game-template)** repo shared, **new `EncodeDataBase64()` and `DecodeDataBase64()` functions** added, **improved HiDPI support**, new `DrawTextPro()` with support for text rotations, completely **reviewed `glTF` models loading**, added **`SeekMusicStream()` for music seeking**, many new examples and +20 examples reviewed... **hundreds of improvements and bug fixes**! Make sure to check [CHANGELOG](CHANGELOG) for a detailed list of changes!
|
|
||||||
|
|
||||||
Undoubtely, **this is the best raylib ever**. Enjoy gamedev/tools/graphics programming! :)
|
|
@ -1,16 +0,0 @@
|
|||||||
Copyright (c) 2013-2022 Ramon Santamaria (@raysan5)
|
|
||||||
|
|
||||||
This software is provided "as-is", without any express or implied warranty. In no event
|
|
||||||
will the authors be held liable for any damages arising from the use of this software.
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose, including commercial
|
|
||||||
applications, and to alter it and redistribute it freely, subject to the following restrictions:
|
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you
|
|
||||||
wrote the original software. If you use this software in a product, an acknowledgment
|
|
||||||
in the product documentation would be appreciated but is not required.
|
|
||||||
|
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented
|
|
||||||
as being the original software.
|
|
||||||
|
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
|
@ -1,142 +0,0 @@
|
|||||||
<img align="left" src="https://github.com/raysan5/raylib/blob/master/logo/raylib_logo_animation.gif" width="288px">
|
|
||||||
|
|
||||||
**raylib is a simple and easy-to-use library to enjoy videogames programming.**
|
|
||||||
|
|
||||||
raylib is highly inspired by Borland BGI graphics lib and by XNA framework and it's specially well suited for prototyping, tooling, graphical applications, embedded systems and education.
|
|
||||||
|
|
||||||
*NOTE for ADVENTURERS: raylib is a programming library to enjoy videogames programming; no fancy interface, no visual helpers, no debug button... just coding in the most pure spartan-programmers way.*
|
|
||||||
|
|
||||||
Ready to learn? Jump to [code examples!](https://www.raylib.com/examples.html)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<br>
|
|
||||||
|
|
||||||
[![GitHub contributors](https://img.shields.io/github/contributors/raysan5/raylib)](https://github.com/raysan5/raylib/graphs/contributors)
|
|
||||||
[![GitHub All Releases](https://img.shields.io/github/downloads/raysan5/raylib/total)](https://github.com/raysan5/raylib/releases)
|
|
||||||
[![GitHub commits since tagged version](https://img.shields.io/github/commits-since/raysan5/raylib/4.0.0)](https://github.com/raysan5/raylib/commits/master)
|
|
||||||
[![License](https://img.shields.io/badge/license-zlib%2Flibpng-blue.svg)](LICENSE)
|
|
||||||
|
|
||||||
[![Chat on Discord](https://img.shields.io/discord/426912293134270465.svg?logo=discord)](https://discord.gg/raylib)
|
|
||||||
[![GitHub stars](https://img.shields.io/github/stars/raysan5/raylib?style=social)](https://github.com/raysan5/raylib/stargazers)
|
|
||||||
[![Twitter Follow](https://img.shields.io/twitter/follow/raysan5?style=social)](https://twitter.com/raysan5)
|
|
||||||
[![Subreddit subscribers](https://img.shields.io/reddit/subreddit-subscribers/raylib?style=social)](https://www.reddit.com/r/raylib/)
|
|
||||||
|
|
||||||
[![Windows](https://github.com/raysan5/raylib/workflows/Windows/badge.svg)](https://github.com/raysan5/raylib/actions?query=workflow%3AWindows)
|
|
||||||
[![Linux](https://github.com/raysan5/raylib/workflows/Linux/badge.svg)](https://github.com/raysan5/raylib/actions?query=workflow%3ALinux)
|
|
||||||
[![macOS](https://github.com/raysan5/raylib/workflows/macOS/badge.svg)](https://github.com/raysan5/raylib/actions?query=workflow%3AmacOS)
|
|
||||||
[![Android](https://github.com/raysan5/raylib/workflows/Android/badge.svg)](https://github.com/raysan5/raylib/actions?query=workflow%3AAndroid)
|
|
||||||
[![WebAssembly](https://github.com/raysan5/raylib/workflows/WebAssembly/badge.svg)](https://github.com/raysan5/raylib/actions?query=workflow%3AWebAssembly)
|
|
||||||
|
|
||||||
[![CMakeBuilds](https://github.com/raysan5/raylib/workflows/CMakeBuilds/badge.svg)](https://github.com/raysan5/raylib/actions?query=workflow%3ACMakeBuilds)
|
|
||||||
[![Windows Examples](https://github.com/raysan5/raylib/actions/workflows/windows_examples.yml/badge.svg)](https://github.com/raysan5/raylib/actions/workflows/windows_examples.yml)
|
|
||||||
[![Linux Examples](https://github.com/raysan5/raylib/actions/workflows/linux_examples.yml/badge.svg)](https://github.com/raysan5/raylib/actions/workflows/linux_examples.yml)
|
|
||||||
|
|
||||||
features
|
|
||||||
--------
|
|
||||||
- **NO external dependencies**, all required libraries are [bundled into raylib](https://github.com/raysan5/raylib/tree/master/src/external)
|
|
||||||
- Multiple platforms supported: **Windows, Linux, MacOS, RPI, Android, HTML5... and more!**
|
|
||||||
- Written in plain C code (C99) in PascalCase/camelCase notation
|
|
||||||
- Hardware accelerated with OpenGL (**1.1, 2.1, 3.3, 4.3 or ES 2.0**)
|
|
||||||
- **Unique OpenGL abstraction layer** (usable as standalone module): [rlgl](https://github.com/raysan5/raylib/blob/master/src/rlgl.h)
|
|
||||||
- Multiple **Fonts** formats supported (TTF, XNA fonts, AngelCode fonts)
|
|
||||||
- Multiple texture formats supported, including **compressed formats** (DXT, ETC, ASTC)
|
|
||||||
- **Full 3D support**, including 3D Shapes, Models, Billboards, Heightmaps and more!
|
|
||||||
- Flexible Materials system, supporting classic maps and **PBR maps**
|
|
||||||
- **Animated 3D models** supported (skeletal bones animation) (IQM)
|
|
||||||
- Shaders support, including model and **postprocessing** shaders.
|
|
||||||
- **Powerful math module** for Vector, Matrix and Quaternion operations: [raymath](https://github.com/raysan5/raylib/blob/master/src/raymath.h)
|
|
||||||
- Audio loading and playing with streaming support (WAV, OGG, MP3, FLAC, XM, MOD)
|
|
||||||
- **VR stereo rendering** support with configurable HMD device parameters
|
|
||||||
- Huge examples collection with [+120 code examples](https://github.com/raysan5/raylib/tree/master/examples)!
|
|
||||||
- Bindings to [+50 programming languages](https://github.com/raysan5/raylib/blob/master/BINDINGS.md)!
|
|
||||||
- **Free and open source**.
|
|
||||||
|
|
||||||
basic example
|
|
||||||
--------------
|
|
||||||
This is a basic raylib example, it creates a window and it draws the text `"Congrats! You created your first window!"` in the middle of the screen. Check this example [running live on web here](https://www.raylib.com/examples/core/loader.html?name=core_basic_window).
|
|
||||||
```c
|
|
||||||
#include "raylib.h"
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
InitWindow(800, 450, "raylib [core] example - basic window");
|
|
||||||
|
|
||||||
while (!WindowShouldClose())
|
|
||||||
{
|
|
||||||
BeginDrawing();
|
|
||||||
ClearBackground(RAYWHITE);
|
|
||||||
DrawText("Congrats! You created your first window!", 190, 200, 20, LIGHTGRAY);
|
|
||||||
EndDrawing();
|
|
||||||
}
|
|
||||||
|
|
||||||
CloseWindow();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
build and installation
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
raylib binary releases for Windows, Linux, macOS, Android and HTML5 are available at the [Github Releases page](https://github.com/raysan5/raylib/releases).
|
|
||||||
|
|
||||||
raylib is also available via multiple [package managers](https://github.com/raysan5/raylib/issues/613) on multiple OS distributions.
|
|
||||||
|
|
||||||
#### Installing and building raylib on multiple platforms
|
|
||||||
|
|
||||||
[raylib Wiki](https://github.com/raysan5/raylib/wiki#development-platforms) contains detailed instructions on building and usage on multiple platforms.
|
|
||||||
|
|
||||||
- [Working on Windows](https://github.com/raysan5/raylib/wiki/Working-on-Windows)
|
|
||||||
- [Working on macOS](https://github.com/raysan5/raylib/wiki/Working-on-macOS)
|
|
||||||
- [Working on GNU Linux](https://github.com/raysan5/raylib/wiki/Working-on-GNU-Linux)
|
|
||||||
- [Working on Chrome OS](https://github.com/raysan5/raylib/wiki/Working-on-Chrome-OS)
|
|
||||||
- [Working on FreeBSD](https://github.com/raysan5/raylib/wiki/Working-on-FreeBSD)
|
|
||||||
- [Working on Raspberry Pi](https://github.com/raysan5/raylib/wiki/Working-on-Raspberry-Pi)
|
|
||||||
- [Working for Android](https://github.com/raysan5/raylib/wiki/Working-for-Android)
|
|
||||||
- [Working for Web (HTML5)](https://github.com/raysan5/raylib/wiki/Working-for-Web-(HTML5))
|
|
||||||
- [Working anywhere with CMake](https://github.com/raysan5/raylib/wiki/Working-with-CMake)
|
|
||||||
|
|
||||||
*Note that Wiki is open for edit, if you find some issue while building raylib for your target platform, feel free to edit the Wiki or open and issue related to it.*
|
|
||||||
|
|
||||||
#### Setup raylib with multiple IDEs
|
|
||||||
|
|
||||||
raylib has been developed on Windows platform using [Notepad++](https://notepad-plus-plus.org/) and [MinGW GCC](https://www.mingw-w64.org/) compiler but it can be used with other IDEs on multiple platforms.
|
|
||||||
|
|
||||||
[Projects directory](https://github.com/raysan5/raylib/tree/master/projects) contains several ready-to-use **project templates** to build raylib and code examples with multiple IDEs.
|
|
||||||
|
|
||||||
*Note that there are lots of IDEs supported, some of the provided templates could require some review, please, if you find some issue with some template or you think they could be improved, feel free to send a PR or open a related issue.*
|
|
||||||
|
|
||||||
learning and docs
|
|
||||||
------------------
|
|
||||||
|
|
||||||
raylib is designed to be learned using [the examples](https://github.com/raysan5/raylib/tree/master/examples) as the main reference. There is no standard API documentation but there is a [**cheatsheet**](https://www.raylib.com/cheatsheet/cheatsheet.html) containing all the functions available on the library and a short description of each one of them, input parameters and result value names should be intuitive enough to understand how each function works.
|
|
||||||
|
|
||||||
Some additional documentation about raylib design can be found in raylib GitHub Wiki. Here the more relevant links:
|
|
||||||
|
|
||||||
- [raylib cheatsheet](https://www.raylib.com/cheatsheet/cheatsheet.html)
|
|
||||||
- [raylib architecture](https://github.com/raysan5/raylib/wiki/raylib-architecture)
|
|
||||||
- [raylib library design](https://github.com/raysan5/raylib/wiki)
|
|
||||||
- [raylib examples collection](https://github.com/raysan5/raylib/tree/master/examples)
|
|
||||||
- [raylib games collection](https://github.com/raysan5/raylib-games)
|
|
||||||
|
|
||||||
|
|
||||||
contact and networks
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
raylib is present in several networks and raylib community is growing everyday. If you are using raylib and enjoying it, feel free to join us in any of these networks. The most active network is our [Discord server](https://discord.gg/raylib)! :)
|
|
||||||
|
|
||||||
- Webpage: [https://www.raylib.com](https://www.raylib.com)
|
|
||||||
- Discord: [https://discord.gg/raylib](https://discord.gg/raylib)
|
|
||||||
- Twitter: [https://www.twitter.com/raysan5](https://www.twitter.com/raysan5)
|
|
||||||
- Twitch: [https://www.twitch.tv/raysan5](https://www.twitch.tv/raysan5)
|
|
||||||
- Reddit: [https://www.reddit.com/r/raylib](https://www.reddit.com/r/raylib)
|
|
||||||
- Patreon: [https://www.patreon.com/raylib](https://www.patreon.com/raylib)
|
|
||||||
- YouTube: [https://www.youtube.com/channel/raylib](https://www.youtube.com/c/raylib)
|
|
||||||
|
|
||||||
license
|
|
||||||
-------
|
|
||||||
|
|
||||||
raylib is licensed under an unmodified zlib/libpng license, which is an OSI-certified, BSD-like license that allows static linking with closed source software. Check [LICENSE](LICENSE) for further details.
|
|
||||||
|
|
||||||
raylib uses internally some libraries for window/graphics/inputs management and also to support different fileformats loading, all those libraries are embedded with and are available in [src/external](https://github.com/raysan5/raylib/tree/master/src/external) directory. Check [raylib dependencies LICENSES](https://github.com/raysan5/raylib/wiki/raylib-dependencies) on raylib Wiki for details.
|
|
@ -1,76 +0,0 @@
|
|||||||
# raylib roadmap
|
|
||||||
|
|
||||||
Here it is a wish-list with features and ideas to improve the library. Note that features listed here are usually long term improvements or just describe a route to follow for the library. There are also some additional places to look for raylib improvements of ideas:
|
|
||||||
|
|
||||||
- [GitHub Issues](https://github.com/raysan5/raylib/issues) has several open issues for possible improvements or bugs to fix.
|
|
||||||
- [raylib source code](https://github.com/raysan5/raylib/tree/master/src) has multiple *TODO* comments around code with pending things to review or improve.
|
|
||||||
- [raylib wishlist](https://github.com/raysan5/raylib/discussions/1502) is open to everyone to ask for improvements, feel free to check and comment.
|
|
||||||
|
|
||||||
_Current version of raylib is complete and functional but, as always, there is lot of room for improvement._
|
|
||||||
|
|
||||||
**raylib 4.x**
|
|
||||||
- [ ] Redesign camera module (more flexible) ([#1143](https://github.com/raysan5/raylib/issues/1143))
|
|
||||||
- [ ] Redesign gestures system, improve touch inputs management
|
|
||||||
- [ ] Better documentation and improved examples
|
|
||||||
- [ ] Focus on HTML5 and embedded platforms
|
|
||||||
- [ ] Additional support libraries: [raygui](https://github.com/raysan5/raygui), [rres](https://github.com/raysan5/rres)...
|
|
||||||
|
|
||||||
**raylib 4.0**
|
|
||||||
- [x] Improved consistency and coherency in raylib API
|
|
||||||
- [x] Continuous Deployment using GitHub Actions
|
|
||||||
- [x] rlgl improvements for standalone usage (avoid raylib coupling)
|
|
||||||
- Basic CPU/GPU stats system (memory, draws, time...) ([#1295](https://github.com/raysan5/raylib/issues/1295)) - _DISCARDED_
|
|
||||||
- Software rendering backend (avoiding OpenGL) ([#1370](https://github.com/raysan5/raylib/issues/1370)) - _DISCARDED_
|
|
||||||
- Network module (UDP): `rnet` ([#753](https://github.com/raysan5/raylib/issues/753)) - _DISCARDED_ - Use [nbnet](https://github.com/nathhB/nbnet).
|
|
||||||
|
|
||||||
**raylib 3.0**
|
|
||||||
- [x] Custom memory allocators support
|
|
||||||
- [x] Global variables moved to global context
|
|
||||||
- [x] Optimize data structures for pass-by-value
|
|
||||||
- [x] Trace log messages redesign ([#1065](https://github.com/raysan5/raylib/issues/1065))
|
|
||||||
- [x] Continuous Integration using GitHub Actions
|
|
||||||
|
|
||||||
**raylib 2.5**
|
|
||||||
- [x] Support Animated models
|
|
||||||
- [x] Support glTF models file format
|
|
||||||
- [x] Unicode support on text drawing
|
|
||||||
|
|
||||||
**raylib 2.0**
|
|
||||||
- [x] Removed external dependencies (GLFW3 and OpenAL)
|
|
||||||
- [x] Support TCC compiler (32bit and 64bit)
|
|
||||||
|
|
||||||
**raylib 1.8**
|
|
||||||
- [x] Improved Materials system with PBR support
|
|
||||||
- [x] Procedural image generation functions (spot, gradient, noise...)
|
|
||||||
- [x] Procedural mesh generation functions (cube, sphere...)
|
|
||||||
- [x] Custom Android APK build pipeline (default Makefile)
|
|
||||||
|
|
||||||
**raylib 1.7**
|
|
||||||
- [x] Support configuration flags
|
|
||||||
- [x] Improved build system for Android
|
|
||||||
- [x] Gamepad support on HTML5
|
|
||||||
|
|
||||||
**raylib 1.6**
|
|
||||||
- [x] Lua scripting support (raylib Lua wrapper)
|
|
||||||
- [x] Redesigned audio module
|
|
||||||
- [x] Support FLAC file format
|
|
||||||
|
|
||||||
**raylib 1.5**
|
|
||||||
- [x] Support Oculus Rift CV1 and VR stereo rendering (simulator)
|
|
||||||
- [x] Redesign Shaders/Textures system -> New Materials system
|
|
||||||
- [x] Support lighting: Omni, Directional and Spot lights
|
|
||||||
- [x] Redesign physics module (physac)
|
|
||||||
- [x] Chiptunes audio modules support
|
|
||||||
|
|
||||||
**raylib 1.4**
|
|
||||||
- [x] TTF fonts support (using stb_truetype)
|
|
||||||
- [x] Raycast system for 3D picking (including collisions detection)
|
|
||||||
- [x] Floyd-Steinberg dithering on 16bit image format conversion
|
|
||||||
- [x] Basic image manipulation functions (crop, resize, draw...)
|
|
||||||
- [x] Storage load/save data functionality
|
|
||||||
- [x] Add Physics module (physac)
|
|
||||||
- [x] Remove GLEW dependency -> Replaced by GLAD
|
|
||||||
- [x] Redesign Raspberry PI inputs system
|
|
||||||
- [x] Redesign gestures module to be multiplatform
|
|
||||||
- [x] Module raymath as header-only and functions inline
|
|
||||||
- [x] Add Easings module (easings.h)
|
|
@ -1,69 +0,0 @@
|
|||||||
## raylib GitHub Sponsors
|
|
||||||
|
|
||||||
### Current raylib GitHub Sponsors (raylib 4.0 release)
|
|
||||||
|
|
||||||
The following people are currently [**sponsoring raylib**](https://github.com/sponsors/raysan5) with a generous donation to allow improving and growing the project!
|
|
||||||
|
|
||||||
- Eric J. ([@ProfJski](https://github.com/ProfJski))
|
|
||||||
- Zach Geis ([@zacgeis](https://github.com/zacgeis))
|
|
||||||
- minirop ([@minirop](https://github.com/minirop))
|
|
||||||
- Daniel Gómez ([@Koocachookies](https://github.com/Koocachookies))
|
|
||||||
- Marc Agüera ([@maguera93](https://github.com/maguera93))
|
|
||||||
- Robin Mattheussen ([@romatthe](https://github.com/romatthe))
|
|
||||||
- Grant Haywood ([@cinterloper](https://github.com/cinterloper))
|
|
||||||
- Terry Nguyen ([@terrehbyte](https://github.com/terrehbyte))
|
|
||||||
- Tommi Sinivuo ([@TommiSinivuo](https://github.com/TommiSinivuo))
|
|
||||||
- Richard Urbanec ([@Poryg1](https://github.com/Poryg1))
|
|
||||||
- pmgl ([@pmgl](https://github.com/pmgl))
|
|
||||||
- cob ([@majorcob](https://github.com/majorcob))
|
|
||||||
- Samuel Batista ([@gamedevsam](https://github.com/gamedevsam))
|
|
||||||
- Merlyn Morgan-Graham ([@kavika13](https://github.com/kavika13))
|
|
||||||
- linus ([@hochbaum](https://github.com/hochbaum))
|
|
||||||
- Níckolas Daniel da Silva ([@nawarian](https://github.com/nawarian) - [thephp.website](https://thephp.website/))
|
|
||||||
- kenzie ([@sme-ek](https://github.com/sme-ek))
|
|
||||||
- Allan Regush ([@AllanRegush](https://github.com/AllanRegush))
|
|
||||||
- Jeffery Myers ([@JeffM2501](https://github.com/JeffM2501))
|
|
||||||
- Ryan Roden-Corrent ([@rcorre](https://github.com/rcorre))
|
|
||||||
- michaelfiber ([@michaelfiber](https://github.com/michaelfiber))
|
|
||||||
- Nikhilesh S ([@nikki93](https://github.com/nikki93))
|
|
||||||
- kevinabraun ([@kevinabraun](https://github.com/kevinabraun))
|
|
||||||
- Matthew Owens ([@MatthewOwens](https://github.com/MatthewOwens))
|
|
||||||
- Tim Eilers ([@eilerstim](https://github.com/eilerstim))
|
|
||||||
- Laurentino Luna ([@catmanl](https://github.com/catmanl))
|
|
||||||
|
|
||||||
### Past raylib GitHub Sponsors
|
|
||||||
|
|
||||||
The following people has **sponsored raylib** in the past, allowing the project to reach current amazing state.
|
|
||||||
|
|
||||||
- Jonathan Johnson ([@ecton](https://github.com/ecton))
|
|
||||||
- Rudy Faile ([@rfaile313](https://github.com/rfaile313)) - https://rudyfaile.com/
|
|
||||||
- frithrah ([@frithrah](https://github.com/frithrah))
|
|
||||||
- Jens Pitkänen ([@neonmoe](https://github.com/neonmoe))
|
|
||||||
- Rahul Nair ([@rahulunair](https://github.com/rahulunair))
|
|
||||||
- albatros-hmd ([@albatros-hmd](https://github.com/albatros-hmd))
|
|
||||||
- Benjamin Stigsen ([@BenStigsen](https://github.com/BenStigsen))
|
|
||||||
- Louis Johnson ([@louisgjohnson](https://github.com/louisgjohnson))
|
|
||||||
- Dani Martin ([@danimartin82](https://github.com/danimartin82))
|
|
||||||
- Joakim Wennergren ([@joakimwennergren](https://github.com/joakimwennergren))
|
|
||||||
- Alexandre Chêne ([@kooparse](https://github.com/kooparse))
|
|
||||||
- daddio69 ([@daddio69](https://github.com/daddio69))
|
|
||||||
- James Ghawaly ([@jghawaly](https://github.com/jghawaly))
|
|
||||||
- jack ([@Jack-Ji](https://github.com/Jack-Ji))
|
|
||||||
- Guido Offermans ([@jghawaly](https://github.com/GuidoOffermans))
|
|
||||||
- devdad ([@devdad](https://github.com/devdad))
|
|
||||||
- Pau Fernández ([@pauek](https://github.com/pauek))
|
|
||||||
- Sergio ([@anidealgift](https://github.com/anidealgift))
|
|
||||||
- Snowminx ([@Gamerfiend](https://github.com/Gamerfiend))
|
|
||||||
- NimbusFox ([@NimbusFox](https://github.com/NimbusFox))
|
|
||||||
- Shylie ([@Shylie](https://github.com/Shylie))
|
|
||||||
- Livio Dal Maso ([@Humeur](https://github.com/Humeur))
|
|
||||||
- Diego Vaccher ([@denny0754](https://github.com/denny0754))
|
|
||||||
- Ricardo Alcantara ([@ricardoalcantara](https://github.com/ricardoalcantara))
|
|
||||||
- Toby4213 ([@Toby4213](https://github.com/Toby4213))
|
|
||||||
|
|
||||||
### Notes for Current/Past raylib Sponsor
|
|
||||||
|
|
||||||
- If you are not on the list, feel free to send a PR to be added (if desired).
|
|
||||||
- If you want your personal webpage or project listed, feel free to send a PR to be added.
|
|
||||||
- If you prefer not to be in this list, feel free to send a PR to be remove.
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
|||||||
include(CheckCCompilerFlag)
|
|
||||||
function(add_if_flag_compiles flag)
|
|
||||||
CHECK_C_COMPILER_FLAG("${flag}" COMPILER_HAS_THOSE_TOGGLES)
|
|
||||||
set(outcome "Failed")
|
|
||||||
if(COMPILER_HAS_THOSE_TOGGLES)
|
|
||||||
foreach(var ${ARGN})
|
|
||||||
set(${var} "${flag} ${${var}}" PARENT_SCOPE)
|
|
||||||
endforeach()
|
|
||||||
set(outcome "compiles")
|
|
||||||
endif()
|
|
||||||
message(STATUS "Testing if ${flag} can be used -- ${outcome}")
|
|
||||||
endfunction()
|
|
@ -1,18 +0,0 @@
|
|||||||
if(${PLATFORM} MATCHES "Desktop" AND APPLE)
|
|
||||||
if(MACOS_FATLIB)
|
|
||||||
if (CMAKE_OSX_ARCHITECTURES)
|
|
||||||
message(FATAL_ERROR "User supplied -DCMAKE_OSX_ARCHITECTURES overrides -DMACOS_FATLIB=ON")
|
|
||||||
else()
|
|
||||||
set(CMAKE_OSX_ARCHITECTURES "x86_64;i386")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# This helps support the case where emsdk toolchain file is used
|
|
||||||
# either by setting it with -DCMAKE_TOOLCHAIN_FILE=<path_to_emsdk>/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake
|
|
||||||
# or by using "emcmake cmake -B build -S ." as described in https://emscripten.org/docs/compiling/Building-Projects.html
|
|
||||||
if(EMSCRIPTEN)
|
|
||||||
SET(PLATFORM Web CACHE STRING "Forcing PLATFORM_WEB because EMSCRIPTEN was detected")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# vim: ft=cmake
|
|
@ -1,115 +0,0 @@
|
|||||||
# Adding compile definitions
|
|
||||||
target_compile_definitions("raylib" PUBLIC "${PLATFORM_CPP}")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "${GRAPHICS}")
|
|
||||||
|
|
||||||
function(define_if target variable)
|
|
||||||
if (${${variable}})
|
|
||||||
message(STATUS "${variable}=${${variable}}")
|
|
||||||
target_compile_definitions(${target} PUBLIC "${variable}")
|
|
||||||
endif ()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
if (${CUSTOMIZE_BUILD})
|
|
||||||
target_compile_definitions("raylib" PUBLIC EXTERNAL_CONFIG_FLAGS)
|
|
||||||
define_if("raylib" USE_AUDIO)
|
|
||||||
define_if("raylib" SUPPORT_MODULE_RSHAPES)
|
|
||||||
define_if("raylib" SUPPORT_MODULE_RTEXTURES)
|
|
||||||
define_if("raylib" SUPPORT_MODULE_RTEXT)
|
|
||||||
define_if("raylib" SUPPORT_MODULE_RMODELS)
|
|
||||||
define_if("raylib" SUPPORT_MODULE_RAUDIO)
|
|
||||||
define_if("raylib" SUPPORT_CAMERA_SYSTEM)
|
|
||||||
define_if("raylib" SUPPORT_GESTURES_SYSTEM)
|
|
||||||
define_if("raylib" SUPPORT_MOUSE_GESTURES)
|
|
||||||
define_if("raylib" SUPPORT_SSH_KEYBOARD_RPI)
|
|
||||||
define_if("raylib" SUPPORT_DEFAULT_FONT)
|
|
||||||
define_if("raylib" SUPPORT_SCREEN_CAPTURE)
|
|
||||||
define_if("raylib" SUPPORT_GIF_RECORDING)
|
|
||||||
define_if("raylib" SUPPORT_BUSY_WAIT_LOOP)
|
|
||||||
define_if("raylib" SUPPORT_EVENTS_WAITING)
|
|
||||||
define_if("raylib" SUPPORT_WINMM_HIGHRES_TIMER)
|
|
||||||
define_if("raylib" SUPPORT_DATA_STORAGE)
|
|
||||||
define_if("raylib" SUPPORT_COMPRESSION_API)
|
|
||||||
define_if("raylib" SUPPORT_QUADS_DRAW_MODE)
|
|
||||||
define_if("raylib" SUPPORT_IMAGE_EXPORT)
|
|
||||||
define_if("raylib" SUPPORT_IMAGE_GENERATION)
|
|
||||||
define_if("raylib" SUPPORT_IMAGE_MANIPULATION)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_PNG)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_DDS)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_HDR)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_KTX)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_ASTC)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_BMP)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_TGA)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_JPG)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_GIF)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_QOI)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_PSD)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_PKM)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_PVR)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_FNT)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_TTF)
|
|
||||||
define_if("raylib" SUPPORT_TEXT_MANIPULATION)
|
|
||||||
define_if("raylib" SUPPORT_MESH_GENERATION)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_OBJ)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_MTL)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_IQM)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_GLTF)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_VOX)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_WAV)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_OGG)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_XM)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_MOD)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_MP3)
|
|
||||||
define_if("raylib" SUPPORT_FILEFORMAT_FLAC)
|
|
||||||
define_if("raylib" SUPPORT_STANDARD_FILEIO)
|
|
||||||
define_if("raylib" SUPPORT_TRACELOG)
|
|
||||||
|
|
||||||
if (UNIX AND NOT APPLE)
|
|
||||||
target_compile_definitions("raylib" PUBLIC "MAX_FILEPATH_LENGTH=4096")
|
|
||||||
else ()
|
|
||||||
target_compile_definitions("raylib" PUBLIC "MAX_FILEPATH_LENGTH=512")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
target_compile_definitions("raylib" PUBLIC "MAX_GAMEPADS=4")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "MAX_GAMEPAD_AXIS=8")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "MAX_GAMEPAD_BUTTONS=32")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "MAX_TOUCH_POINTS=10")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "MAX_KEY_PRESSED_QUEUE=16")
|
|
||||||
|
|
||||||
target_compile_definitions("raylib" PUBLIC "STORAGE_DATA_FILE=\"storage.data\"")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "MAX_KEY_PRESSED_QUEUE=16")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "MAX_DECOMPRESSION_SIZE=64")
|
|
||||||
|
|
||||||
if (${GRAPHICS} MATCHES "GRAPHICS_API_OPENGL_33" OR ${GRAPHICS} MATCHES "GRAPHICS_API_OPENGL_11")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "DEFAULT_BATCH_BUFFER_ELEMENTS=8192")
|
|
||||||
elseif (${GRAPHICS} MATCHES "GRAPHICS_API_OPENGL_ES2")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "DEFAULT_BATCH_BUFFER_ELEMENTS=2048")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
target_compile_definitions("raylib" PUBLIC "DEFAULT_BATCH_DRAWCALLS=256")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "MAX_MATRIX_STACK_SIZE=32")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "MAX_SHADER_LOCATIONS=32")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "MAX_MATERIAL_MAPS=12")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "RL_CULL_DISTANCE_NEAR=0.01")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "RL_CULL_DISTANCE_FAR=1000.0")
|
|
||||||
|
|
||||||
target_compile_definitions("raylib" PUBLIC "DEFAULT_SHADER_ATTRIB_NAME_POSITION=\"vertexPosition\"")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD=\"vertexTexCoord\"")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "DEFAULT_SHADER_ATTRIB_NAME_NORMAL=\"vertexNormal\"")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "DEFAULT_SHADER_ATTRIB_NAME_COLOR=\"vertexColor\"")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "DEFAULT_SHADER_ATTRIB_NAME_TANGENT=\"vertexTangent\"")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2=\"vertexTexCoord2\"")
|
|
||||||
|
|
||||||
target_compile_definitions("raylib" PUBLIC "MAX_TEXT_BUFFER_LENGTH=1024")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "MAX_TEXT_UNICODE_CHARS=512")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "MAX_TEXTSPLIT_COUNT=128")
|
|
||||||
|
|
||||||
target_compile_definitions("raylib" PUBLIC "AUDIO_DEVICE_FORMAT=ma_format_f32")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "AUDIO_DEVICE_CHANNELS=2")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "AUDIO_DEVICE_SAMPLE_RATE=44100")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "DEFAULT_AUDIO_BUFFER_SIZE=4096")
|
|
||||||
|
|
||||||
target_compile_definitions("raylib" PUBLIC "MAX_TRACELOG_MSG_LENGTH=128")
|
|
||||||
target_compile_definitions("raylib" PUBLIC "MAX_UWP_MESSAGES=512")
|
|
||||||
endif ()
|
|
||||||
|
|
@ -1,79 +0,0 @@
|
|||||||
include(AddIfFlagCompiles)
|
|
||||||
|
|
||||||
# Makes +/- operations on void pointers be considered an error
|
|
||||||
# https://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html
|
|
||||||
add_if_flag_compiles(-Werror=pointer-arith CMAKE_C_FLAGS)
|
|
||||||
|
|
||||||
# Generates error whenever a function is used before being declared
|
|
||||||
# https://gcc.gnu.org/onlinedocs/gcc-4.0.1/gcc/Warning-Options.html
|
|
||||||
add_if_flag_compiles(-Werror=implicit-function-declaration CMAKE_C_FLAGS)
|
|
||||||
|
|
||||||
# Allows some casting of pointers without generating a warning
|
|
||||||
add_if_flag_compiles(-fno-strict-aliasing CMAKE_C_FLAGS)
|
|
||||||
|
|
||||||
if (ENABLE_MSAN AND ENABLE_ASAN)
|
|
||||||
# MSAN and ASAN both work on memory - ASAN does more things
|
|
||||||
MESSAGE(WARNING "Compiling with both AddressSanitizer and MemorySanitizer is not recommended")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (ENABLE_ASAN)
|
|
||||||
|
|
||||||
# If enabled it would generate errors/warnings for all kinds of memory errors
|
|
||||||
# (like returning a stack variable by reference)
|
|
||||||
# https://clang.llvm.org/docs/AddressSanitizer.html
|
|
||||||
|
|
||||||
add_if_flag_compiles(-fno-omit-frame-pointer CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
|
||||||
add_if_flag_compiles(-fsanitize=address CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
|
||||||
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (ENABLE_UBSAN)
|
|
||||||
|
|
||||||
# If enabled this will generate errors for undefined behavior points
|
|
||||||
# (like adding +1 to the maximum int value)
|
|
||||||
# https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
|
|
||||||
|
|
||||||
add_if_flag_compiles(-fno-omit-frame-pointer CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
|
||||||
add_if_flag_compiles(-fsanitize=undefined CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
|
||||||
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (ENABLE_MSAN)
|
|
||||||
|
|
||||||
# If enabled this will generate warnings for places where uninitialized memory is used
|
|
||||||
# https://clang.llvm.org/docs/MemorySanitizer.html
|
|
||||||
|
|
||||||
add_if_flag_compiles(-fno-omit-frame-pointer CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
|
||||||
add_if_flag_compiles(-fsanitize=memory CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
|
||||||
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(CMAKE_VERSION VERSION_LESS "3.1")
|
|
||||||
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
|
||||||
add_if_flag_compiles(-std=gnu99 CMAKE_C_FLAGS)
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
set (CMAKE_C_STANDARD 99)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(${PLATFORM} MATCHES "Android")
|
|
||||||
|
|
||||||
# If enabled will remove dead code during the linking process
|
|
||||||
# https://gcc.gnu.org/onlinedocs/gnat_ugn/Compilation-options.html
|
|
||||||
add_if_flag_compiles(-ffunction-sections CMAKE_C_FLAGS)
|
|
||||||
|
|
||||||
# If enabled will generate some exception data (usually disabled for C programs)
|
|
||||||
# https://gcc.gnu.org/onlinedocs/gcc-4.2.4/gcc/Code-Gen-Options.html
|
|
||||||
add_if_flag_compiles(-funwind-tables CMAKE_C_FLAGS)
|
|
||||||
|
|
||||||
# If enabled adds stack protection guards around functions that allocate memory
|
|
||||||
# https://www.keil.com/support/man/docs/armclang_ref/armclang_ref_cjh1548250046139.htm
|
|
||||||
add_if_flag_compiles(-fstack-protector-strong CMAKE_C_FLAGS)
|
|
||||||
|
|
||||||
# Marks that the library will not be compiled with an executable stack
|
|
||||||
add_if_flag_compiles(-Wa,--noexecstack CMAKE_C_FLAGS)
|
|
||||||
|
|
||||||
# Do not expand symbolic links or resolve paths like "/./" or "/../", etc.
|
|
||||||
# https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html
|
|
||||||
add_if_flag_compiles(-no-canonical-prefixes CMAKE_C_FLAGS)
|
|
||||||
endif()
|
|
@ -1,9 +0,0 @@
|
|||||||
macro(enum_option var values description)
|
|
||||||
set(${var}_VALUES ${values})
|
|
||||||
list(GET ${var}_VALUES 0 default)
|
|
||||||
set(${var} "${default}" CACHE STRING "${description}")
|
|
||||||
set_property(CACHE ${var} PROPERTY STRINGS ${${var}_VALUES})
|
|
||||||
if (NOT ";${${var}_VALUES};" MATCHES ";${${var}};")
|
|
||||||
message(FATAL_ERROR "Unknown value ${${var}}. Only -D${var}=${${var}_VALUES} allowed.")
|
|
||||||
endif()
|
|
||||||
endmacro()
|
|
@ -1,34 +0,0 @@
|
|||||||
|
|
||||||
if(USE_EXTERNAL_GLFW STREQUAL "ON")
|
|
||||||
find_package(glfw3 3.3.3 REQUIRED)
|
|
||||||
elseif(USE_EXTERNAL_GLFW STREQUAL "IF_POSSIBLE")
|
|
||||||
find_package(glfw3 3.3.3 QUIET)
|
|
||||||
endif()
|
|
||||||
if (glfw3_FOUND)
|
|
||||||
set(LIBS_PRIVATE ${LIBS_PRIVATE} glfw)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Explicitly check against "ON", because USE_EXTERNAL_GLFW is a tristate option
|
|
||||||
# Also adding only on desktop (web also uses glfw but it is more limited and is added using an emcc linker flag)
|
|
||||||
if(NOT glfw3_FOUND AND NOT USE_EXTERNAL_GLFW STREQUAL "ON" AND "${PLATFORM}" MATCHES "Desktop")
|
|
||||||
MESSAGE(STATUS "Using raylib's GLFW")
|
|
||||||
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
|
|
||||||
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
|
||||||
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
|
|
||||||
set(GLFW_INSTALL OFF CACHE BOOL "" FORCE)
|
|
||||||
set(GLFW_USE_WAYLAND ${USE_WAYLAND} CACHE BOOL "" FORCE)
|
|
||||||
|
|
||||||
set(WAS_SHARED ${BUILD_SHARED_LIBS})
|
|
||||||
set(BUILD_SHARED_LIBS OFF CACHE BOOL " " FORCE)
|
|
||||||
|
|
||||||
add_subdirectory(external/glfw)
|
|
||||||
|
|
||||||
set(BUILD_SHARED_LIBS ${WAS_SHARED} CACHE BOOL " " FORCE)
|
|
||||||
unset(WAS_SHARED)
|
|
||||||
|
|
||||||
list(APPEND raylib_sources $<TARGET_OBJECTS:glfw>)
|
|
||||||
include_directories(BEFORE SYSTEM external/glfw/include)
|
|
||||||
else()
|
|
||||||
MESSAGE(STATUS "Using external GLFW")
|
|
||||||
set(GLFW_PKG_DEPS glfw3)
|
|
||||||
endif()
|
|
@ -1,29 +0,0 @@
|
|||||||
install(
|
|
||||||
TARGETS raylib EXPORT raylib-targets
|
|
||||||
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
||||||
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
||||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
|
||||||
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
|
||||||
)
|
|
||||||
|
|
||||||
# PKG_CONFIG_LIBS_PRIVATE is used in raylib.pc.in
|
|
||||||
if (NOT BUILD_SHARED_LIBS)
|
|
||||||
include(LibraryPathToLinkerFlags)
|
|
||||||
library_path_to_linker_flags(__PKG_CONFIG_LIBS_PRIVATE "${LIBS_PRIVATE}")
|
|
||||||
set(PKG_CONFIG_LIBS_PRIVATE ${__PKG_CONFIG_LIBS_PRIVATE} ${GLFW_PKG_LIBS})
|
|
||||||
string(REPLACE ";" " " PKG_CONFIG_LIBS_PRIVATE "${PKG_CONFIG_LIBS_PRIVATE}")
|
|
||||||
elseif (BUILD_SHARED_LIBS)
|
|
||||||
set(PKG_CONFIG_LIBS_EXTRA "")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
join_paths(libdir_for_pc_file "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}")
|
|
||||||
join_paths(includedir_for_pc_file "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
|
|
||||||
configure_file(../raylib.pc.in raylib.pc @ONLY)
|
|
||||||
configure_file(../cmake/raylib-config-version.cmake raylib-config-version.cmake @ONLY)
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/raylib.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/raylib-config-version.cmake DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/raylib")
|
|
||||||
install(FILES ${PROJECT_SOURCE_DIR}/../cmake/raylib-config.cmake DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/raylib")
|
|
||||||
|
|
||||||
# populates raylib_{FOUND, INCLUDE_DIRS, LIBRARIES, LDFLAGS, DEFINITIONS}
|
|
||||||
include(PopulateConfigVariablesLocally)
|
|
||||||
populate_config_variables_locally(raylib)
|
|
@ -1,26 +0,0 @@
|
|||||||
# This module provides function for joining paths
|
|
||||||
# known from most languages
|
|
||||||
#
|
|
||||||
# Original license:
|
|
||||||
# SPDX-License-Identifier: (MIT OR CC0-1.0)
|
|
||||||
# Explicit permission given to distribute this module under
|
|
||||||
# the terms of the project as described in /LICENSE.rst.
|
|
||||||
# Copyright 2020 Jan Tojnar
|
|
||||||
# https://github.com/jtojnar/cmake-snips
|
|
||||||
#
|
|
||||||
# Modelled after Python’s os.path.join
|
|
||||||
# https://docs.python.org/3.7/library/os.path.html#os.path.join
|
|
||||||
# Windows not supported
|
|
||||||
function(join_paths joined_path first_path_segment)
|
|
||||||
set(temp_path "${first_path_segment}")
|
|
||||||
foreach(current_segment IN LISTS ARGN)
|
|
||||||
if(NOT ("${current_segment}" STREQUAL ""))
|
|
||||||
if(IS_ABSOLUTE "${current_segment}")
|
|
||||||
set(temp_path "${current_segment}")
|
|
||||||
else()
|
|
||||||
set(temp_path "${temp_path}/${current_segment}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
set(${joined_path} "${temp_path}" PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
@ -1,112 +0,0 @@
|
|||||||
if (${PLATFORM} MATCHES "Desktop")
|
|
||||||
set(PLATFORM_CPP "PLATFORM_DESKTOP")
|
|
||||||
|
|
||||||
if (APPLE)
|
|
||||||
# Need to force OpenGL 3.3 on OS X
|
|
||||||
# See: https://github.com/raysan5/raylib/issues/341
|
|
||||||
set(GRAPHICS "GRAPHICS_API_OPENGL_33")
|
|
||||||
find_library(OPENGL_LIBRARY OpenGL)
|
|
||||||
set(LIBS_PRIVATE ${OPENGL_LIBRARY})
|
|
||||||
link_libraries("${LIBS_PRIVATE}")
|
|
||||||
if (NOT CMAKE_SYSTEM STRLESS "Darwin-18.0.0")
|
|
||||||
add_definitions(-DGL_SILENCE_DEPRECATION)
|
|
||||||
MESSAGE(AUTHOR_WARNING "OpenGL is deprecated starting with macOS 10.14 (Mojave)!")
|
|
||||||
endif ()
|
|
||||||
elseif (WIN32)
|
|
||||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
|
||||||
find_package(OpenGL QUIET)
|
|
||||||
set(LIBS_PRIVATE ${OPENGL_LIBRARIES} winmm)
|
|
||||||
else ()
|
|
||||||
find_library(pthread NAMES pthread)
|
|
||||||
find_package(OpenGL QUIET)
|
|
||||||
if ("${OPENGL_LIBRARIES}" STREQUAL "")
|
|
||||||
set(OPENGL_LIBRARIES "GL")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if ("${CMAKE_SYSTEM_NAME}" MATCHES "(Net|Open)BSD")
|
|
||||||
find_library(OSS_LIBRARY ossaudio)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
set(LIBS_PRIVATE m pthread ${OPENGL_LIBRARIES} ${OSS_LIBRARY})
|
|
||||||
|
|
||||||
if (USE_AUDIO)
|
|
||||||
set(LIBS_PRIVATE ${LIBS_PRIVATE} dl)
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
elseif (${PLATFORM} MATCHES "Web")
|
|
||||||
set(PLATFORM_CPP "PLATFORM_WEB")
|
|
||||||
set(GRAPHICS "GRAPHICS_API_OPENGL_ES2")
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s USE_GLFW=3 -s ASSERTIONS=1 --profiling")
|
|
||||||
set(CMAKE_STATIC_LIBRARY_SUFFIX ".a")
|
|
||||||
|
|
||||||
elseif (${PLATFORM} MATCHES "Android")
|
|
||||||
set(PLATFORM_CPP "PLATFORM_ANDROID")
|
|
||||||
set(GRAPHICS "GRAPHICS_API_OPENGL_ES2")
|
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
||||||
set(raylib_sources "${raylib_sources} ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c")
|
|
||||||
add_definitions(-DANDROID -D__ANDROID_API__=21)
|
|
||||||
include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
|
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--exclude-libs,libatomic.a -Wl,--build-id -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings -u ANativeActivity_onCreate -Wl,-undefined,dynamic_lookup")
|
|
||||||
|
|
||||||
find_library(OPENGL_LIBRARY OpenGL)
|
|
||||||
set(LIBS_PRIVATE m log android EGL GLESv2 OpenSLES atomic c)
|
|
||||||
|
|
||||||
elseif (${PLATFORM} MATCHES "Raspberry Pi")
|
|
||||||
set(PLATFORM_CPP "PLATFORM_RPI")
|
|
||||||
set(GRAPHICS "GRAPHICS_API_OPENGL_ES2")
|
|
||||||
|
|
||||||
add_definitions(-D_DEFAULT_SOURCE)
|
|
||||||
|
|
||||||
find_library(GLESV2 brcmGLESv2 HINTS /opt/vc/lib)
|
|
||||||
find_library(EGL brcmEGL HINTS /opt/vc/lib)
|
|
||||||
find_library(BCMHOST bcm_host HINTS /opt/vc/lib)
|
|
||||||
include_directories(/opt/vc/include /opt/vc/include/interface/vmcs_host/linux /opt/vc/include/interface/vcos/pthreads)
|
|
||||||
link_directories(/opt/vc/lib)
|
|
||||||
set(LIBS_PRIVATE ${GLESV2} ${EGL} ${BCMHOST} pthread rt m dl)
|
|
||||||
|
|
||||||
elseif (${PLATFORM} MATCHES "DRM")
|
|
||||||
set(PLATFORM_CPP "PLATFORM_DRM")
|
|
||||||
set(GRAPHICS "GRAPHICS_API_OPENGL_ES2")
|
|
||||||
|
|
||||||
add_definitions(-D_DEFAULT_SOURCE)
|
|
||||||
add_definitions(-DEGL_NO_X11)
|
|
||||||
add_definitions(-DPLATFORM_DRM)
|
|
||||||
|
|
||||||
find_library(GLESV2 GLESv2)
|
|
||||||
find_library(EGL EGL)
|
|
||||||
find_library(DRM drm)
|
|
||||||
find_library(GBM gbm)
|
|
||||||
|
|
||||||
if (NOT CMAKE_CROSSCOMPILING)
|
|
||||||
include_directories(/usr/include/libdrm)
|
|
||||||
endif ()
|
|
||||||
set(LIBS_PRIVATE ${GLESV2} ${EGL} ${DRM} ${GBM} pthread m dl)
|
|
||||||
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (${OPENGL_VERSION})
|
|
||||||
set(${SUGGESTED_GRAPHICS} "${GRAPHICS}")
|
|
||||||
if (${OPENGL_VERSION} MATCHES "3.3")
|
|
||||||
set(GRAPHICS "GRAPHICS_API_OPENGL_33")
|
|
||||||
elseif (${OPENGL_VERSION} MATCHES "2.1")
|
|
||||||
set(GRAPHICS "GRAPHICS_API_OPENGL_21")
|
|
||||||
elseif (${OPENGL_VERSION} MATCHES "1.1")
|
|
||||||
set(GRAPHICS "GRAPHICS_API_OPENGL_11")
|
|
||||||
elseif (${OPENGL_VERSION} MATCHES "ES 2.0")
|
|
||||||
set(GRAPHICS "GRAPHICS_API_OPENGL_ES2")
|
|
||||||
endif ()
|
|
||||||
if ("${SUGGESTED_GRAPHICS}" AND NOT "${SUGGESTED_GRAPHICS}" STREQUAL "${GRAPHICS}")
|
|
||||||
message(WARNING "You are overriding the suggested GRAPHICS=${SUGGESTED_GRAPHICS} with ${GRAPHICS}! This may fail")
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (NOT GRAPHICS)
|
|
||||||
set(GRAPHICS "GRAPHICS_API_OPENGL_33")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
set(LIBS_PRIVATE ${LIBS_PRIVATE} ${OPENAL_LIBRARY})
|
|
||||||
|
|
||||||
if (${PLATFORM} MATCHES "Desktop")
|
|
||||||
set(LIBS_PRIVATE ${LIBS_PRIVATE} glfw)
|
|
||||||
endif ()
|
|
@ -1,24 +0,0 @@
|
|||||||
function(library_path_to_linker_flags LD_FLAGS LIB_PATHS)
|
|
||||||
foreach(L ${LIB_PATHS})
|
|
||||||
get_filename_component(DIR ${L} PATH)
|
|
||||||
get_filename_component(LIBFILE ${L} NAME_WE)
|
|
||||||
STRING(REGEX REPLACE "^lib" "" FILE ${LIBFILE})
|
|
||||||
|
|
||||||
if (${L} MATCHES "[.]framework$")
|
|
||||||
set(FILE_OPT "-framework ${FILE}")
|
|
||||||
set(DIR_OPT "-F${DIR}")
|
|
||||||
else()
|
|
||||||
set(FILE_OPT "-l${FILE}")
|
|
||||||
set(DIR_OPT "-L${DIR}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if ("${DIR}" STREQUAL "" OR "${DIR}" STREQUAL "${LASTDIR}")
|
|
||||||
set (DIR_OPT "")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(LASTDIR ${DIR})
|
|
||||||
|
|
||||||
set(${LD_FLAGS} ${${LD_FLAGS}} ${DIR_OPT} ${FILE_OPT} PARENT_SCOPE)
|
|
||||||
string (REPLACE ";" " " ${LD_FLAGS} "${${LD_FLAGS}}")
|
|
||||||
endforeach()
|
|
||||||
endfunction()
|
|
@ -1,13 +0,0 @@
|
|||||||
# Packaging
|
|
||||||
SET(CPACK_PACKAGE_NAME "raylib")
|
|
||||||
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Simple and easy-to-use library to enjoy videogames programming")
|
|
||||||
SET(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
|
|
||||||
SET(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}")
|
|
||||||
SET(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
|
|
||||||
SET(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}")
|
|
||||||
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/../README.md")
|
|
||||||
SET(CPACK_RESOURCE_FILE_WELCOME "${PROJECT_SOURCE_DIR}/../README.md")
|
|
||||||
SET(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/../LICENSE")
|
|
||||||
SET(CPACK_PACKAGE_FILE_NAME "raylib-${PROJECT_VERSION}$ENV{RAYLIB_PACKAGE_SUFFIX}")
|
|
||||||
SET(CPACK_GENERATOR "ZIP;TGZ") # Remove this, if you want the NSIS installer on Windows
|
|
||||||
include(CPack)
|
|
@ -1,11 +0,0 @@
|
|||||||
macro(populate_config_variables_locally target)
|
|
||||||
get_property(raylib_INCLUDE_DIRS TARGET ${target} PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
|
|
||||||
#get_property(raylib_LIBRARIES TARGET ${target} PROPERTY LOCATION) # only works for SHARED
|
|
||||||
get_property(raylib_LDFLAGS TARGET ${target} PROPERTY INTERFACE_LINK_LIBRARIES)
|
|
||||||
get_property(raylib_DEFINITIONS TARGET ${target} PROPERTY DEFINITIONS)
|
|
||||||
|
|
||||||
set(raylib_INCLUDE_DIRS "${raylib_INCLUDE_DIRS}" PARENT_SCOPE)
|
|
||||||
#set(raylib_LIBRARIES "${raylib_INCLUDE_DIRS}" PARENT_SCOPE)
|
|
||||||
set(raylib_LDFLAGS "${raylib_LDFLAGS}" PARENT_SCOPE)
|
|
||||||
set(raylib_DEFINITIONS "${raylib_DEFINITIONS}" PARENT_SCOPE)
|
|
||||||
endmacro()
|
|
@ -1,21 +0,0 @@
|
|||||||
set(PACKAGE_VERSION "@PROJECT_VERSION@")
|
|
||||||
|
|
||||||
if(PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION)
|
|
||||||
set(PACKAGE_VERSION_EXACT TRUE)
|
|
||||||
endif()
|
|
||||||
if(NOT PACKAGE_FIND_VERSION VERSION_GREATER PACKAGE_VERSION)
|
|
||||||
set(PACKAGE_VERSION_COMPATIBLE TRUE)
|
|
||||||
else(NOT PACKAGE_FIND_VERSION VERSION_GREATER PACKAGE_VERSION)
|
|
||||||
set(PACKAGE_VERSION_UNSUITABLE TRUE)
|
|
||||||
endif(NOT PACKAGE_FIND_VERSION VERSION_GREATER PACKAGE_VERSION)
|
|
||||||
|
|
||||||
# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
|
|
||||||
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "@CMAKE_SIZEOF_VOID_P@")
|
|
||||||
math(EXPR installedBits "8 * 8")
|
|
||||||
set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
|
|
||||||
set(PACKAGE_VERSION_UNSUITABLE TRUE)
|
|
||||||
endif()
|
|
@ -1,76 +0,0 @@
|
|||||||
# - Try to find raylib
|
|
||||||
# Options:
|
|
||||||
# raylib_USE_STATIC_LIBS - OFF by default
|
|
||||||
# raylib_VERBOSE - OFF by default
|
|
||||||
# Once done, this defines a raylib target that can be passed to
|
|
||||||
# target_link_libraries as well as following variables:
|
|
||||||
#
|
|
||||||
# raylib_FOUND - System has raylib installed
|
|
||||||
# raylib_INCLUDE_DIRS - The include directories for the raylib header(s)
|
|
||||||
# raylib_LIBRARIES - The libraries needed to use raylib
|
|
||||||
# raylib_LDFLAGS - The linker flags needed with raylib
|
|
||||||
# raylib_DEFINITIONS - Compiler switches required for using raylib
|
|
||||||
|
|
||||||
set(XPREFIX PC_RAYLIB)
|
|
||||||
|
|
||||||
find_package(PkgConfig QUIET)
|
|
||||||
pkg_check_modules(${XPREFIX} QUIET raylib)
|
|
||||||
|
|
||||||
if (raylib_USE_STATIC_LIBS)
|
|
||||||
set(XPREFIX ${XPREFIX}_STATIC)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(raylib_DEFINITIONS ${${XPREFIX}_CFLAGS})
|
|
||||||
|
|
||||||
find_path(raylib_INCLUDE_DIR
|
|
||||||
NAMES raylib.h
|
|
||||||
HINTS ${${XPREFIX}_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
set(RAYLIB_NAMES raylib)
|
|
||||||
|
|
||||||
if (raylib_USE_STATIC_LIBS)
|
|
||||||
set(RAYLIB_NAMES libraylib.a raylib.lib ${RAYLIB_NAMES})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_library(raylib_LIBRARY
|
|
||||||
NAMES ${RAYLIB_NAMES}
|
|
||||||
HINTS ${${XPREFIX}_LIBRARY_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
set(raylib_LIBRARIES ${raylib_LIBRARY})
|
|
||||||
set(raylib_LIBRARY_DIRS ${${XPREFIX}_LIBRARY_DIRS})
|
|
||||||
set(raylib_LIBRARY_DIR ${raylib_LIBRARY_DIRS})
|
|
||||||
set(raylib_INCLUDE_DIRS ${raylib_INCLUDE_DIR})
|
|
||||||
set(raylib_LDFLAGS ${${XPREFIX}_LDFLAGS})
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
find_package_handle_standard_args(raylib DEFAULT_MSG
|
|
||||||
raylib_LIBRARY
|
|
||||||
raylib_INCLUDE_DIR
|
|
||||||
)
|
|
||||||
|
|
||||||
mark_as_advanced(raylib_LIBRARY raylib_INCLUDE_DIR)
|
|
||||||
|
|
||||||
if (raylib_USE_STATIC_LIBS)
|
|
||||||
add_library(raylib STATIC IMPORTED GLOBAL)
|
|
||||||
else()
|
|
||||||
add_library(raylib SHARED IMPORTED GLOBAL)
|
|
||||||
endif()
|
|
||||||
string (REPLACE ";" " " raylib_LDFLAGS "${raylib_LDFLAGS}")
|
|
||||||
|
|
||||||
set_target_properties(raylib
|
|
||||||
PROPERTIES
|
|
||||||
IMPORTED_LOCATION "${raylib_LIBRARIES}"
|
|
||||||
INTERFACE_INCLUDE_DIRECTORIES "${raylib_INCLUDE_DIRS}"
|
|
||||||
INTERFACE_LINK_LIBRARIES "${raylib_LDFLAGS}"
|
|
||||||
INTERFACE_COMPILE_OPTIONS "${raylib_DEFINITIONS}"
|
|
||||||
)
|
|
||||||
|
|
||||||
if (raylib_VERBOSE)
|
|
||||||
message(STATUS "raylib_FOUND: ${raylib_FOUND}")
|
|
||||||
message(STATUS "raylib_INCLUDE_DIRS: ${raylib_INCLUDE_DIRS}")
|
|
||||||
message(STATUS "raylib_LIBRARIES: ${raylib_LIBRARIES}")
|
|
||||||
message(STATUS "raylib_LDFLAGS: ${raylib_LDFLAGS}")
|
|
||||||
message(STATUS "raylib_DEFINITIONS: ${raylib_DEFINITIONS}")
|
|
||||||
endif()
|
|
@ -1,139 +0,0 @@
|
|||||||
# Setup the project and settings
|
|
||||||
project(examples)
|
|
||||||
|
|
||||||
# Directories that contain examples
|
|
||||||
set(example_dirs
|
|
||||||
audio
|
|
||||||
core
|
|
||||||
models
|
|
||||||
others
|
|
||||||
shaders
|
|
||||||
shapes
|
|
||||||
text
|
|
||||||
textures
|
|
||||||
)
|
|
||||||
|
|
||||||
# Next few lines will check for existence of symbols or header files
|
|
||||||
# They are needed for the physac example and threads examples
|
|
||||||
set(CMAKE_REQUIRED_DEFINITIONS -D_POSIX_C_SOURCE=199309L)
|
|
||||||
include(CheckSymbolExists)
|
|
||||||
check_symbol_exists(CLOCK_MONOTONIC time.h HAVE_CLOCK_MONOTONIC)
|
|
||||||
check_symbol_exists(QueryPerformanceCounter windows.h HAVE_QPC)
|
|
||||||
set(CMAKE_REQUIRED_DEFINITIONS)
|
|
||||||
|
|
||||||
if (HAVE_QPC OR HAVE_CLOCK_MONOTONIC)
|
|
||||||
set(example_dirs ${example_dirs} physac)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
include(CheckIncludeFile)
|
|
||||||
CHECK_INCLUDE_FILE("stdatomic.h" HAVE_STDATOMIC_H)
|
|
||||||
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
|
|
||||||
find_package(Threads)
|
|
||||||
if (CMAKE_USE_PTHREADS_INIT AND HAVE_STDATOMIC_H)
|
|
||||||
add_if_flag_compiles("-std=c11" CMAKE_C_FLAGS)
|
|
||||||
if (THREADS_HAVE_PTHREAD_ARG)
|
|
||||||
add_if_flag_compiles("-pthread" CMAKE_C_FLAGS)
|
|
||||||
endif ()
|
|
||||||
if (CMAKE_THREAD_LIBS_INIT)
|
|
||||||
link_libraries("${CMAKE_THREAD_LIBS_INIT}")
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (APPLE AND NOT CMAKE_SYSTEM STRLESS "Darwin-18.0.0")
|
|
||||||
add_definitions(-DGL_SILENCE_DEPRECATION)
|
|
||||||
MESSAGE(AUTHOR_WARNING "OpenGL is deprecated starting with macOS 10.14 (Mojave)!")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
# Collect all source files and resource files
|
|
||||||
# into a CMake variable
|
|
||||||
set(example_sources)
|
|
||||||
set(example_resources)
|
|
||||||
foreach (example_dir ${example_dirs})
|
|
||||||
# Get the .c files
|
|
||||||
file(GLOB sources ${example_dir}/*.c)
|
|
||||||
list(APPEND example_sources ${sources})
|
|
||||||
|
|
||||||
# Any any resources
|
|
||||||
file(GLOB resources ${example_dir}/resources/*)
|
|
||||||
list(APPEND example_resources ${resources})
|
|
||||||
endforeach ()
|
|
||||||
|
|
||||||
if(NOT CMAKE_USE_PTHREADS_INIT OR NOT HAVE_STDATOMIC_H)
|
|
||||||
# Items requiring pthreads
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_loading_thread.c)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (${PLATFORM} MATCHES "Android")
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/rlgl_standalone.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/standard_lighting.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_3d_picking.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_vr_simulator.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_3d_camera_free.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_3d_camera_first_person.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_world_screen.c)
|
|
||||||
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_mesh_picking.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_cubicmap.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_skybox.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_mesh_picking.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_mesh_generation.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_heightmap.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_billboard.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_rlgl_solar_system.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_rlgl_full_solar_system.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_solar_system.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_obj_viewer.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_animation.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_first_person_maze.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_magicavoxel_loading.c)
|
|
||||||
|
|
||||||
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_custom_uniform.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_model_shader.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_postprocessing.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_raymarching.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_palette_switch.c)
|
|
||||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_basic_lighting.c)
|
|
||||||
|
|
||||||
elseif (${PLATFORM} MATCHES "Web")
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os -s USE_GLFW=3 -s ASSERTIONS=1 -s WASM=1 -s ASYNCIFY")
|
|
||||||
# Since WASM is used, ALLOW_MEMORY_GROWTH has no extra overheads
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s ALLOW_MEMORY_GROWTH=1 --no-heap-copy")
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --shell-file ${CMAKE_SOURCE_DIR}/src/shell.html")
|
|
||||||
set(CMAKE_EXECUTABLE_SUFFIX ".html")
|
|
||||||
|
|
||||||
# Remove the -rdynamic flag because otherwise emscripten
|
|
||||||
# does not generate HTML+JS+WASM files, only a non-working
|
|
||||||
# and fat HTML
|
|
||||||
string(REPLACE "-rdynamic" "" CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS}")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
include_directories(BEFORE SYSTEM others/external/include)
|
|
||||||
|
|
||||||
if (NOT TARGET raylib)
|
|
||||||
find_package(raylib 2.0 REQUIRED)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
# Do each example
|
|
||||||
foreach (example_source ${example_sources})
|
|
||||||
# Create the basename for the example
|
|
||||||
get_filename_component(example_name ${example_source} NAME)
|
|
||||||
string(REPLACE ".c" "" example_name ${example_name})
|
|
||||||
|
|
||||||
# Setup the example
|
|
||||||
add_executable(${example_name} ${example_source})
|
|
||||||
|
|
||||||
target_link_libraries(${example_name} raylib)
|
|
||||||
|
|
||||||
string(REGEX MATCH ".*/.*/" resources_dir ${example_source})
|
|
||||||
string(APPEND resources_dir "resources")
|
|
||||||
|
|
||||||
if (${PLATFORM} MATCHES "Web" AND EXISTS ${resources_dir})
|
|
||||||
# The local resources path needs to be mapped to /resources virtual path
|
|
||||||
string(APPEND resources_dir "@resources")
|
|
||||||
set_target_properties(${example_name} PROPERTIES LINK_FLAGS "--preload-file ${resources_dir}")
|
|
||||||
endif ()
|
|
||||||
endforeach ()
|
|
||||||
|
|
||||||
# Copy all of the resource files to the destination
|
|
||||||
file(COPY ${example_resources} DESTINATION "resources/")
|
|
@ -1,405 +0,0 @@
|
|||||||
#**************************************************************************************************
|
|
||||||
#
|
|
||||||
# raylib makefile for Android project (APK building)
|
|
||||||
#
|
|
||||||
# Copyright (c) 2017-2022 Ramon Santamaria (@raysan5)
|
|
||||||
#
|
|
||||||
# This software is provided "as-is", without any express or implied warranty. In no event
|
|
||||||
# will the authors be held liable for any damages arising from the use of this software.
|
|
||||||
#
|
|
||||||
# Permission is granted to anyone to use this software for any purpose, including commercial
|
|
||||||
# applications, and to alter it and redistribute it freely, subject to the following restrictions:
|
|
||||||
#
|
|
||||||
# 1. The origin of this software must not be misrepresented; you must not claim that you
|
|
||||||
# wrote the original software. If you use this software in a product, an acknowledgment
|
|
||||||
# in the product documentation would be appreciated but is not required.
|
|
||||||
#
|
|
||||||
# 2. Altered source versions must be plainly marked as such, and must not be misrepresented
|
|
||||||
# as being the original software.
|
|
||||||
#
|
|
||||||
# 3. This notice may not be removed or altered from any source distribution.
|
|
||||||
#
|
|
||||||
#**************************************************************************************************
|
|
||||||
|
|
||||||
# Define required raylib variables
|
|
||||||
PLATFORM ?= PLATFORM_ANDROID
|
|
||||||
RAYLIB_PATH ?= ..\..
|
|
||||||
|
|
||||||
# Define Android architecture (armeabi-v7a, arm64-v8a, x86, x86-64) and API version
|
|
||||||
# Starting in 2019 using ARM64 is mandatory for published apps,
|
|
||||||
# Starting on August 2020, minimum required target API is Android 10 (API level 29)
|
|
||||||
ANDROID_ARCH ?= ARM64
|
|
||||||
ANDROID_API_VERSION = 29
|
|
||||||
|
|
||||||
# Android required path variables
|
|
||||||
# NOTE: Starting with Android NDK r21, no more toolchain generation is required, NDK is the toolchain on itself
|
|
||||||
ifeq ($(OS),Windows_NT)
|
|
||||||
ANDROID_NDK = C:/android-ndk
|
|
||||||
ANDROID_TOOLCHAIN = $(ANDROID_NDK)/toolchains/llvm/prebuilt/windows-x86_64
|
|
||||||
else
|
|
||||||
ANDROID_NDK ?= /usr/lib/android/ndk
|
|
||||||
ANDROID_TOOLCHAIN = $(ANDROID_NDK)/toolchains/llvm/prebuilt/linux-x86_64
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(ANDROID_ARCH),ARM)
|
|
||||||
ANDROID_ARCH_NAME = armeabi-v7a
|
|
||||||
endif
|
|
||||||
ifeq ($(ANDROID_ARCH),ARM64)
|
|
||||||
ANDROID_ARCH_NAME = arm64-v8a
|
|
||||||
endif
|
|
||||||
ifeq ($(ANDROID_ARCH),x86)
|
|
||||||
ANDROID_ARCH_NAME = i686
|
|
||||||
endif
|
|
||||||
ifeq ($(ANDROID_ARCH),x86_64)
|
|
||||||
ANDROID_ARCH_NAME = x86_64
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Required path variables
|
|
||||||
# NOTE: JAVA_HOME must be set to JDK (using OpenJDK 13)
|
|
||||||
JAVA_HOME ?= C:/open-jdk
|
|
||||||
ANDROID_HOME ?= C:/android-sdk
|
|
||||||
ANDROID_BUILD_TOOLS ?= $(ANDROID_HOME)/build-tools/29.0.3
|
|
||||||
ANDROID_PLATFORM_TOOLS = $(ANDROID_HOME)/platform-tools
|
|
||||||
|
|
||||||
# Android project configuration variables
|
|
||||||
PROJECT_NAME ?= raylib_game
|
|
||||||
PROJECT_LIBRARY_NAME ?= main
|
|
||||||
PROJECT_BUILD_ID ?= android
|
|
||||||
PROJECT_BUILD_PATH ?= $(PROJECT_BUILD_ID).$(PROJECT_NAME)
|
|
||||||
PROJECT_RESOURCES_PATH ?= resources
|
|
||||||
PROJECT_SOURCE_FILES ?= raylib_game.c
|
|
||||||
NATIVE_APP_GLUE_PATH = $(ANDROID_NDK)/sources/android/native_app_glue
|
|
||||||
|
|
||||||
# Some source files are placed in directories, when compiling to some
|
|
||||||
# output directory other than source, that directory must pre-exist.
|
|
||||||
# Here we get a list of required folders that need to be created on
|
|
||||||
# code output folder $(PROJECT_BUILD_PATH)\obj to avoid GCC errors.
|
|
||||||
PROJECT_SOURCE_DIRS = $(sort $(dir $(PROJECT_SOURCE_FILES)))
|
|
||||||
|
|
||||||
# Android app configuration variables
|
|
||||||
APP_LABEL_NAME ?= rGame
|
|
||||||
APP_COMPANY_NAME ?= raylib
|
|
||||||
APP_PRODUCT_NAME ?= rgame
|
|
||||||
APP_VERSION_CODE ?= 1
|
|
||||||
APP_VERSION_NAME ?= 1.0
|
|
||||||
APP_ICON_LDPI ?= $(RAYLIB_PATH)/logo/raylib_36x36.png
|
|
||||||
APP_ICON_MDPI ?= $(RAYLIB_PATH)/logo/raylib_48x48.png
|
|
||||||
APP_ICON_HDPI ?= $(RAYLIB_PATH)/logo/raylib_72x72.png
|
|
||||||
APP_SCREEN_ORIENTATION ?= landscape
|
|
||||||
APP_KEYSTORE_PASS ?= raylib
|
|
||||||
|
|
||||||
# Library type used for raylib: STATIC (.a) or SHARED (.so/.dll)
|
|
||||||
RAYLIB_LIBTYPE ?= STATIC
|
|
||||||
|
|
||||||
# Library path for libraylib.a/libraylib.so
|
|
||||||
RAYLIB_LIB_PATH = $(RAYLIB_PATH)/src
|
|
||||||
|
|
||||||
# Define copy command depending on OS
|
|
||||||
ifeq ($(OS),Windows_NT)
|
|
||||||
COPY_COMMAND ?= copy /Y
|
|
||||||
else
|
|
||||||
COPY_COMMAND ?= cp -f
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Shared libs must be added to APK if required
|
|
||||||
# NOTE: Generated NativeLoader.java automatically load those libraries
|
|
||||||
ifeq ($(RAYLIB_LIBTYPE),SHARED)
|
|
||||||
PROJECT_SHARED_LIBS = lib/$(ANDROID_ARCH_NAME)/libraylib.so
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Compiler and archiver
|
|
||||||
ifeq ($(ANDROID_ARCH),ARM)
|
|
||||||
CC = $(ANDROID_TOOLCHAIN)/bin/armv7a-linux-androideabi$(ANDROID_API_VERSION)-clang
|
|
||||||
AR = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-ar
|
|
||||||
endif
|
|
||||||
ifeq ($(ANDROID_ARCH),ARM64)
|
|
||||||
CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android$(ANDROID_API_VERSION)-clang
|
|
||||||
AR = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-ar
|
|
||||||
endif
|
|
||||||
ifeq ($(ANDROID_ARCH),x86)
|
|
||||||
CC = $(ANDROID_TOOLCHAIN)/bin/i686-linux-android$(ANDROID_API_VERSION)-clang
|
|
||||||
AR = $(ANDROID_TOOLCHAIN)/bin/i686-linux-android-ar
|
|
||||||
endif
|
|
||||||
ifeq ($(ANDROID_ARCH),x86_64)
|
|
||||||
CC = $(ANDROID_TOOLCHAIN)/bin/x86_64-linux-android$(ANDROID_API_VERSION)-clang
|
|
||||||
AR = $(ANDROID_TOOLCHAIN)/bin/x86_64-linux-android-ar
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Compiler flags for arquitecture
|
|
||||||
ifeq ($(ANDROID_ARCH),ARM)
|
|
||||||
CFLAGS = -std=c99 -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16
|
|
||||||
endif
|
|
||||||
ifeq ($(ANDROID_ARCH),ARM64)
|
|
||||||
CFLAGS = -std=c99 -target aarch64 -mfix-cortex-a53-835769
|
|
||||||
endif
|
|
||||||
# Compilation functions attributes options
|
|
||||||
CFLAGS += -ffunction-sections -funwind-tables -fstack-protector-strong -fPIC
|
|
||||||
# Compiler options for the linker
|
|
||||||
CFLAGS += -Wall -Wa,--noexecstack -Wformat -Werror=format-security -no-canonical-prefixes
|
|
||||||
# Preprocessor macro definitions
|
|
||||||
CFLAGS += -DANDROID -DPLATFORM_ANDROID -D__ANDROID_API__=$(ANDROID_API_VERSION)
|
|
||||||
|
|
||||||
# Paths containing required header files
|
|
||||||
INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/src -I$(NATIVE_APP_GLUE_PATH)
|
|
||||||
|
|
||||||
# Linker options
|
|
||||||
LDFLAGS = -Wl,-soname,lib$(PROJECT_LIBRARY_NAME).so -Wl,--exclude-libs,libatomic.a
|
|
||||||
LDFLAGS += -Wl,--build-id -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings
|
|
||||||
# Force linking of library module to define symbol
|
|
||||||
LDFLAGS += -u ANativeActivity_onCreate
|
|
||||||
# Library paths containing required libs
|
|
||||||
LDFLAGS += -L. -L$(PROJECT_BUILD_PATH)/obj -L$(PROJECT_BUILD_PATH)/lib/$(ANDROID_ARCH_NAME) -L$(ANDROID_TOOLCHAIN)\sysroot\usr\lib
|
|
||||||
|
|
||||||
# Define any libraries to link into executable
|
|
||||||
# if you want to link libraries (libname.so or libname.a), use the -lname
|
|
||||||
LDLIBS = -lm -lc -lraylib -llog -landroid -lEGL -lGLESv2 -lOpenSLES -ldl
|
|
||||||
|
|
||||||
# Generate target objects list from PROJECT_SOURCE_FILES
|
|
||||||
OBJS = $(patsubst %.c, $(PROJECT_BUILD_PATH)/obj/%.o, $(PROJECT_SOURCE_FILES))
|
|
||||||
|
|
||||||
# Android APK building process... some steps required...
|
|
||||||
# NOTE: typing 'make' will invoke the default target entry called 'all',
|
|
||||||
all: create_temp_project_dirs \
|
|
||||||
copy_project_required_libs \
|
|
||||||
copy_project_resources \
|
|
||||||
generate_loader_script \
|
|
||||||
generate_android_manifest \
|
|
||||||
generate_apk_keystore \
|
|
||||||
config_project_package \
|
|
||||||
compile_project_code \
|
|
||||||
compile_project_class \
|
|
||||||
compile_project_class_dex \
|
|
||||||
create_project_apk_package \
|
|
||||||
zipalign_project_apk_package \
|
|
||||||
sign_project_apk_package
|
|
||||||
|
|
||||||
# Create required temp directories for APK building
|
|
||||||
create_temp_project_dirs:
|
|
||||||
ifeq ($(OS),Windows_NT)
|
|
||||||
if not exist $(PROJECT_BUILD_PATH) mkdir $(PROJECT_BUILD_PATH)
|
|
||||||
if not exist $(PROJECT_BUILD_PATH)\obj mkdir $(PROJECT_BUILD_PATH)\obj
|
|
||||||
if not exist $(PROJECT_BUILD_PATH)\obj mkdir $(PROJECT_BUILD_PATH)\obj\src
|
|
||||||
if not exist $(PROJECT_BUILD_PATH)\src mkdir $(PROJECT_BUILD_PATH)\src
|
|
||||||
if not exist $(PROJECT_BUILD_PATH)\src\com mkdir $(PROJECT_BUILD_PATH)\src\com
|
|
||||||
if not exist $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME) mkdir $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME)
|
|
||||||
if not exist $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME)\$(APP_PRODUCT_NAME) mkdir $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME)\$(APP_PRODUCT_NAME)
|
|
||||||
if not exist $(PROJECT_BUILD_PATH)\lib mkdir $(PROJECT_BUILD_PATH)\lib
|
|
||||||
if not exist $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME) mkdir $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME)
|
|
||||||
if not exist $(PROJECT_BUILD_PATH)\bin mkdir $(PROJECT_BUILD_PATH)\bin
|
|
||||||
if not exist $(PROJECT_BUILD_PATH)\res mkdir $(PROJECT_BUILD_PATH)\res
|
|
||||||
if not exist $(PROJECT_BUILD_PATH)\res\drawable-ldpi mkdir $(PROJECT_BUILD_PATH)\res\drawable-ldpi
|
|
||||||
if not exist $(PROJECT_BUILD_PATH)\res\drawable-mdpi mkdir $(PROJECT_BUILD_PATH)\res\drawable-mdpi
|
|
||||||
if not exist $(PROJECT_BUILD_PATH)\res\drawable-hdpi mkdir $(PROJECT_BUILD_PATH)\res\drawable-hdpi
|
|
||||||
if not exist $(PROJECT_BUILD_PATH)\res\values mkdir $(PROJECT_BUILD_PATH)\res\values
|
|
||||||
if not exist $(PROJECT_BUILD_PATH)\assets mkdir $(PROJECT_BUILD_PATH)\assets
|
|
||||||
if not exist $(PROJECT_BUILD_PATH)\assets\$(PROJECT_RESOURCES_PATH) mkdir $(PROJECT_BUILD_PATH)\assets\$(PROJECT_RESOURCES_PATH)
|
|
||||||
if not exist $(PROJECT_BUILD_PATH)\obj\screens mkdir $(PROJECT_BUILD_PATH)\obj\screens
|
|
||||||
else
|
|
||||||
mkdir -p $(PROJECT_BUILD_PATH)
|
|
||||||
mkdir -p $(PROJECT_BUILD_PATH)/obj
|
|
||||||
mkdir -p $(PROJECT_BUILD_PATH)/obj/src
|
|
||||||
mkdir -p $(PROJECT_BUILD_PATH)/src
|
|
||||||
mkdir -p $(PROJECT_BUILD_PATH)/src/com
|
|
||||||
mkdir -p $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)
|
|
||||||
mkdir -p $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)
|
|
||||||
mkdir -p $(PROJECT_BUILD_PATH)/lib
|
|
||||||
mkdir -p $(PROJECT_BUILD_PATH)/lib/$(ANDROID_ARCH_NAME)
|
|
||||||
mkdir -p $(PROJECT_BUILD_PATH)/bin
|
|
||||||
mkdir -p $(PROJECT_BUILD_PATH)/res
|
|
||||||
mkdir -p $(PROJECT_BUILD_PATH)/res/drawable-ldpi
|
|
||||||
mkdir -p $(PROJECT_BUILD_PATH)/res/drawable-mdpi
|
|
||||||
mkdir -p $(PROJECT_BUILD_PATH)/res/drawable-hdpi
|
|
||||||
mkdir -p $(PROJECT_BUILD_PATH)/res/values
|
|
||||||
mkdir -p $(PROJECT_BUILD_PATH)/assets
|
|
||||||
mkdir -p $(PROJECT_BUILD_PATH)/assets/$(PROJECT_RESOURCES_PATH)
|
|
||||||
mkdir -p $(PROJECT_BUILD_PATH)/obj/screens
|
|
||||||
endif
|
|
||||||
$(foreach dir, $(PROJECT_SOURCE_DIRS), $(call create_dir, $(dir)))
|
|
||||||
|
|
||||||
define create_dir
|
|
||||||
mkdir -p $(PROJECT_BUILD_PATH)/obj/$(1)
|
|
||||||
endef
|
|
||||||
|
|
||||||
# Copy required shared libs for integration into APK
|
|
||||||
# NOTE: If using shared libs they are loaded by generated NativeLoader.java
|
|
||||||
copy_project_required_libs:
|
|
||||||
ifeq ($(RAYLIB_LIBTYPE),SHARED)
|
|
||||||
$(COPY_COMMAND) $(RAYLIB_LIB_PATH)/libraylib.so $(PROJECT_BUILD_PATH)/lib/$(ANDROID_ARCH_NAME)/libraylib.so
|
|
||||||
endif
|
|
||||||
ifeq ($(RAYLIB_LIBTYPE),STATIC)
|
|
||||||
$(COPY_COMMAND) $(RAYLIB_LIB_PATH)/libraylib.a $(PROJECT_BUILD_PATH)/lib/$(ANDROID_ARCH_NAME)/libraylib.a
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Copy project required resources: strings.xml, icon.png, assets
|
|
||||||
# NOTE: Required strings.xml is generated and game resources are copied to assets folder
|
|
||||||
copy_project_resources:
|
|
||||||
$(COPY_COMMAND) $(APP_ICON_LDPI) $(PROJECT_BUILD_PATH)/res/drawable-ldpi/icon.png
|
|
||||||
$(COPY_COMMAND) $(APP_ICON_MDPI) $(PROJECT_BUILD_PATH)/res/drawable-mdpi/icon.png
|
|
||||||
$(COPY_COMMAND) $(APP_ICON_HDPI) $(PROJECT_BUILD_PATH)/res/drawable-hdpi/icon.png
|
|
||||||
ifeq ($(OS),Windows_NT)
|
|
||||||
@echo ^<?xml version="1.0" encoding="utf-8"^?^> > $(PROJECT_BUILD_PATH)/res/values/strings.xml
|
|
||||||
@echo ^<resources^>^<string name="app_name"^>$(APP_LABEL_NAME)^</string^>^</resources^> >> $(PROJECT_BUILD_PATH)/res/values/strings.xml
|
|
||||||
if exist $(PROJECT_RESOURCES_PATH) C:\Windows\System32\xcopy $(PROJECT_RESOURCES_PATH) $(PROJECT_BUILD_PATH)\assets\$(PROJECT_RESOURCES_PATH) /Y /E /F
|
|
||||||
else
|
|
||||||
@echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>" > $(PROJECT_BUILD_PATH)/res/values/strings.xml
|
|
||||||
@echo "<resources><string name=\"app_name\">$(APP_LABEL_NAME)</string></resources>" >> $(PROJECT_BUILD_PATH)/res/values/strings.xml
|
|
||||||
@[ -d "$(PROJECT_RESOURCES_PATH)" ] || cp -rf $(PROJECT_RESOURCES_PATH) $(PROJECT_BUILD_PATH)/assets/$(PROJECT_RESOURCES_PATH)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Generate NativeLoader.java to load required shared libraries
|
|
||||||
# NOTE: Probably not the bet way to generate this file... but it works.
|
|
||||||
generate_loader_script:
|
|
||||||
ifeq ($(OS),Windows_NT)
|
|
||||||
@echo package com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME); > $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
|
|
||||||
@echo. >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
|
|
||||||
@echo public class NativeLoader extends android.app.NativeActivity { >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
|
|
||||||
@echo static { >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
|
|
||||||
ifeq ($(RAYLIB_LIBTYPE),SHARED)
|
|
||||||
@echo System.loadLibrary("raylib"); >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
|
|
||||||
endif
|
|
||||||
@echo System.loadLibrary("$(PROJECT_LIBRARY_NAME)"); >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
|
|
||||||
@echo } >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
|
|
||||||
@echo } >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
|
|
||||||
else
|
|
||||||
@echo "package com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME);" > $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
|
|
||||||
@echo "" >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
|
|
||||||
@echo "public class NativeLoader extends android.app.NativeActivity {" >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
|
|
||||||
@echo " static {" >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
|
|
||||||
ifeq ($(RAYLIB_LIBTYPE),SHARED)
|
|
||||||
@echo " System.loadLibrary(\"raylib\");" >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
|
|
||||||
endif
|
|
||||||
@echo " System.loadLibrary(\"$(PROJECT_LIBRARY_NAME)\");" >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
|
|
||||||
@echo " }" >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
|
|
||||||
@echo "}" >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Generate AndroidManifest.xml with all the required options
|
|
||||||
# NOTE: Probably not the bet way to generate this file... but it works.
|
|
||||||
generate_android_manifest:
|
|
||||||
ifeq ($(OS),Windows_NT)
|
|
||||||
@echo ^<?xml version="1.0" encoding="utf-8"^?^> > $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo ^<manifest xmlns:android="http://schemas.android.com/apk/res/android" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo package="com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME)" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo android:versionCode="$(APP_VERSION_CODE)" android:versionName="$(APP_VERSION_NAME)" ^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo ^<uses-sdk android:minSdkVersion="$(ANDROID_API_VERSION)" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo ^<uses-feature android:glEsVersion="0x00020000" android:required="true" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo ^<application android:allowBackup="false" android:label="@string/app_name" android:icon="@drawable/icon" ^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo ^<activity android:name="com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME).NativeLoader" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo android:configChanges="orientation|keyboardHidden|screenSize" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo android:screenOrientation="$(APP_SCREEN_ORIENTATION)" android:launchMode="singleTask" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo android:clearTaskOnLaunch="true"^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo ^<meta-data android:name="android.app.lib_name" android:value="$(PROJECT_LIBRARY_NAME)" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo ^<intent-filter^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo ^<action android:name="android.intent.action.MAIN" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo ^<category android:name="android.intent.category.LAUNCHER" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo ^</intent-filter^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo ^</activity^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo ^</application^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo ^</manifest^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
else
|
|
||||||
@echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>" > $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo " package=\"com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME)\" " >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo " android:versionCode=\"$(APP_VERSION_CODE)\" android:versionName=\"$(APP_VERSION_NAME)\" >" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo " <uses-sdk android:minSdkVersion=\"$(ANDROID_API_VERSION)\" />" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo " <uses-feature android:glEsVersion=\"0x00020000\" android:required=\"true\" />" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo " <application android:allowBackup=\"false\" android:label=\"@string/app_name\" android:icon=\"@drawable/icon\" >" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo " <activity android:name=\"com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME).NativeLoader\"" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo " android:theme=\"@android:style/Theme.NoTitleBar.Fullscreen\"" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo " android:configChanges=\"orientation|keyboardHidden|screenSize\"" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo " android:screenOrientation=\"$(APP_SCREEN_ORIENTATION)\" android:launchMode=\"singleTask\"" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo " android:clearTaskOnLaunch=\"true\">" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo " <meta-data android:name=\"android.app.lib_name\" android:value=\"$(PROJECT_LIBRARY_NAME)\" />" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo " <intent-filter>" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo " <action android:name=\"android.intent.action.MAIN\" />" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo " <category android:name=\"android.intent.category.LAUNCHER\" />" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo " </intent-filter>" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo " </activity>" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo " </application>" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
@echo "</manifest>" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Generate storekey for APK signing: $(PROJECT_NAME).keystore
|
|
||||||
# NOTE: Configure here your Distinguished Names (-dname) if required!
|
|
||||||
generate_apk_keystore:
|
|
||||||
ifeq ($(OS),Windows_NT)
|
|
||||||
if not exist $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore $(JAVA_HOME)/bin/keytool -genkeypair -validity 10000 -dname "CN=$(APP_COMPANY_NAME),O=Android,C=ES" -keystore $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore -storepass $(APP_KEYSTORE_PASS) -keypass $(APP_KEYSTORE_PASS) -alias $(PROJECT_NAME)Key -keyalg RSA
|
|
||||||
else
|
|
||||||
@[ -f "$(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore" ] || $(JAVA_HOME)/bin/keytool -genkeypair -validity 10000 -dname "CN=$(APP_COMPANY_NAME),O=Android,C=ES" -keystore $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore -storepass $(APP_KEYSTORE_PASS) -keypass $(APP_KEYSTORE_PASS) -alias $(PROJECT_NAME)Key -keyalg RSA
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Config project package and resource using AndroidManifest.xml and res/values/strings.xml
|
|
||||||
# NOTE: Generates resources file: src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/R.java
|
|
||||||
config_project_package:
|
|
||||||
$(ANDROID_BUILD_TOOLS)/aapt package -f -m -S $(PROJECT_BUILD_PATH)/res -J $(PROJECT_BUILD_PATH)/src -M $(PROJECT_BUILD_PATH)/AndroidManifest.xml -I $(ANDROID_HOME)/platforms/android-$(ANDROID_API_VERSION)/android.jar
|
|
||||||
|
|
||||||
# Compile native_app_glue code as static library: obj/libnative_app_glue.a
|
|
||||||
compile_native_app_glue:
|
|
||||||
$(CC) -c $(NATIVE_APP_GLUE_PATH)/android_native_app_glue.c -o $(PROJECT_BUILD_PATH)/obj/native_app_glue.o $(CFLAGS)
|
|
||||||
$(AR) rcs $(PROJECT_BUILD_PATH)/obj/libnative_app_glue.a $(PROJECT_BUILD_PATH)/obj/native_app_glue.o
|
|
||||||
|
|
||||||
# Compile project code into a shared library: lib/lib$(PROJECT_LIBRARY_NAME).so
|
|
||||||
compile_project_code: $(OBJS)
|
|
||||||
$(CC) -o $(PROJECT_BUILD_PATH)/lib/$(ANDROID_ARCH_NAME)/lib$(PROJECT_LIBRARY_NAME).so $(OBJS) -shared $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS)
|
|
||||||
|
|
||||||
# Compile all .c files required into object (.o) files
|
|
||||||
# NOTE: Those files will be linked into a shared library
|
|
||||||
$(PROJECT_BUILD_PATH)/obj/%.o:%.c
|
|
||||||
$(CC) -c $^ -o $@ $(INCLUDE_PATHS) $(CFLAGS) --sysroot=$(ANDROID_TOOLCHAIN)/sysroot
|
|
||||||
|
|
||||||
# Compile project .java code into .class (Java bytecode)
|
|
||||||
compile_project_class:
|
|
||||||
$(JAVA_HOME)/bin/javac -verbose -source 1.7 -target 1.7 -d $(PROJECT_BUILD_PATH)/obj -bootclasspath $(JAVA_HOME)/jre/lib/rt.jar -classpath $(ANDROID_HOME)/platforms/android-$(ANDROID_API_VERSION)/android.jar -d $(PROJECT_BUILD_PATH)/obj $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/R.java $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
|
|
||||||
|
|
||||||
# Compile .class files into Dalvik executable bytecode (.dex)
|
|
||||||
# NOTE: Since Android 5.0, Dalvik interpreter (JIT) has been replaced by ART (AOT)
|
|
||||||
compile_project_class_dex:
|
|
||||||
$(ANDROID_BUILD_TOOLS)/dx --verbose --dex --output=$(PROJECT_BUILD_PATH)/bin/classes.dex $(PROJECT_BUILD_PATH)/obj
|
|
||||||
|
|
||||||
# Create Android APK package: bin/$(PROJECT_NAME).unsigned.apk
|
|
||||||
# NOTE: Requires compiled classes.dex and lib$(PROJECT_LIBRARY_NAME).so
|
|
||||||
# NOTE: Use -A resources to define additional directory in which to find raw asset files
|
|
||||||
create_project_apk_package:
|
|
||||||
$(ANDROID_BUILD_TOOLS)/aapt package -f -M $(PROJECT_BUILD_PATH)/AndroidManifest.xml -S $(PROJECT_BUILD_PATH)/res -A $(PROJECT_BUILD_PATH)/assets -I $(ANDROID_HOME)/platforms/android-$(ANDROID_API_VERSION)/android.jar -F $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).unsigned.apk $(PROJECT_BUILD_PATH)/bin
|
|
||||||
cd $(PROJECT_BUILD_PATH) && $(ANDROID_BUILD_TOOLS)/aapt add bin/$(PROJECT_NAME).unsigned.apk lib/$(ANDROID_ARCH_NAME)/lib$(PROJECT_LIBRARY_NAME).so $(PROJECT_SHARED_LIBS)
|
|
||||||
|
|
||||||
# Create signed APK package using generated Key: bin/$(PROJECT_NAME).signed.apk
|
|
||||||
sign_project_apk_package:
|
|
||||||
$(JAVA_HOME)/bin/jarsigner -keystore $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore -storepass $(APP_KEYSTORE_PASS) -keypass $(APP_KEYSTORE_PASS) -signedjar $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).signed.apk $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).unsigned.apk $(PROJECT_NAME)Key
|
|
||||||
|
|
||||||
# Create zip-aligned APK package: $(PROJECT_NAME).apk
|
|
||||||
zipalign_project_apk_package:
|
|
||||||
$(ANDROID_BUILD_TOOLS)/zipalign -f 4 $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).signed.apk $(PROJECT_NAME).apk
|
|
||||||
|
|
||||||
# Install $(PROJECT_NAME).apk to default emulator/device
|
|
||||||
# NOTE: Use -e (emulator) or -d (device) parameters if required
|
|
||||||
install:
|
|
||||||
$(ANDROID_PLATFORM_TOOLS)/adb install $(PROJECT_NAME).apk
|
|
||||||
|
|
||||||
# Check supported ABI for the device (armeabi-v7a, arm64-v8a, x86, x86_64)
|
|
||||||
check_device_abi:
|
|
||||||
$(ANDROID_PLATFORM_TOOLS)/adb shell getprop ro.product.cpu.abi
|
|
||||||
|
|
||||||
# Monitorize output log coming from device, only raylib tag
|
|
||||||
logcat:
|
|
||||||
$(ANDROID_PLATFORM_TOOLS)/adb logcat -c
|
|
||||||
$(ANDROID_PLATFORM_TOOLS)/adb logcat raylib:V *:S
|
|
||||||
|
|
||||||
# Install and monitorize $(PROJECT_NAME).apk to default emulator/device
|
|
||||||
deploy:
|
|
||||||
$(ANDROID_PLATFORM_TOOLS)/adb install $(PROJECT_NAME).apk
|
|
||||||
$(ANDROID_PLATFORM_TOOLS)/adb logcat -c
|
|
||||||
$(ANDROID_PLATFORM_TOOLS)/adb logcat raylib:V *:S
|
|
||||||
|
|
||||||
#$(ANDROID_PLATFORM_TOOLS)/adb logcat *:W
|
|
||||||
|
|
||||||
# Clean everything
|
|
||||||
clean:
|
|
||||||
ifeq ($(OS),Windows_NT)
|
|
||||||
del $(PROJECT_BUILD_PATH)\* /f /s /q
|
|
||||||
rmdir $(PROJECT_BUILD_PATH) /s /q
|
|
||||||
else
|
|
||||||
rm -r $(PROJECT_BUILD_PATH)
|
|
||||||
endif
|
|
||||||
@echo Cleaning done
|
|
@ -1,203 +0,0 @@
|
|||||||
## Building the Examples
|
|
||||||
|
|
||||||
The examples assume you have already built the `raylib` library in `../src`.
|
|
||||||
|
|
||||||
### With GNU make
|
|
||||||
|
|
||||||
- `make` builds all examples
|
|
||||||
- `make [module]` builds all examples for a particular module (e.g `make core`)
|
|
||||||
|
|
||||||
### With Zig
|
|
||||||
|
|
||||||
The [Zig](https://ziglang.org/) toolchain can compile `C` and `C++` in addition to `Zig`.
|
|
||||||
You may find it easier to use than other toolchains, especially when it comes to cross-compiling.
|
|
||||||
|
|
||||||
- `zig build` to compile all examples
|
|
||||||
- `zig build [module]` to compile all examples for a module (e.g. `zig build core`)
|
|
||||||
- `zig build [example]` to compile _and run_ a particular example (e.g. `zig build core_basic_window`)
|
|
||||||
|
|
||||||
## EXAMPLES LIST
|
|
||||||
|
|
||||||
### category: core
|
|
||||||
|
|
||||||
Examples using raylib core platform functionality like window creation, inputs, drawing modes and system functionality.
|
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
|
||||||
|----|----------|--------|:----------:|:---:|
|
|
||||||
| 01 | [core_basic_window](core/core_basic_window.c) | <img src="core/core_basic_window.png" alt="core_basic_window" width="200"> | ray | |
|
|
||||||
| 02 | [core_input_keys](core/core_input_keys.c) | <img src="core/core_input_keys.png" alt="core_input_keys" width="200"> | ray | |
|
|
||||||
| 03 | [core_input_mouse](core/core_input_mouse.c) | <img src="core/core_input_mouse.png" alt="core_input_mouse" width="200"> | ray | |
|
|
||||||
| 04 | [core_input_mouse_wheel](core/core_input_mouse_wheel.c) | <img src="core/core_input_mouse_wheel.png" alt="core_input_mouse_wheel" width="200"> | ray | |
|
|
||||||
| 05 | [core_input_gamepad](core/core_input_gamepad.c) | <img src="core/core_input_gamepad.png" alt="core_input_gamepad" width="200"> | ray | |
|
|
||||||
| 06 | [core_input_multitouch](core/core_input_multitouch.c) | <img src="core/core_input_multitouch.png" alt="core_input_multitouch" width="200"> | [Berni](https://github.com/Berni8k) | |
|
|
||||||
| 07 | [core_input_gestures](core/core_input_gestures.c) | <img src="core/core_input_gestures.png" alt="core_input_gestures" width="200"> | ray | |
|
|
||||||
| 08 | [core_2d_camera](core/core_2d_camera.c) | <img src="core/core_2d_camera.png" alt="core_2d_camera" width="200"> | ray | |
|
|
||||||
| 09 | [core_2d_camera_platformer](core/core_2d_camera_platformer.c) | <img src="core/core_2d_camera_platformer.png" alt="core_2d_camera_platformer" width="200"> | [avyy](https://github.com/avyy) | ⭐️ |
|
|
||||||
| 10 | [core_3d_camera_mode](core/core_3d_camera_mode.c) | <img src="core/core_3d_camera_mode.png" alt="core_3d_camera_mode" width="200"> | ray | |
|
|
||||||
| 11 | [core_3d_camera_free](core/core_3d_camera_free.c) | <img src="core/core_3d_camera_free.png" alt="core_3d_camera_free" width="200"> | ray | |
|
|
||||||
| 12 | [core_3d_camera_first_person](core/core_3d_camera_first_person.c) | <img src="core/core_3d_camera_first_person.png" alt="core_3d_camera_first_person" width="200"> | ray | |
|
|
||||||
| 13 | [core_3d_picking](core/core_3d_picking.c) | <img src="core/core_3d_picking.png" alt="core_3d_picking" width="200"> | ray | |
|
|
||||||
| 14 | [core_world_screen](core/core_world_screen.c) | <img src="core/core_world_screen.png" alt="core_world_screen" width="200"> | ray | |
|
|
||||||
| 15 | [core_custom_logging](core/core_custom_logging.c) | <img src="core/core_custom_logging.png" alt="core_custom_logging" width="200"> | [Pablo Marcos](https://github.com/pamarcos) | |
|
|
||||||
| 16 | [core_window_letterbox](core/core_window_letterbox.c) | <img src="core/core_window_letterbox.png" alt="core_window_letterbox" width="200"> | [Anata](https://github.com/anatagawa) | |
|
|
||||||
| 17 | [core_drop_files](core/core_drop_files.c) | <img src="core/core_drop_files.png" alt="core_drop_files" width="200"> | ray | |
|
|
||||||
| 18 | [core_random_values](core/core_random_values.c) | <img src="core/core_random_values.png" alt="core_random_values" width="200"> | ray | |
|
|
||||||
| 19 | [core_scissor_test](core/core_scissor_test.c) | <img src="core/core_scissor_test.png" alt="core_scissor_test" width="200"> | [Chris Dill](https://github.com/MysteriousSpace) | |
|
|
||||||
| 20 | [core_storage_values](core/core_storage_values.c) | <img src="core/core_storage_values.png" alt="core_storage_values" width="200"> | ray | |
|
|
||||||
| 21 | [core_vr_simulator](core/core_vr_simulator.c) | <img src="core/core_vr_simulator.png" alt="core_vr_simulator" width="200"> | ray | ⭐️ |
|
|
||||||
| 22 | [core_loading_thread](core/core_loading_thread.c) | <img src="core/core_loading_thread.png" alt="core_loading_thread" width="200"> | ray | |
|
|
||||||
| 23 | [core/core_quat_conversion](core/core_quat_conversion.c) | <img src="core/core_quat_conversion.png" alt="core_quat_conversion" width="200"> | [Chris Camacho](https://github.com/codifies) | |
|
|
||||||
| 24 | [core/core_window_flags](core/core_window_flags.c) | <img src="core/core_window_flags.png" alt="core_window_flags" width="200"> | ray | |
|
|
||||||
|
|
||||||
### category: shapes
|
|
||||||
|
|
||||||
Examples using raylib shapes drawing functionality, provided by raylib [shapes](../src/shapes.c) module.
|
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
|
||||||
|----|----------|--------|:----------:|:---:|
|
|
||||||
| 25 | [shapes_basic_shapes](shapes/shapes_basic_shapes.c) | <img src="shapes/shapes_basic_shapes.png" alt="shapes_basic_shapes" width="200"> | ray | |
|
|
||||||
| 26 | [shapes_bouncing_ball](shapes/shapes_bouncing_ball.c) | <img src="shapes/shapes_bouncing_ball.png" alt="shapes_bouncing_ball" width="200"> | ray | |
|
|
||||||
| 27 | [shapes_colors_palette](shapes/shapes_colors_palette.c) | <img src="shapes/shapes_colors_palette.png" alt="shapes_colors_palette" width="200"> | ray | |
|
|
||||||
| 28 | [shapes_logo_raylib](shapes/shapes_logo_raylib.c) | <img src="shapes/shapes_logo_raylib.png" alt="shapes_logo_raylib" width="200"> | ray | |
|
|
||||||
| 29 | [shapes_logo_raylib_anim](shapes/shapes_logo_raylib_anim.c) | <img src="shapes/shapes_logo_raylib_anim.png" alt="shapes_logo_raylib_anim" width="200"> | ray | |
|
|
||||||
| 30 | [shapes_rectangle_scaling](shapes/shapes_rectangle_scaling.c) | <img src="shapes/shapes_rectangle_scaling.png" alt="shapes_rectangle_scaling" width="200"> | [Vlad Adrian](https://github.com/demizdor) | |
|
|
||||||
| 31 | [shapes_lines_bezier](shapes/shapes_lines_bezier.c) | <img src="shapes/shapes_lines_bezier.png" alt="shapes_lines_bezier" width="200"> | ray | |
|
|
||||||
| 32 | [shapes_collision_area](shapes/shapes_collision_area.c) | <img src="shapes/shapes_collision_area.png" alt="shapes_collision_area" width="200"> | ray | |
|
|
||||||
| 33 | [shapes_following_eyes](shapes/shapes_following_eyes.c) | <img src="shapes/shapes_following_eyes.png" alt="shapes_following_eyes" width="200"> | ray | |
|
|
||||||
| 34 | [shapes_easings_ball_anim](shapes/shapes_easings_ball_anim.c) | <img src="shapes/shapes_easings_ball_anim.png" alt="shapes_easings_ball_anim" width="200"> | ray | |
|
|
||||||
| 35 | [shapes_easings_box_anim](shapes/shapes_easings_box_anim.c) | <img src="shapes/shapes_easings_box_anim.png" alt="shapes_easings_box_anim" width="200"> | ray | |
|
|
||||||
| 36 | [shapes_easings_rectangle_array](shapes/shapes_easings_rectangle_array.c) | <img src="shapes/shapes_easings_rectangle_array.png" alt="shapes_easings_rectangle_array" width="200"> | ray | |
|
|
||||||
| 37 | [shapes_draw_ring](shapes/shapes_draw_ring.c) | <img src="shapes/shapes_draw_ring.png" alt="shapes_draw_ring" width="200"> | [Vlad Adrian](https://github.com/demizdor) | |
|
|
||||||
| 38 | [shapes_draw_circle_sector](shapes/shapes_draw_circle_sector.c) | <img src="shapes/shapes_draw_circle_sector.png" alt="shapes_draw_circle_sector" width="200"> | [Vlad Adrian](https://github.com/demizdor) | |
|
|
||||||
| 39 | [shapes_draw_rectangle_rounded](shapes/shapes_draw_rectangle_rounded.c) | <img src="shapes/shapes_draw_rectangle_rounded.png" alt="shapes_draw_rectangle_rounded" width="200"> | [Vlad Adrian](https://github.com/demizdor) | |
|
|
||||||
|
|
||||||
### category: textures
|
|
||||||
|
|
||||||
Examples using raylib textures functionality, including image/textures loading/generation and drawing, provided by raylib [textures](../src/textures.c) module.
|
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
|
||||||
|----|---------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|:------------------------------------------------:|:---:|
|
|
||||||
| 40 | [textures_logo_raylib](textures/textures_logo_raylib.c) | <img src="textures/textures_logo_raylib.png" alt="textures_logo_raylib" width="200"> | ray | |
|
|
||||||
| 41 | [textures_rectangle](textures/textures_rectangle.c) | <img src="textures/textures_rectangle.png" alt="textures_rectangle" width="200"> | ray | |
|
|
||||||
| 42 | [textures_srcrec_dstrec](textures/textures_srcrec_dstrec.c) | <img src="textures/textures_srcrec_dstrec.png" alt="textures_srcrec_dstrec" width="200"> | ray | |
|
|
||||||
| 43 | [textures_image_drawing](textures/textures_image_drawing.c) | <img src="textures/textures_image_drawing.png" alt="textures_image_drawing" width="200"> | ray | |
|
|
||||||
| 44 | [textures_image_generation](textures/textures_image_generation.c) | <img src="textures/textures_image_generation.png" alt="textures_image_generation" width="200"> | ray | |
|
|
||||||
| 45 | [textures_image_loading](textures/textures_image_loading.c) | <img src="textures/textures_image_loading.png" alt="textures_image_loading" width="200"> | ray | |
|
|
||||||
| 46 | [textures_image_processing](textures/textures_image_processing.c) | <img src="textures/textures_image_processing.png" alt="textures_image_processing" width="200"> | ray | |
|
|
||||||
| 47 | [textures_image_text](textures/textures_image_text.c) | <img src="textures/textures_image_text.png" alt="textures_image_text" width="200"> | ray | |
|
|
||||||
| 48 | [textures_to_image](textures/textures_to_image.c) | <img src="textures/textures_to_image.png" alt="textures_to_image" width="200"> | ray | |
|
|
||||||
| 49 | [textures_raw_data](textures/textures_raw_data.c) | <img src="textures/textures_raw_data.png" alt="textures_raw_data" width="200"> | ray | |
|
|
||||||
| 50 | [textures_particles_blending](textures/textures_particles_blending.c) | <img src="textures/textures_particles_blending.png" alt="textures_particles_blending" width="200"> | ray | |
|
|
||||||
| 51 | [textures_npatch_drawing](textures/textures_npatch_drawing.c) | <img src="textures/textures_npatch_drawing.png" alt="textures_npatch_drawing" width="200"> | [Jorge A. Gomes](https://github.com/overdev) | |
|
|
||||||
| 52 | [textures_background_scrolling](textures/textures_background_scrolling.c) | <img src="textures/textures_background_scrolling.png" alt="textures_background_scrolling" width="200"> | ray | |
|
|
||||||
| 53 | [textures_sprite_button](textures/textures_sprite_button.c) | <img src="textures/textures_sprite_button.png" alt="textures_sprite_button" width="200"> | ray | |
|
|
||||||
| 54 | [textures_sprite_explosion](textures/textures_sprite_explosion.c) | <img src="textures/textures_sprite_explosion.png" alt="textures_sprite_explosion" width="200"> | ray | |
|
|
||||||
| 55 | [textures_bunnymark](textures/textures_bunnymark.c) | <img src="textures/textures_bunnymark.png" alt="textures_bunnymark" width="200"> | ray | |
|
|
||||||
| 56 | [textures_mouse_painting](textures/textures_mouse_painting.c) | <img src="textures/textures_mouse_painting.png" alt="textures_mouse_painting" width="200"> | [Chris Dill](https://github.com/MysteriousSpace) | |
|
|
||||||
| 57 | [textures_blend_modes](textures/textures_blend_modes.c) | <img src="textures/textures_blend_modes.png" alt="textures_blend_modes" width="200"> | [Karlo Licudine](https://github.com/accidentalrebel) | |
|
|
||||||
| 58 | [textures_draw_tiled](textures/textures_draw_tiled.c) | <img src="textures/textures_draw_tiled.png" alt="textures_draw_tiled" width="200"> | [Vlad Adrian](https://github.com/demizdor) | |
|
|
||||||
| -- | [textures_poly](textures/textures_poly.c) | <img src="textures/textures_poly.png" alt="textures_poly" width="200"> | [Chris Camacho](https://github.com/codifies) | ⭐️ |
|
|
||||||
|
|
||||||
### category: text
|
|
||||||
|
|
||||||
Examples using raylib text functionality, including sprite fonts loading/generation and text drawing, provided by raylib [text](../src/text.c) module.
|
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
|
||||||
|----|----------|--------|:----------:|:---:|
|
|
||||||
| 59 | [text_raylib_fonts](text/text_raylib_fonts.c) | <img src="text/text_raylib_fonts.png" alt="text_raylib_fonts" width="200"> | ray | |
|
|
||||||
| 60 | [text_font_spritefont](text/text_font_spritefont.c) | <img src="text/text_font_spritefont.png" alt="text_font_spritefont" width="200"> | ray | |
|
|
||||||
| 61 | [text_font_filters](text/text_font_filters.c) | <img src="text/text_font_filters.png" alt="text_font_filters" width="200"> | ray | |
|
|
||||||
| 62 | [text_font_loading](text/text_font_loading.c) | <img src="text/text_font_loading.png" alt="text_font_loading" width="200"> | ray | |
|
|
||||||
| 63 | [text_font_sdf](text/text_font_sdf.c) | <img src="text/text_font_sdf.png" alt="text_font_sdf" width="200"> | ray | |
|
|
||||||
| 64 | [text_format_text](text/text_format_text.c) | <img src="text/text_format_text.png" alt="text_format_text" width="200"> | ray | |
|
|
||||||
| 65 | [text_input_box](text/text_input_box.c) | <img src="text/text_input_box.png" alt="text_input_box" width="200"> | ray | |
|
|
||||||
| 66 | [text_writing_anim](text/text_writing_anim.c) | <img src="text/text_writing_anim.png" alt="text_writing_anim" width="200"> | ray | |
|
|
||||||
| 67 | [text_rectangle_bounds](text/text_rectangle_bounds.c) | <img src="text/text_rectangle_bounds.png" alt="text_rectangle_bounds" width="200"> | [Vlad Adrian](https://github.com/demizdor) | |
|
|
||||||
| 68 | [text_unicode](text/text_unicode.c) | <img src="text/text_unicode.png" alt="text_unicode" width="200"> | [Vlad Adrian](https://github.com/demizdor) | |
|
|
||||||
| -- | [text_draw_3d](text/text_draw_3d.c) | <img src="text/text_draw_3d.png" alt="text_draw_3d" width="200"> | [Vlad Adrian](https://github.com/demizdor) | ⭐️ |
|
|
||||||
|
|
||||||
### category: models
|
|
||||||
|
|
||||||
Examples using raylib models functionality, including models loading/generation and drawing, provided by raylib [models](../src/models.c) module.
|
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
|
||||||
|----|----------|--------|:----------:|:---:|
|
|
||||||
| 69 | [models_animation](models/models_animation.c) | <img src="models/models_animation.png" alt="models_animation" width="200"> | [culacant](https://github.com/culacant) | |
|
|
||||||
| 70 | [models_billboard](models/models_billboard.c) | <img src="models/models_billboard.png" alt="models_billboard" width="200"> | ray | |
|
|
||||||
| 71 | [models_box_collisions](models/models_box_collisions.c) | <img src="models/models_box_collisions.png" alt="models_box_collisions" width="200"> | ray | |
|
|
||||||
| 72 | [models_cubicmap](models/models_cubicmap.c) | <img src="models/models_cubicmap.png" alt="models_cubicmap" width="200"> | ray | |
|
|
||||||
| 73 | [models_first_person_maze](models/models_first_person_maze.c) | <img src="models/models_first_person_maze.png" alt="models_first_person_maze" width="200"> | ray | |
|
|
||||||
| 74 | [models_geometric_shapes](models/models_geometric_shapes.c) | <img src="models/models_geometric_shapes.png" alt="models_geometric_shapes" width="200"> | ray | |
|
|
||||||
| 75 | [...]() | | ray | |
|
|
||||||
| 76 | [models_mesh_generation](models/models_mesh_generation.c) | <img src="models/models_mesh_generation.png" alt="models_mesh_generation" width="200"> | ray | |
|
|
||||||
| 77 | [models_mesh_picking](models/models_mesh_picking.c) | <img src="models/models_mesh_picking.png" alt="models_mesh_picking" width="200"> | [Joel Davis](https://github.com/joeld42) | |
|
|
||||||
| 78 | [models_loading](models/models_loading.c) | <img src="models/models_loading.png" alt="models_loading" width="200"> | ray | |
|
|
||||||
| 79 | [models_orthographic_projection](models/models_orthographic_projection.c) | <img src="models/models_orthographic_projection.png" alt="models_orthographic_projection" width="200"> | [Max Danielsson](https://github.com/autious) | |
|
|
||||||
| 80 | [models_rlgl_solar_system](models/models_rlgl_solar_system.c) | <img src="models/models_rlgl_solar_system.png" alt="models_rlgl_solar_system" width="200"> | ray | |
|
|
||||||
| 81 | [models_skybox](models/models_skybox.c) | <img src="models/models_skybox.png" alt="models_skybox" width="200"> | ray | |
|
|
||||||
| 82 | [models_yaw_pitch_roll](models/models_yaw_pitch_roll.c) | <img src="models/models_yaw_pitch_roll.png" alt="models_yaw_pitch_roll" width="200"> | [Berni](https://github.com/Berni8k) | ⭐️ |
|
|
||||||
| 83 | [models_heightmap](models/models_heightmap.c) | <img src="models/models_heightmap.png" alt="models_heightmap" width="200"> | ray | |
|
|
||||||
| 84 | [models_waving_cubes](models/models_waving_cubes.c) | <img src="models/models_waving_cubes.png" alt="models_waving_cubes" width="200"> | [codecat](https://github.com/codecat) | |
|
|
||||||
| -- | [models_gltf_model](models/models_gltf_model.c) | <img src="models/models_gltf_model.png" alt="models_gltf_model" width="200"> | [object71](https://github.com/object71) | ⭐️ |
|
|
||||||
|
|
||||||
### category: shaders
|
|
||||||
|
|
||||||
Examples using raylib shaders functionality, including shaders loading, parameters configuration and drawing using them (model shaders and postprocessing shaders). This functionality is directly provided by raylib [rlgl](../src/rlgl.c) module.
|
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
|
||||||
|----|----------|--------|:----------:|:---:|
|
|
||||||
| 85 | [shaders_basic_lighting](shaders/shaders_basic_lighting.c) | <img src="shaders/shaders_basic_lighting.png" alt="shaders_basic_lighting" width="200"> | [Chris Camacho](https://github.com/codifies) | |
|
|
||||||
| 86 | [shaders_model_shader](shaders/shaders_model_shader.c) | <img src="shaders/shaders_model_shader.png" alt="shaders_model_shader" width="200"> | ray | |
|
|
||||||
| 87 | [shaders_shapes_textures](shaders/shaders_shapes_textures.c) | <img src="shaders/shaders_shapes_textures.png" alt="shaders_shapes_textures" width="200"> | ray | |
|
|
||||||
| 88 | [shaders_custom_uniform](shaders/shaders_custom_uniform.c) | <img src="shaders/shaders_custom_uniform.png" alt="shaders_custom_uniform" width="200"> | ray | |
|
|
||||||
| 89 | [shaders_postprocessing](shaders/shaders_postprocessing.c) | <img src="shaders/shaders_postprocessing.png" alt="shaders_postprocessing" width="200"> | ray | |
|
|
||||||
| 90 | [shaders_palette_switch](shaders/shaders_palette_switch.c) | <img src="shaders/shaders_palette_switch.png" alt="shaders_palette_switch" width="200"> | [Marco Lizza](https://github.com/MarcoLizza) | |
|
|
||||||
| 91 | [shaders_raymarching](shaders/shaders_raymarching.c) | <img src="shaders/shaders_raymarching.png" alt="shaders_raymarching" width="200"> | Shader by Iñigo Quilez | |
|
|
||||||
| 92 | [shaders_texture_drawing](shaders/shaders_texture_drawing.c) | <img src="shaders/shaders_texture_drawing.png" alt="shaders_texture_drawing" width="200"> | Michał Ciesielski | |
|
|
||||||
| 93 | [shaders_texture_waves](shaders/shaders_texture_waves.c) | <img src="shaders/shaders_texture_waves.png" alt="shaders_texture_waves" width="200"> | [Anata](https://github.com/anatagawa) | |
|
|
||||||
| 94 | [shaders_julia_set](shaders/shaders_julia_set.c) | <img src="shaders/shaders_julia_set.png" alt="shaders_julia_set" width="200"> | [eggmund](https://github.com/eggmund) | |
|
|
||||||
| 95 | [shaders_eratosthenes](shaders/shaders_eratosthenes.c) | <img src="shaders/shaders_eratosthenes.png" alt="shaders_eratosthenes" width="200"> | [ProfJski](https://github.com/ProfJski) | |
|
|
||||||
| 96 | [shaders_fog](shaders/shaders_fog.c) | <img src="shaders/shaders_fog.png" alt="shaders_fog" width="200"> | [Chris Camacho](https://github.com/codifies) | |
|
|
||||||
| 97 | [shaders_simple_mask](shaders/shaders_simple_mask.c) | <img src="shaders/shaders_simple_mask.png" alt="shaders_simple_mask" width="200"> | [Chris Camacho](https://github.com/codifies) | |
|
|
||||||
| 98 | [shaders_spotlight](shaders/shaders_spotlight.c) | <img src="shaders/shaders_spotlight.png" alt="shaders_spotlight" width="200"> | [Chris Camacho](https://github.com/codifies) | |
|
|
||||||
| 99 | [shaders_hot_reloading](shaders/shaders_hot_reloading.c) | <img src="shaders/shaders_hot_reloading.png" alt="shaders_hot_reloading" width="200"> | ray | |
|
|
||||||
| 100 | [shaders_mesh_instancing](shaders/shaders_mesh_instancing.c) | <img src="shaders/shaders_mesh_instancing.png" alt="shaders_mesh_instancing" width="200"> | [seanpringle](https://github.com/seanpringle), [moliad](https://github.com/moliad) | ⭐️ |
|
|
||||||
| 101 | [shaders_multi_sample2d](shaders/shaders_multi_sample2d.c) | <img src="shaders/shaders_multi_sample2d.png" alt="shaders_multi_sample2d" width="200"> | ray | |
|
|
||||||
|
|
||||||
### category: audio
|
|
||||||
|
|
||||||
Examples using raylib audio functionality, including sound/music loading and playing. This functionality is provided by raylib [raudio](../src/raudio.c) module. Note this module can be used standalone independently of raylib, check [raudio_standalone](others/raudio_standalone.c) example.
|
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
|
||||||
|----|----------|--------|:----------:|:---:|
|
|
||||||
| 102 | [audio_module_playing](audio/audio_module_playing.c) | <img src="audio/audio_module_playing.png" alt="audio_module_playing" width="200"> | ray | |
|
|
||||||
| 103 | [audio_music_stream](audio/audio_music_stream.c) | <img src="audio/audio_music_stream.png" alt="audio_music_stream" width="200"> | ray | |
|
|
||||||
| 104 | [audio_raw_stream](audio/audio_raw_stream.c) | <img src="audio/audio_raw_stream.png" alt="audio_raw_stream" width="200"> | ray | |
|
|
||||||
| 105 | [audio_sound_loading](audio/audio_sound_loading.c) | <img src="audio/audio_sound_loading.png" alt="audio_sound_loading" width="200"> | ray | |
|
|
||||||
| 106 | [audio_multichannel_sound](audio/audio_multichannel_sound.c) | <img src="audio/audio_multichannel_sound.png" alt="audio_multichannel_sound" width="200"> | [Chris Camacho](https://github.com/codifies) | ⭐️ |
|
|
||||||
|
|
||||||
### category: physics
|
|
||||||
|
|
||||||
Examples showing physics functionality with raylib. This functionality is provided by [physac](https://github.com/victorfisac/Physac) library, included with raylib [sources](../src/physac.h). Note this library is not linked with raylib by default, it should be manually included in user code.
|
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
|
||||||
|----|----------|--------|:----------:|:---:|
|
|
||||||
| 107 | [physics_demo](physics/physics_demo.c) | <img src="physics/physics_demo.png" alt="physics_demo" width="200"> | [Victor Fisac](https://github.com/victorfisac) | |
|
|
||||||
| 108 | [physics_friction](physics/physics_friction.c) | <img src="physics/physics_friction.png" alt="physics_friction" width="200"> | [Victor Fisac](https://github.com/victorfisac) | |
|
|
||||||
| 109 | [physics_movement](physics/physics_movement.c) | <img src="physics/physics_movement.png" alt="physics_movement" width="200"> | [Victor Fisac](https://github.com/victorfisac) | |
|
|
||||||
| 110 | [physics_restitution](physics/physics_restitution.c) | <img src="physics/physics_restitution.png" alt="physics_restitution" width="200"> | [Victor Fisac](https://github.com/victorfisac) | |
|
|
||||||
| 111 | [physics_shatter](physics/physics_shatter.c) | <img src="physics/physics_shatter.png" alt="physics_shatter" width="200"> | [Victor Fisac](https://github.com/victorfisac) | |
|
|
||||||
|
|
||||||
### category: others
|
|
||||||
|
|
||||||
Examples showing raylib misc functionality that does not fit in other categories, like standalone modules usage or examples integrating external libraries.
|
|
||||||
|
|
||||||
| ## | example | image | developer | new |
|
|
||||||
|----|----------|--------|:----------:|:---:|
|
|
||||||
| 119 | [raudio_standalone](others/raudio_standalone.c) | | ray | |
|
|
||||||
| 120 | [rlgl_standalone](others/rlgl_standalone.c) | | ray | |
|
|
||||||
| 121 | [easings_testbed](others/easings_testbed.c) | | [Juan Miguel López](https://github.com/flashback-fx) | |
|
|
||||||
| 122 | [embedded_files_loading](others/embedded_files_loading.c) | | [Kristian Holmgren](https://github.com/defutura) | |
|
|
||||||
|
|
||||||
As always contributions are welcome, feel free to send new examples! Here it is an [examples template](examples_template.c) to start with!
|
|
||||||
|
|
@ -1,146 +0,0 @@
|
|||||||
/*******************************************************************************************
|
|
||||||
*
|
|
||||||
* raylib [audio] example - Module playing (streaming)
|
|
||||||
*
|
|
||||||
* This example has been created using raylib 1.5 (www.raylib.com)
|
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2016 Ramon Santamaria (@raysan5)
|
|
||||||
*
|
|
||||||
********************************************************************************************/
|
|
||||||
|
|
||||||
#include "raylib.h"
|
|
||||||
|
|
||||||
#define MAX_CIRCLES 64
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
Vector2 position;
|
|
||||||
float radius;
|
|
||||||
float alpha;
|
|
||||||
float speed;
|
|
||||||
Color color;
|
|
||||||
} CircleWave;
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
// Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
const int screenWidth = 800;
|
|
||||||
const int screenHeight = 450;
|
|
||||||
|
|
||||||
SetConfigFlags(FLAG_MSAA_4X_HINT); // NOTE: Try to enable MSAA 4X
|
|
||||||
|
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [audio] example - module playing (streaming)");
|
|
||||||
|
|
||||||
InitAudioDevice(); // Initialize audio device
|
|
||||||
|
|
||||||
Color colors[14] = { ORANGE, RED, GOLD, LIME, BLUE, VIOLET, BROWN, LIGHTGRAY, PINK,
|
|
||||||
YELLOW, GREEN, SKYBLUE, PURPLE, BEIGE };
|
|
||||||
|
|
||||||
// Creates ome circles for visual effect
|
|
||||||
CircleWave circles[MAX_CIRCLES] = { 0 };
|
|
||||||
|
|
||||||
for (int i = MAX_CIRCLES - 1; i >= 0; i--)
|
|
||||||
{
|
|
||||||
circles[i].alpha = 0.0f;
|
|
||||||
circles[i].radius = (float)GetRandomValue(10, 40);
|
|
||||||
circles[i].position.x = (float)GetRandomValue((int)circles[i].radius, (int)(screenWidth - circles[i].radius));
|
|
||||||
circles[i].position.y = (float)GetRandomValue((int)circles[i].radius, (int)(screenHeight - circles[i].radius));
|
|
||||||
circles[i].speed = (float)GetRandomValue(1, 100)/2000.0f;
|
|
||||||
circles[i].color = colors[GetRandomValue(0, 13)];
|
|
||||||
}
|
|
||||||
|
|
||||||
Music music = LoadMusicStream("resources/mini1111.xm");
|
|
||||||
music.looping = false;
|
|
||||||
float pitch = 1.0f;
|
|
||||||
|
|
||||||
PlayMusicStream(music);
|
|
||||||
|
|
||||||
float timePlayed = 0.0f;
|
|
||||||
bool pause = false;
|
|
||||||
|
|
||||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Main game loop
|
|
||||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
|
||||||
{
|
|
||||||
// Update
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
UpdateMusicStream(music); // Update music buffer with new stream data
|
|
||||||
|
|
||||||
// Restart music playing (stop and play)
|
|
||||||
if (IsKeyPressed(KEY_SPACE))
|
|
||||||
{
|
|
||||||
StopMusicStream(music);
|
|
||||||
PlayMusicStream(music);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pause/Resume music playing
|
|
||||||
if (IsKeyPressed(KEY_P))
|
|
||||||
{
|
|
||||||
pause = !pause;
|
|
||||||
|
|
||||||
if (pause) PauseMusicStream(music);
|
|
||||||
else ResumeMusicStream(music);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IsKeyDown(KEY_DOWN)) pitch -= 0.01f;
|
|
||||||
else if (IsKeyDown(KEY_UP)) pitch += 0.01f;
|
|
||||||
|
|
||||||
SetMusicPitch(music, pitch);
|
|
||||||
|
|
||||||
// Get timePlayed scaled to bar dimensions
|
|
||||||
timePlayed = GetMusicTimePlayed(music)/GetMusicTimeLength(music)*(screenWidth - 40);
|
|
||||||
|
|
||||||
// Color circles animation
|
|
||||||
for (int i = MAX_CIRCLES - 1; (i >= 0) && !pause; i--)
|
|
||||||
{
|
|
||||||
circles[i].alpha += circles[i].speed;
|
|
||||||
circles[i].radius += circles[i].speed*10.0f;
|
|
||||||
|
|
||||||
if (circles[i].alpha > 1.0f) circles[i].speed *= -1;
|
|
||||||
|
|
||||||
if (circles[i].alpha <= 0.0f)
|
|
||||||
{
|
|
||||||
circles[i].alpha = 0.0f;
|
|
||||||
circles[i].radius = (float)GetRandomValue(10, 40);
|
|
||||||
circles[i].position.x = (float)GetRandomValue((int)circles[i].radius, (int)(screenWidth - circles[i].radius));
|
|
||||||
circles[i].position.y = (float)GetRandomValue((int)circles[i].radius, (int)(screenHeight - circles[i].radius));
|
|
||||||
circles[i].color = colors[GetRandomValue(0, 13)];
|
|
||||||
circles[i].speed = (float)GetRandomValue(1, 100)/2000.0f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Draw
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
BeginDrawing();
|
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
|
||||||
|
|
||||||
for (int i = MAX_CIRCLES - 1; i >= 0; i--)
|
|
||||||
{
|
|
||||||
DrawCircleV(circles[i].position, circles[i].radius, Fade(circles[i].color, circles[i].alpha));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Draw time bar
|
|
||||||
DrawRectangle(20, screenHeight - 20 - 12, screenWidth - 40, 12, LIGHTGRAY);
|
|
||||||
DrawRectangle(20, screenHeight - 20 - 12, (int)timePlayed, 12, MAROON);
|
|
||||||
DrawRectangleLines(20, screenHeight - 20 - 12, screenWidth - 40, 12, GRAY);
|
|
||||||
|
|
||||||
EndDrawing();
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
}
|
|
||||||
|
|
||||||
// De-Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
UnloadMusicStream(music); // Unload music stream buffers from RAM
|
|
||||||
|
|
||||||
CloseAudioDevice(); // Close audio device (music streaming is automatically stopped)
|
|
||||||
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
Before Width: | Height: | Size: 47 KiB |
@ -1,73 +0,0 @@
|
|||||||
/*******************************************************************************************
|
|
||||||
*
|
|
||||||
* raylib [audio] example - Multichannel sound playing
|
|
||||||
*
|
|
||||||
* This example has been created using raylib 2.6 (www.raylib.com)
|
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
|
||||||
*
|
|
||||||
* Example contributed by Chris Camacho (@chriscamacho) and reviewed by Ramon Santamaria (@raysan5)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2019 Chris Camacho (@chriscamacho) and Ramon Santamaria (@raysan5)
|
|
||||||
*
|
|
||||||
********************************************************************************************/
|
|
||||||
|
|
||||||
#include "raylib.h"
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
// Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
const int screenWidth = 800;
|
|
||||||
const int screenHeight = 450;
|
|
||||||
|
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [audio] example - Multichannel sound playing");
|
|
||||||
|
|
||||||
InitAudioDevice(); // Initialize audio device
|
|
||||||
|
|
||||||
Sound fxWav = LoadSound("resources/sound.wav"); // Load WAV audio file
|
|
||||||
Sound fxOgg = LoadSound("resources/target.ogg"); // Load OGG audio file
|
|
||||||
|
|
||||||
SetSoundVolume(fxWav, 0.2f);
|
|
||||||
|
|
||||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Main game loop
|
|
||||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
|
||||||
{
|
|
||||||
// Update
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
if (IsKeyPressed(KEY_ENTER)) PlaySoundMulti(fxWav); // Play a new wav sound instance
|
|
||||||
if (IsKeyPressed(KEY_SPACE)) PlaySoundMulti(fxOgg); // Play a new ogg sound instance
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Draw
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
BeginDrawing();
|
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
|
||||||
|
|
||||||
DrawText("MULTICHANNEL SOUND PLAYING", 20, 20, 20, GRAY);
|
|
||||||
DrawText("Press SPACE to play new ogg instance!", 200, 120, 20, LIGHTGRAY);
|
|
||||||
DrawText("Press ENTER to play new wav instance!", 200, 180, 20, LIGHTGRAY);
|
|
||||||
|
|
||||||
DrawText(TextFormat("CONCURRENT SOUNDS PLAYING: %02i", GetSoundsPlaying()), 220, 280, 20, RED);
|
|
||||||
|
|
||||||
EndDrawing();
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
}
|
|
||||||
|
|
||||||
// De-Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
StopSoundMulti(); // We must stop the buffer pool before unloading
|
|
||||||
|
|
||||||
UnloadSound(fxWav); // Unload sound data
|
|
||||||
UnloadSound(fxOgg); // Unload sound data
|
|
||||||
|
|
||||||
CloseAudioDevice(); // Close audio device
|
|
||||||
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
Before Width: | Height: | Size: 16 KiB |
@ -1,93 +0,0 @@
|
|||||||
/*******************************************************************************************
|
|
||||||
*
|
|
||||||
* raylib [audio] example - Music playing (streaming)
|
|
||||||
*
|
|
||||||
* This example has been created using raylib 1.3 (www.raylib.com)
|
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
|
||||||
*
|
|
||||||
********************************************************************************************/
|
|
||||||
|
|
||||||
#include "raylib.h"
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
// Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
const int screenWidth = 800;
|
|
||||||
const int screenHeight = 450;
|
|
||||||
|
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [audio] example - music playing (streaming)");
|
|
||||||
|
|
||||||
InitAudioDevice(); // Initialize audio device
|
|
||||||
|
|
||||||
Music music = LoadMusicStream("resources/country.mp3");
|
|
||||||
|
|
||||||
PlayMusicStream(music);
|
|
||||||
|
|
||||||
float timePlayed = 0.0f;
|
|
||||||
bool pause = false;
|
|
||||||
|
|
||||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Main game loop
|
|
||||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
|
||||||
{
|
|
||||||
// Update
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
UpdateMusicStream(music); // Update music buffer with new stream data
|
|
||||||
|
|
||||||
// Restart music playing (stop and play)
|
|
||||||
if (IsKeyPressed(KEY_SPACE))
|
|
||||||
{
|
|
||||||
StopMusicStream(music);
|
|
||||||
PlayMusicStream(music);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pause/Resume music playing
|
|
||||||
if (IsKeyPressed(KEY_P))
|
|
||||||
{
|
|
||||||
pause = !pause;
|
|
||||||
|
|
||||||
if (pause) PauseMusicStream(music);
|
|
||||||
else ResumeMusicStream(music);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get timePlayed scaled to bar dimensions (400 pixels)
|
|
||||||
timePlayed = GetMusicTimePlayed(music)/GetMusicTimeLength(music)*400;
|
|
||||||
|
|
||||||
if (timePlayed > 400) StopMusicStream(music);
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Draw
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
BeginDrawing();
|
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
|
||||||
|
|
||||||
DrawText("MUSIC SHOULD BE PLAYING!", 255, 150, 20, LIGHTGRAY);
|
|
||||||
|
|
||||||
DrawRectangle(200, 200, 400, 12, LIGHTGRAY);
|
|
||||||
DrawRectangle(200, 200, (int)timePlayed, 12, MAROON);
|
|
||||||
DrawRectangleLines(200, 200, 400, 12, GRAY);
|
|
||||||
|
|
||||||
DrawText("PRESS SPACE TO RESTART MUSIC", 215, 250, 20, LIGHTGRAY);
|
|
||||||
DrawText("PRESS P TO PAUSE/RESUME MUSIC", 208, 280, 20, LIGHTGRAY);
|
|
||||||
|
|
||||||
EndDrawing();
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
}
|
|
||||||
|
|
||||||
// De-Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
UnloadMusicStream(music); // Unload music stream buffers from RAM
|
|
||||||
|
|
||||||
CloseAudioDevice(); // Close audio device (music streaming is automatically stopped)
|
|
||||||
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
Before Width: | Height: | Size: 15 KiB |
@ -1,170 +0,0 @@
|
|||||||
/*******************************************************************************************
|
|
||||||
*
|
|
||||||
* raylib [audio] example - Raw audio streaming
|
|
||||||
*
|
|
||||||
* This example has been created using raylib 1.6 (www.raylib.com)
|
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
|
||||||
*
|
|
||||||
* Example created by Ramon Santamaria (@raysan5) and reviewed by James Hofmann (@triplefox)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015-2019 Ramon Santamaria (@raysan5) and James Hofmann (@triplefox)
|
|
||||||
*
|
|
||||||
********************************************************************************************/
|
|
||||||
|
|
||||||
#include "raylib.h"
|
|
||||||
|
|
||||||
#include <stdlib.h> // Required for: malloc(), free()
|
|
||||||
#include <math.h> // Required for: sinf()
|
|
||||||
#include <string.h> // Required for: memcpy()
|
|
||||||
|
|
||||||
#define MAX_SAMPLES 512
|
|
||||||
#define MAX_SAMPLES_PER_UPDATE 4096
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
// Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
const int screenWidth = 800;
|
|
||||||
const int screenHeight = 450;
|
|
||||||
|
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [audio] example - raw audio streaming");
|
|
||||||
|
|
||||||
InitAudioDevice(); // Initialize audio device
|
|
||||||
|
|
||||||
SetAudioStreamBufferSizeDefault(MAX_SAMPLES_PER_UPDATE);
|
|
||||||
|
|
||||||
// Init raw audio stream (sample rate: 22050, sample size: 16bit-short, channels: 1-mono)
|
|
||||||
AudioStream stream = LoadAudioStream(44100, 16, 1);
|
|
||||||
|
|
||||||
// Buffer for the single cycle waveform we are synthesizing
|
|
||||||
short *data = (short *)malloc(sizeof(short)*MAX_SAMPLES);
|
|
||||||
|
|
||||||
// Frame buffer, describing the waveform when repeated over the course of a frame
|
|
||||||
short *writeBuf = (short *)malloc(sizeof(short)*MAX_SAMPLES_PER_UPDATE);
|
|
||||||
|
|
||||||
PlayAudioStream(stream); // Start processing stream buffer (no data loaded currently)
|
|
||||||
|
|
||||||
// Position read in to determine next frequency
|
|
||||||
Vector2 mousePosition = { -100.0f, -100.0f };
|
|
||||||
|
|
||||||
// Cycles per second (hz)
|
|
||||||
float frequency = 440.0f;
|
|
||||||
|
|
||||||
// Previous value, used to test if sine needs to be rewritten, and to smoothly modulate frequency
|
|
||||||
float oldFrequency = 1.0f;
|
|
||||||
|
|
||||||
// Cursor to read and copy the samples of the sine wave buffer
|
|
||||||
int readCursor = 0;
|
|
||||||
|
|
||||||
// Computed size in samples of the sine wave
|
|
||||||
int waveLength = 1;
|
|
||||||
|
|
||||||
Vector2 position = { 0, 0 };
|
|
||||||
|
|
||||||
SetTargetFPS(30); // Set our game to run at 30 frames-per-second
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Main game loop
|
|
||||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
|
||||||
{
|
|
||||||
// Update
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Sample mouse input.
|
|
||||||
mousePosition = GetMousePosition();
|
|
||||||
|
|
||||||
if (IsMouseButtonDown(MOUSE_BUTTON_LEFT))
|
|
||||||
{
|
|
||||||
float fp = (float)(mousePosition.y);
|
|
||||||
frequency = 40.0f + (float)(fp);
|
|
||||||
|
|
||||||
float pan = (float)(mousePosition.x) / (float)screenWidth;
|
|
||||||
SetAudioStreamPan(stream, pan);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Rewrite the sine wave.
|
|
||||||
// Compute two cycles to allow the buffer padding, simplifying any modulation, resampling, etc.
|
|
||||||
if (frequency != oldFrequency)
|
|
||||||
{
|
|
||||||
// Compute wavelength. Limit size in both directions.
|
|
||||||
int oldWavelength = waveLength;
|
|
||||||
waveLength = (int)(22050/frequency);
|
|
||||||
if (waveLength > MAX_SAMPLES/2) waveLength = MAX_SAMPLES/2;
|
|
||||||
if (waveLength < 1) waveLength = 1;
|
|
||||||
|
|
||||||
// Write sine wave.
|
|
||||||
for (int i = 0; i < waveLength*2; i++)
|
|
||||||
{
|
|
||||||
data[i] = (short)(sinf(((2*PI*(float)i/waveLength)))*32000);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Scale read cursor's position to minimize transition artifacts
|
|
||||||
readCursor = (int)(readCursor * ((float)waveLength / (float)oldWavelength));
|
|
||||||
oldFrequency = frequency;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Refill audio stream if required
|
|
||||||
if (IsAudioStreamProcessed(stream))
|
|
||||||
{
|
|
||||||
// Synthesize a buffer that is exactly the requested size
|
|
||||||
int writeCursor = 0;
|
|
||||||
|
|
||||||
while (writeCursor < MAX_SAMPLES_PER_UPDATE)
|
|
||||||
{
|
|
||||||
// Start by trying to write the whole chunk at once
|
|
||||||
int writeLength = MAX_SAMPLES_PER_UPDATE-writeCursor;
|
|
||||||
|
|
||||||
// Limit to the maximum readable size
|
|
||||||
int readLength = waveLength-readCursor;
|
|
||||||
|
|
||||||
if (writeLength > readLength) writeLength = readLength;
|
|
||||||
|
|
||||||
// Write the slice
|
|
||||||
memcpy(writeBuf + writeCursor, data + readCursor, writeLength*sizeof(short));
|
|
||||||
|
|
||||||
// Update cursors and loop audio
|
|
||||||
readCursor = (readCursor + writeLength) % waveLength;
|
|
||||||
|
|
||||||
writeCursor += writeLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Copy finished frame to audio stream
|
|
||||||
UpdateAudioStream(stream, writeBuf, MAX_SAMPLES_PER_UPDATE);
|
|
||||||
}
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Draw
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
BeginDrawing();
|
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
|
||||||
|
|
||||||
DrawText(TextFormat("sine frequency: %i",(int)frequency), GetScreenWidth() - 220, 10, 20, RED);
|
|
||||||
DrawText("click mouse button to change frequency or pan", 10, 10, 20, DARKGRAY);
|
|
||||||
|
|
||||||
// Draw the current buffer state proportionate to the screen
|
|
||||||
for (int i = 0; i < screenWidth; i++)
|
|
||||||
{
|
|
||||||
position.x = (float)i;
|
|
||||||
position.y = 250 + 50*data[i*MAX_SAMPLES/screenWidth]/32000.0f;
|
|
||||||
|
|
||||||
DrawPixelV(position, RED);
|
|
||||||
}
|
|
||||||
|
|
||||||
EndDrawing();
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
}
|
|
||||||
|
|
||||||
// De-Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
free(data); // Unload sine wave data
|
|
||||||
free(writeBuf); // Unload write buffer
|
|
||||||
|
|
||||||
UnloadAudioStream(stream); // Close raw audio stream and delete buffers from RAM
|
|
||||||
CloseAudioDevice(); // Close audio device (music streaming is automatically stopped)
|
|
||||||
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
Before Width: | Height: | Size: 16 KiB |
@ -1,64 +0,0 @@
|
|||||||
/*******************************************************************************************
|
|
||||||
*
|
|
||||||
* raylib [audio] example - Sound loading and playing
|
|
||||||
*
|
|
||||||
* This example has been created using raylib 1.0 (www.raylib.com)
|
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2014 Ramon Santamaria (@raysan5)
|
|
||||||
*
|
|
||||||
********************************************************************************************/
|
|
||||||
|
|
||||||
#include "raylib.h"
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
// Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
const int screenWidth = 800;
|
|
||||||
const int screenHeight = 450;
|
|
||||||
|
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [audio] example - sound loading and playing");
|
|
||||||
|
|
||||||
InitAudioDevice(); // Initialize audio device
|
|
||||||
|
|
||||||
Sound fxWav = LoadSound("resources/sound.wav"); // Load WAV audio file
|
|
||||||
Sound fxOgg = LoadSound("resources/target.ogg"); // Load OGG audio file
|
|
||||||
|
|
||||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Main game loop
|
|
||||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
|
||||||
{
|
|
||||||
// Update
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
if (IsKeyPressed(KEY_SPACE)) PlaySound(fxWav); // Play WAV sound
|
|
||||||
if (IsKeyPressed(KEY_ENTER)) PlaySound(fxOgg); // Play OGG sound
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Draw
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
BeginDrawing();
|
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
|
||||||
|
|
||||||
DrawText("Press SPACE to PLAY the WAV sound!", 200, 180, 20, LIGHTGRAY);
|
|
||||||
DrawText("Press ENTER to PLAY the OGG sound!", 200, 220, 20, LIGHTGRAY);
|
|
||||||
|
|
||||||
EndDrawing();
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
}
|
|
||||||
|
|
||||||
// De-Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
UnloadSound(fxWav); // Unload sound data
|
|
||||||
UnloadSound(fxOgg); // Unload sound data
|
|
||||||
|
|
||||||
CloseAudioDevice(); // Close audio device
|
|
||||||
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
Before Width: | Height: | Size: 15 KiB |
@ -1,10 +0,0 @@
|
|||||||
| resource | author | licence | notes |
|
|
||||||
| :------------------- | :---------: | :------ | :---- |
|
|
||||||
| country.mp3 | [@emegeme](https://github.com/emegeme) | [CC0](https://creativecommons.org/publicdomain/zero/1.0/) | Originally created for "DART that TARGET" game |
|
|
||||||
| target.ogg | [@emegeme](https://github.com/emegeme) | [CC0](https://creativecommons.org/publicdomain/zero/1.0/) | Originally created for "DART that TARGET" game |
|
|
||||||
| target.flac | [@emegeme](https://github.com/emegeme) | [CC0](https://creativecommons.org/publicdomain/zero/1.0/) | Originally created for "DART that TARGET" game |
|
|
||||||
| coin.wav | [@raysan5](https://github.com/raysan5) | [CC0](https://creativecommons.org/publicdomain/zero/1.0/) | Made with [rFXGen](https://raylibtech.itch.io/rfxgen) |
|
|
||||||
| sound.wav | [@raysan5](https://github.com/raysan5) | [CC0](https://creativecommons.org/publicdomain/zero/1.0/) | Made with [rFXGen](https://raylibtech.itch.io/rfxgen) |
|
|
||||||
| spring.wav | [@raysan5](https://github.com/raysan5) | [CC0](https://creativecommons.org/publicdomain/zero/1.0/) | Made with [rFXGen](https://raylibtech.itch.io/rfxgen) |
|
|
||||||
| weird.wav | [@raysan5](https://github.com/raysan5) | [CC0](https://creativecommons.org/publicdomain/zero/1.0/) | Made with [rFXGen](https://raylibtech.itch.io/rfxgen) |
|
|
||||||
| mini1111.xm | [tPORt](https://modarchive.org/index.php?request=view_by_moduleid&query=51891) | [Mod Archive Distribution license](https://modarchive.org/index.php?terms-upload) | - |
|
|
@ -1,101 +0,0 @@
|
|||||||
const std = @import("std");
|
|
||||||
const builtin = @import("builtin");
|
|
||||||
|
|
||||||
fn add_module(comptime module: []const u8, b: *std.build.Builder, target: std.zig.CrossTarget) !*std.build.Step {
|
|
||||||
// Standard release options allow the person running `zig build` to select
|
|
||||||
// between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall.
|
|
||||||
const mode = b.standardReleaseOptions();
|
|
||||||
|
|
||||||
const all = b.step(module, "All " ++ module ++ " examples");
|
|
||||||
const dir = try std.fs.cwd().openDir(
|
|
||||||
module,
|
|
||||||
.{ .iterate = true },
|
|
||||||
);
|
|
||||||
var iter = dir.iterate();
|
|
||||||
while (try iter.next()) |entry| {
|
|
||||||
if (entry.kind != .File) continue;
|
|
||||||
const extension_idx = std.mem.lastIndexOf(u8, entry.name, ".c") orelse continue;
|
|
||||||
const name = entry.name[0..extension_idx];
|
|
||||||
const path = try std.fs.path.join(b.allocator, &.{ module, entry.name });
|
|
||||||
|
|
||||||
// zig's mingw headers do not include pthread.h
|
|
||||||
if (std.mem.eql(u8, "core_loading_thread", name) and target.getOsTag() == .windows) continue;
|
|
||||||
|
|
||||||
const exe = b.addExecutable(name, null);
|
|
||||||
exe.addCSourceFile(path, switch (target.getOsTag()) {
|
|
||||||
.windows => &[_][]const u8{},
|
|
||||||
.linux => &[_][]const u8{},
|
|
||||||
.macos => &[_][]const u8{"-DPLATFORM_DESKTOP"},
|
|
||||||
else => @panic("Unsupported OS"),
|
|
||||||
});
|
|
||||||
exe.setTarget(target);
|
|
||||||
exe.setBuildMode(mode);
|
|
||||||
exe.linkLibC();
|
|
||||||
exe.addObjectFile(switch (target.getOsTag()) {
|
|
||||||
.windows => "../src/raylib.lib",
|
|
||||||
.linux => "../src/libraylib.a",
|
|
||||||
.macos => "../src/libraylib.a",
|
|
||||||
else => @panic("Unsupported OS"),
|
|
||||||
});
|
|
||||||
|
|
||||||
exe.addIncludeDir("../src");
|
|
||||||
exe.addIncludeDir("../src/external");
|
|
||||||
exe.addIncludeDir("../src/external/glfw/include");
|
|
||||||
|
|
||||||
switch (exe.target.toTarget().os.tag) {
|
|
||||||
.windows => {
|
|
||||||
exe.linkSystemLibrary("winmm");
|
|
||||||
exe.linkSystemLibrary("gdi32");
|
|
||||||
exe.linkSystemLibrary("opengl32");
|
|
||||||
exe.addIncludeDir("external/glfw/deps/mingw");
|
|
||||||
},
|
|
||||||
.linux => {
|
|
||||||
exe.linkSystemLibrary("GL");
|
|
||||||
exe.linkSystemLibrary("rt");
|
|
||||||
exe.linkSystemLibrary("dl");
|
|
||||||
exe.linkSystemLibrary("m");
|
|
||||||
exe.linkSystemLibrary("X11");
|
|
||||||
},
|
|
||||||
.macos => {
|
|
||||||
exe.linkFramework("Foundation");
|
|
||||||
exe.linkFramework("Cocoa");
|
|
||||||
exe.linkFramework("OpenGL");
|
|
||||||
exe.linkFramework("CoreAudio");
|
|
||||||
exe.linkFramework("CoreVideo");
|
|
||||||
exe.linkFramework("IOKit");
|
|
||||||
},
|
|
||||||
else => {
|
|
||||||
@panic("Unsupported OS");
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
exe.setOutputDir(module);
|
|
||||||
|
|
||||||
var run = exe.run();
|
|
||||||
run.step.dependOn(&b.addInstallArtifact(exe).step);
|
|
||||||
run.cwd = module;
|
|
||||||
b.step(name, name).dependOn(&run.step);
|
|
||||||
all.dependOn(&exe.step);
|
|
||||||
}
|
|
||||||
return all;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn build(b: *std.build.Builder) !void {
|
|
||||||
// Standard target options allows the person running `zig build` to choose
|
|
||||||
// what target to build for. Here we do not override the defaults, which
|
|
||||||
// means any target is allowed, and the default is native. Other options
|
|
||||||
// for restricting supported target set are available.
|
|
||||||
const target = b.standardTargetOptions(.{});
|
|
||||||
|
|
||||||
const all = b.getInstallStep();
|
|
||||||
|
|
||||||
all.dependOn(try add_module("audio", b, target));
|
|
||||||
all.dependOn(try add_module("core", b, target));
|
|
||||||
all.dependOn(try add_module("models", b, target));
|
|
||||||
all.dependOn(try add_module("others", b, target));
|
|
||||||
all.dependOn(try add_module("physics", b, target));
|
|
||||||
all.dependOn(try add_module("shaders", b, target));
|
|
||||||
all.dependOn(try add_module("shapes", b, target));
|
|
||||||
all.dependOn(try add_module("text", b, target));
|
|
||||||
all.dependOn(try add_module("textures", b, target));
|
|
||||||
}
|
|
@ -1,132 +0,0 @@
|
|||||||
/*******************************************************************************************
|
|
||||||
*
|
|
||||||
* raylib [core] example - 2d camera
|
|
||||||
*
|
|
||||||
* This example has been created using raylib 1.5 (www.raylib.com)
|
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2016 Ramon Santamaria (@raysan5)
|
|
||||||
*
|
|
||||||
********************************************************************************************/
|
|
||||||
|
|
||||||
#include "raylib.h"
|
|
||||||
|
|
||||||
#define MAX_BUILDINGS 100
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
// Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
const int screenWidth = 800;
|
|
||||||
const int screenHeight = 450;
|
|
||||||
|
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - 2d camera");
|
|
||||||
|
|
||||||
Rectangle player = { 400, 280, 40, 40 };
|
|
||||||
Rectangle buildings[MAX_BUILDINGS] = { 0 };
|
|
||||||
Color buildColors[MAX_BUILDINGS] = { 0 };
|
|
||||||
|
|
||||||
int spacing = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < MAX_BUILDINGS; i++)
|
|
||||||
{
|
|
||||||
buildings[i].width = (float)GetRandomValue(50, 200);
|
|
||||||
buildings[i].height = (float)GetRandomValue(100, 800);
|
|
||||||
buildings[i].y = screenHeight - 130.0f - buildings[i].height;
|
|
||||||
buildings[i].x = -6000.0f + spacing;
|
|
||||||
|
|
||||||
spacing += (int)buildings[i].width;
|
|
||||||
|
|
||||||
buildColors[i] = (Color){ GetRandomValue(200, 240), GetRandomValue(200, 240), GetRandomValue(200, 250), 255 };
|
|
||||||
}
|
|
||||||
|
|
||||||
Camera2D camera = { 0 };
|
|
||||||
camera.target = (Vector2){ player.x + 20.0f, player.y + 20.0f };
|
|
||||||
camera.offset = (Vector2){ screenWidth/2.0f, screenHeight/2.0f };
|
|
||||||
camera.rotation = 0.0f;
|
|
||||||
camera.zoom = 1.0f;
|
|
||||||
|
|
||||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Main game loop
|
|
||||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
|
||||||
{
|
|
||||||
// Update
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Player movement
|
|
||||||
if (IsKeyDown(KEY_RIGHT)) player.x += 2;
|
|
||||||
else if (IsKeyDown(KEY_LEFT)) player.x -= 2;
|
|
||||||
|
|
||||||
// Camera target follows player
|
|
||||||
camera.target = (Vector2){ player.x + 20, player.y + 20 };
|
|
||||||
|
|
||||||
// Camera rotation controls
|
|
||||||
if (IsKeyDown(KEY_A)) camera.rotation--;
|
|
||||||
else if (IsKeyDown(KEY_S)) camera.rotation++;
|
|
||||||
|
|
||||||
// Limit camera rotation to 80 degrees (-40 to 40)
|
|
||||||
if (camera.rotation > 40) camera.rotation = 40;
|
|
||||||
else if (camera.rotation < -40) camera.rotation = -40;
|
|
||||||
|
|
||||||
// Camera zoom controls
|
|
||||||
camera.zoom += ((float)GetMouseWheelMove()*0.05f);
|
|
||||||
|
|
||||||
if (camera.zoom > 3.0f) camera.zoom = 3.0f;
|
|
||||||
else if (camera.zoom < 0.1f) camera.zoom = 0.1f;
|
|
||||||
|
|
||||||
// Camera reset (zoom and rotation)
|
|
||||||
if (IsKeyPressed(KEY_R))
|
|
||||||
{
|
|
||||||
camera.zoom = 1.0f;
|
|
||||||
camera.rotation = 0.0f;
|
|
||||||
}
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Draw
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
BeginDrawing();
|
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
|
||||||
|
|
||||||
BeginMode2D(camera);
|
|
||||||
|
|
||||||
DrawRectangle(-6000, 320, 13000, 8000, DARKGRAY);
|
|
||||||
|
|
||||||
for (int i = 0; i < MAX_BUILDINGS; i++) DrawRectangleRec(buildings[i], buildColors[i]);
|
|
||||||
|
|
||||||
DrawRectangleRec(player, RED);
|
|
||||||
|
|
||||||
DrawLine((int)camera.target.x, -screenHeight*10, (int)camera.target.x, screenHeight*10, GREEN);
|
|
||||||
DrawLine(-screenWidth*10, (int)camera.target.y, screenWidth*10, (int)camera.target.y, GREEN);
|
|
||||||
|
|
||||||
EndMode2D();
|
|
||||||
|
|
||||||
DrawText("SCREEN AREA", 640, 10, 20, RED);
|
|
||||||
|
|
||||||
DrawRectangle(0, 0, screenWidth, 5, RED);
|
|
||||||
DrawRectangle(0, 5, 5, screenHeight - 10, RED);
|
|
||||||
DrawRectangle(screenWidth - 5, 5, 5, screenHeight - 10, RED);
|
|
||||||
DrawRectangle(0, screenHeight - 5, screenWidth, 5, RED);
|
|
||||||
|
|
||||||
DrawRectangle( 10, 10, 250, 113, Fade(SKYBLUE, 0.5f));
|
|
||||||
DrawRectangleLines( 10, 10, 250, 113, BLUE);
|
|
||||||
|
|
||||||
DrawText("Free 2d camera controls:", 20, 20, 10, BLACK);
|
|
||||||
DrawText("- Right/Left to move Offset", 40, 40, 10, DARKGRAY);
|
|
||||||
DrawText("- Mouse Wheel to Zoom in-out", 40, 60, 10, DARKGRAY);
|
|
||||||
DrawText("- A / S to Rotate", 40, 80, 10, DARKGRAY);
|
|
||||||
DrawText("- R to reset Zoom and Rotation", 40, 100, 10, DARKGRAY);
|
|
||||||
|
|
||||||
EndDrawing();
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
}
|
|
||||||
|
|
||||||
// De-Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
Before Width: | Height: | Size: 21 KiB |
@ -1,293 +0,0 @@
|
|||||||
/*******************************************************************************************
|
|
||||||
*
|
|
||||||
* raylib [core] example - 2d camera platformer
|
|
||||||
*
|
|
||||||
* This example has been created using raylib 2.5 (www.raylib.com)
|
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
|
||||||
*
|
|
||||||
* Example contributed by arvyy (@arvyy) and reviewed by Ramon Santamaria (@raysan5)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2019 arvyy (@arvyy)
|
|
||||||
*
|
|
||||||
********************************************************************************************/
|
|
||||||
|
|
||||||
#include "raylib.h"
|
|
||||||
#include "raymath.h"
|
|
||||||
|
|
||||||
#define G 400
|
|
||||||
#define PLAYER_JUMP_SPD 350.0f
|
|
||||||
#define PLAYER_HOR_SPD 200.0f
|
|
||||||
|
|
||||||
typedef struct Player {
|
|
||||||
Vector2 position;
|
|
||||||
float speed;
|
|
||||||
bool canJump;
|
|
||||||
} Player;
|
|
||||||
|
|
||||||
typedef struct EnvItem {
|
|
||||||
Rectangle rect;
|
|
||||||
int blocking;
|
|
||||||
Color color;
|
|
||||||
} EnvItem;
|
|
||||||
|
|
||||||
|
|
||||||
void UpdatePlayer(Player *player, EnvItem *envItems, int envItemsLength, float delta);
|
|
||||||
|
|
||||||
void UpdateCameraCenter(Camera2D *camera, Player *player, EnvItem *envItems, int envItemsLength, float delta, int width, int height);
|
|
||||||
void UpdateCameraCenterInsideMap(Camera2D *camera, Player *player, EnvItem *envItems, int envItemsLength, float delta, int width, int height);
|
|
||||||
void UpdateCameraCenterSmoothFollow(Camera2D *camera, Player *player, EnvItem *envItems, int envItemsLength, float delta, int width, int height);
|
|
||||||
void UpdateCameraEvenOutOnLanding(Camera2D *camera, Player *player, EnvItem *envItems, int envItemsLength, float delta, int width, int height);
|
|
||||||
void UpdateCameraPlayerBoundsPush(Camera2D *camera, Player *player, EnvItem *envItems, int envItemsLength, float delta, int width, int height);
|
|
||||||
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
// Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
const int screenWidth = 800;
|
|
||||||
const int screenHeight = 450;
|
|
||||||
|
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - 2d camera");
|
|
||||||
|
|
||||||
Player player = { 0 };
|
|
||||||
player.position = (Vector2){ 400, 280 };
|
|
||||||
player.speed = 0;
|
|
||||||
player.canJump = false;
|
|
||||||
EnvItem envItems[] = {
|
|
||||||
{{ 0, 0, 1000, 400 }, 0, LIGHTGRAY },
|
|
||||||
{{ 0, 400, 1000, 200 }, 1, GRAY },
|
|
||||||
{{ 300, 200, 400, 10 }, 1, GRAY },
|
|
||||||
{{ 250, 300, 100, 10 }, 1, GRAY },
|
|
||||||
{{ 650, 300, 100, 10 }, 1, GRAY }
|
|
||||||
};
|
|
||||||
|
|
||||||
int envItemsLength = sizeof(envItems)/sizeof(envItems[0]);
|
|
||||||
|
|
||||||
Camera2D camera = { 0 };
|
|
||||||
camera.target = player.position;
|
|
||||||
camera.offset = (Vector2){ screenWidth/2.0f, screenHeight/2.0f };
|
|
||||||
camera.rotation = 0.0f;
|
|
||||||
camera.zoom = 1.0f;
|
|
||||||
|
|
||||||
// Store pointers to the multiple update camera functions
|
|
||||||
void (*cameraUpdaters[])(Camera2D*, Player*, EnvItem*, int, float, int, int) = {
|
|
||||||
UpdateCameraCenter,
|
|
||||||
UpdateCameraCenterInsideMap,
|
|
||||||
UpdateCameraCenterSmoothFollow,
|
|
||||||
UpdateCameraEvenOutOnLanding,
|
|
||||||
UpdateCameraPlayerBoundsPush
|
|
||||||
};
|
|
||||||
|
|
||||||
int cameraOption = 0;
|
|
||||||
int cameraUpdatersLength = sizeof(cameraUpdaters)/sizeof(cameraUpdaters[0]);
|
|
||||||
|
|
||||||
char *cameraDescriptions[] = {
|
|
||||||
"Follow player center",
|
|
||||||
"Follow player center, but clamp to map edges",
|
|
||||||
"Follow player center; smoothed",
|
|
||||||
"Follow player center horizontally; updateplayer center vertically after landing",
|
|
||||||
"Player push camera on getting too close to screen edge"
|
|
||||||
};
|
|
||||||
|
|
||||||
SetTargetFPS(60);
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Main game loop
|
|
||||||
while (!WindowShouldClose())
|
|
||||||
{
|
|
||||||
// Update
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
float deltaTime = GetFrameTime();
|
|
||||||
|
|
||||||
UpdatePlayer(&player, envItems, envItemsLength, deltaTime);
|
|
||||||
|
|
||||||
camera.zoom += ((float)GetMouseWheelMove()*0.05f);
|
|
||||||
|
|
||||||
if (camera.zoom > 3.0f) camera.zoom = 3.0f;
|
|
||||||
else if (camera.zoom < 0.25f) camera.zoom = 0.25f;
|
|
||||||
|
|
||||||
if (IsKeyPressed(KEY_R))
|
|
||||||
{
|
|
||||||
camera.zoom = 1.0f;
|
|
||||||
player.position = (Vector2){ 400, 280 };
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IsKeyPressed(KEY_C)) cameraOption = (cameraOption + 1)%cameraUpdatersLength;
|
|
||||||
|
|
||||||
// Call update camera function by its pointer
|
|
||||||
cameraUpdaters[cameraOption](&camera, &player, envItems, envItemsLength, deltaTime, screenWidth, screenHeight);
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Draw
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
BeginDrawing();
|
|
||||||
|
|
||||||
ClearBackground(LIGHTGRAY);
|
|
||||||
|
|
||||||
BeginMode2D(camera);
|
|
||||||
|
|
||||||
for (int i = 0; i < envItemsLength; i++) DrawRectangleRec(envItems[i].rect, envItems[i].color);
|
|
||||||
|
|
||||||
Rectangle playerRect = { player.position.x - 20, player.position.y - 40, 40, 40 };
|
|
||||||
DrawRectangleRec(playerRect, RED);
|
|
||||||
|
|
||||||
EndMode2D();
|
|
||||||
|
|
||||||
DrawText("Controls:", 20, 20, 10, BLACK);
|
|
||||||
DrawText("- Right/Left to move", 40, 40, 10, DARKGRAY);
|
|
||||||
DrawText("- Space to jump", 40, 60, 10, DARKGRAY);
|
|
||||||
DrawText("- Mouse Wheel to Zoom in-out, R to reset zoom", 40, 80, 10, DARKGRAY);
|
|
||||||
DrawText("- C to change camera mode", 40, 100, 10, DARKGRAY);
|
|
||||||
DrawText("Current camera mode:", 20, 120, 10, BLACK);
|
|
||||||
DrawText(cameraDescriptions[cameraOption], 40, 140, 10, DARKGRAY);
|
|
||||||
|
|
||||||
EndDrawing();
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
}
|
|
||||||
|
|
||||||
// De-Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdatePlayer(Player *player, EnvItem *envItems, int envItemsLength, float delta)
|
|
||||||
{
|
|
||||||
if (IsKeyDown(KEY_LEFT)) player->position.x -= PLAYER_HOR_SPD*delta;
|
|
||||||
if (IsKeyDown(KEY_RIGHT)) player->position.x += PLAYER_HOR_SPD*delta;
|
|
||||||
if (IsKeyDown(KEY_SPACE) && player->canJump)
|
|
||||||
{
|
|
||||||
player->speed = -PLAYER_JUMP_SPD;
|
|
||||||
player->canJump = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int hitObstacle = 0;
|
|
||||||
for (int i = 0; i < envItemsLength; i++)
|
|
||||||
{
|
|
||||||
EnvItem *ei = envItems + i;
|
|
||||||
Vector2 *p = &(player->position);
|
|
||||||
if (ei->blocking &&
|
|
||||||
ei->rect.x <= p->x &&
|
|
||||||
ei->rect.x + ei->rect.width >= p->x &&
|
|
||||||
ei->rect.y >= p->y &&
|
|
||||||
ei->rect.y < p->y + player->speed*delta)
|
|
||||||
{
|
|
||||||
hitObstacle = 1;
|
|
||||||
player->speed = 0.0f;
|
|
||||||
p->y = ei->rect.y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!hitObstacle)
|
|
||||||
{
|
|
||||||
player->position.y += player->speed*delta;
|
|
||||||
player->speed += G*delta;
|
|
||||||
player->canJump = false;
|
|
||||||
}
|
|
||||||
else player->canJump = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateCameraCenter(Camera2D *camera, Player *player, EnvItem *envItems, int envItemsLength, float delta, int width, int height)
|
|
||||||
{
|
|
||||||
camera->offset = (Vector2){ width/2.0f, height/2.0f };
|
|
||||||
camera->target = player->position;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateCameraCenterInsideMap(Camera2D *camera, Player *player, EnvItem *envItems, int envItemsLength, float delta, int width, int height)
|
|
||||||
{
|
|
||||||
camera->target = player->position;
|
|
||||||
camera->offset = (Vector2){ width/2.0f, height/2.0f };
|
|
||||||
float minX = 1000, minY = 1000, maxX = -1000, maxY = -1000;
|
|
||||||
|
|
||||||
for (int i = 0; i < envItemsLength; i++)
|
|
||||||
{
|
|
||||||
EnvItem *ei = envItems + i;
|
|
||||||
minX = fminf(ei->rect.x, minX);
|
|
||||||
maxX = fmaxf(ei->rect.x + ei->rect.width, maxX);
|
|
||||||
minY = fminf(ei->rect.y, minY);
|
|
||||||
maxY = fmaxf(ei->rect.y + ei->rect.height, maxY);
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector2 max = GetWorldToScreen2D((Vector2){ maxX, maxY }, *camera);
|
|
||||||
Vector2 min = GetWorldToScreen2D((Vector2){ minX, minY }, *camera);
|
|
||||||
|
|
||||||
if (max.x < width) camera->offset.x = width - (max.x - width/2);
|
|
||||||
if (max.y < height) camera->offset.y = height - (max.y - height/2);
|
|
||||||
if (min.x > 0) camera->offset.x = width/2 - min.x;
|
|
||||||
if (min.y > 0) camera->offset.y = height/2 - min.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateCameraCenterSmoothFollow(Camera2D *camera, Player *player, EnvItem *envItems, int envItemsLength, float delta, int width, int height)
|
|
||||||
{
|
|
||||||
static float minSpeed = 30;
|
|
||||||
static float minEffectLength = 10;
|
|
||||||
static float fractionSpeed = 0.8f;
|
|
||||||
|
|
||||||
camera->offset = (Vector2){ width/2.0f, height/2.0f };
|
|
||||||
Vector2 diff = Vector2Subtract(player->position, camera->target);
|
|
||||||
float length = Vector2Length(diff);
|
|
||||||
|
|
||||||
if (length > minEffectLength)
|
|
||||||
{
|
|
||||||
float speed = fmaxf(fractionSpeed*length, minSpeed);
|
|
||||||
camera->target = Vector2Add(camera->target, Vector2Scale(diff, speed*delta/length));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateCameraEvenOutOnLanding(Camera2D *camera, Player *player, EnvItem *envItems, int envItemsLength, float delta, int width, int height)
|
|
||||||
{
|
|
||||||
static float evenOutSpeed = 700;
|
|
||||||
static int eveningOut = false;
|
|
||||||
static float evenOutTarget;
|
|
||||||
|
|
||||||
camera->offset = (Vector2){ width/2.0f, height/2.0f };
|
|
||||||
camera->target.x = player->position.x;
|
|
||||||
|
|
||||||
if (eveningOut)
|
|
||||||
{
|
|
||||||
if (evenOutTarget > camera->target.y)
|
|
||||||
{
|
|
||||||
camera->target.y += evenOutSpeed*delta;
|
|
||||||
|
|
||||||
if (camera->target.y > evenOutTarget)
|
|
||||||
{
|
|
||||||
camera->target.y = evenOutTarget;
|
|
||||||
eveningOut = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
camera->target.y -= evenOutSpeed*delta;
|
|
||||||
|
|
||||||
if (camera->target.y < evenOutTarget)
|
|
||||||
{
|
|
||||||
camera->target.y = evenOutTarget;
|
|
||||||
eveningOut = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (player->canJump && (player->speed == 0) && (player->position.y != camera->target.y))
|
|
||||||
{
|
|
||||||
eveningOut = 1;
|
|
||||||
evenOutTarget = player->position.y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateCameraPlayerBoundsPush(Camera2D *camera, Player *player, EnvItem *envItems, int envItemsLength, float delta, int width, int height)
|
|
||||||
{
|
|
||||||
static Vector2 bbox = { 0.2f, 0.2f };
|
|
||||||
|
|
||||||
Vector2 bboxWorldMin = GetScreenToWorld2D((Vector2){ (1 - bbox.x)*0.5f*width, (1 - bbox.y)*0.5f*height }, *camera);
|
|
||||||
Vector2 bboxWorldMax = GetScreenToWorld2D((Vector2){ (1 + bbox.x)*0.5f*width, (1 + bbox.y)*0.5f*height }, *camera);
|
|
||||||
camera->offset = (Vector2){ (1 - bbox.x)*0.5f * width, (1 - bbox.y)*0.5f*height };
|
|
||||||
|
|
||||||
if (player->position.x < bboxWorldMin.x) camera->target.x = player->position.x;
|
|
||||||
if (player->position.y < bboxWorldMin.y) camera->target.y = player->position.y;
|
|
||||||
if (player->position.x > bboxWorldMax.x) camera->target.x = bboxWorldMin.x + (player->position.x - bboxWorldMax.x);
|
|
||||||
if (player->position.y > bboxWorldMax.y) camera->target.y = bboxWorldMin.y + (player->position.y - bboxWorldMax.y);
|
|
||||||
}
|
|
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 16 KiB |
@ -1,97 +0,0 @@
|
|||||||
/*******************************************************************************************
|
|
||||||
*
|
|
||||||
* raylib [core] example - 3d camera first person
|
|
||||||
*
|
|
||||||
* This example has been created using raylib 1.3 (www.raylib.com)
|
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
|
||||||
*
|
|
||||||
********************************************************************************************/
|
|
||||||
|
|
||||||
#include "raylib.h"
|
|
||||||
|
|
||||||
#define MAX_COLUMNS 20
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
// Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
const int screenWidth = 800;
|
|
||||||
const int screenHeight = 450;
|
|
||||||
|
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera first person");
|
|
||||||
|
|
||||||
// Define the camera to look into our 3d world (position, target, up vector)
|
|
||||||
Camera camera = { 0 };
|
|
||||||
camera.position = (Vector3){ 4.0f, 2.0f, 4.0f };
|
|
||||||
camera.target = (Vector3){ 0.0f, 1.8f, 0.0f };
|
|
||||||
camera.up = (Vector3){ 0.0f, 1.0f, 0.0f };
|
|
||||||
camera.fovy = 60.0f;
|
|
||||||
camera.projection = CAMERA_PERSPECTIVE;
|
|
||||||
|
|
||||||
// Generates some random columns
|
|
||||||
float heights[MAX_COLUMNS] = { 0 };
|
|
||||||
Vector3 positions[MAX_COLUMNS] = { 0 };
|
|
||||||
Color colors[MAX_COLUMNS] = { 0 };
|
|
||||||
|
|
||||||
for (int i = 0; i < MAX_COLUMNS; i++)
|
|
||||||
{
|
|
||||||
heights[i] = (float)GetRandomValue(1, 12);
|
|
||||||
positions[i] = (Vector3){ (float)GetRandomValue(-15, 15), heights[i]/2.0f, (float)GetRandomValue(-15, 15) };
|
|
||||||
colors[i] = (Color){ GetRandomValue(20, 255), GetRandomValue(10, 55), 30, 255 };
|
|
||||||
}
|
|
||||||
|
|
||||||
SetCameraMode(camera, CAMERA_FIRST_PERSON); // Set a first person camera mode
|
|
||||||
|
|
||||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Main game loop
|
|
||||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
|
||||||
{
|
|
||||||
// Update
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
UpdateCamera(&camera); // Update camera
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Draw
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
BeginDrawing();
|
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
|
||||||
|
|
||||||
BeginMode3D(camera);
|
|
||||||
|
|
||||||
DrawPlane((Vector3){ 0.0f, 0.0f, 0.0f }, (Vector2){ 32.0f, 32.0f }, LIGHTGRAY); // Draw ground
|
|
||||||
DrawCube((Vector3){ -16.0f, 2.5f, 0.0f }, 1.0f, 5.0f, 32.0f, BLUE); // Draw a blue wall
|
|
||||||
DrawCube((Vector3){ 16.0f, 2.5f, 0.0f }, 1.0f, 5.0f, 32.0f, LIME); // Draw a green wall
|
|
||||||
DrawCube((Vector3){ 0.0f, 2.5f, 16.0f }, 32.0f, 5.0f, 1.0f, GOLD); // Draw a yellow wall
|
|
||||||
|
|
||||||
// Draw some cubes around
|
|
||||||
for (int i = 0; i < MAX_COLUMNS; i++)
|
|
||||||
{
|
|
||||||
DrawCube(positions[i], 2.0f, heights[i], 2.0f, colors[i]);
|
|
||||||
DrawCubeWires(positions[i], 2.0f, heights[i], 2.0f, MAROON);
|
|
||||||
}
|
|
||||||
|
|
||||||
EndMode3D();
|
|
||||||
|
|
||||||
DrawRectangle( 10, 10, 220, 70, Fade(SKYBLUE, 0.5f));
|
|
||||||
DrawRectangleLines( 10, 10, 220, 70, BLUE);
|
|
||||||
|
|
||||||
DrawText("First person camera default controls:", 20, 20, 10, BLACK);
|
|
||||||
DrawText("- Move with keys: W, A, S, D", 40, 40, 10, DARKGRAY);
|
|
||||||
DrawText("- Mouse move to look around", 40, 60, 10, DARKGRAY);
|
|
||||||
|
|
||||||
EndDrawing();
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
}
|
|
||||||
|
|
||||||
// De-Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
Before Width: | Height: | Size: 17 KiB |
@ -1,83 +0,0 @@
|
|||||||
/*******************************************************************************************
|
|
||||||
*
|
|
||||||
* raylib [core] example - Initialize 3d camera free
|
|
||||||
*
|
|
||||||
* This example has been created using raylib 1.3 (www.raylib.com)
|
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
|
||||||
*
|
|
||||||
********************************************************************************************/
|
|
||||||
|
|
||||||
#include "raylib.h"
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
// Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
const int screenWidth = 800;
|
|
||||||
const int screenHeight = 450;
|
|
||||||
|
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera free");
|
|
||||||
|
|
||||||
// Define the camera to look into our 3d world
|
|
||||||
Camera3D camera = { 0 };
|
|
||||||
camera.position = (Vector3){ 10.0f, 10.0f, 10.0f }; // Camera position
|
|
||||||
camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point
|
|
||||||
camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target)
|
|
||||||
camera.fovy = 45.0f; // Camera field-of-view Y
|
|
||||||
camera.projection = CAMERA_PERSPECTIVE; // Camera mode type
|
|
||||||
|
|
||||||
Vector3 cubePosition = { 0.0f, 0.0f, 0.0f };
|
|
||||||
|
|
||||||
SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode
|
|
||||||
|
|
||||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Main game loop
|
|
||||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
|
||||||
{
|
|
||||||
// Update
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
UpdateCamera(&camera); // Update camera
|
|
||||||
|
|
||||||
if (IsKeyDown('Z')) camera.target = (Vector3){ 0.0f, 0.0f, 0.0f };
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Draw
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
BeginDrawing();
|
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
|
||||||
|
|
||||||
BeginMode3D(camera);
|
|
||||||
|
|
||||||
DrawCube(cubePosition, 2.0f, 2.0f, 2.0f, RED);
|
|
||||||
DrawCubeWires(cubePosition, 2.0f, 2.0f, 2.0f, MAROON);
|
|
||||||
|
|
||||||
DrawGrid(10, 1.0f);
|
|
||||||
|
|
||||||
EndMode3D();
|
|
||||||
|
|
||||||
DrawRectangle( 10, 10, 320, 133, Fade(SKYBLUE, 0.5f));
|
|
||||||
DrawRectangleLines( 10, 10, 320, 133, BLUE);
|
|
||||||
|
|
||||||
DrawText("Free camera default controls:", 20, 20, 10, BLACK);
|
|
||||||
DrawText("- Mouse Wheel to Zoom in-out", 40, 40, 10, DARKGRAY);
|
|
||||||
DrawText("- Mouse Wheel Pressed to Pan", 40, 60, 10, DARKGRAY);
|
|
||||||
DrawText("- Alt + Mouse Wheel Pressed to Rotate", 40, 80, 10, DARKGRAY);
|
|
||||||
DrawText("- Alt + Ctrl + Mouse Wheel Pressed for Smooth Zoom", 40, 100, 10, DARKGRAY);
|
|
||||||
DrawText("- Z to zoom to (0, 0, 0)", 40, 120, 10, DARKGRAY);
|
|
||||||
|
|
||||||
EndDrawing();
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
}
|
|
||||||
|
|
||||||
// De-Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
Before Width: | Height: | Size: 25 KiB |
@ -1,73 +0,0 @@
|
|||||||
/*******************************************************************************************
|
|
||||||
*
|
|
||||||
* raylib [core] example - Initialize 3d camera mode
|
|
||||||
*
|
|
||||||
* This example has been created using raylib 1.0 (www.raylib.com)
|
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2014 Ramon Santamaria (@raysan5)
|
|
||||||
*
|
|
||||||
********************************************************************************************/
|
|
||||||
|
|
||||||
#include "raylib.h"
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
// Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
const int screenWidth = 800;
|
|
||||||
const int screenHeight = 450;
|
|
||||||
|
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera mode");
|
|
||||||
|
|
||||||
// Define the camera to look into our 3d world
|
|
||||||
Camera3D camera = { 0 };
|
|
||||||
camera.position = (Vector3){ 0.0f, 10.0f, 10.0f }; // Camera position
|
|
||||||
camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point
|
|
||||||
camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target)
|
|
||||||
camera.fovy = 45.0f; // Camera field-of-view Y
|
|
||||||
camera.projection = CAMERA_PERSPECTIVE; // Camera mode type
|
|
||||||
|
|
||||||
Vector3 cubePosition = { 0.0f, 0.0f, 0.0f };
|
|
||||||
|
|
||||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Main game loop
|
|
||||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
|
||||||
{
|
|
||||||
// Update
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// TODO: Update your variables here
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Draw
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
BeginDrawing();
|
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
|
||||||
|
|
||||||
BeginMode3D(camera);
|
|
||||||
|
|
||||||
DrawCube(cubePosition, 2.0f, 2.0f, 2.0f, RED);
|
|
||||||
DrawCubeWires(cubePosition, 2.0f, 2.0f, 2.0f, MAROON);
|
|
||||||
|
|
||||||
DrawGrid(10, 1.0f);
|
|
||||||
|
|
||||||
EndMode3D();
|
|
||||||
|
|
||||||
DrawText("Welcome to the third dimension!", 10, 40, 20, DARKGRAY);
|
|
||||||
|
|
||||||
DrawFPS(10, 10);
|
|
||||||
|
|
||||||
EndDrawing();
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
}
|
|
||||||
|
|
||||||
// De-Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
Before Width: | Height: | Size: 8.3 KiB |
@ -1,107 +0,0 @@
|
|||||||
/*******************************************************************************************
|
|
||||||
*
|
|
||||||
* raylib [core] example - Picking in 3d mode
|
|
||||||
*
|
|
||||||
* This example has been created using raylib 1.3 (www.raylib.com)
|
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
|
||||||
*
|
|
||||||
********************************************************************************************/
|
|
||||||
|
|
||||||
#include "raylib.h"
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
// Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
const int screenWidth = 800;
|
|
||||||
const int screenHeight = 450;
|
|
||||||
|
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d picking");
|
|
||||||
|
|
||||||
// Define the camera to look into our 3d world
|
|
||||||
Camera camera = { 0 };
|
|
||||||
camera.position = (Vector3){ 10.0f, 10.0f, 10.0f }; // Camera position
|
|
||||||
camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point
|
|
||||||
camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target)
|
|
||||||
camera.fovy = 45.0f; // Camera field-of-view Y
|
|
||||||
camera.projection = CAMERA_PERSPECTIVE; // Camera mode type
|
|
||||||
|
|
||||||
Vector3 cubePosition = { 0.0f, 1.0f, 0.0f };
|
|
||||||
Vector3 cubeSize = { 2.0f, 2.0f, 2.0f };
|
|
||||||
|
|
||||||
Ray ray = { 0 }; // Picking line ray
|
|
||||||
|
|
||||||
RayCollision collision = { 0 };
|
|
||||||
|
|
||||||
SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode
|
|
||||||
|
|
||||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Main game loop
|
|
||||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
|
||||||
{
|
|
||||||
// Update
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
UpdateCamera(&camera); // Update camera
|
|
||||||
|
|
||||||
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT))
|
|
||||||
{
|
|
||||||
if (!collision.hit)
|
|
||||||
{
|
|
||||||
ray = GetMouseRay(GetMousePosition(), camera);
|
|
||||||
|
|
||||||
// Check collision between ray and box
|
|
||||||
collision = GetRayCollisionBox(ray,
|
|
||||||
(BoundingBox){(Vector3){ cubePosition.x - cubeSize.x/2, cubePosition.y - cubeSize.y/2, cubePosition.z - cubeSize.z/2 },
|
|
||||||
(Vector3){ cubePosition.x + cubeSize.x/2, cubePosition.y + cubeSize.y/2, cubePosition.z + cubeSize.z/2 }});
|
|
||||||
}
|
|
||||||
else collision.hit = false;
|
|
||||||
}
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Draw
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
BeginDrawing();
|
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
|
||||||
|
|
||||||
BeginMode3D(camera);
|
|
||||||
|
|
||||||
if (collision.hit)
|
|
||||||
{
|
|
||||||
DrawCube(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, RED);
|
|
||||||
DrawCubeWires(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, MAROON);
|
|
||||||
|
|
||||||
DrawCubeWires(cubePosition, cubeSize.x + 0.2f, cubeSize.y + 0.2f, cubeSize.z + 0.2f, GREEN);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DrawCube(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, GRAY);
|
|
||||||
DrawCubeWires(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, DARKGRAY);
|
|
||||||
}
|
|
||||||
|
|
||||||
DrawRay(ray, MAROON);
|
|
||||||
DrawGrid(10, 1.0f);
|
|
||||||
|
|
||||||
EndMode3D();
|
|
||||||
|
|
||||||
DrawText("Try selecting the box with mouse!", 240, 10, 20, DARKGRAY);
|
|
||||||
|
|
||||||
if (collision.hit) DrawText("BOX SELECTED", (screenWidth - MeasureText("BOX SELECTED", 30)) / 2, (int)(screenHeight * 0.1f), 30, GREEN);
|
|
||||||
|
|
||||||
DrawFPS(10, 10);
|
|
||||||
|
|
||||||
EndDrawing();
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
}
|
|
||||||
|
|
||||||
// De-Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
Before Width: | Height: | Size: 24 KiB |
@ -1,150 +0,0 @@
|
|||||||
/*******************************************************************************************
|
|
||||||
*
|
|
||||||
* raylib [core] examples - basic screen manager
|
|
||||||
*
|
|
||||||
* This example illustrates a very simple screen manager based on a states machines
|
|
||||||
*
|
|
||||||
* This test has been created using raylib 1.1 (www.raylib.com)
|
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2021 Ramon Santamaria (@raysan5)
|
|
||||||
*
|
|
||||||
********************************************************************************************/
|
|
||||||
|
|
||||||
#include "raylib.h"
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------
|
|
||||||
// Types and Structures Definition
|
|
||||||
//------------------------------------------------------------------------------------------
|
|
||||||
typedef enum GameScreen { LOGO = 0, TITLE, GAMEPLAY, ENDING } GameScreen;
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------
|
|
||||||
// Main entry point
|
|
||||||
//------------------------------------------------------------------------------------------
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
// Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
const int screenWidth = 800;
|
|
||||||
const int screenHeight = 450;
|
|
||||||
|
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - basic screen manager");
|
|
||||||
|
|
||||||
GameScreen currentScreen = LOGO;
|
|
||||||
|
|
||||||
// TODO: Initialize all required variables and load all required data here!
|
|
||||||
|
|
||||||
int framesCounter = 0; // Useful to count frames
|
|
||||||
|
|
||||||
SetTargetFPS(60); // Set desired framerate (frames-per-second)
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Main game loop
|
|
||||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
|
||||||
{
|
|
||||||
// Update
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
switch(currentScreen)
|
|
||||||
{
|
|
||||||
case LOGO:
|
|
||||||
{
|
|
||||||
// TODO: Update LOGO screen variables here!
|
|
||||||
|
|
||||||
framesCounter++; // Count frames
|
|
||||||
|
|
||||||
// Wait for 2 seconds (120 frames) before jumping to TITLE screen
|
|
||||||
if (framesCounter > 120)
|
|
||||||
{
|
|
||||||
currentScreen = TITLE;
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
case TITLE:
|
|
||||||
{
|
|
||||||
// TODO: Update TITLE screen variables here!
|
|
||||||
|
|
||||||
// Press enter to change to GAMEPLAY screen
|
|
||||||
if (IsKeyPressed(KEY_ENTER) || IsGestureDetected(GESTURE_TAP))
|
|
||||||
{
|
|
||||||
currentScreen = GAMEPLAY;
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
case GAMEPLAY:
|
|
||||||
{
|
|
||||||
// TODO: Update GAMEPLAY screen variables here!
|
|
||||||
|
|
||||||
// Press enter to change to ENDING screen
|
|
||||||
if (IsKeyPressed(KEY_ENTER) || IsGestureDetected(GESTURE_TAP))
|
|
||||||
{
|
|
||||||
currentScreen = ENDING;
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
case ENDING:
|
|
||||||
{
|
|
||||||
// TODO: Update ENDING screen variables here!
|
|
||||||
|
|
||||||
// Press enter to return to TITLE screen
|
|
||||||
if (IsKeyPressed(KEY_ENTER) || IsGestureDetected(GESTURE_TAP))
|
|
||||||
{
|
|
||||||
currentScreen = TITLE;
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Draw
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
BeginDrawing();
|
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
|
||||||
|
|
||||||
switch(currentScreen)
|
|
||||||
{
|
|
||||||
case LOGO:
|
|
||||||
{
|
|
||||||
// TODO: Draw LOGO screen here!
|
|
||||||
DrawText("LOGO SCREEN", 20, 20, 40, LIGHTGRAY);
|
|
||||||
DrawText("WAIT for 2 SECONDS...", 290, 220, 20, GRAY);
|
|
||||||
|
|
||||||
} break;
|
|
||||||
case TITLE:
|
|
||||||
{
|
|
||||||
// TODO: Draw TITLE screen here!
|
|
||||||
DrawRectangle(0, 0, screenWidth, screenHeight, GREEN);
|
|
||||||
DrawText("TITLE SCREEN", 20, 20, 40, DARKGREEN);
|
|
||||||
DrawText("PRESS ENTER or TAP to JUMP to GAMEPLAY SCREEN", 120, 220, 20, DARKGREEN);
|
|
||||||
|
|
||||||
} break;
|
|
||||||
case GAMEPLAY:
|
|
||||||
{
|
|
||||||
// TODO: Draw GAMEPLAY screen here!
|
|
||||||
DrawRectangle(0, 0, screenWidth, screenHeight, PURPLE);
|
|
||||||
DrawText("GAMEPLAY SCREEN", 20, 20, 40, MAROON);
|
|
||||||
DrawText("PRESS ENTER or TAP to JUMP to ENDING SCREEN", 130, 220, 20, MAROON);
|
|
||||||
|
|
||||||
} break;
|
|
||||||
case ENDING:
|
|
||||||
{
|
|
||||||
// TODO: Draw ENDING screen here!
|
|
||||||
DrawRectangle(0, 0, screenWidth, screenHeight, BLUE);
|
|
||||||
DrawText("ENDING SCREEN", 20, 20, 40, DARKBLUE);
|
|
||||||
DrawText("PRESS ENTER or TAP to RETURN to TITLE SCREEN", 120, 220, 20, DARKBLUE);
|
|
||||||
|
|
||||||
} break;
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
|
|
||||||
EndDrawing();
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
}
|
|
||||||
|
|
||||||
// De-Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// TODO: Unload all loaded data (textures, fonts, audio) here!
|
|
||||||
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
Before Width: | Height: | Size: 15 KiB |
@ -1,62 +0,0 @@
|
|||||||
/*******************************************************************************************
|
|
||||||
*
|
|
||||||
* raylib [core] example - Basic window
|
|
||||||
*
|
|
||||||
* Welcome to raylib!
|
|
||||||
*
|
|
||||||
* To test examples, just press F6 and execute raylib_compile_execute script
|
|
||||||
* Note that compiled executable is placed in the same folder as .c file
|
|
||||||
*
|
|
||||||
* You can find all basic examples on C:\raylib\raylib\examples folder or
|
|
||||||
* raylib official webpage: www.raylib.com
|
|
||||||
*
|
|
||||||
* Enjoy using raylib. :)
|
|
||||||
*
|
|
||||||
* This example has been created using raylib 1.0 (www.raylib.com)
|
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2013-2016 Ramon Santamaria (@raysan5)
|
|
||||||
*
|
|
||||||
********************************************************************************************/
|
|
||||||
|
|
||||||
#include "raylib.h"
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
// Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
const int screenWidth = 800;
|
|
||||||
const int screenHeight = 450;
|
|
||||||
|
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - basic window");
|
|
||||||
|
|
||||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Main game loop
|
|
||||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
|
||||||
{
|
|
||||||
// Update
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// TODO: Update your variables here
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Draw
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
BeginDrawing();
|
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
|
||||||
|
|
||||||
DrawText("Congrats! You created your first window!", 190, 200, 20, LIGHTGRAY);
|
|
||||||
|
|
||||||
EndDrawing();
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
}
|
|
||||||
|
|
||||||
// De-Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
Before Width: | Height: | Size: 10 KiB |
@ -1,85 +0,0 @@
|
|||||||
/*******************************************************************************************
|
|
||||||
*
|
|
||||||
* raylib [core] example - Basic window (adapted for HTML5 platform)
|
|
||||||
*
|
|
||||||
* This example is prepared to compile for PLATFORM_WEB, PLATFORM_DESKTOP and PLATFORM_RPI
|
|
||||||
* As you will notice, code structure is slightly diferent to the other examples...
|
|
||||||
* To compile it for PLATFORM_WEB just uncomment #define PLATFORM_WEB at beginning
|
|
||||||
*
|
|
||||||
* This example has been created using raylib 1.3 (www.raylib.com)
|
|
||||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
|
||||||
*
|
|
||||||
********************************************************************************************/
|
|
||||||
|
|
||||||
#include "raylib.h"
|
|
||||||
|
|
||||||
//#define PLATFORM_WEB
|
|
||||||
|
|
||||||
#if defined(PLATFORM_WEB)
|
|
||||||
#include <emscripten/emscripten.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// Global Variables Definition
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
int screenWidth = 800;
|
|
||||||
int screenHeight = 450;
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// Module Functions Declaration
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
void UpdateDrawFrame(void); // Update and Draw one frame
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// Main Enry Point
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
// Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - basic window");
|
|
||||||
|
|
||||||
#if defined(PLATFORM_WEB)
|
|
||||||
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
|
||||||
#else
|
|
||||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Main game loop
|
|
||||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
|
||||||
{
|
|
||||||
UpdateDrawFrame();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// De-Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// Module Functions Definition
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
void UpdateDrawFrame(void)
|
|
||||||
{
|
|
||||||
// Update
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// TODO: Update your variables here
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Draw
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
BeginDrawing();
|
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
|
||||||
|
|
||||||
DrawText("Congrats! You created your first window!", 190, 200, 20, LIGHTGRAY);
|
|
||||||
|
|
||||||
EndDrawing();
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
}
|
|