Commit graph

8207 commits

Author SHA1 Message Date
google-labs-jules[bot]
3caaf88180 feat: Implement Vulkan backend for basic shape rendering
This commit introduces significant progress on the Vulkan rendering backend for raylib, enabling the rendering of basic 2D shapes.

Key changes include:

1.  **Vertex Data Handling (`rlgl.h`, `rlvk.c`, `rlvk.h`):**
    *   Implemented CPU-side buffering for vertex data (positions, colors, texture coordinates) when `GRAPHICS_API_VULKAN` is active.
    *   `rlgl` functions (`rlVertex3f`, `rlColor4ub`, `rlTexCoord2f`, etc.) now route data to `rlvk` for accumulation.

2.  **Vulkan Vertex Buffer Management (`rlvk.c`, `rlvk.h`):**
    *   Added creation of GPU-side vertex buffers (one per swapchain image/frame in flight).
    *   Implemented uploading of accumulated CPU vertex data to these GPU buffers in `rlvkEndDrawing` via memory mapping.
    *   Vertex buffers are bound, and `vkCmdDraw` is issued in `rlvkEndDrawing`.

3.  **Shader Compilation and Pipeline (`CMakeLists.txt`, `rlvk.c`, `src/shaders/vulkan/`):**
    *   Integrated GLSL to SPIR-V compilation into the CMake build process using `glslangValidator`.
        *   `shapes_vert.glsl` and `shapes_frag.glsl` are compiled into C header files containing SPIR-V bytecode.
        *   `rlvk.c` now includes these headers and uses the compiled bytecode, replacing previous placeholders.
    *   Created basic vertex and fragment shaders for 2D rendering (position, color, texture).
    *   Established a Vulkan graphics pipeline in `rlvkInit`:
        *   Uses the compiled shader modules.
        *   Defines vertex input state for `rlvkVertex` (pos, color, texcoord).
        *   Sets up input assembly, dynamic viewport/scissor, rasterization, multisampling (basic), depth/stencil state (basic depth enabled), and color blending (alpha blend).
        *   Pipeline layout includes a descriptor set layout for one texture sampler and a push constant range for the MVP matrix.
    *   The graphics pipeline is bound in `rlvkBeginDrawing`.

4.  **Texture Handling - Default Texture (`rlvk.c`, `rlvk.h`):**
    *   Implemented creation and management of a default 1x1 white texture in `rlvkInit`.
    *   This includes `VkImage`, `VkDeviceMemory`, `VkImageView`, and `VkSampler`.
    *   A `VkDescriptorPool` and a default `VkDescriptorSet` are created. The descriptor set is updated to point to the default white texture.
    *   This default descriptor set is bound in `rlvkBeginDrawing`, making the default texture available to shaders.
    *   `RLGL.State.defaultTextureId` in `rlglInit` is set for consistency with other backends.

5.  **Matrix Transformations (`rlgl.h`, `rlvk.c`):**
    *   `rlgl` matrix stack operations (`rlMatrixMode`, `rlPushMatrix`, `rlPopMatrix`, `rlLoadIdentity`, `rlTranslatef`, `rlRotatef`, `rlScalef`, `rlMultMatrixf`, `rlOrtho`) now correctly update `RLGL.State` matrices when `GRAPHICS_API_VULKAN` is defined.
    *   `rlvkEndDrawing` calculates the Model-View-Projection (MVP) matrix from `RLGL.State` and uploads it to the vertex shader using `vkCmdPushConstants`.

6.  **Build System (`src/CMakeLists.txt`):**
    *   CMake now attempts to find `glslangValidator`.
    *   Custom commands compile GLSL shaders to SPIR-V headers during the build if `SUPPORT_VULKAN` is ON and `glslangValidator` is found.
    *   Generated shader headers are included by `rlvk.c`.

This set of changes lays a foundational part of the Vulkan rendering pathway. Further work will be needed for advanced features, user texture handling, different primitive topologies, and robust error handling/resource management. I will be testing these changes separately.
2025-06-01 03:58:59 +00:00
Joshua Reisenauer
5e47a65aec
Merge pull request #4 from kd7tck/vulkan-foundations
feat: Implement core Vulkan initialization and rendering loop
2025-05-31 19:47:31 -07:00
google-labs-jules[bot]
7f4fb20da9 feat: Implement core Vulkan initialization and rendering loop
This commit lays the foundational groundwork for the Vulkan rendering backend.

Key changes include:

1.  **Platform Layer (`rcore_desktop_glfw.c`):**
    *   `InitPlatformVulkan`: Implemented to correctly create a `VkInstance` with necessary GLFW extensions and validation layers (if `RLGL_ENABLE_VULKAN_DEBUG` is defined). It also creates a `VkSurfaceKHR` using GLFW. These handles are passed to the core Vulkan layer.
    *   `ClosePlatformVulkan`: Updated to properly destroy the `VkInstance` and `VkSurfaceKHR`.

2.  **Vulkan Abstraction Layer (`rlvk.c`, `rlvk.h`):**
    *   `rlvkInit`: Implemented the core Vulkan setup:
        *   Physical device selection (preferring discrete GPUs).
        *   Logical device creation with graphics and present queues, and swapchain extension.
        *   Swapchain creation (images, image views).
        *   Render pass creation (with color and depth attachments).
        *   Depth buffer resource creation (image, memory, image view).
        *   Framebuffer creation for each swapchain image.
        *   Command pool and command buffer allocation (one per swapchain image).
        *   Synchronization primitives (semaphores for image acquisition/render completion, fences for command buffer completion).
    *   `rlvkClose`: Updated to destroy all Vulkan resources created in `rlvkInit` in the correct order.
    *   `rlvkBeginDrawing`: Implemented to handle frame synchronization (wait for fence, acquire next swapchain image), begin the command buffer, and begin the render pass (using the clear color set by `rlvkClearBackground`). Viewport and scissor are set.
    *   `rlvkEndDrawing`: Implemented to end the render pass, end and submit the command buffer (signaling appropriate semaphores and fence), and present the image. Handles frame advancement.
    *   `rlvkClearBackground`: Implemented to store the clear color you provide, which is then used by `rlvkBeginDrawing`.

With these changes, a raylib application compiled with `GRAPHICS_API_VULKAN` can initialize a Vulkan context, open a window, clear the background to a specified color, and shut down cleanly. Actual object rendering (shapes, textures, models) is not yet implemented in Vulkan and will be part of subsequent work.
2025-06-01 02:37:03 +00:00
Joshua Reisenauer
84c57c890d
Merge pull request #3 from kd7tck/feat/vulkan-backend-framework
feat: Add initial Vulkan backend framework and compile flag
2025-05-31 19:23:50 -07:00
google-labs-jules[bot]
b93ec12bfe feat: Add initial Vulkan backend framework and compile flag
I've introduced the foundational infrastructure for a Vulkan rendering backend in raylib.

Key changes:
- CMake:
    - I added a `SUPPORT_VULKAN` option (default OFF) to enable Vulkan.
    - It finds the Vulkan SDK and links appropriate libraries when enabled.
    - I defined `CF_VULKAN_` (0 by default, 1 if Vulkan enabled) and `GRAPHICS_API_VULKAN` preprocessor macros.
    - I updated `LibraryConfigurations.cmake` and `src/CMakeLists.txt` to handle Vulkan as a graphics API.
- Vulkan Abstraction Layer:
    - I created `src/rlvk.h` and `src/rlvk.c` with stub implementations for Vulkan rendering functions (e.g., `rlvkInit`, `rlvkClose`, drawing functions). These are compiled only when `SUPPORT_VULKAN` is ON.
- Core Integration:
    - `rlgl.h` and `rcore.c` now have conditional code paths for `GRAPHICS_API_VULKAN`.
    - `InitWindow` and `CloseWindow` in `rcore.c` call Vulkan-specific platform and backend initialization/deinitialization stubs.
- Platform Layer (GLFW):
    - `src/platforms/rcore_desktop_glfw.c` includes stubbed `InitPlatformVulkan` and `ClosePlatformVulkan` to set up GLFW for a Vulkan context (actual Vulkan instance/surface creation is stubbed).

This commit establishes the necessary build system changes and C code structure to allow for the incremental implementation of the Vulkan renderer. Currently, enabling Vulkan will compile the stubs, allowing your application to run but without actual Vulkan rendering. The `CF_VULKAN_` flag controls the compilation and selection of Vulkan as the default renderer when active.
2025-06-01 02:12:36 +00:00
Joshua Reisenauer
a334acc768
Merge pull request #2 from kd7tck/vulkan-plan-review
I've reviewed the Vulkan upgrade plan and added my findings to the `v…
2025-05-31 17:48:18 -07:00
google-labs-jules[bot]
049211d1a3 I've reviewed the Vulkan upgrade plan and added my findings to the vulkan-upgrade-plan document.
The review confirmed the plan's viability and strengths. I also identified some minor areas for clarification and key challenges. I didn't find an existing Vulkan rendering backend in the core raylib source, which makes this plan relevant.
2025-06-01 00:47:50 +00:00
Joshua Reisenauer
b1c19935c3
Merge pull request #1 from kd7tck/vulkan-upgrade-plan-update
Vulkan upgrade plan update
2025-05-31 17:38:23 -07:00
google-labs-jules[bot]
0df034ac15 I've appended the detailed Vulkan upgrade strategy to vulkan-upgrade-plan.
This outlines the necessary modifications across the build system (CMake), graphics abstraction layer (rlgl), core library (rcore), platform-specific code, and shader handling to integrate Vulkan support into raylib. The strategy emphasizes conditional compilation based on a `GRAPHICS_API_VULKAN` flag and aims to mirror the existing OpenGL backend abstraction.
2025-06-01 00:31:03 +00:00
google-labs-jules[bot]
3f336f2fe6 Add Vulkan upgrade plan document
This commit introduces a new file, vulkan-upgrade-plan, which outlines a comprehensive strategy for integrating Vulkan as a compile-time graphics backend option for raylib.

The plan details the necessary changes across the codebase, including:
- Creation of a Vulkan abstraction layer (rlvk).
- Modifications to the core library (rcore.c) for conditional graphics backend selection.
- Updates to the platform layer (e.g., rcore_desktop_glfw.c) for Vulkan surface creation.
- Integration into the CMake build system.
- Shader management for SPIR-V.

This document serves as a roadmap for the potential Vulkan implementation and does not modify any existing code other than adding this plan file.
2025-06-01 00:21:28 +00:00
Ray
924c87db33
Merge pull request #4976 from M374LX/rgfw-update-dev
Update RGFW to 1.7.5-dev
2025-05-31 21:47:54 +02:00
M374LX
6eeaf1dd5b Update RGFW to 1.7.5-dev 2025-05-31 16:43:25 -03:00
Ray
c1bb53738e
Merge pull request #4974 from M374LX/rgfw-escape-fix
RGFW: fix Escape always closing the window
2025-05-31 20:43:40 +02:00
Ray
9bf4388a4f
Merge pull request #4965 from M374LX/rgfw-update
Update RGFW to 1.7
2025-05-31 20:42:08 +02:00
github-actions[bot]
3414d96eaf Update raylib_api.* by CI 2025-05-31 18:41:49 +00:00
Ray
20c0c92bdb
Merge pull request #4963 from meowstr/master
[rshapes] Add DrawEllipseV and DrawEllipseLinesV
2025-05-31 20:41:37 +02:00
M374LX
bc2b2864e0 RGFW: fix Escape always closing the window 2025-05-31 14:24:38 -03:00
Ray
b9c2ecc447
Merge pull request #4969 from M374LX/update-comments
Update comments
2025-05-30 08:05:20 +02:00
github-actions[bot]
8f2ecfba4d Update raylib_api.* by CI 2025-05-30 02:04:09 +00:00
M374LX
3418172617 Update comments 2025-05-29 23:01:48 -03:00
Ray
015db1641f
Merge pull request #4964 from M374LX/axes-comment
Update comment (gamepad axes)
2025-05-29 22:45:45 +02:00
M374LX
a9525bfbc2 Update RGFW to 1.7 2025-05-29 16:03:39 -03:00
M374LX
16f398b464 Update comment (gamepad axes) 2025-05-29 15:01:01 -03:00
Meowster
6d5aedbd38 Add DrawEllipseV and DrawEllipseLinesV 2025-05-29 07:10:52 -04:00
Ray
913c236487 REVIEWED: MAX_GAMEPAD_AXES 2025-05-29 12:51:08 +02:00
Ray
341bfb22cc REVIEWED: MAX_GAMEPAD_AXEX for consistency #4960 2025-05-29 12:25:00 +02:00
Ray
2afae1b3e1
Merge pull request #4962 from M374LX/rgfw-rctrl
RGFW backend: add missing Right Control key
2025-05-29 12:09:01 +02:00
Ray
f9fa63366c
Merge pull request #4958 from M374LX/unused-var
Remove unused variable
2025-05-29 12:07:14 +02:00
M374LX
c0cf57f8f0 RGFW backend: add missing Right Control key 2025-05-28 22:38:16 -03:00
M374LX
299f5350a4 Remove unused variable 2025-05-28 19:49:57 -03:00
github-actions[bot]
2d952d8e94 Update raylib_api.* by CI 2025-05-28 15:19:32 +00:00
Ray
d7148f5f9d REDESIGNED: Base64 encoding/decoding functions
Found some issues with output size when padding required, just re-implemented both functions from scratch.
2025-05-28 17:19:19 +02:00
Ray
5ddd13b775 REVIEWED: Hexadecimal formatting to be consistent 2025-05-28 17:18:02 +02:00
github-actions[bot]
8d9c1cecb7 Update raylib_api.* by CI 2025-05-22 15:07:11 +00:00
Ray
afb52b19a4 WARNING: REDESIGNED: EncodeDataBase64(), NULL terminated string returned
Note that returned output size considers the NULL terminator as an additional byte.
2025-05-22 17:06:55 +02:00
Ray
21f0fe2a73 Removed some spaces 2025-05-21 19:06:04 +02:00
Ray
e3b9dbe75b
Merge pull request #4947 from padmadevd/master
[rcore] Fixed bug in hovering and input for android
2025-05-19 11:59:14 +02:00
Padmadev D
b6daa48a9c
Update rcore_android.c
corrected coding conventions.
2025-05-19 15:09:58 +05:30
Ray
a1d57e83f0
Merge pull request #4948 from parzivail/bug/meshnormals
Fix typo in mesh animNormals
2025-05-19 07:16:48 +02:00
Colby Newman
21e711b13f
Fix typo in mesh animNormals 2025-05-18 19:35:21 -04:00
Padmadev D
5da2d10118
Update rcore_android.c
Bug Fix Update
Code to Ignore Hovering Inputs Completely
2025-05-18 18:53:28 +05:30
Ray
2be18e2c54
Merge pull request #4944 from Pivok7/master
[examples] Basic pbr example fix
2025-05-18 15:09:47 +02:00
Pivok
0ffc8c517f Pbr example fix 2025-05-17 12:32:17 +02:00
Ray
8c99a508c6 REVIEWED: WindowSizeCallback(), GLFW
It is called on window minification and setting internal width/height to 0, that can break things
2025-05-14 23:49:24 +02:00
Ray
a51d334440 Merge branch 'master' of https://github.com/raysan5/raylib 2025-05-14 23:47:32 +02:00
Ray
9d4c31533d Update rtext.c 2025-05-14 23:47:03 +02:00
Ray
15a0cf89b8
Merge pull request #4936 from lumenkeyes/master
build.zig fixes for android targets
2025-05-13 20:54:13 +02:00
Ray
ba31219141
Merge pull request #4937 from Bigfoot71/fix-gen-tangents
[rmodels] Fix and improve `GenMeshTangents`
2025-05-13 20:52:51 +02:00
Ray
5076d5743b
Merge pull request #4938 from JeffM2501/const_save_callback
[utils] fix const warning with SaveFileText callback
2025-05-13 20:51:47 +02:00
github-actions[bot]
4a1e9931a6 Update raylib_api.* by CI 2025-05-13 02:55:19 +00:00