* 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>
Currently, every example fails linking likeso:
[ 3%] Linking C executable audio_mixed_processor
/usr/bin/ld: ../raylib/libraylib.a(raudio.c.o): undefined reference to symbol 'exp@@GLIBC_2.29'
/usr/bin/ld: /usr/lib/libm.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Apparently, linking libm explicitly is the solution.
* new models_magicavoxel_loading example
* Portable header-only file "magicavoxel_loader.h" for MagicaVoxel loader example.
* models_magicavoxel_loading example added to CMakeLists.txt and Makefile
* fix models_magicavoxel_loading example for linux.
* * vox_loader into "src/external/vox_loader.h"
* vox file support for "models.c"
* updated example "models/models_magicavoxel_loading.c"
* * Fix Vox_FreeArrays (removed memory leak)
* * removed magicavoxel_loader.h
* * Revert vs2019 solution
* Documenting the compiler flags
* Moved some android compiler flags and added documentation on them too.
* Some more restructuring.
Removed unnecessary comments that were self described by the code.
Added some more explanations around certain parts of CMake and especially around compiler flags.
* 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>
* Fixed the build for web using CMake.
I found that the build for me was failing and I added some if defined checks in the core.c file where the glfwSetWindowAttrib was used. (error: implicit declaration of function 'glfwSetWindowAttrib' is invalid in C99 [-Werror,-Wimplicit-function-declaration])
I also changed some values in the toolchain file so that it correctly uses the .bat files when on windows.
* Cleaned up the additional variables (they are not important)
* Added more improvements to cmakelists
Added the option to use the system provided Emscripten toolchain to be more uniform with other libraries.
Fixed and issue which prevented example being built from cmake and also building with html extensions properly.
* Fixed ENUM to STRING because of a missed warning
We didn't use the latest version, but a compatible version, which is established by raylib-config-version.cmake.
It's ok to have a minimal version, so revert b7c0d5b6dd.
At least on Linux, CMake seems to add automatically
the '-rdynamic' flag. As a result, Emscripten
generates a fat HTML file that does not work.
Removing it allows HTML+JS+WASM generation.
The example requires pthreads and now C11 <stdatomic.h>, thus skip it
if either isn't available.
This also fixes the current Travis CI build failure for the
Windows configuration.
No examples built for the Web platform functioned properly due to lack
of resources in the virtual file system provided by emscripten.
This patch addresses this problem by adding
'--preload-file local_path/resources@resources' emcc option to link
flags whenever necessary.
The default memory limit for emscripten applications is 16 mergabytes,
which might be to little for some examples, especially given that the
resources are also included in that limit.
Normally, using this option disables some asm.js optimizations, but
there's no such cost for WebAssembly.
With the recent CMake cleanup, getting raylib's dependencies for use
when building rlgl_standalone is quite straight forward, so lets enable
it again.
Fixes#508, just properly this time. :)
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.
They were disabled because they failed to build,
but this patch set fixes the build on Linux and macOS.
This doesn't apply to the AppVeyor build on Windows yet;
it currently fails at linking with OpenAL.