Replies: 23 comments 39 replies
-
Dividing by technology could be the way to go, seeing situations where having Raylib in another platform also means needing a new technology for |
Beta Was this translation helpful? Give feedback.
-
I think this would be pretty helpful. As someone who is new to Raylib I found myself scratching about trying to get started. It took me a while to figure out the best documentation Raylib has is the examples and the best way to figure out how something is used is greping for the function in an example. I think having some additional signal for the new developer that the examples are where you should be looking would be very helpful |
Beta Was this translation helpful? Give feedback.
-
I am not sure how to classify, but fonts get this ugly shadow, which isn’t there in most programs with font support. A setting or something to fix this would be nice, there might be a solution, but I do not know. Hope this is a good thing to add onto here, and I wish raylib and all of its developers a happy new year |
Beta Was this translation helpful? Give feedback.
-
Review rays global function names to not clash with windows kernel API (CloseWindow, ShowCursor, ...) |
Beta Was this translation helpful? Give feedback.
-
-add iOS support |
Beta Was this translation helpful? Give feedback.
-
Nothing! raylib is ✨PERFECT✨ |
Beta Was this translation helpful? Give feedback.
-
Hi. Out of curiosity, is a Metal backend on the roadmap somewhere? (sorry if I missed it.) OpenGL is vastly inferior on mac. Is this an area you’d want external contributions for? |
Beta Was this translation helpful? Give feedback.
-
Recently Android released the GameActivity Library which adds several improvements on how graphics and audio are executed in modern android, and allows integration with Android Libraries and debugging tools. |
Beta Was this translation helpful? Give feedback.
-
I wanted to suggest getting a way to pan Also as a little note, actually the naming for the Thanks anyway for the great work on raylib! |
Beta Was this translation helpful? Give feedback.
-
Thoughts on adding sokol backend? I feel like raylib can do the best with sokol along SDL too... |
Beta Was this translation helpful? Give feedback.
-
[rmodel]
|
Beta Was this translation helpful? Give feedback.
-
Maybe support for icons on Mac. Not the window but the icon on the "dock" as macOS calls it. When I use the SetWindowIcon() it says that it is not supported. Maybe there can be a function for the icon in the "dock" for macOS? |
Beta Was this translation helpful? Give feedback.
-
I really like the idea of raylib-gui being standalone. |
Beta Was this translation helpful? Give feedback.
-
adding an external simd library(there are some header only or 2 file .h/.c simd libraries) and using it in raymath.h file to further speed-ups ? |
Beta Was this translation helpful? Give feedback.
-
This one's really minor, but it would be great if DrawGrid() had a Color parameter, for consistency with all the other draw methods! |
Beta Was this translation helpful? Give feedback.
-
Here are a few improvements I'd like to see:
|
Beta Was this translation helpful? Give feedback.
-
Support for glVertexAttribIPointer in rlgl would be nice for those of us messing around with shaders. |
Beta Was this translation helpful? Give feedback.
-
Can we have a method to get the amount of draw calls? Godot, Monogame, Libgdx and others have something: |
Beta Was this translation helpful? Give feedback.
-
Today I've been investigating the possibility to support 16 bpc texture pixel formats. Usually 8-bit per channel file-formats are the standard format and only some advance uses require more resolution per channel. One of those special cases are the HDR textures, using 32 bpc float values (despite the Radiance .hdr file comes with 3 byte for rgb values + 1 byte for exponent: RGBE. When moving to 16 bit-per-channel formats, we have several options, the two common ones are: 16 bit unsigned short values or 16 bit half float values. Unsigned short textures support seems quite limited and not common while half float textures supports varies depending on OpenGL version and usually requires It seems the use is very specific and support across OpenGL versions is not consistent. I finally decided to skip this feature for now. I couldn't find real use cases for those formats and if there is any it's probably out-of-scope for raylib. |
Beta Was this translation helpful? Give feedback.
-
While looking into raylib's capabilities for 3D, I noticed that, at least, a while ago, there was some uncertainty about which model formats to support. I'd like to throw in my two cents and emphasize the importance of robust glTF support. glTF is basically the modern format for 3D graphics assets, and to my knowledge the first and only format (due to PBR) where you can publish from any program, load in any other program, and reliably have your models look and behave correctly with rich materials and animations. glTF is an open standard developed by the Khronos Group, same as OpenGL and Vulkan. And as far as Khronos Group offerings go, glTF is doing pretty well. It has significant buy-in from Google (via Filament, ModelViewer, Draco), Microsoft (via Babylon.js, .NET), and Facebook (via Facebook.com, Metaverse). I haven't looked too much into these, but other industrial giants like Dassault, Autodesk, Amazon, and Adobe seem to be on board too. The credited contributors to the specs also include employees acting on behalf of Mozilla, Samsung, Shopify, Target, IKEA, Wayfair, Intel, Adidas, and Unity. And on top of that there are also a number of smaller companies specifically focusing on 3D asset management, like Sketchfab and UX3D, that use glTF as a major part of their value proposition, plus massive community projects like Three.JS that have full support for it. For me personally, I really like the simple, straightforward, open-ended call-your-own-functionality framework that raylib seems to offer. It looks almost perfect. But lack of full support for glTF is basically the one issue that I can't look past, which in my view means that I don't think I can see raylib as viable for any project that I want to sink significant effort into. It means that I expect that sooner or later, I'm going end up having to basically implement my own rendering engine, and I don't want to take that risk. Some other features like out-of-the-box frustum culling and occlusion culling would be nice too, but really glTF is the most crucial. (Also I'd advise caution doing skinning on the CPU. Not that I've ever implemented it myself, but I assume that's what Blender does (since accuracy is more important than responsiveness there), and I would not consider Blender's realtime animation playback performance to be anywhere near acceptable for video games, even for relatively simple models, and even when compared to something like Three.JS. — Isn't it a much smaller amount of data anyway to send only the bone transforms to the GPU each frame, instead of computed positions for each vertex? And I'd probably tend to agree with Ksdhans about retrieving the posed mesh too; Anyone doing anything sufficiently involved to require access to the posed mesh should probably use a lower-poly mesh anyway, and already be prepared to compute its deformation themselves (or more likely just parent a cylinder to each bone).) Anyway, that's just my thoughts, after looking into raylib and alternatives for the last day or so and really hoping I can use it. I understand there are different possible use cases, priorities, design goals, etc. Overall this looks like an amazing library, and I hope it continues evolving and improving. But incomplete glTF support for 3D means I can't jump right in with a ready-to-go asset pipeline, which means that I can't use it— It's a bit like if an image editor supported JPEG, but the green channel is always zero. |
Beta Was this translation helpful? Give feedback.
-
I don't agree, given that an awful lot of colliders (especially IK character colliders) use very simple collision shapes like cylinder or more usefully capsule. Honestly while its not "voxel" perfect (as it were) you really can't tell, on top of that if you are using a display meshes for all collision detection the computational load is going to be very significant... |
Beta Was this translation helpful? Give feedback.
-
A Mesh merging system. |
Beta Was this translation helpful? Give feedback.
-
I would really like to have support for reading gyroscope and accelerometer values from modern gamepads like the PS4/PS5 DualShock and the Switch/Switch Pro Controller. It's nice that the DualShock's triggers can be read as an axis already. It would also be nice to have more controller names than 360 and PS3. Maybe we can use SDL's gamepad database that has hundreds mapped correctly. |
Beta Was this translation helpful? Give feedback.
-
Here it is a small wishlist with some of the improvements I'd like to see in
raylib
in the future.raylib
has grown A LOT in the last few years and maintenance is getting complicated. For this year 2022 I'd like to focus efforts on library stability between platforms, some small improvements and a better testing of available features. I'll try to avoid new features as much as possible, specially if they are big additions and involve critical parts of the library.Here it is my personal wishlist divided by modules:
module:
rcore
REDESIGN: Module subdivision. This module has grown a lot with every new supported platform (~7000 loc), at some point it could be divided into separate modules. Actually, this is not expected to be implemented at this moment but I take note here for the future. Two possible approaches:
rcore_desktop.c
-PLATFORM_DESKTOP
(Windows, Linux, macOS)rcore_android.c
-PLATFORM_ANDROID
rcore_native.c
-PLATFORM_DRM
/PLATFORM_RPI
rcore_web.c
-PLATFORM_WEB
rcore_glfw.c
- GLFW library basedrcore_sdl.c
- SDL library basedrcore_native.c
- Native implementation✔️ REVIEW: Update
GLFW
to latest version.PLATFORM_DESKTOP
uses GLFW library for window and inputs functionality, the library is amalgamated into a single compile-unit asrglfw.c
. Latest changes to GLFW require a review ofrglfw.c
inclusions.ADDITION: Support
SDL
library backend.SDL
library is an alternative toGLFW
, it's a bit bigger thanGLFW
and provides some additional functionality probably not required by raylib but it could be nice to support it as an alternative backend (only the main library, not the auxiliar ones).✔️ REVIEW:
PLATFORM_DRM
. With latestRPI OS Bullseye
, Dispmanx-based solution for native (headless) rendering on Rapsberry Pi has been removed. raylib uses Dispmanx onPLATFORM_RPI
implementation, now it becomes deprecated and the alternativePLATFORM_DRM
implementation should be used. I got no plans to removePLATFORM_RPI
for the moment because it still works withRPI OS Legacy
(Buster-based) but some efforts to improve thePLATFORM_DRM
implementation are required, it has not been tested enough and some issues with display initialization were reported. It requires more testing. [core] Issues running in native mode withPLATFORM_DRM
in Bullseye in RPI Zero W #2439✔️ REVIEW: File-path access functionality. I miss some functions to the file-path access API provided by raylib, like recursive directory files scan of filtered by type file scan. Also API consistency/naming should be reviewed.
✔️ REVIEW: Load/Unload functions name consistency. Usually, functions that allocate memory in some way start with
Load*()
and have anUnload*()
equivalent (there are some exceptions:Gen*()
,Image*()
,Text*()
). Also, functions that operate over internal static variables or return a direct value useGet*()
orSet*()
convention. Some functions do not follow that rule and should be reviewed. This is an API-breaking change so I'd like to think about it carefully before changing the API.GetDirectoryFiles()
/ClearDirectoryFiles()
->LoadDirectoryFileset()
/UnloadDirectoryFileset()
GetDroppedFiles()
/ClearDroppedFiles()
->LoadDroppedFilepaths()
/UnloadDroppedFilepaths()
SaveStorageValue()
/LoadStorageValue()
-> REMOVED! (Moved to example)LoadVrStereoConfig()
/UnloadVrStereoConfig()
-> Currently they just use values, no memory is allocated.✔️ REVIEW: Fullscreen modes (specially on
PLATFORM_WEB
). Fullscreen is a very complex world, specially on web, there are many possible strategies to scale content to fullscreen. Reviewing all the possible options and supporting them in some way is really difficult and requires a lot of work.module:
rlgl
OpenGL 4.3
functionality mapping.rlgl
implements an abstraction API overOpenGL
to simplify usage and expose only the required functionality. Recently someOpenGL 4.3
functionality was added but the functions map directly to OpenGL equivalents, not sure if that is abstracted enough in case it had to be ported to other graphic APIs. It's something I'd like to review more carefully.module:
rshapes
rlgl
but considering it's only intended to define shapes and fill vertex data buffers, it could be converted into a completely portable module to be used with any library/engine that supports vertex buffers (mostly any modern library/engine). Some functions that need to be reviewed/removed:rlSetTexture()
andrlTexCoord*()
-> Do we need texture-mapping for basic shapes? Yes, keeping them for now.rlCheckRenderBatchLimit()
-> That check should be internal torlgl
when accumulating the vertex data to the buffers. Actually it's required to define the size required for the data provided and check if the buffer overflows, so a draw call is issued and a new buffer is started.rlPushMatrix()
/rlPopMatrix()
. Vertex transformations are managed internally byrlgl
using a stack system similar to OpenGL 1.1. Ifrshapes
is intended to be used standalone, with any other graphic backend, transformations should be applied in the module and the transformed vertex should be send to the buffer. So the buffer system required could be very simple and processed by any API.module:
rtextures
✔️ REDESIGN: Move image formats loaders to external files. Currently some image format loaders (compressed textures) are implemented inside the module, those functions could be moved to an external single-file header-only library, so, expendable and shareable code is not contained inside the textures module. The involved functions are:
LoadDDS()
LoadPKM()
LoadKTX()
/SaveKTX()
LoadPVR()
LoadASTC()
✔️ REVIEW: Possible functions out-of-scope. Some functions could be out-of-scope for raylib, exposing a functionality that actually belongs to a higher-level library/engine. Possible functions to review:
DrawTextureQuad()
-> Is tiling parameter really required?DrawTextureTiled()
-> It draws texture n times to accomplish the tiling effect... -> Moved to example!DrawTextureNPatch()
-> NPatch is very useful but it seems to belong to a higher level engine...DrawTexturePoly()
-> Do we really need this?rlgl
exposes more functionality in a similar way... -> Moved to example!❌ ADDITION: Support 16bit/32bit per channel on
Image
drawing. Only 8 bit per channel images are supported at this moment, it could be improved. Related issue: [textures]ImageDraw()
andExportImage()
(.png) does not support f32bit per channel image data #2222module:
rtext
Text*()
functions API in case of missing functions or inconsistencies. Also note that some functions load memory that must be managed by the user.stb_truetype
because most of the exposed advance API is not used by raylib.module:
rmodels
DrawBillboardPro()
DrawCubeTextureRec()
-> Moved to a separate example:models_draw_cube_texture.c
UnloadModelKeepMeshes()
module:
raudio
miniaudio
. A new release ofminiaudio
was published recently,raudio
should implement this last release. I did the porting but for some reason audio stopped working, it seems the port requires a bit more work.stb_vorbis
usage. raylib currently uses a single-file header-only prefixed fork ofstb_vorbis
. It should be reviewed to include lateststb_vorbis
changes or replaced by another OGG library (if exists).module:
raymath
core_quat_conversion.c
) but it's not clear enough, it should also be reviewed.module:
rcamera
✔️ REDESIGN: Rewrite the module. Current implementation should be completely reviewed, it was originally created +7 year ago and it has many issues. [rcamera] Redesign #2507 Some of the desired features for the re-implementation would be:
module:
rgestures
REDESIGN: Rewrite the module. Current implementation should be completely reviewed, it was originally created +7 year ago and it has many issues. Some of the desired features for the re-implementation would be:
TouchEvents
instead ofGestureEvent
-> More low-level data processingmodule:
raygui
RAYGUI_STANDALONE
. Current implementation is very coupled to raylib and despite it can be used in standalone mode, implementation is quite difficult. It would be nice to completely decouple it from raylib (in a similar way toDearImGui
orNuklear
) and provide separate implementations depending on the required backend (i.e.raygui-raylib.h
provide binding functions for raylib).examples
✔️ ADDITION: Classification by difficulty. I think it would be nice to organize the examples by a difficulty level, so starting users can focus efforts on
easy
examples first and move to more difficult examples later on. This improvement will require some way to show that on the raylib webpage and also on the example code description.ADDITION: Index functions by usage example. Index all raylib functions by example using them and list with links that information, so users can easily find an example using a specific function. Functions with no example related would require a new example.
New examples. There are some examples that neew to be added or improved, here some of them:
rlgl
] G-Buffers usage -> New API was added in raylib 4.0 but no usage example yettext
] Codepoints loading -> Some users asked how to load custom Unicode charsets from a font and use itcore
]core_split_screen
-> Add FP camera movement per view (as much simple as possible)core
]core_quat_conversion
-> Not working as expected, it requires review. It's also a bit confusing, maybe a better example could be designed. -> Example removed.textures
]textures_blend_mode
-> Make it more visual, with buttons and blending selectorothers
]easings_testbed
-> Make it more visual, with buttons and easing selectorThose are some of the improvements I had on my list for next raylib version. It's a long list and it requires lot of work. Note that not all those improvements are expected to be implemented, it's just a reference to draw an action line to follow for future raylib.
As always, contributions are welcome. Feel free to comment.
Beta Was this translation helpful? Give feedback.
All reactions