Update this page to raylib 5.0?

master
Helix Graziani 1 年之前
父節點
當前提交
dd47964f82
共有 1 個文件被更改,包括 109 次插入72 次删除
  1. +109
    -72
      raylib-syntax-analysis.md

+ 109
- 72
raylib-syntax-analysis.md

@ -1,4 +1,4 @@
**WARNING: This analysis has been made on `raylib 3.8-dev` that exposes a total of `470 functions`. Latest version of the library, `raylib 4.1-dev` exposes `+500 functions`. This information could be not updated.**
This analysis has been made on `raylib 5.1-dev` that exposes a total of `558 functions`.
raylib is a simple and easy-to-use library to enjoy videogames programing... but, **what makes the library simple and easy-to-use?** For many users the first approach to the library is through its API, so, here it is a small analysis of the API from a **syntactic point of view**. raylib is a simple and easy-to-use library to enjoy videogames programing... but, **what makes the library simple and easy-to-use?** For many users the first approach to the library is through its API, so, here it is a small analysis of the API from a **syntactic point of view**.
@ -36,7 +36,7 @@ Checking the available **functions** with more detail, they can be divided into
### 1.1. Functions following a common pattern ### 1.1. Functions following a common pattern
Most of the functions of the library go into this first group **(359 functions)**, there is some common `<Action>` that prepends the name of most of the functions:
Most of the functions of the library go into this first group **(416 functions)**, there is some common `<Action>` that prepends the name of most of the functions:
pattern | function format | API count | examples pattern | function format | API count | examples
:--: | :----- | :---: | :---------- :--: | :----- | :---: | :----------
@ -44,26 +44,26 @@ pattern | function format | API count | examples
02 | `void Close*()` | 2 | `CloseWindow()`, `CloseAudioDevice()` 02 | `void Close*()` | 2 | `CloseWindow()`, `CloseAudioDevice()`
03 | `void Begin*()` | 8 | `BeginDrawing()`, `BeginBlendMode()` 03 | `void Begin*()` | 8 | `BeginDrawing()`, `BeginBlendMode()`
04 | `void End*()` | 8 | `EndDrawing()`, `EndBlendMode()` 04 | `void End*()` | 8 | `EndDrawing()`, `EndBlendMode()`
05 | `TYPE Get*()` | **79** | `GetKeyPressed()`, `GetMouseX()`, `GetRayCollision*()`
06 | `void Set*()` | **46** | `SetWindowTitle()`, `SetTargetFPS()`, `SetMouseScale()`
07 | `bool Is*()` | **33** | `IsKeyPressed()`, `IsGamepadAvailable()`, `IsSoundPlaying()`
08 | `TYPE Gen<TYPE>*()` | 20 | `GenImage*()`, `GenMesh*()`
05 | `TYPE Get*()` | **93** | `GetKeyPressed()`, `GetMouseX()`, `GetRayCollision*()`
06 | `void Set*()` | **52** | `SetWindowTitle()`, `SetTargetFPS()`, `SetMouseScale()`
07 | `bool Is*()` | **45** | `IsKeyPressed()`, `IsGamepadAvailable()`, `IsSoundPlaying()`
08 | `TYPE Gen<TYPE>*()` | 23 | `GenImage*()`, `GenMesh*()`
09 | `TYPE Load<TYPE>*()` | **34** | `LoadImage*()`, `LoadTexture*()`, `LoadSound*()` 09 | `TYPE Load<TYPE>*()` | **34** | `LoadImage*()`, `LoadTexture*()`, `LoadSound*()`
10 | `void Unload<TYPE>*(<TYPE>)` | 22 | `UnloadImage()`, `UnloadTexture()`, `UnloadSound()`
11 | `void Update<TYPE>*(<TYPE>, *)` | 8 | `UpdateTexture()`, `UpdateCamera()`
12 | `bool Save*()` | 3 | `SaveFileData()`, `SaveFileText()`, `SaveStorageValue()`
13 | `bool Export*()` | 5 | `ExportImage()`, `ExportImageAsCode()`, `ExportMesh()`, `ExportWave()`, `ExportWaveAsCode()`
14 | `void Draw*()` | **79** | `DrawRectangle()`, `DrawTexture*()`, `DrawModel*()`
15 | `bool Check*()` | 10 | `CheckCollisionRecs()`, `CheckCollisionCircles()`, `CheckCollisionBoxSphere()`
10 | `void Unload<TYPE>*(<TYPE>)` | 28 | `UnloadImage()`, `UnloadTexture()`, `UnloadSound()`
11 | `void Update<TYPE>*(<TYPE>, *)` | 9 | `UpdateTexture()`, `UpdateCamera()`
12 | `bool Save*()` | 2 | `SaveFileData()`, `SaveFileText()`, `SaveStorageValue()`
13 | `bool Export*()` | 9 | `ExportImage()`, `ExportImageAsCode()`, `ExportMesh()`, `ExportWave()`, `ExportWaveAsCode()`
14 | `void Draw*()` | **89** | `DrawRectangle()`, `DrawTexture*()`, `DrawModel*()`
15 | `bool Check*()` | 12 | `CheckCollisionRecs()`, `CheckCollisionCircles()`, `CheckCollisionBoxSphere()`
### 1.2. Functions operating over specific type of data ### 1.2. Functions operating over specific type of data
Those functions **(68 in total)** operate over a specific data type, so, it was decided to prepend the `DataType` to the function name, they are an exception over the main syntax rule followed by the API:
Those functions **(74 in total)** operate over a specific data type, so, it was decided to prepend the `DataType` to the function name, they are an exception over the main syntax rule followed by the API:
pattern | function format | API count | examples pattern | function format | API count | examples
:--: | :----- | :---: | :---------- :--: | :----- | :---: | :----------
01 | `TYPE Color*()` | 7 | `ColorAlpha()`, `ColorFromHSV()`, `ColorToHSV()`
02 | `Image Image*()`<br>`void Image*()` | **40** | `ImageFormat()`, `ImageCrop()`, `ImageResize()`,` ImageFlipVertical()`
01 | `TYPE Color*()` | 10 | `ColorAlpha()`, `ColorFromHSV()`, `ColorToHSV()`
02 | `Image Image*()`<br>`void Image*()` | **45** | `ImageFormat()`, `ImageCrop()`, `ImageResize()`,` ImageFlipVertical()`
03 | `TYPE Text*()` | **16** | `TextFormat()`, `TextReplace()`, `TextSplit()`, `TextToLower()` 03 | `TYPE Text*()` | **16** | `TextFormat()`, `TextReplace()`, `TextSplit()`, `TextToLower()`
04 | `Wave Wave*()`<br>`void Wave*()` | 3 | `WaveFormat()`, `WaveCopy()`, `WaveCrop()` 04 | `Wave Wave*()`<br>`void Wave*()` | 3 | `WaveFormat()`, `WaveCopy()`, `WaveCrop()`
@ -71,23 +71,30 @@ _NOTE: Maybe some of them are renamed in the future for consistency._
### 1.3. Functions with unique pattern ### 1.3. Functions with unique pattern
Remaining functions **(43 in total)** follow a unique pattern, still, **most of them** follow the standard syntax pattern of `<Verb><Subject><Complement>`.
Remaining functions **(57 in total)** follow a unique pattern, still, **most of them** follow the standard syntax pattern of `<Verb><Subject><Complement>`.
```c ```c
// core.c // core.c
WindowShouldClose(); // Not following pattern WindowShouldClose(); // Not following pattern
ClearWindowState(); ClearWindowState();
ToggleFullscreen(); ToggleFullscreen();
ToggleBorderlessWindowed();
MaximizeWindow(); MaximizeWindow();
MinimizeWindow(); MinimizeWindow();
RestoreWindow(); RestoreWindow();
EnableEventWaiting();
DisableEventWaiting();
ShowCursor(); ShowCursor();
HideCursor(); HideCursor();
EnableCursor(); EnableCursor();
DisableCursor(); DisableCursor();
ClearBackground(); ClearBackground();
SwapScreenBuffer();
PollInputEvents();
WaitTime();
TakeScreenshot(); TakeScreenshot();
TraceLog(); // Not following pattern TraceLog(); // Not following pattern
OpenURL();
MemAlloc(); // Data-type pattern? MemAlloc(); // Data-type pattern?
MemRealloc(); // Data-type pattern? MemRealloc(); // Data-type pattern?
MemFree(); // Data-type pattern? MemFree(); // Data-type pattern?
@ -95,10 +102,13 @@ FileExists(); // Not following pattern -> IsFileAvailable()?
DirectoryExists(); // Not following pattern -> IsDirectoryAvailable()? DirectoryExists(); // Not following pattern -> IsDirectoryAvailable()?
ClearDirectoryFiles(); ClearDirectoryFiles();
ChangeDirectory(); ChangeDirectory();
ClearDroppedFiles();
CompressData(); CompressData();
DecompressData(); DecompressData();
OpenURL();
EncodeDataBase64();
DecodeDataBase64();
StartAutomationEventRecording();
StopAutomationEventRecording();
PlayAutomationEvent();
// textures.c // textures.c
Fade(); // Superseded by ColorAlpha() Fade(); // Superseded by ColorAlpha()
@ -116,16 +126,20 @@ PlaySound();
StopSound(); StopSound();
PauseSound(); PauseSound();
ResumeSound(); ResumeSound();
PlaySoundMulti();
StopSoundMulti();
PlayMusicStream(); PlayMusicStream();
StopMusicStream(); StopMusicStream();
PauseMusicStream(); PauseMusicStream();
ResumeMusicStream(); ResumeMusicStream();
SeekMusicStream();
PlayAudioStream(); PlayAudioStream();
StopAudioStream(); StopAudioStream();
PauseAudioStream(); PauseAudioStream();
ResumeAudioStream(); ResumeAudioStream();
SeekAudioStream();
AttachAudioStreamProcessor();
DetachAudioStreamProcessor();
AttachAudioMixedProcessor();
DetachAudioMixedProcessor();
``` ```
### 1.4. Functions suffixes ### 1.4. Functions suffixes
@ -137,10 +151,12 @@ A part from the function prefixes that we can find in many functions names (1. c
//------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------
// rcore.c // rcore.c
void SetShaderValueV(); void SetShaderValueV();
Vector2 GetMouseWheelMoveV();
// rshapes.c // rshapes.c
void DrawPixelV(); void DrawPixelV();
void DrawLineV(); void DrawLineV();
void DrawCircleV(); void DrawCircleV();
void DrawCircleLinesV();
void DrawRectangleV(); void DrawRectangleV();
void DrawRectangleGradientV(); void DrawRectangleGradientV();
// rtextures.c // rtextures.c
@ -172,6 +188,8 @@ void DrawTextEx();
Vector2 MeasureTextEx(); Vector2 MeasureTextEx();
// rmodels.c // rmodels.c
void DrawSphereEx(); void DrawSphereEx();
void DrawCylinderEx();
void DrawCylinderWiresEx();
void DrawModelEx(); void DrawModelEx();
void DrawModelWiresEx(); void DrawModelWiresEx();
@ -197,12 +215,15 @@ Rectangle GetCollisionRec();
void ImageDrawRectangleRec(); void ImageDrawRectangleRec();
void UpdateTextureRec(); void UpdateTextureRec();
void DrawTextureRec(); void DrawTextureRec();
// rtext.c
Rectangle GetGlyphAtlasRec();
// rmodels.c // rmodels.c
void DrawBillboardRec(); void DrawBillboardRec();
// Suffix: *FromMemory() -> Used for functions loading data "from memory" instead of from files // Suffix: *FromMemory() -> Used for functions loading data "from memory" instead of from files
//------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------
Shader LoadShaderFromMemory(); Shader LoadShaderFromMemory();
Image LoadImageAnimFromMemory();
Image LoadImageFromMemory(); Image LoadImageFromMemory();
Font LoadFontFromMemory(); Font LoadFontFromMemory();
Wave LoadWaveFromMemory(); Wave LoadWaveFromMemory();
@ -215,6 +236,7 @@ void SetLoadFileDataCallback();
void SetSaveFileDataCallback(); void SetSaveFileDataCallback();
void SetLoadFileTextCallback(); void SetLoadFileTextCallback();
void SetSaveFileTextCallback(); void SetSaveFileTextCallback();
void SetAudioStreamCallback();
``` ```
### 1.5. Functions naming ### 1.5. Functions naming
@ -233,13 +255,20 @@ count| function | words | comments
008 | `SetLoadFileTextCallback()` | 5 | _Callback function_ 008 | `SetLoadFileTextCallback()` | 5 | _Callback function_
009 | `SetSaveFileTextCallback()` | 5 | _Callback function_ 009 | `SetSaveFileTextCallback()` | 5 | _Callback function_
010 | `GetFileNameWithoutExt()` | 5 | 010 | `GetFileNameWithoutExt()` | 5 |
011 | `SetCameraSmoothZoomControl()` | 5 | TODO: Review!!!
012 | `ImageToPOT()` | 3 | _Acronym used_
013 | `ImageRotateCCW()` | 3 | _Acronym used_
014 | `ColorToHSV()` | 3 | _Acronym used_
015 | `ColorFromHSV()` | 3 | _Acronym used_
016 | `LoadMusicStreamFromMemory()` | 5 | _*FromMemory() set of functions_
017 | `SetAudioStreamBufferSizeDefault()` | **6** | **TODO: Review!!!**
011 | `SetAutomationEventBaseFrame()` | 5 | TODO: Review!!!
012 | `DrawSplineSegmentCatmullRom()` | 5 |
013 | `DrawSplineSegmentBezierQuadratic()` | 5 |
014 | `DrawSplineSegmentBezierCubic()` | 5 |
015 | `GetSplinePointCatmullRom()` | 5 |
016 | `GetSplinePointBezierQuad()` | 5 |
017 | `GetSplinePointBezierCubic()` | 5 |
018 | `LoadImageAnimFromMemory()` | 5 |
019 | `ImageToPOT()` | 3 | _Acronym used_
020 | `ImageRotateCCW()` | 3 | _Acronym used_
021 | `ColorToHSV()` | 3 | _Acronym used_
022 | `ColorFromHSV()` | 3 | _Acronym used_
023 | `LoadMusicStreamFromMemory()` | 5 | _*FromMemory() set of functions_
024 | `SetAudioStreamBufferSizeDefault()` | **6** | **TODO: Review!!!**
### 1.6. Functions parameters ### 1.6. Functions parameters
@ -247,42 +276,46 @@ Most functions are limited to **5 or less input parameters**. I think 5 or less
count| function | param count | comments count| function | param count | comments
:--: | :----- | :--: | :---------- :--: | :----- | :--: | :----------
001 | `SetCameraMoveControls()` | 6 |
002 | `DrawCircleSector()` | 6 | 002 | `DrawCircleSector()` | 6 |
003 | `DrawCircleSectorLines()` | 6 | 003 | `DrawCircleSectorLines()` | 6 |
004 | `DrawRing()` | 7 | _WARNING: >6 parameters_ 004 | `DrawRing()` | 7 | _WARNING: >6 parameters_
005 | `DrawRingLines()` | 7 | _WARNING: >6 parameters_ 005 | `DrawRingLines()` | 7 | _WARNING: >6 parameters_
006 | `DrawRectangleGradientV()` | 6 | 006 | `DrawRectangleGradientV()` | 6 |
007 | `DrawRectangleGradientH()` | 6 | 007 | `DrawRectangleGradientH()` | 6 |
008 | `DrawPolyLinesEx()` | 6 |
009 | `GenImageChecked()` | 6 |
010 | `ImageResizeCanvas()` | 6 |
011 | `ImageDrawLine()` | 6 |
012 | `ImageDrawRectangle()` | 6 |
013 | `ImageDrawText()` | 6 |
014 | `ImageDrawTextEx()` | 7 | _WARNING: >6 parameters_
015 | `DrawTextureTiled()` | 7 | _WARNING: >6 parameters_
016 | `DrawTexturePro()` | 6 |
017 | `DrawTextureNPatch()` | 6 |
018 | `DrawTexturePoly()` | 6 |
019 | `LoadFontFromMemory()` | 6 |
020 | `LoadFontData()` | 6 |
021 | `GenImageFontAtlas()` | 6 |
022 | `DrawTextEx()` | 6 |
023 | `DrawTextPro()` | **8** | _WARNING: >7 parameters_
024 | `DrawCubeTexture()` | 6 |
025 | `DrawCylinder()` | 6 |
026 | `DrawCylinderWires()` | 6 |
027 | `DrawModelEx()` | 6 |
028 | `DrawModelWiresEx()` | 6 |
029 | `DrawBillboardRec()` | 6 |
030 | `DrawBillboardPro()` | **8** | _WARNING: >7 parameters_
008 | `DrawPolyLinesEx()` | 6 |
009 | `DrawSplineSegmentBasis()` | 6 |
010 | `DrawSplineSegmentCatmullRom()` | 6 |
011 | `DrawSplineSegmentBezierCubic()` | 6 |
012 | `GenImageChecked()` | 6 |
013 | `ImageResizeCanvas()` | 6 |
014 | `ImageDrawLine()` | 6 |
015 | `ImageDrawRectangle()` | 6 |
016 | `ImageDrawText()` | 6 |
017 | `ImageDrawTextEx()` | 7 | _WARNING: >6 parameters_
018 | `DrawTexturePro()` | 6 |
019 | `DrawTextureNPatch()` | 6 |
020 | `LoadFontFromMemory()` | 6 |
021 | `LoadFontData()` | 6 |
022 | `GenImageFontAtlas()` | 6 |
023 | `DrawTextEx()` | 6 |
024 | `DrawTextPro()` | **8** | _WARNING: >7 parameters_
025 | `DrawTextCodepoints()` | 7 | _WARNING: >6 parameters_
026 | `DrawCylinder()` | 6 |
027 | `DrawCylinderEx()` | 6 |
028 | `DrawCylinderWires()` | 6 |
029 | `DrawCylinderWiresEx()` | 6 |
030 | `DrawCapsule()` | 6 |
031 | `DrawCapsuleWires()` | 6 |
032 | `DrawModelEx()` | 6 |
033 | `DrawModelWiresEx()` | 6 |
034 | `DrawBillboardRec()` | 6 |
035 | `DrawBillboardPro()` | **9** | _WARNING: >8 parameters_
Note that **only 6 function out of 470** require more than 6 parameters. This is what makes raylib so special. Note that **only 6 function out of 470** require more than 6 parameters. This is what makes raylib so special.
## 2. Structures ## 2. Structures
raylib defines a total of **31 struct data types**, most of those structs use a single word to define the type and some of them use two words.
raylib defines a total of **34 struct data types**, most of those structs use a single word to define the type and some of them use two words.
raylib tries to provide generic data types for most common use scenarios, only some of those structs are required for specific examples: `NPatchInfo`, `VrDeviceInfo`, `VrStereoConfig`. raylib tries to provide generic data types for most common use scenarios, only some of those structs are required for specific examples: `NPatchInfo`, `VrDeviceInfo`, `VrStereoConfig`.
@ -304,52 +337,56 @@ count | struct name | fields count | comments
12 | `Font` | 6 | 12 | `Font` | 6 |
13 | `Camera3D` | 5 | 13 | `Camera3D` | 5 |
14 | `Camera2D` | 4 | 14 | `Camera2D` | 4 |
15 | `Mesh` | **15** |
15 | `Mesh` | **21** |
16 | `Shader` | 2 | 16 | `Shader` | 2 |
17 | `MaterialMap` | 3 | _2 words name_ 17 | `MaterialMap` | 3 | _2 words name_
18 | `Material` | 3 | 18 | `Material` | 3 |
19 | `Transform` | 3 | 19 | `Transform` | 3 |
20 | `BoneInfo` | 2 | _2 words name_ 20 | `BoneInfo` | 2 | _2 words name_
21 | `Model` | **9** |
22 | `ModelAnimation` | 4 | _2 words name_
21 | `Model` | **12** |
22 | `ModelAnimation` | 5 | _2 words name_
23 | `Ray` | 2 | 23 | `Ray` | 2 |
24 | `RayCollision` | 4 | _2 words name_ 24 | `RayCollision` | 4 | _2 words name_
25 | `BoundingBox` | 2 | _2 words name_ 25 | `BoundingBox` | 2 | _2 words name_
26 | `Wave` | 5 | 26 | `Wave` | 5 |
27 | `AudioStream` | 4 | _2 words name_
27 | `AudioStream` | 6 | _2 words name_
28 | `Sound` | 2 | 28 | `Sound` | 2 |
29 | `Music` | 5 |
30 | `VrDeviceInfo` | **10** | _3 words name_
29 | `Music` | 6 |
30 | `VrDeviceInfo` | **9** | _3 words name_
31 | `VrStereoConfig` | **8** | _3 words name_ 31 | `VrStereoConfig` | **8** | _3 words name_
32 | `FilePathList` | 3 | _3 words name_
33 | `AutomationEvent` | 3 | _2 words name_
34 | `AutomationEventList` | 3 | _3 words name_
## 3. Enumerations ## 3. Enumerations
raylib defines **20 enumerations** for convenience. Enum names and contained value names are kept simple and clear. Most of those values are only required to be used by some very specific functions, for a detailed list check Wiki entry: [raylib enumerated types](https://github.com/raysan5/raylib/wiki/raylib-enumerated-types).
raylib defines **21 enumerations** for convenience. Enum names and contained value names are kept simple and clear. Most of those values are only required to be used by some very specific functions, for a detailed list check Wiki entry: [raylib enumerated types](https://github.com/raysan5/raylib/wiki/raylib-enumerated-types).
Personally, I tried to avoid enum values requirement as much as possible within the library, actually, **only 35 function in raylib could require using some enum value on some of its input parameters**. Personally, I tried to avoid enum values requirement as much as possible within the library, actually, **only 35 function in raylib could require using some enum value on some of its input parameters**.
count | enum name | values count | comments count | enum name | values count | comments
:--:| :---------: | :-------: | :-------- :--:| :---------: | :-------: | :--------
01 | `ConfigFlags` | 14 |
01 | `ConfigFlags` | 16 |
02 | `TraceLogLevel` | 8 | _3 words name_ 02 | `TraceLogLevel` | 8 | _3 words name_
03 | `KeyboardKey` | **110** |
04 | `MouseButton` | 8 |
03 | `KeyboardKey` | **114** |
04 | `MouseButton` | 7 |
05 | `MouseCursor` | 11 | 05 | `MouseCursor` | 11 |
06 | `GamepadButton` | **18** | 06 | `GamepadButton` | **18** |
07 | `GamepadAxis` | 6 | 07 | `GamepadAxis` | 6 |
08 | `MaterialMapIndex` | 11 | _3 words name_ 08 | `MaterialMapIndex` | 11 | _3 words name_
09 | `ShaderLocationIndex` | **26** | _3 words name_ 09 | `ShaderLocationIndex` | **26** | _3 words name_
10 | `ShaderUniformDataType` | 9 | **_4 words name_** 10 | `ShaderUniformDataType` | 9 | **_4 words name_**
11 | `PixelFormat` | **21** |
12 | `TextureFilter` | 6 |
13 | `TextureWrap` | 4 |
14 | `CubemapLayout` | 6 |
15 | `FontType` | 3 |
16 | `BlendMode` | 6 |
17 | `Gesture` | 11 |
18 | `CameraMode` | 5 |
19 | `CameraProjection` | 2 |
20 | `NPatchLayout` | 3 | _3 words name_
11 | `ShaderAttributeDataType` | 4 | **_4 words name_**
12 | `PixelFormat` | **24** |
13 | `TextureFilter` | 6 |
14 | `TextureWrap` | 4 |
15 | `CubemapLayout` | 6 |
16 | `FontType` | 3 |
17 | `BlendMode` | 8 |
18 | `Gesture` | 11 |
19 | `CameraMode` | 5 |
20 | `CameraProjection` | 2 |
21 | `NPatchLayout` | 3 | _3 words name_
## Conclusion ## Conclusion

Loading…
取消
儲存