* add base of rlsw.h
* implement state support
Also replace the triangle rasterization functions with macros that generate specific functions for each state of the rendering system.
Also, add the OpenGL definitions in order to add a binding for rlgl.
* branchless float saturation
* apply perspective correction to colors
* impl line clipping and rasterization
+ tweak function names
* impl face culling
* impl color blending
* fixes and tweaks
* add clear buffer bitmasks
* small optimizations / tweaks
* review ndc to screen projection
* avoid to recalculate MVP when its not needed + tweaks
* review the loading and management of textures
to be closer to the OpenGL API
* texture sampling optimization
* review get pixel functions
+ review unorm/float conversion
* add several buffer format support
Several depth and color formats have been added for the framebuffer.
8-bit, 16-bit, and 24-bit formats are now available for depth.
RGB 8-bit (332), RGB 16-bit (565), and RGB 24-bit (888) formats are now available for color.
Alpha support is no longer present for the framebuffer at the moment, but it can easily be restored by adding the formats and reinterpolating the alpha in the areas that do not perform color blending.
Additionally, this commit brings performance improvements.
* tweaks
* impl line width
* impl points + point size
* fix and improve polygon clipping functions
* impl polygone modes
* add some not planned functions
- `glDepthMask`
- `glColorMask`
* framebuffer resizing + handle init failure
* add quick notes about line clipping algorithms used
* start to impl scissor test + review line clipping
The support for the scissor test has been implemented for clearing as well as for triangle clipping.
The implementation for lines and points is still missing.
I also removed the 2D clipping of lines that used the Cohen-Sutherland algorithm, opting instead to always use the Liang-Barsky algorithm in all cases.
This simplifies the implementation, and the 2D version would have caused issues when interpolating vertices in the future if we want to implement additional features.
* review scissor clear
* review `swScissor`
* impl line scissor clipping
* round screen coordinate (line rasterization)
* impl point scissor clipping
* remove unused defs
* add getter functions
* gl binding
* add `glHint` and `glShadeModel` macros (not implmented)
* binding tweaks
* impl copy framebuffer function + glReadPixels
* review `swCopyFramebuffer`
* update rlgl.h
* update rlgl.h
* texture copy support
* fix typo..
* add get error function
* def sw alloc macros
* reimpl get color buffer func
just in case
* remove normal interpolation
* review texture wrap
* fix ndc projection (viewport/scissor)
* impl framebuffer blit function
* reduce matrix compuations and memory usage
* swBegin tweaks
* preventing a possible division by zero
* remove useless scissor related data
* review color blending system
* greatly improve float saturation
* tweak lerp vertex function
* use opitmized fract function in sw_texture_map
* tweak framebuffer functions for better readability
* optimized copy/blit functions for each dst format
* review framebuffer filling functions
* impl specific quad rendering func
* use of a single global vertex buffer
* fix 'sw_poly_point_render'
* added `SW_RESTRICT` and redesigned `sw_lerp_vertex_PNCTH`
* tweak the pipeline flow regarding the face culling
avoids misprediction, improves vectorization if possible
* new rendering path for axis aligned quads
* oops, translating some comments
* use of `restrict` for blending function parameters
* update rlgl.h
* adding `GRAPHICS_API_OPENGL_11_SOFTWARE` in `DrawMesh`
* add `RL_OPENGL_11_SOFTWARE` enum
* temp tweak
* build fixes
* fix DrawMesh for GL 1.1
* update swClose
* review texture format + fix copy
* set minimum req vertices to 3 (quads)
* check swInit
* review pixelformat
* tweaks
* fix animNormals (DrawMesh)
* fallback color/texcoord (swDrawArrays)
* review swMultMatrixf
* fix texture pool alloc..
* review triangle scanlines
increment all data
* fix `sw_quad_sort_cw`
* impl sdl platform
* rm def
* increase max clipped polygon vertices
* improve triangle rasterization along Y axis
improved robustness against numerical errors
incremental interpolation along Y
simplified function, fewer jumps
* review current vertex data
+ increase max clipped polygon vertices (for extreme cases)
* fix and improve polygon clipping
Sets the vertex count to zero when the polygon is invalid
Stops clipping when the vertex count drops below 3
* fix gradient calculation
* cache texture size minus one + comments
* tweaks
* BGRA copy support
* adding software backend option (cmake)
* update Makefile
* fix face culling
* excluse some exemple with the software backend
* review SW_CLAMP case in sw_texture_map
* review sw_saturate
* review line raster
* fix sw_quad_is_aligned
* review sw_raster_quad_axis_aligned
* tweaks
* codepoint fix (?)
* fix var name...
* rcore_drm software renderering
* cleanup and tweaks
* adding support for `GL_POINT_SIZE` and `GL_LINE_WIDTH` get
* fix sampling issue
* fix swBlendFunc
---------
Co-authored-by: Ray <raysan5@gmail.com>
This file seems to not do anything useful. From what I can tell the
OSX_FATLIB option sets CMAKE_OSX_ARCHITECTURES to "x86_64;i386". This
doesn't account for the arm that apple now has, as well as 32 bit
support being completely removed, and I think it's entirely reasonable
to expect users to pass the necessary architectures they want
themselves. It's possible this could break some users who rely on this,
but I sincerely doubt anyone does. The solution is trivial either way
(put -DCMAKE_OSX_ARCHITECTURES="i386;x86_64" on the command line
yourself)
The second part of BuildOptions.cmake claims to set PLATFORM to "Web" if
the emscripten toolchain file is used (if (EMSCRIPTEN)), but it does not
work correctly anyway. Currently, glfw searches for wayland and x11
libraries and fails likeso:
CMake Error at /usr/share/cmake/Modules/FindPkgConfig.cmake:645 (message):
The following required packages were not found:
- wayland-client>=0.2.7
- wayland-cursor>=0.2.7
- wayland-egl>=0.2.7
- xkbcommon>=0.5.0
Call Stack (most recent call first):
/usr/share/cmake/Modules/FindPkgConfig.cmake:873 (_pkg_check_modules_internal)
src/external/glfw/src/CMakeLists.txt:163 (pkg_check_modules)
Considering this code doesn't work as described, it's okay to delete it.
I think a better check should be implemented, but that is for a
different PR.
* Create ParseConfigHeader.cmake
This script parses the config.h file to automate the process of exposing the configuration flags and configuration values found in the latter.
* Update CompileDefinitions.cmake
Makes use of the new functionality found in ParseConfigHeader.cmake to make things consistent.
* Update CMakeOptions.txt
Makes use of the new functionality found in ParseConfigHeader.cmake to make things consistent.
* Update CMakeLists.txt
Changes required to make possible building raylib for web on Windows 10.
* Update LibraryConfigurations.cmake
Removes a warning that linker-only flags were being passed to the compiler, which is in accordance to https://emscripten.org/docs/tools_reference/settings_reference.html.
* Update CMakeOptions.txt
Removed clutter.
* Update CompileDefinitions.cmake
Removed clutter.
* Update CompileDefinitions.cmake
Some applications might check for PLATFORM_WEB instead of __EMSCRIPTEN__.
* Update CompileDefinitions.cmake
Reverting
* Update CMakeLists.txt
USE_AUDIO is redundant in the presence of the already existent and more descriptive SUPPORT_MODULE_RAUDIO.
* Update CompileDefinitions.cmake
USE_AUDIO is redundant in the presence of the already existent and more descriptive SUPPORT_MODULE_RAUDIO.
* Update ParseConfigHeader.cmake
* Revert "Update CMakeLists.txt"
This reverts commit 1785fc06b5.
* Revert "Update CompileDefinitions.cmake"
This reverts commit 62f9a3a0ea.
* Revert "Update CMakeLists.txt"
This reverts commit 3e7912144e.
* Revert "Update LibraryConfigurations.cmake"
This reverts commit bcc4310c49.
Support creating a 3x3 pixels white rectangle at the bottom-right corner of the generated font atlas image, useful for shapes+text drawing in a single draw call!
Those functions were platform dependent and user has no control over the file created. They have been removed from raylib and just moved to `core_storage_values` example.
Allow to choose which modules are compiled with raylib, if some modules are excluded from compilation, required functionality is not available but smaller builds are possible.
raylib modules have been slightly renamed to add some identity and note that they are independent modules that can be used as standalone separate parts of raylib if required.
The renamed modules are:
- `core` -> `rcore`
- `shapes` -> `rshapes`
- `textures` -> `rtextures`
- `text` -> `rtext`
- `models` -> `rmodels`
- `camera` -> `rcamera`
- `gestures` -> `rgestures`
- `core` -> `rcore`
All the build systems has been adapted to this change.
CMake relied on this file for configurations and also was interfering in the regular config.h by having a separate definition if building with CMake. This was not entirely correct so instead we will define compile time definitions separately through CMake (CompileDefinitions.cmake) and also will use the provided EXTERNAL_CONFIG_FLAGS that I found that will not use config.h in through the build process.
I also introduced a new compiler option (CUSTOMIZE_BUILD) that when OFF will use the default config.h and when ON will show other options for redefining your own options.
Fixed an error in rlgl.h where if you have both RLGL_STANDALONE and SUPPORT_VR_SIMULATOR you get a compile time error.
As described in the official documentation https://cmake.org/cmake/help/v3.0/variable/BUILD_SHARED_LIBS.html this flag is global by default and controls if the library will be built as a shared or a static library allowing us to define only one call to the add_library function (without specifying its type). It is also added as an option to be visible in CMake GUI applications.
* Delete emscripten.cmake
This file is not needed at this point. EMSDK provides a toolchain file that has a lot more things in it and is better supported. Project currently works fine with the documentation provided in Emscripten SDK on how to build projects.
* First pass file separation.
The main two files are cleaner now. Only important things can be seen. Major changes include:
- raylib_static is now the alias instead of raylib
- Repeating segments are removed and pulled into separate files into <root>/cmake
- File is reordered to make more sense
- Installs are better structured
- Library is build into an output directory "raylib" instead of "src"
- All public header files are now set as a public header file
- Source files need to be listed (it is a bad practice to capture them using wildcards and file globs)
- CMakeLists are better commented
* Second pass on the example dirs.
They are quite complex so I'm more hesitant to do major changes. Also it works pretty well. Noticed that I forgot one of the seperated files and added it into src/CMakeLists.txt.
* Returned the header copy as it was convenient to have the public headers copied.
* A better description to the variable RAYLIB_IS_MAIN
Co-authored-by: Rob Loach <robloach@gmail.com>
* Remove debug message
Co-authored-by: Rob Loach <robloach@gmail.com>
* Improvements based on review.
* Simplify the install condition to not be platform specific as it was before.
Co-authored-by: Alexander Neumann <30894796+Neumann-A@users.noreply.github.com>
* Remove some CMAKE variables as they don't affect the build in any way
Co-authored-by: Alexander Neumann <30894796+Neumann-A@users.noreply.github.com>
Co-authored-by: Rob Loach <robloach@gmail.com>
Co-authored-by: Alexander Neumann <30894796+Neumann-A@users.noreply.github.com>
* updated README.md
* fixed CMakeLists.txt to allow building and debugging with Visual Studio Code and CMAKE Tools extension
* added PLATFORM_DRM
contains mouse pointer code from https://github.com/chriscamacho
* removed redundant cleanup in InitGraphicsDevice
* fixed DRM connector mode selection
* added choosen DRM connected mode to log output
* added respecting TargetFPS on DRM mode selection, default to 60
* added support for GetMonitorRefreshRate
* changed SUPPORT_MOUSE_CURSOR_RPI to SUPPORT_MOUSE_CURSOR_NATIVE
* changed avoidProgressive to allowInterlaced
* cleanup, function extraction and improved mode selection
* README reverted to original for PR
* line endings fixed for core.c
* removed old code
* mouse pointer reverted to small square
* replaced SetGraphicDeviceName() by DEFAULT_GRAPHIC_DEVICE_DRM
Co-authored-by: kernelkinetic <kernelkinetic@outlook.com>
Planning to promote raudio module as a simple and easy-to-use front-end for the amazing mini_al library, so the name change.
Name comes from raylib-audio but in spanish it also remembers to word "raudo", meaning "very fast", an analogy that fits perfectly to the usefulness and performance of the library!
Consequently, raylib version has been bumped to 2.4-dev.
Homebrew doesn't ship 32-bit libraries anymore, so using both
-DUSE_EXTERNAL_GLFW and -DMACOS_FATLIB with a Homebrew GLFW would fail.
With -DUSE_EXTERNAL_GLFW=OFF, this is not a problem, but I think keeping
it off by default makes more sense. If someone wants universal
libraries, they can just toggle it.
Remove that link_libraries_to_executable() hack and defines a proper
raylib target that can be used with target_link_libraries.
The same target is also available for external (user) code by using
find_package(raylib).
This results in:
- Remove hardcoded build directories from examples and games CMakeLists.txt
- Allow rlgl_standalone and other special examples to be built easily
- Allow CMake projects to find_package(raylib instead of fiddling with pkg-config
- Makes code a little more maintainable
- Fixes#471, #606.
- Makes code less confusing by removing the double use of PLATFORM (#584).
Note that this is still not _The Right Way_(TM), because normally
raylib-config.cmake (or its includes) would be automatically generated.
I didn't manage to get that to work though, so I went the easier route
of just wrapping pkg_check_modules for consumption by find_package.
also makes one configuration shared-only
dr_flac is not built on i386, because GCC 4.8 complains about asm("cpuid"
clobbering ebx, as it's using ebx for PIC.
Instead of downloading a newer GCC (and multilib),
disable FLAC for that one configuration...