mirror of
				https://github.com/raysan5/raylib.git
				synced 2025-10-26 12:27:01 +00:00 
			
		
		
		
	Remove line breaks
This commit is contained in:
		
							
								
								
									
										118
									
								
								CHANGELOG
									
									
									
									
									
								
							
							
						
						
									
										118
									
								
								CHANGELOG
									
									
									
									
									
								
							| @@ -12,7 +12,7 @@ KEY CHANGES: | |||||||
|  - raylib_parser: Multiple improvements of the raylib parser to automatize bindings generation |  - raylib_parser: Multiple improvements of the raylib parser to automatize bindings generation | ||||||
|  - REMOVED extras libraries (raygui, physac, raudio.h...) moved to independent separate repos |  - REMOVED extras libraries (raygui, physac, raudio.h...) moved to independent separate repos | ||||||
|  - UPDATED: examples: Added creation and update raylib versions and assigned **DIFFICULTY LEVELS**! |  - UPDATED: examples: Added creation and update raylib versions and assigned **DIFFICULTY LEVELS**! | ||||||
|   |  | ||||||
| Detailed changes: | Detailed changes: | ||||||
| [multi] REVIEWED: Multiple trace log messages | [multi] REVIEWED: Multiple trace log messages | ||||||
| [multi] REVIEWED: Avoid some float to double promotions | [multi] REVIEWED: Avoid some float to double promotions | ||||||
| @@ -47,7 +47,7 @@ Detailed changes: | |||||||
| [core] REVIEWED: ToggleFullscreen() | [core] REVIEWED: ToggleFullscreen() | ||||||
| [core] REVIEWED: Initialize/reset CORE.inputs global state (#2360) | [core] REVIEWED: Initialize/reset CORE.inputs global state (#2360) | ||||||
| [core] REVIEWED: MouseScrollCallback() (#2371) | [core] REVIEWED: MouseScrollCallback() (#2371) | ||||||
| [core] REVIEWED: SwapScreenBuffers() for PLATFORM_DRM  | [core] REVIEWED: SwapScreenBuffers() for PLATFORM_DRM | ||||||
| [core] REVIEWED: WaitTime(), fix regression causing video stuttering (#2503) by @flashback-fx | [core] REVIEWED: WaitTime(), fix regression causing video stuttering (#2503) by @flashback-fx | ||||||
| [core] REVIEWED: Mouse device support on PLATFORM_DRM (#2381) | [core] REVIEWED: Mouse device support on PLATFORM_DRM (#2381) | ||||||
| [core] REVIEWED: Support OpenBSD timming functions | [core] REVIEWED: Support OpenBSD timming functions | ||||||
| @@ -55,7 +55,7 @@ Detailed changes: | |||||||
| [core] REVIEWED: TakeScreenshot(), use GetWindowScaleDPI() to calculate size in screenshot/recording (#2446) by @gulrak | [core] REVIEWED: TakeScreenshot(), use GetWindowScaleDPI() to calculate size in screenshot/recording (#2446) by @gulrak | ||||||
| [core] REVIEWED: Remove fps requirement for drm connector selection (#2468) by @Crydsch | [core] REVIEWED: Remove fps requirement for drm connector selection (#2468) by @Crydsch | ||||||
| [core] REVIEWED: IsFileExtension() (#2530) | [core] REVIEWED: IsFileExtension() (#2530) | ||||||
| [camera] REVIEWED: Some camera improvements (#2563)  | [camera] REVIEWED: Some camera improvements (#2563) | ||||||
| [rlgl] ADDED: Premultiplied alpha blend mode (#2342) by @megagrump | [rlgl] ADDED: Premultiplied alpha blend mode (#2342) by @megagrump | ||||||
| [rlgl] REVIEWED: VR rendering not taking render target size into account (#2424) by @FireFlyForLife | [rlgl] REVIEWED: VR rendering not taking render target size into account (#2424) by @FireFlyForLife | ||||||
| [rlgl] REVIEWED: Set rlgl internal framebuffer (#2420) | [rlgl] REVIEWED: Set rlgl internal framebuffer (#2420) | ||||||
| @@ -73,7 +73,7 @@ Detailed changes: | |||||||
| [raymath] ADDED: Vector2Transform() | [raymath] ADDED: Vector2Transform() | ||||||
| [raymath] ADDED: Vector2DistanceSqr() (#2376) by @AnilBK | [raymath] ADDED: Vector2DistanceSqr() (#2376) by @AnilBK | ||||||
| [raymath] ADDED: Vector3DistanceSqr() (#2376) by @AnilBK | [raymath] ADDED: Vector3DistanceSqr() (#2376) by @AnilBK | ||||||
| [raymath] ADDED: Vector2ClampValue(), Vector3ClampValue() (#2428) by @saccharineboi  | [raymath] ADDED: Vector2ClampValue(), Vector3ClampValue() (#2428) by @saccharineboi | ||||||
| [raymath] ADDED: Vector3RotateByAxisAngle() (#2590) by @Crydsch | [raymath] ADDED: Vector3RotateByAxisAngle() (#2590) by @Crydsch | ||||||
| [raymath] `WARNING`: REDESIGNED: Vector2Angle() returns radians instead of degrees (#2193) by @schveiguy | [raymath] `WARNING`: REDESIGNED: Vector2Angle() returns radians instead of degrees (#2193) by @schveiguy | ||||||
| [raymath] `WARNING`: REMOVED: MatrixNormalize() (#2412) | [raymath] `WARNING`: REMOVED: MatrixNormalize() (#2412) | ||||||
| @@ -88,7 +88,7 @@ Detailed changes: | |||||||
| [shapes] REVIEWED: CheckCollision*() consistency | [shapes] REVIEWED: CheckCollision*() consistency | ||||||
| [shapes] REVIEWED: DrawRectanglePro(), support TRIANGLES drawing | [shapes] REVIEWED: DrawRectanglePro(), support TRIANGLES drawing | ||||||
| [textures] ADDED: Support for QOI image format | [textures] ADDED: Support for QOI image format | ||||||
| [textures] REVIEWED: ImageColorTint(), GetImageColor(), ImageDrawRectangleRec(), optimized functions (#2429) by @AnilBK   | [textures] REVIEWED: ImageColorTint(), GetImageColor(), ImageDrawRectangleRec(), optimized functions (#2429) by @AnilBK | ||||||
| [textures] REVIEWED: LoadTextureFromImage(), allow texture loading with no data transfer | [textures] REVIEWED: LoadTextureFromImage(), allow texture loading with no data transfer | ||||||
| [textures] REVIEWED: ImageDraw(), comment to note that f32bit is not supported (#2222) | [textures] REVIEWED: ImageDraw(), comment to note that f32bit is not supported (#2222) | ||||||
| [textures] REVIEWED: DrawTextureNPatch(), avoid batch overflow (#2401) by @JeffM2501 | [textures] REVIEWED: DrawTextureNPatch(), avoid batch overflow (#2401) by @JeffM2501 | ||||||
| @@ -103,7 +103,7 @@ Detailed changes: | |||||||
| [text] ADDED: ExportFontAsCode() | [text] ADDED: ExportFontAsCode() | ||||||
| [text] ADDED: DrawTextCodepoints() (#2308) by @siddharthroy12 | [text] ADDED: DrawTextCodepoints() (#2308) by @siddharthroy12 | ||||||
| [text] REVIEWED: TextIsEqual(), protect from NULLs (#2121) by @lukekras | [text] REVIEWED: TextIsEqual(), protect from NULLs (#2121) by @lukekras | ||||||
| [text] REVIEWED: LoadFontEx(), comment to specify how to get the default character set (#2221) by @JeffM2501  | [text] REVIEWED: LoadFontEx(), comment to specify how to get the default character set (#2221) by @JeffM2501 | ||||||
| [text] REVIEWED: GenImageFontAtlas(), increase atlas size guesstimate by @megagrump | [text] REVIEWED: GenImageFontAtlas(), increase atlas size guesstimate by @megagrump | ||||||
| [text] REVIEWED: GetCodepoint() (#2201) | [text] REVIEWED: GetCodepoint() (#2201) | ||||||
| [text] REVIEWED: GenImageFontAtlas() (#2556) | [text] REVIEWED: GenImageFontAtlas() (#2556) | ||||||
| @@ -122,9 +122,9 @@ Detailed changes: | |||||||
| [models] REVIEWED: GenMeshCylinder() (#2225) | [models] REVIEWED: GenMeshCylinder() (#2225) | ||||||
| [audio] `WARNING`: ADDED: rAudioProcessor pointer to AudioStream struct (used by Sound and Music structs) | [audio] `WARNING`: ADDED: rAudioProcessor pointer to AudioStream struct (used by Sound and Music structs) | ||||||
| [audio] ADDED: SetSoundPan(), SetMusicPan(), SetAudioStreamPan(), panning support (#2205) by ptarabbia | [audio] ADDED: SetSoundPan(), SetMusicPan(), SetAudioStreamPan(), panning support (#2205) by ptarabbia | ||||||
| [audio] ADDED: Audio stream input callback (#2212) by ptarabbia  | [audio] ADDED: Audio stream input callback (#2212) by ptarabbia | ||||||
| [audio] ADDED: Audio stream processors support (#2212) by ptarabbia  | [audio] ADDED: Audio stream processors support (#2212) by ptarabbia | ||||||
| [audio] REVIEWED: GetMusicTimePlayed(), incorrect value after the stream restarted for XM audio (#2092 #2215) by @ptarabbia  | [audio] REVIEWED: GetMusicTimePlayed(), incorrect value after the stream restarted for XM audio (#2092 #2215) by @ptarabbia | ||||||
| [audio] REVIEWED: Turn on interpolation for XM playback (#2216) by @ptarabbia | [audio] REVIEWED: Turn on interpolation for XM playback (#2216) by @ptarabbia | ||||||
| [audio] REVIEWED: Fix crash with delay example (#2472) by @ptarabbia | [audio] REVIEWED: Fix crash with delay example (#2472) by @ptarabbia | ||||||
| [audio] REVIEWED: PlaySoundMulti() (#2231) | [audio] REVIEWED: PlaySoundMulti() (#2231) | ||||||
| @@ -149,7 +149,7 @@ Detailed changes: | |||||||
| [examples] REVIEWED: textures_draw_tiled | [examples] REVIEWED: textures_draw_tiled | ||||||
| [examples] REVIEWED: shaders_mesh_instancing, free allocated matrices (#2425) by @AnilBK | [examples] REVIEWED: shaders_mesh_instancing, free allocated matrices (#2425) by @AnilBK | ||||||
| [examples] REVIEWED: shaders_raymarching | [examples] REVIEWED: shaders_raymarching | ||||||
| [examples] REVIEWED: audio_raw_stream (#2205) by ptarabbia  | [examples] REVIEWED: audio_raw_stream (#2205) by ptarabbia | ||||||
| [examples] REVIEWED: audio_music_stream | [examples] REVIEWED: audio_music_stream | ||||||
| [examples] REVIEWED: shaders_mesh_instancing, simplified | [examples] REVIEWED: shaders_mesh_instancing, simplified | ||||||
| [examples] REVIEWED: shaders_basic_lighting, rlights.h simplified | [examples] REVIEWED: shaders_basic_lighting, rlights.h simplified | ||||||
| @@ -162,7 +162,7 @@ Detailed changes: | |||||||
| [parser] ADDED: Makefile for raylib_parser by @iskolbin | [parser] ADDED: Makefile for raylib_parser by @iskolbin | ||||||
| [parser] ADDED: Support for truncating parser input (#2464) by @lazaray | [parser] ADDED: Support for truncating parser input (#2464) by @lazaray | ||||||
| [parser] ADDED: Support for calculated defines to parser (#2463) by @lazaray | [parser] ADDED: Support for calculated defines to parser (#2463) by @lazaray | ||||||
| [parser] REVIEWED: Update parser files (#2125) by @catmanl  | [parser] REVIEWED: Update parser files (#2125) by @catmanl | ||||||
| [parser] REVIEWED: Fix memory leak in parser (#2136) by @ronnieholm | [parser] REVIEWED: Fix memory leak in parser (#2136) by @ronnieholm | ||||||
| [parser] REVIEWED: EscapeBackslashes() | [parser] REVIEWED: EscapeBackslashes() | ||||||
| [parser] REVIEWED: Parser improvements (#2461 #2462) by @lazaray | [parser] REVIEWED: Parser improvements (#2461 #2462) by @lazaray | ||||||
| @@ -219,7 +219,7 @@ KEY CHANGES: | |||||||
|  - raygui 3.0: Complete review and official new release, more portable and self-contained, intended for tools development |  - raygui 3.0: Complete review and official new release, more portable and self-contained, intended for tools development | ||||||
|  - raylib_parser: New tool to parse raylib.h and extract all required info into custom output formats (TXT, XML, JSON...) |  - raylib_parser: New tool to parse raylib.h and extract all required info into custom output formats (TXT, XML, JSON...) | ||||||
|  - Zig and Odin official support |  - Zig and Odin official support | ||||||
|   |  | ||||||
| Detailed changes: | Detailed changes: | ||||||
| [core] ADDED: Support canvas resizing on web (#1840) by @skylersaleh | [core] ADDED: Support canvas resizing on web (#1840) by @skylersaleh | ||||||
| [core] ADDED: GetMouseDelta() (#1832) by @adricoin2010 | [core] ADDED: GetMouseDelta() (#1832) by @adricoin2010 | ||||||
| @@ -258,7 +258,7 @@ Detailed changes: | |||||||
| [shapes] ADDED: RenderPolyLinesEx() (#1758) by @lambertwang | [shapes] ADDED: RenderPolyLinesEx() (#1758) by @lambertwang | ||||||
| [shapes] ADDED: DrawLineBezierCubic() (#2021) by @SAOMDVN | [shapes] ADDED: DrawLineBezierCubic() (#2021) by @SAOMDVN | ||||||
| [textures] ADDED: GetImageColor() #2024 | [textures] ADDED: GetImageColor() #2024 | ||||||
| [textures] REMOVED: GenImagePerlinNoise()  | [textures] REMOVED: GenImagePerlinNoise() | ||||||
| [textures] RENAMED: GetTextureData() to LoadImageFromTexture() | [textures] RENAMED: GetTextureData() to LoadImageFromTexture() | ||||||
| [textures] RENAMED: GetScreenData() to LoadImageFromScreen() | [textures] RENAMED: GetScreenData() to LoadImageFromScreen() | ||||||
| [textures] REVIEWED: ExportImage() to use SaveFileData() (#1779) | [textures] REVIEWED: ExportImage() to use SaveFileData() (#1779) | ||||||
| @@ -374,8 +374,8 @@ Detailed changes: | |||||||
| [core] RENAMED: LoadShaderCode() to LoadShaderFromMemory() (#1690) | [core] RENAMED: LoadShaderCode() to LoadShaderFromMemory() (#1690) | ||||||
| [core] RENAMED: SetMatrixProjection() to rlSetMatrixProjection() | [core] RENAMED: SetMatrixProjection() to rlSetMatrixProjection() | ||||||
| [core] RENAMED: SetMatrixModelview() to rlSetMatrixModelview() | [core] RENAMED: SetMatrixModelview() to rlSetMatrixModelview() | ||||||
| [core] RENAMED: GetMatrixModelview() to rlGetMatrixModelview()       | [core] RENAMED: GetMatrixModelview() to rlGetMatrixModelview() | ||||||
| [core] RENAMED: GetMatrixProjection() to rlGetMatrixProjection()     | [core] RENAMED: GetMatrixProjection() to rlGetMatrixProjection() | ||||||
| [core] RENAMED: GetShaderDefault() to rlGetShaderDefault() | [core] RENAMED: GetShaderDefault() to rlGetShaderDefault() | ||||||
| [core] RENAMED: GetTextureDefault() to rlGetTextureDefault() | [core] RENAMED: GetTextureDefault() to rlGetTextureDefault() | ||||||
| [core] REMOVED: GetShapesTexture() | [core] REMOVED: GetShapesTexture() | ||||||
| @@ -390,7 +390,7 @@ Detailed changes: | |||||||
| [core] REDESIGNED: Compresion API to use sdefl/sinfl libs | [core] REDESIGNED: Compresion API to use sdefl/sinfl libs | ||||||
| [rlgl] ADDED: SUPPORT_GL_DETAILS_INFO config flag | [rlgl] ADDED: SUPPORT_GL_DETAILS_INFO config flag | ||||||
| [rlgl] REMOVED: GenTexture*() functions (#721) | [rlgl] REMOVED: GenTexture*() functions (#721) | ||||||
| [rlgl] REVIEWED: rlLoadShaderDefault()  | [rlgl] REVIEWED: rlLoadShaderDefault() | ||||||
| [rlgl] REDESIGNED: rlLoadExtensions(), more details exposed | [rlgl] REDESIGNED: rlLoadExtensions(), more details exposed | ||||||
| [raymath] REVIEWED: QuaternionFromEuler() (#1651) | [raymath] REVIEWED: QuaternionFromEuler() (#1651) | ||||||
| [raymath] REVIEWED: MatrixRotateZYX() (#1642) | [raymath] REVIEWED: MatrixRotateZYX() (#1642) | ||||||
| @@ -425,7 +425,7 @@ Detailed changes: | |||||||
| [utils] ADDED: SetLoadFileTextCallback() | [utils] ADDED: SetLoadFileTextCallback() | ||||||
| [utils] ADDED: SetSaveFileTextCallback() | [utils] ADDED: SetSaveFileTextCallback() | ||||||
| [examples] ADDED: text_draw_3d (#1689) by @Demizdor | [examples] ADDED: text_draw_3d (#1689) by @Demizdor | ||||||
| [examples] ADDED: textures_poly (#1677) by @chriscamacho  | [examples] ADDED: textures_poly (#1677) by @chriscamacho | ||||||
| [examples] ADDED: models_gltf_model (#1551) by @object71 | [examples] ADDED: models_gltf_model (#1551) by @object71 | ||||||
| [examples] RENAMED: shaders_rlgl_mesh_instanced to shaders_mesh_intancing | [examples] RENAMED: shaders_rlgl_mesh_instanced to shaders_mesh_intancing | ||||||
| [examples] REDESIGNED: shaders_rlgl_mesh_instanced by @moliad | [examples] REDESIGNED: shaders_rlgl_mesh_instanced by @moliad | ||||||
| @@ -451,11 +451,11 @@ KEY CHANGES: | |||||||
|  - [core] ADDED: PLATFORM_DRM to support RPI4 and other devices (#1388) by @kernelkinetic |  - [core] ADDED: PLATFORM_DRM to support RPI4 and other devices (#1388) by @kernelkinetic | ||||||
|  - [core] REDESIGNED: Window states management system through FLAGS |  - [core] REDESIGNED: Window states management system through FLAGS | ||||||
|  - [rlgl] ADDED: RenderBatch type and related functions to allow custom batching (internal only) |  - [rlgl] ADDED: RenderBatch type and related functions to allow custom batching (internal only) | ||||||
|  - [rlgl] REDESIGNED: Framebuffers API to support multiple attachment types (#721)  |  - [rlgl] REDESIGNED: Framebuffers API to support multiple attachment types (#721) | ||||||
|  - [textures] REDESIGNED: Image*() functions, big performance improvements (software rendering) |  - [textures] REDESIGNED: Image*() functions, big performance improvements (software rendering) | ||||||
|  - [*] REVIEWED: Multiple functions to replace file accesses by memory accesses |  - [*] REVIEWED: Multiple functions to replace file accesses by memory accesses | ||||||
|  - [*] ADDED: GitHub Actions CI to support multiple raylib build configurations |  - [*] ADDED: GitHub Actions CI to support multiple raylib build configurations | ||||||
|   |  | ||||||
| Detailed changes: | Detailed changes: | ||||||
| [core] ADDED: SetWindowState() / ClearWindowState() -> New flags added! | [core] ADDED: SetWindowState() / ClearWindowState() -> New flags added! | ||||||
| [core] ADDED: IsWindowFocused() | [core] ADDED: IsWindowFocused() | ||||||
| @@ -463,7 +463,7 @@ Detailed changes: | |||||||
| [core] ADDED: GetMonitorRefreshRate() (#1289) by @Shylie | [core] ADDED: GetMonitorRefreshRate() (#1289) by @Shylie | ||||||
| [core] ADDED: IsCursorOnScreen() (#1262) by @ChrisDill | [core] ADDED: IsCursorOnScreen() (#1262) by @ChrisDill | ||||||
| [core] ADDED: SetMouseCursor() and GetMouseCursor() for standard Desktop cursors (#1407) by @chances | [core] ADDED: SetMouseCursor() and GetMouseCursor() for standard Desktop cursors (#1407) by @chances | ||||||
| [core] REMOVED: struct RenderTexture2D: depthTexture variable  | [core] REMOVED: struct RenderTexture2D: depthTexture variable | ||||||
| [core] REMOVED: HideWindow() / UnhideWindow() -> Use SetWindowState() | [core] REMOVED: HideWindow() / UnhideWindow() -> Use SetWindowState() | ||||||
| [core] REMOVED: DecorateWindow() / UndecorateWindow() -> Use SetWindowState() | [core] REMOVED: DecorateWindow() / UndecorateWindow() -> Use SetWindowState() | ||||||
| [core] RENAMED: GetExtension() to GetFileExtension() | [core] RENAMED: GetExtension() to GetFileExtension() | ||||||
| @@ -475,7 +475,7 @@ Detailed changes: | |||||||
| [core] REVIEWED: GetPrevDirectoryPath() fixes on Unix-like systems (#1246) by @ivan-cx | [core] REVIEWED: GetPrevDirectoryPath() fixes on Unix-like systems (#1246) by @ivan-cx | ||||||
| [core] REPLACED: rgif.h by msf_gif.h for automatic gif recording | [core] REPLACED: rgif.h by msf_gif.h for automatic gif recording | ||||||
| [core] REDESIGNED: GetMouseWheelMove() to return float movement for precise scrolling (#1397) by @Doy-lee | [core] REDESIGNED: GetMouseWheelMove() to return float movement for precise scrolling (#1397) by @Doy-lee | ||||||
| [core] REDESIGNED: GetKeyPressed(), and added GetCharPressed() (#1336)  | [core] REDESIGNED: GetKeyPressed(), and added GetCharPressed() (#1336) | ||||||
| [core] UWP rework with improvements (#1231) by @Rover656 | [core] UWP rework with improvements (#1231) by @Rover656 | ||||||
| [core] Gamepad axis bug fixes and improvement (#1228) by @mmalecot | [core] Gamepad axis bug fixes and improvement (#1228) by @mmalecot | ||||||
| [core] Updated joystick mappings with latest version of gamecontrollerdb (#1381) by @coderoth | [core] Updated joystick mappings with latest version of gamecontrollerdb (#1381) by @coderoth | ||||||
| @@ -497,19 +497,19 @@ Detailed changes: | |||||||
| [raymath] ADDED: Vector2LengthSqr() and Vector3LengthSqr() (#1248) by @ThePituLegend | [raymath] ADDED: Vector2LengthSqr() and Vector3LengthSqr() (#1248) by @ThePituLegend | ||||||
| [raymath] ADDED: Vector2MoveTowards() function (#1233) by @anatagawa | [raymath] ADDED: Vector2MoveTowards() function (#1233) by @anatagawa | ||||||
| [raymath] REVIEWED: Some functions consistency (#1197) by @Not-Nik | [raymath] REVIEWED: Some functions consistency (#1197) by @Not-Nik | ||||||
| [raymath] REVIEWED: QuaternionFromVector3ToVector3() (#1263) by @jvocaturo  | [raymath] REVIEWED: QuaternionFromVector3ToVector3() (#1263) by @jvocaturo | ||||||
| [raymath] REVIEWED: MatrixLookAt(), optimized (#1442) by @RandomErrorMessage | [raymath] REVIEWED: MatrixLookAt(), optimized (#1442) by @RandomErrorMessage | ||||||
| [shapes] ADDED: CheckCollisionLines(), by @Elkantor | [shapes] ADDED: CheckCollisionLines(), by @Elkantor | ||||||
| [text] Avoid [textures] functions dependencies | [text] Avoid [textures] functions dependencies | ||||||
| [text] ADDED: Config flag: SUPPORT_TEXT_MANIPULATION | [text] ADDED: Config flag: SUPPORT_TEXT_MANIPULATION | ||||||
| [text] ADDED: LoadFontFromMemory() (TTF only) (#1327) | [text] ADDED: LoadFontFromMemory() (TTF only) (#1327) | ||||||
| [text] ADDED: UnloadFontData()  | [text] ADDED: UnloadFontData() | ||||||
| [text] RENAMED: FormatText() -> TextFormat()  | [text] RENAMED: FormatText() -> TextFormat() | ||||||
| [text] REVIEWED: Font struct, added charsPadding (#1432) | [text] REVIEWED: Font struct, added charsPadding (#1432) | ||||||
| [text] REVIEWED: TextJoin() | [text] REVIEWED: TextJoin() | ||||||
| [text] REVIEWED: TextReplace() (#1172) | [text] REVIEWED: TextReplace() (#1172) | ||||||
| [text] REVIEWED: LoadBMFont() to load data from memory (#1232) | [text] REVIEWED: LoadBMFont() to load data from memory (#1232) | ||||||
| [text] REVIEWED: GenImageFontAtlas(), fixed offset (#1171)  | [text] REVIEWED: GenImageFontAtlas(), fixed offset (#1171) | ||||||
| [text] REDESIGNED: LoadFontData(), reviewed input parameters | [text] REDESIGNED: LoadFontData(), reviewed input parameters | ||||||
| [text] REDESIGNED: LoadFontDefault(), some code simplifications | [text] REDESIGNED: LoadFontDefault(), some code simplifications | ||||||
| [text] REDESIGNED: LoadFontFromImage(), avoid LoadImageEx() | [text] REDESIGNED: LoadFontFromImage(), avoid LoadImageEx() | ||||||
| @@ -524,10 +524,10 @@ Detailed changes: | |||||||
| [textures] ADDED: DrawTextureTiled() (#1291) - @Demizdor | [textures] ADDED: DrawTextureTiled() (#1291) - @Demizdor | ||||||
| [textures] ADDED: UpdateTextureRec() | [textures] ADDED: UpdateTextureRec() | ||||||
| [textures] ADDED: UnloadImageColors(), UnloadImagePalette(), UnloadWaveSamples() | [textures] ADDED: UnloadImageColors(), UnloadImagePalette(), UnloadWaveSamples() | ||||||
| [textures] REMOVED: Config flag: SUPPORT_IMAGE_DRAWING  | [textures] REMOVED: Config flag: SUPPORT_IMAGE_DRAWING | ||||||
| [textures] REMOVED: LoadImageEx() | [textures] REMOVED: LoadImageEx() | ||||||
| [textures] REMOVED: LoadImagePro()  | [textures] REMOVED: LoadImagePro() | ||||||
| [textures] REMOVED: GetImageDataNormalized(), not exposed in the API  | [textures] REMOVED: GetImageDataNormalized(), not exposed in the API | ||||||
| [textures] RENAMED: ImageExtractPalette() to GetImagePalette() | [textures] RENAMED: ImageExtractPalette() to GetImagePalette() | ||||||
| [textures] RENAMED: Fade() to ColorAlpha(), added #define for compatibility | [textures] RENAMED: Fade() to ColorAlpha(), added #define for compatibility | ||||||
| [textures] RENAMED: GetImageData() -> LoadImageColors() | [textures] RENAMED: GetImageData() -> LoadImageColors() | ||||||
| @@ -539,7 +539,7 @@ Detailed changes: | |||||||
| [textures] REVIEWED: ColorAlphaBlend(), support tint color | [textures] REVIEWED: ColorAlphaBlend(), support tint color | ||||||
| [textures] REVIEWED: ColorAlphaBlend(), integers-version, optimized (#1218) | [textures] REVIEWED: ColorAlphaBlend(), integers-version, optimized (#1218) | ||||||
| [textures] REVIEWED: ImageDraw(), consider negative source offset properly (#1283) | [textures] REVIEWED: ImageDraw(), consider negative source offset properly (#1283) | ||||||
| [textures] REVIEWED: ImageDraw(), optimizations test (#1218)  | [textures] REVIEWED: ImageDraw(), optimizations test (#1218) | ||||||
| [textures] REVIEWED: ImageResizeCanvas(), optimization (#1218) | [textures] REVIEWED: ImageResizeCanvas(), optimization (#1218) | ||||||
| [textures] REVIEWED: ExportImage(), optimized | [textures] REVIEWED: ExportImage(), optimized | ||||||
| [textures] REVIEWED: ImageAlphaPremultiply(), optimization | [textures] REVIEWED: ImageAlphaPremultiply(), optimization | ||||||
| @@ -563,27 +563,27 @@ Detailed changes: | |||||||
| [textures] REDESIGNED: ImageDraw(), optimization (#1218) | [textures] REDESIGNED: ImageDraw(), optimization (#1218) | ||||||
| [textures] REDESIGNED: ImageAlphaClear(), optimized (#1218) | [textures] REDESIGNED: ImageAlphaClear(), optimized (#1218) | ||||||
| [textures] REDESIGNED: ExportImageAsCode() to use memory buffer (#1232) | [textures] REDESIGNED: ExportImageAsCode() to use memory buffer (#1232) | ||||||
| [textures] REDESIGNED: ColorFromHSV()  | [textures] REDESIGNED: ColorFromHSV() | ||||||
| [models] ADDED: DrawTriangle3D() and DrawTriangleStrip3D() | [models] ADDED: DrawTriangle3D() and DrawTriangleStrip3D() | ||||||
| [models] ADDED: UnloadModelKeepMeshes()  | [models] ADDED: UnloadModelKeepMeshes() | ||||||
| [models] REVIEWED: LoadModel(), avoid loading texcoords and normals from model if not existent | [models] REVIEWED: LoadModel(), avoid loading texcoords and normals from model if not existent | ||||||
| [models] REVIEWED: GenMeshCubicmap(), added comments and simplification | [models] REVIEWED: GenMeshCubicmap(), added comments and simplification | ||||||
| [models] REVIEWED: GenMeshCubicmap(), fixed generated normals (#1244) by @GoldenThumbs | [models] REVIEWED: GenMeshCubicmap(), fixed generated normals (#1244) by @GoldenThumbs | ||||||
| [models] REVIEWED: GenMeshPoly(), fixed buffer overflow (#1269) by @frithrah  | [models] REVIEWED: GenMeshPoly(), fixed buffer overflow (#1269) by @frithrah | ||||||
| [models] REVIEWED: LoadOBJ(): Allow for multiple materials in obj files (#1408) by @chriscamacho and @codifies | [models] REVIEWED: LoadOBJ(): Allow for multiple materials in obj files (#1408) by @chriscamacho and @codifies | ||||||
| [models] REVIEWED: LoadIQM() materials loading (#1227) by @sikor666 | [models] REVIEWED: LoadIQM() materials loading (#1227) by @sikor666 | ||||||
| [models] REVIEWED: LoadGLTF() to read from memory buffer | [models] REVIEWED: LoadGLTF() to read from memory buffer | ||||||
| [models] REVIEWED: UpdateMesh(), fix extra memory allocated when updating color buffer (#1271) by @4yn | [models] REVIEWED: UpdateMesh(), fix extra memory allocated when updating color buffer (#1271) by @4yn | ||||||
| [models] REVIEWED: MeshNormalsSmooth() (#1317) by @seanpringle | [models] REVIEWED: MeshNormalsSmooth() (#1317) by @seanpringle | ||||||
| [models] REVIEWED: DrawGrid() (#1417) | [models] REVIEWED: DrawGrid() (#1417) | ||||||
| [models] REDESIGNED: ExportMesh() to use memory buffer (#1232)  | [models] REDESIGNED: ExportMesh() to use memory buffer (#1232) | ||||||
| [models] REDESIGNED: LoadIQM() and LoadModelAnimations() to use memory buffers | [models] REDESIGNED: LoadIQM() and LoadModelAnimations() to use memory buffers | ||||||
| [audio] ADDED: LoadWaveFromMemory() (#1327) | [audio] ADDED: LoadWaveFromMemory() (#1327) | ||||||
| [audio] REMOVED: SetMusicLoopCount() | [audio] REMOVED: SetMusicLoopCount() | ||||||
| [audio] REVIEWED: Several functions, sampleCount vs frameCount (#1423) | [audio] REVIEWED: Several functions, sampleCount vs frameCount (#1423) | ||||||
| [audio] REVIEWED: SaveWAV() to use memory write insted of file | [audio] REVIEWED: SaveWAV() to use memory write insted of file | ||||||
| [audio] REVIEWED: LoadMusicStream(), support WAV music streaming (#1198)  | [audio] REVIEWED: LoadMusicStream(), support WAV music streaming (#1198) | ||||||
| [audio] REVIEWED: Support multiple WAV sampleSize for MusicStream (#1340)  | [audio] REVIEWED: Support multiple WAV sampleSize for MusicStream (#1340) | ||||||
| [audio] REVIEWED: SetAudioBufferPitch() | [audio] REVIEWED: SetAudioBufferPitch() | ||||||
| [audio] REDESIGNED: Audio looping system | [audio] REDESIGNED: Audio looping system | ||||||
| [audio] REDESIGNED: LoadSound(): Use memory loading (WAV, OGG, MP3, FLAC) (#1312) | [audio] REDESIGNED: LoadSound(): Use memory loading (WAV, OGG, MP3, FLAC) (#1312) | ||||||
| @@ -617,9 +617,9 @@ Detailed changes: | |||||||
| [build] Updated Android build for Linux, supporting ANDROID_NDK at compile time by @branlix3000 | [build] Updated Android build for Linux, supporting ANDROID_NDK at compile time by @branlix3000 | ||||||
| [build] Updated VSCode project template tasks | [build] Updated VSCode project template tasks | ||||||
| [build] Updated VS2017.UWP project template by @Rover656 | [build] Updated VS2017.UWP project template by @Rover656 | ||||||
| [build] Updated Android build pipeline  | [build] Updated Android build pipeline | ||||||
| [build] REMOVED: AppVeyor and Travis CI build systems | [build] REMOVED: AppVeyor and Travis CI build systems | ||||||
| [*] Moved raysan5/raylib/games to independent repo: raysan5/raylib-games  | [*] Moved raysan5/raylib/games to independent repo: raysan5/raylib-games | ||||||
| [*] Replaced several examples resources with more open licensed alternatives | [*] Replaced several examples resources with more open licensed alternatives | ||||||
| [*] Updated BINDINGS.md with NEW bindings and added raylib version binding! | [*] Updated BINDINGS.md with NEW bindings and added raylib version binding! | ||||||
| [*] Updated all external libraries to latest versions | [*] Updated all external libraries to latest versions | ||||||
| @@ -629,7 +629,7 @@ Detailed changes: | |||||||
| Release:     raylib 3.0 (01 April 2020) | Release:     raylib 3.0 (01 April 2020) | ||||||
| ----------------------------------------------- | ----------------------------------------------- | ||||||
| KEY CHANGES: | KEY CHANGES: | ||||||
|  - Global context states used on all modules.  |  - Global context states used on all modules. | ||||||
|  - Custom memory allocators for all modules and dependencies. |  - Custom memory allocators for all modules and dependencies. | ||||||
|  - Centralized file access system and memory data loading. |  - Centralized file access system and memory data loading. | ||||||
|  - Structures reviewed to reduce size and always be used as pass-by-value. |  - Structures reviewed to reduce size and always be used as pass-by-value. | ||||||
| @@ -638,7 +638,7 @@ KEY CHANGES: | |||||||
|  - text module reviewed to improve fonts generation and text management functions. |  - text module reviewed to improve fonts generation and text management functions. | ||||||
|  - Multiple new examples added and categorized examples table. |  - Multiple new examples added and categorized examples table. | ||||||
|  - GitHub Actions CI implemented for Windows, Linux and macOS. |  - GitHub Actions CI implemented for Windows, Linux and macOS. | ||||||
|   |  | ||||||
| Detailed changes: | Detailed changes: | ||||||
| [build] ADDED: VS2017.ANGLE project, by @msmshazan | [build] ADDED: VS2017.ANGLE project, by @msmshazan | ||||||
| [build] ADDED: VS2017 project support for x64 platform configuration | [build] ADDED: VS2017 project support for x64 platform configuration | ||||||
| @@ -872,7 +872,7 @@ Detailed changes: | |||||||
| [rlgl] ADDED: SetShaderValueTexture() - Set shader uniform value for texture | [rlgl] ADDED: SetShaderValueTexture() - Set shader uniform value for texture | ||||||
| [rlgl] ADDED: BeginScissorMode() - Begin scissor mode (define screen area for following drawing) | [rlgl] ADDED: BeginScissorMode() - Begin scissor mode (define screen area for following drawing) | ||||||
| [rlgl] ADDED: EndScissorMode() - End scissor mode | [rlgl] ADDED: EndScissorMode() - End scissor mode | ||||||
| [rlgl] ADDED: SetVrConfiguration() - Set stereo rendering configuration parameters  | [rlgl] ADDED: SetVrConfiguration() - Set stereo rendering configuration parameters | ||||||
| [rlgl] REVIEWED: InitVrSimulator() - No input parameter required, use SetVrConfiguration() | [rlgl] REVIEWED: InitVrSimulator() - No input parameter required, use SetVrConfiguration() | ||||||
| [text] REVIEWED: LoadFontEx() - Reorder function parameters | [text] REVIEWED: LoadFontEx() - Reorder function parameters | ||||||
| [text] REVIEWED: LoadFontData() - Reorder function parameters | [text] REVIEWED: LoadFontData() - Reorder function parameters | ||||||
| @@ -1065,10 +1065,10 @@ Detailed changes: | |||||||
| ----------------------------------------------- | ----------------------------------------------- | ||||||
| Release:     raylib 1.8.0 (Oct 2017) | Release:     raylib 1.8.0 (Oct 2017) | ||||||
| ----------------------------------------------- | ----------------------------------------------- | ||||||
| NOTE:  | NOTE: | ||||||
|   In this release, multiple parts of the library have been reviewed (again) for consistency and simplification.  |   In this release, multiple parts of the library have been reviewed (again) for consistency and simplification. | ||||||
|   It exposes more than 30 new functions in comparison with previous version and it improves overall programming experience. |   It exposes more than 30 new functions in comparison with previous version and it improves overall programming experience. | ||||||
|    |  | ||||||
| BIG CHANGES: | BIG CHANGES: | ||||||
|   - New Image generation functions: Gradient, Checked, Noise, Cellular... |   - New Image generation functions: Gradient, Checked, Noise, Cellular... | ||||||
|   - New Mesh generation functions: Cube, Sphere, Cylinder, Torus, Knot... |   - New Mesh generation functions: Cube, Sphere, Cylinder, Torus, Knot... | ||||||
| @@ -1155,9 +1155,9 @@ detailed changes: | |||||||
| ----------------------------------------------- | ----------------------------------------------- | ||||||
| Release:     raylib 1.7.0 (20 May 2017) | Release:     raylib 1.7.0 (20 May 2017) | ||||||
| ----------------------------------------------- | ----------------------------------------------- | ||||||
| NOTE:  | NOTE: | ||||||
|   In this new raylib release, multiple parts of the library have been reviewed for consistency and simplification.  |   In this new raylib release, multiple parts of the library have been reviewed for consistency and simplification. | ||||||
|   It exposes almost 300 functions, around 30 new functions in comparison with previous version and, again,  |   It exposes almost 300 functions, around 30 new functions in comparison with previous version and, again, | ||||||
|   it sets a stepping stone towards raylib future. |   it sets a stepping stone towards raylib future. | ||||||
|  |  | ||||||
| BIG changes: | BIG changes: | ||||||
| @@ -1251,8 +1251,8 @@ other changes: | |||||||
| ----------------------------------------------- | ----------------------------------------------- | ||||||
| Release:     raylib 1.6.0 (20 November 2016) | Release:     raylib 1.6.0 (20 November 2016) | ||||||
| ----------------------------------------------- | ----------------------------------------------- | ||||||
| NOTE:  | NOTE: | ||||||
|   This new raylib version commemorates raylib 3rd anniversary and represents another complete review of the library.  |   This new raylib version commemorates raylib 3rd anniversary and represents another complete review of the library. | ||||||
|   It includes some interesting new features and is a stepping stone towards raylib future. |   It includes some interesting new features and is a stepping stone towards raylib future. | ||||||
|  |  | ||||||
| HUGE changes: | HUGE changes: | ||||||
| @@ -1308,8 +1308,8 @@ other changes: | |||||||
| ----------------------------------------------- | ----------------------------------------------- | ||||||
| Release:     raylib 1.5.0 (18 July 2016) | Release:     raylib 1.5.0 (18 July 2016) | ||||||
| ----------------------------------------------- | ----------------------------------------------- | ||||||
| NOTE:  | NOTE: | ||||||
|   Probably this new version is the biggest boost of the library ever, lots of parts of the library have been redesigned,  |   Probably this new version is the biggest boost of the library ever, lots of parts of the library have been redesigned, | ||||||
|   lots of bugs have been solved and some **AMAZING** new features have been added. |   lots of bugs have been solved and some **AMAZING** new features have been added. | ||||||
|  |  | ||||||
| HUGE changes: | HUGE changes: | ||||||
| @@ -1353,7 +1353,7 @@ other changes: | |||||||
| [rlgl] Replaced SetBlendMode() by: BeginBlendMode() - EndBlendMode() | [rlgl] Replaced SetBlendMode() by: BeginBlendMode() - EndBlendMode() | ||||||
| [rlgl] Added functions to customize internal matrices: SetMatrixProjection(), SetMatrixModelview() | [rlgl] Added functions to customize internal matrices: SetMatrixProjection(), SetMatrixModelview() | ||||||
| [rlgl] Unified internal shaders to only one default shader | [rlgl] Unified internal shaders to only one default shader | ||||||
| [rlgl] Added support for render to texture (RenderTexture2D):  | [rlgl] Added support for render to texture (RenderTexture2D): | ||||||
|           LoadRenderTexture() - UnloadRenderTexture() |           LoadRenderTexture() - UnloadRenderTexture() | ||||||
|           BeginTextureMode() - EndTextureMode() |           BeginTextureMode() - EndTextureMode() | ||||||
| [rlgl] Removed SetShaderMap*() functions | [rlgl] Removed SetShaderMap*() functions | ||||||
| @@ -1399,7 +1399,7 @@ other changes: | |||||||
| ----------------------------------------------- | ----------------------------------------------- | ||||||
| Release:     raylib 1.4.0 (22 February 2016) | Release:     raylib 1.4.0 (22 February 2016) | ||||||
| ----------------------------------------------- | ----------------------------------------------- | ||||||
| NOTE:  | NOTE: | ||||||
|   This version supposed another big improvement for raylib, including new modules and new features. |   This version supposed another big improvement for raylib, including new modules and new features. | ||||||
|   More than 30 new functions have been added to previous raylib version. |   More than 30 new functions have been added to previous raylib version. | ||||||
|   Around 8 new examples and +10 new game samples have been added. |   Around 8 new examples and +10 new game samples have been added. | ||||||
| @@ -1437,7 +1437,7 @@ other changes: | |||||||
| ----------------------------------------------- | ----------------------------------------------- | ||||||
| Release:     raylib 1.3.0 (01 September 2015) | Release:     raylib 1.3.0 (01 September 2015) | ||||||
| ----------------------------------------------- | ----------------------------------------------- | ||||||
| NOTE:  | NOTE: | ||||||
|   This version supposed a big boost for raylib, new modules have been added with lots of features. |   This version supposed a big boost for raylib, new modules have been added with lots of features. | ||||||
|   Most of the modules have been completely reviewed to accomodate to the new features. |   Most of the modules have been completely reviewed to accomodate to the new features. | ||||||
|   Over 50 new functions have been added to previous raylib version. |   Over 50 new functions have been added to previous raylib version. | ||||||
| @@ -1453,13 +1453,13 @@ BIG changes: | |||||||
| other changes: | other changes: | ||||||
|  |  | ||||||
| [rlgl] Added check for OpenGL supported extensions | [rlgl] Added check for OpenGL supported extensions | ||||||
| [rlgl] Added function SetBlenMode() to select some predefined blending modes  | [rlgl] Added function SetBlenMode() to select some predefined blending modes | ||||||
| [core] Added support for drop&drag of external files into running program | [core] Added support for drop&drag of external files into running program | ||||||
| [core] Added functions ShowCursor(), HideCursor(), IsCursorHidden() | [core] Added functions ShowCursor(), HideCursor(), IsCursorHidden() | ||||||
| [core] Renamed function SetFlags() to SetConfigFlags() | [core] Renamed function SetFlags() to SetConfigFlags() | ||||||
| [shapes] Simplified some functions to improve performance | [shapes] Simplified some functions to improve performance | ||||||
| [textures] Review of Image struct to support multiple data formats | [textures] Review of Image struct to support multiple data formats | ||||||
| [textures] Added function LoadImageEx()  | [textures] Added function LoadImageEx() | ||||||
| [textures] Added function LoadImageRaw() | [textures] Added function LoadImageRaw() | ||||||
| [textures] Added function LoadTextureEx() | [textures] Added function LoadTextureEx() | ||||||
| [textures] Simplified function parameters LoadTextureFromImage() | [textures] Simplified function parameters LoadTextureFromImage() | ||||||
| @@ -1517,7 +1517,7 @@ Update:     raylib 1.2.1 (17 October 2014) (Small Fixes Update) | |||||||
| ----------------------------------------------- | ----------------------------------------------- | ||||||
| Release:     raylib 1.2 (16 September 2014) | Release:     raylib 1.2 (16 September 2014) | ||||||
| ----------------------------------------------- | ----------------------------------------------- | ||||||
| NOTE:  | NOTE: | ||||||
|   This version supposed a complete redesign of the [core] module to support Android and Raspberry Pi. |   This version supposed a complete redesign of the [core] module to support Android and Raspberry Pi. | ||||||
|   Multiples modules have also been tweaked to accomodate to the new platforms, specially [rlgl] |   Multiples modules have also been tweaked to accomodate to the new platforms, specially [rlgl] | ||||||
|  |  | ||||||
| @@ -1567,7 +1567,7 @@ Release:     raylib 1.1.1 (22 July 2014) | |||||||
| ----------------------------------------------- | ----------------------------------------------- | ||||||
| Release:     raylib 1.1.0 (19 April 2014) | Release:     raylib 1.1.0 (19 April 2014) | ||||||
| ----------------------------------------------- | ----------------------------------------------- | ||||||
| NOTE:  | NOTE: | ||||||
|   This version supposed a complete internal redesign of the library to support OpenGL 3.3+ and OpenGL ES 2.0. |   This version supposed a complete internal redesign of the library to support OpenGL 3.3+ and OpenGL ES 2.0. | ||||||
|   New module [rlgl] has been added to 'translate' immediate mode style functions (i.e. rlVertex3f()) to GL 1.1, 3.3+ or ES2. |   New module [rlgl] has been added to 'translate' immediate mode style functions (i.e. rlVertex3f()) to GL 1.1, 3.3+ or ES2. | ||||||
|   Another new module [raymath] has also been added with lot of useful 3D math vector-matrix-quaternion functions. |   Another new module [raymath] has also been added with lot of useful 3D math vector-matrix-quaternion functions. | ||||||
| @@ -1603,7 +1603,7 @@ Release:     raylib 1.0.6 (16 March 2014) | |||||||
| [core] Removed unused lighting-system code | [core] Removed unused lighting-system code | ||||||
| [core] Removed SetPerspective() function, calculated directly | [core] Removed SetPerspective() function, calculated directly | ||||||
| [core] Unload and reload default font on fullscreen toggle | [core] Unload and reload default font on fullscreen toggle | ||||||
| [core] Corrected bug gamepad buttons checking if no gamepad available  | [core] Corrected bug gamepad buttons checking if no gamepad available | ||||||
| [texture] DrawTextureV() - Added, to draw using Vector2 for position | [texture] DrawTextureV() - Added, to draw using Vector2 for position | ||||||
| [texture] LoadTexture() - Redesigned, now uses LoadImage() + CreateTexture() | [texture] LoadTexture() - Redesigned, now uses LoadImage() + CreateTexture() | ||||||
| [text] FormatText() - Corrected memory leak bug | [text] FormatText() - Corrected memory leak bug | ||||||
| @@ -1619,7 +1619,7 @@ Update:     raylib 1.0.5 (28 January 2014) | |||||||
| [core] GetMouseWheelMove() - Added, check mouse wheel Y movement | [core] GetMouseWheelMove() - Added, check mouse wheel Y movement | ||||||
| [texture] CreateTexture2D() renamed to CreateTexture() | [texture] CreateTexture2D() renamed to CreateTexture() | ||||||
| [models] LoadHeightmap() - Added, Heightmap can be loaded as a Model | [models] LoadHeightmap() - Added, Heightmap can be loaded as a Model | ||||||
| [tool] rREM updated, now supports (partially) drag and drop of files  | [tool] rREM updated, now supports (partially) drag and drop of files | ||||||
|  |  | ||||||
| ----------------------------------------------- | ----------------------------------------------- | ||||||
| Release:     raylib 1.0.4 (23 January 2014) | Release:     raylib 1.0.4 (23 January 2014) | ||||||
|   | |||||||
| @@ -36,11 +36,11 @@ int main(void) | |||||||
|     const int screenHeight = 450; |     const int screenHeight = 450; | ||||||
|  |  | ||||||
|     InitWindow(screenWidth, screenHeight, "raylib [text] example - codepoints loading"); |     InitWindow(screenWidth, screenHeight, "raylib [text] example - codepoints loading"); | ||||||
|      |  | ||||||
|     // Get codepoints from text |     // Get codepoints from text | ||||||
|     int codepointCount = 0; |     int codepointCount = 0; | ||||||
|     int *codepoints = LoadCodepoints(text, &codepointCount); |     int *codepoints = LoadCodepoints(text, &codepointCount); | ||||||
|      |  | ||||||
|     // Removed duplicate codepoints to generate smaller font atlas |     // Removed duplicate codepoints to generate smaller font atlas | ||||||
|     int codepointsNoDupsCount = 0; |     int codepointsNoDupsCount = 0; | ||||||
|     int *codepointsNoDups = CodepointRemoveDuplicates(codepoints, codepointCount, &codepointsNoDupsCount); |     int *codepointsNoDups = CodepointRemoveDuplicates(codepoints, codepointCount, &codepointsNoDupsCount); | ||||||
| @@ -49,13 +49,13 @@ int main(void) | |||||||
|     // Load font containing all the provided codepoint glyphs |     // Load font containing all the provided codepoint glyphs | ||||||
|     // A texture font atlas is automatically generated |     // A texture font atlas is automatically generated | ||||||
|     Font font = LoadFontEx("resources/DotGothic16-Regular.ttf", 36, codepointsNoDups, codepointsNoDupsCount); |     Font font = LoadFontEx("resources/DotGothic16-Regular.ttf", 36, codepointsNoDups, codepointsNoDupsCount); | ||||||
|      |  | ||||||
|     // Set bilinear scale filter for better font scaling |     // Set bilinear scale filter for better font scaling | ||||||
|     SetTextureFilter(font.texture, TEXTURE_FILTER_BILINEAR); |     SetTextureFilter(font.texture, TEXTURE_FILTER_BILINEAR); | ||||||
|  |  | ||||||
|     // Free codepoints, atlas has already been generated |     // Free codepoints, atlas has already been generated | ||||||
|     free(codepointsNoDups); |     free(codepointsNoDups); | ||||||
|     |  | ||||||
|     bool showFontAtlas = false; |     bool showFontAtlas = false; | ||||||
|  |  | ||||||
|     SetTargetFPS(60);               // Set our game to run at 60 frames-per-second |     SetTargetFPS(60);               // Set our game to run at 60 frames-per-second | ||||||
| @@ -74,7 +74,7 @@ int main(void) | |||||||
|         BeginDrawing(); |         BeginDrawing(); | ||||||
|  |  | ||||||
|             ClearBackground(RAYWHITE); |             ClearBackground(RAYWHITE); | ||||||
|              |  | ||||||
|             DrawRectangle(0, 0, GetScreenWidth(), 70, BLACK); |             DrawRectangle(0, 0, GetScreenWidth(), 70, BLACK); | ||||||
|             DrawText(TextFormat("Total codepoints contained in provided text: %i", codepointCount), 10, 10, 20, GREEN); |             DrawText(TextFormat("Total codepoints contained in provided text: %i", codepointCount), 10, 10, 20, GREEN); | ||||||
|             DrawText(TextFormat("Total codepoints required for font atlas (duplicates excluded): %i", codepointsNoDupsCount), 10, 40, 20, GREEN); |             DrawText(TextFormat("Total codepoints required for font atlas (duplicates excluded): %i", codepointsNoDupsCount), 10, 40, 20, GREEN); | ||||||
| @@ -90,20 +90,20 @@ int main(void) | |||||||
|                 // Draw provided text with laoded font, containing all required codepoint glyphs |                 // Draw provided text with laoded font, containing all required codepoint glyphs | ||||||
|                 DrawTextEx(font, text, (Vector2) { 160, 110 }, 48, 5, BLACK); |                 DrawTextEx(font, text, (Vector2) { 160, 110 }, 48, 5, BLACK); | ||||||
|             } |             } | ||||||
|              |  | ||||||
|             DrawText("Press SPACE to toggle font atlas view!", 10, GetScreenHeight() - 30, 20, GRAY); |             DrawText("Press SPACE to toggle font atlas view!", 10, GetScreenHeight() - 30, 20, GRAY); | ||||||
|  |  | ||||||
|         EndDrawing(); |         EndDrawing(); | ||||||
|         //---------------------------------------------------------------------------------- |         //---------------------------------------------------------------------------------- | ||||||
|     } |     } | ||||||
|      |  | ||||||
|     // De-Initialization |     // De-Initialization | ||||||
|     //-------------------------------------------------------------------------------------- |     //-------------------------------------------------------------------------------------- | ||||||
|     UnloadFont(font);     // Unload font |     UnloadFont(font);     // Unload font | ||||||
|      |  | ||||||
|     CloseWindow();        // Close window and OpenGL context |     CloseWindow();        // Close window and OpenGL context | ||||||
|     //-------------------------------------------------------------------------------------- |     //-------------------------------------------------------------------------------------- | ||||||
|      |  | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -130,9 +130,9 @@ static int *CodepointRemoveDuplicates(int *codepoints, int codepointCount, int * | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // NOTE: The size of codepointsNoDups is the same as original array but  |     // NOTE: The size of codepointsNoDups is the same as original array but | ||||||
|     // only required positions are filled (codepointsNoDupsCount) |     // only required positions are filled (codepointsNoDupsCount) | ||||||
|      |  | ||||||
|     *codepointsResultCount = codepointsNoDupsCount; |     *codepointsResultCount = codepointsNoDupsCount; | ||||||
|     return codepointsNoDups; |     return codepointsNoDups; | ||||||
| } | } | ||||||
| @@ -17,7 +17,7 @@ | |||||||
|  |  | ||||||
| #define MAP_TILE_SIZE    32         // Tiles size 32x32 pixels | #define MAP_TILE_SIZE    32         // Tiles size 32x32 pixels | ||||||
| #define PLAYER_SIZE      16         // Player size | #define PLAYER_SIZE      16         // Player size | ||||||
| #define PLAYER_TILE_VISIBILITY  2   // Player can see 2 tiles around its position  | #define PLAYER_TILE_VISIBILITY  2   // Player can see 2 tiles around its position | ||||||
|  |  | ||||||
| // Map data type | // Map data type | ||||||
| typedef struct Map { | typedef struct Map { | ||||||
| @@ -38,26 +38,26 @@ int main(void) | |||||||
|     int screenHeight = 450; |     int screenHeight = 450; | ||||||
|  |  | ||||||
|     InitWindow(screenWidth, screenHeight, "raylib [textures] example - fog of war"); |     InitWindow(screenWidth, screenHeight, "raylib [textures] example - fog of war"); | ||||||
|     |  | ||||||
|     Map map = { 0 }; |     Map map = { 0 }; | ||||||
|     map.tilesX = 25; |     map.tilesX = 25; | ||||||
|     map.tilesY = 15; |     map.tilesY = 15; | ||||||
|      |  | ||||||
|     // NOTE: We can have up to 256 values for tile ids and for tile fog state, |     // NOTE: We can have up to 256 values for tile ids and for tile fog state, | ||||||
|     // probably we don't need that many values for fog state, it can be optimized |     // probably we don't need that many values for fog state, it can be optimized | ||||||
|     // to use only 2 bits per fog state (reducing size by 4) but logic will be a bit more complex |     // to use only 2 bits per fog state (reducing size by 4) but logic will be a bit more complex | ||||||
|     map.tileIds = (unsigned char *)calloc(map.tilesX*map.tilesY, sizeof(unsigned char)); |     map.tileIds = (unsigned char *)calloc(map.tilesX*map.tilesY, sizeof(unsigned char)); | ||||||
|     map.tileFog = (unsigned char *)calloc(map.tilesX*map.tilesY, sizeof(unsigned char)); |     map.tileFog = (unsigned char *)calloc(map.tilesX*map.tilesY, sizeof(unsigned char)); | ||||||
|      |  | ||||||
|     // Load map tiles (generating 2 random tile ids for testing) |     // Load map tiles (generating 2 random tile ids for testing) | ||||||
|     // NOTE: Map tile ids should be probably loaded from an external map file |     // NOTE: Map tile ids should be probably loaded from an external map file | ||||||
|     for (int i = 0; i < map.tilesY*map.tilesX; i++) map.tileIds[i] = GetRandomValue(0, 1); |     for (int i = 0; i < map.tilesY*map.tilesX; i++) map.tileIds[i] = GetRandomValue(0, 1); | ||||||
|      |  | ||||||
|     // Player position on the screen (pixel coordinates, not tile coordinates) |     // Player position on the screen (pixel coordinates, not tile coordinates) | ||||||
|     Vector2 playerPosition = { 180, 130 }; |     Vector2 playerPosition = { 180, 130 }; | ||||||
|     int playerTileX = 0; |     int playerTileX = 0; | ||||||
|     int playerTileY = 0; |     int playerTileY = 0; | ||||||
|      |  | ||||||
|     // Render texture to render fog of war |     // Render texture to render fog of war | ||||||
|     // NOTE: To get an automatic smooth-fog effect we use a render texture to render fog |     // NOTE: To get an automatic smooth-fog effect we use a render texture to render fog | ||||||
|     // at a smaller size (one pixel per tile) and scale it on drawing with bilinear filtering |     // at a smaller size (one pixel per tile) and scale it on drawing with bilinear filtering | ||||||
| @@ -77,7 +77,7 @@ int main(void) | |||||||
|         if (IsKeyDown(KEY_LEFT)) playerPosition.x -= 5; |         if (IsKeyDown(KEY_LEFT)) playerPosition.x -= 5; | ||||||
|         if (IsKeyDown(KEY_DOWN)) playerPosition.y += 5; |         if (IsKeyDown(KEY_DOWN)) playerPosition.y += 5; | ||||||
|         if (IsKeyDown(KEY_UP)) playerPosition.y -= 5; |         if (IsKeyDown(KEY_UP)) playerPosition.y -= 5; | ||||||
|          |  | ||||||
|         // Check player position to avoid moving outside tilemap limits |         // Check player position to avoid moving outside tilemap limits | ||||||
|         if (playerPosition.x < 0) playerPosition.x = 0; |         if (playerPosition.x < 0) playerPosition.x = 0; | ||||||
|         else if ((playerPosition.x + PLAYER_SIZE) > (map.tilesX*MAP_TILE_SIZE)) playerPosition.x = map.tilesX*MAP_TILE_SIZE - PLAYER_SIZE; |         else if ((playerPosition.x + PLAYER_SIZE) > (map.tilesX*MAP_TILE_SIZE)) playerPosition.x = map.tilesX*MAP_TILE_SIZE - PLAYER_SIZE; | ||||||
| @@ -86,11 +86,11 @@ int main(void) | |||||||
|  |  | ||||||
|         // Previous visited tiles are set to partial fog |         // Previous visited tiles are set to partial fog | ||||||
|         for (int i = 0; i < map.tilesX*map.tilesY; i++) if (map.tileFog[i] == 1) map.tileFog[i] = 2; |         for (int i = 0; i < map.tilesX*map.tilesY; i++) if (map.tileFog[i] == 1) map.tileFog[i] = 2; | ||||||
|          |  | ||||||
|         // Get current tile position from player pixel position |         // Get current tile position from player pixel position | ||||||
|         playerTileX = (int)((playerPosition.x + MAP_TILE_SIZE/2)/MAP_TILE_SIZE); |         playerTileX = (int)((playerPosition.x + MAP_TILE_SIZE/2)/MAP_TILE_SIZE); | ||||||
|         playerTileY = (int)((playerPosition.y + MAP_TILE_SIZE/2)/MAP_TILE_SIZE); |         playerTileY = (int)((playerPosition.y + MAP_TILE_SIZE/2)/MAP_TILE_SIZE); | ||||||
|          |  | ||||||
|         // Check visibility and update fog |         // Check visibility and update fog | ||||||
|         // NOTE: We check tilemap limits to avoid processing tiles out-of-array-bounds (it could crash program) |         // NOTE: We check tilemap limits to avoid processing tiles out-of-array-bounds (it could crash program) | ||||||
|         for (int y = (playerTileY - PLAYER_TILE_VISIBILITY); y < (playerTileY + PLAYER_TILE_VISIBILITY); y++) |         for (int y = (playerTileY - PLAYER_TILE_VISIBILITY); y < (playerTileY + PLAYER_TILE_VISIBILITY); y++) | ||||||
| @@ -108,31 +108,31 @@ int main(void) | |||||||
|                     if (map.tileFog[y*map.tilesX + x] == 0) DrawRectangle(x, y, 1, 1, BLACK); |                     if (map.tileFog[y*map.tilesX + x] == 0) DrawRectangle(x, y, 1, 1, BLACK); | ||||||
|                     else if (map.tileFog[y*map.tilesX + x] == 2) DrawRectangle(x, y, 1, 1, Fade(BLACK, 0.8f)); |                     else if (map.tileFog[y*map.tilesX + x] == 2) DrawRectangle(x, y, 1, 1, Fade(BLACK, 0.8f)); | ||||||
|         EndTextureMode(); |         EndTextureMode(); | ||||||
|          |  | ||||||
|         BeginDrawing(); |         BeginDrawing(); | ||||||
|  |  | ||||||
|             ClearBackground(RAYWHITE); |             ClearBackground(RAYWHITE); | ||||||
|              |  | ||||||
|             for (int y = 0; y < map.tilesY; y++) |             for (int y = 0; y < map.tilesY; y++) | ||||||
|             { |             { | ||||||
|                 for (int x = 0; x < map.tilesX; x++) |                 for (int x = 0; x < map.tilesX; x++) | ||||||
|                 { |                 { | ||||||
|                     // Draw tiles from id (and tile borders) |                     // Draw tiles from id (and tile borders) | ||||||
|                     DrawRectangle(x*MAP_TILE_SIZE, y*MAP_TILE_SIZE, MAP_TILE_SIZE, MAP_TILE_SIZE,  |                     DrawRectangle(x*MAP_TILE_SIZE, y*MAP_TILE_SIZE, MAP_TILE_SIZE, MAP_TILE_SIZE, | ||||||
|                                   (map.tileIds[y*map.tilesX + x] == 0)? BLUE : Fade(BLUE, 0.9f)); |                                   (map.tileIds[y*map.tilesX + x] == 0)? BLUE : Fade(BLUE, 0.9f)); | ||||||
|                     DrawRectangleLines(x*MAP_TILE_SIZE, y*MAP_TILE_SIZE, MAP_TILE_SIZE, MAP_TILE_SIZE, Fade(DARKBLUE, 0.5f)); |                     DrawRectangleLines(x*MAP_TILE_SIZE, y*MAP_TILE_SIZE, MAP_TILE_SIZE, MAP_TILE_SIZE, Fade(DARKBLUE, 0.5f)); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|              |  | ||||||
|             // Draw player |             // Draw player | ||||||
|             DrawRectangleV(playerPosition, (Vector2){ PLAYER_SIZE, PLAYER_SIZE }, RED); |             DrawRectangleV(playerPosition, (Vector2){ PLAYER_SIZE, PLAYER_SIZE }, RED); | ||||||
|              |  | ||||||
|              |  | ||||||
|             // Draw fog of war (scaled to full map, bilinear filtering) |             // Draw fog of war (scaled to full map, bilinear filtering) | ||||||
|             DrawTexturePro(fogOfWar.texture, (Rectangle){ 0, 0, fogOfWar.texture.width, -fogOfWar.texture.height },  |             DrawTexturePro(fogOfWar.texture, (Rectangle){ 0, 0, fogOfWar.texture.width, -fogOfWar.texture.height }, | ||||||
|                            (Rectangle){ 0, 0, map.tilesX*MAP_TILE_SIZE, map.tilesY*MAP_TILE_SIZE },  |                            (Rectangle){ 0, 0, map.tilesX*MAP_TILE_SIZE, map.tilesY*MAP_TILE_SIZE }, | ||||||
|                            (Vector2){ 0, 0 }, 0.0f, WHITE); |                            (Vector2){ 0, 0 }, 0.0f, WHITE); | ||||||
|              |  | ||||||
|             // Draw player current tile |             // Draw player current tile | ||||||
|             DrawText(TextFormat("Current tile: [%i,%i]", playerTileX, playerTileY), 10, 10, 20, LIME); |             DrawText(TextFormat("Current tile: [%i,%i]", playerTileX, playerTileY), 10, 10, 20, LIME); | ||||||
|  |  | ||||||
| @@ -146,7 +146,7 @@ int main(void) | |||||||
|     free(map.tileFog);      // Free allocated map tile fog state |     free(map.tileFog);      // Free allocated map tile fog state | ||||||
|  |  | ||||||
|     UnloadRenderTexture(fogOfWar);  // Unload render texture |     UnloadRenderTexture(fogOfWar);  // Unload render texture | ||||||
|      |  | ||||||
|     CloseWindow();          // Close window and OpenGL context |     CloseWindow();          // Close window and OpenGL context | ||||||
|     //-------------------------------------------------------------------------------------- |     //-------------------------------------------------------------------------------------- | ||||||
|  |  | ||||||
|   | |||||||
| @@ -27,22 +27,22 @@ int main(void) | |||||||
|     const int screenHeight = 450; |     const int screenHeight = 450; | ||||||
|  |  | ||||||
|     InitWindow(screenWidth, screenHeight, "raylib [textures] example - gif playing"); |     InitWindow(screenWidth, screenHeight, "raylib [textures] example - gif playing"); | ||||||
|      |  | ||||||
|     int animFrames = 0; |     int animFrames = 0; | ||||||
|      |  | ||||||
|     // Load all GIF animation frames into a single Image |     // Load all GIF animation frames into a single Image | ||||||
|     // NOTE: GIF data is always loaded as RGBA (32bit) by default |     // NOTE: GIF data is always loaded as RGBA (32bit) by default | ||||||
|     // NOTE: Frames are just appended one after another in image.data memory |     // NOTE: Frames are just appended one after another in image.data memory | ||||||
|     Image imScarfyAnim = LoadImageAnim("resources/scarfy_run.gif", &animFrames); |     Image imScarfyAnim = LoadImageAnim("resources/scarfy_run.gif", &animFrames); | ||||||
|      |  | ||||||
|     // Load texture from image |     // Load texture from image | ||||||
|     // NOTE: We will update this texture when required with next frame data |     // NOTE: We will update this texture when required with next frame data | ||||||
|     // WARNING: It's not recommended to use this technique for sprites animation, |     // WARNING: It's not recommended to use this technique for sprites animation, | ||||||
|     // use spritesheets instead, like illustrated in textures_sprite_anim example |     // use spritesheets instead, like illustrated in textures_sprite_anim example | ||||||
|     Texture2D texScarfyAnim = LoadTextureFromImage(imScarfyAnim); |     Texture2D texScarfyAnim = LoadTextureFromImage(imScarfyAnim); | ||||||
|      |  | ||||||
|     unsigned int nextFrameDataOffset = 0;  // Current byte offset to next frame in image.data |     unsigned int nextFrameDataOffset = 0;  // Current byte offset to next frame in image.data | ||||||
|      |  | ||||||
|     int currentAnimFrame = 0;       // Current animation frame to load and draw |     int currentAnimFrame = 0;       // Current animation frame to load and draw | ||||||
|     int frameDelay = 8;             // Frame delay to switch between animation frames |     int frameDelay = 8;             // Frame delay to switch between animation frames | ||||||
|     int frameCounter = 0;           // General frames counter |     int frameCounter = 0;           // General frames counter | ||||||
| @@ -56,23 +56,23 @@ int main(void) | |||||||
|         // Update |         // Update | ||||||
|         //---------------------------------------------------------------------------------- |         //---------------------------------------------------------------------------------- | ||||||
|         frameCounter++; |         frameCounter++; | ||||||
|         if (frameCounter >= frameDelay)  |         if (frameCounter >= frameDelay) | ||||||
|         { |         { | ||||||
|             // Move to next frame |             // Move to next frame | ||||||
|             // NOTE: If final frame is reached we return to first frame |             // NOTE: If final frame is reached we return to first frame | ||||||
|             currentAnimFrame++; |             currentAnimFrame++; | ||||||
|             if (currentAnimFrame >= animFrames) currentAnimFrame = 0; |             if (currentAnimFrame >= animFrames) currentAnimFrame = 0; | ||||||
|          |  | ||||||
|             // Get memory offset position for next frame data in image.data |             // Get memory offset position for next frame data in image.data | ||||||
|             nextFrameDataOffset = imScarfyAnim.width*imScarfyAnim.height*4*currentAnimFrame; |             nextFrameDataOffset = imScarfyAnim.width*imScarfyAnim.height*4*currentAnimFrame; | ||||||
|              |  | ||||||
|             // Update GPU texture data with next frame image data |             // Update GPU texture data with next frame image data | ||||||
|             // WARNING: Data size (frame size) and pixel format must match already created texture |             // WARNING: Data size (frame size) and pixel format must match already created texture | ||||||
|             UpdateTexture(texScarfyAnim, ((unsigned char *)imScarfyAnim.data) + nextFrameDataOffset); |             UpdateTexture(texScarfyAnim, ((unsigned char *)imScarfyAnim.data) + nextFrameDataOffset); | ||||||
|              |  | ||||||
|             frameCounter = 0; |             frameCounter = 0; | ||||||
|         } |         } | ||||||
|          |  | ||||||
|         // Control frames delay |         // Control frames delay | ||||||
|         if (IsKeyPressed(KEY_RIGHT)) frameDelay++; |         if (IsKeyPressed(KEY_RIGHT)) frameDelay++; | ||||||
|         else if (IsKeyPressed(KEY_LEFT)) frameDelay--; |         else if (IsKeyPressed(KEY_LEFT)) frameDelay--; | ||||||
| @@ -90,7 +90,7 @@ int main(void) | |||||||
|             DrawText(TextFormat("TOTAL GIF FRAMES:  %02i", animFrames), 50, 30, 20, LIGHTGRAY); |             DrawText(TextFormat("TOTAL GIF FRAMES:  %02i", animFrames), 50, 30, 20, LIGHTGRAY); | ||||||
|             DrawText(TextFormat("CURRENT FRAME: %02i", currentAnimFrame), 50, 60, 20, GRAY); |             DrawText(TextFormat("CURRENT FRAME: %02i", currentAnimFrame), 50, 60, 20, GRAY); | ||||||
|             DrawText(TextFormat("CURRENT FRAME IMAGE.DATA OFFSET: %02i", nextFrameDataOffset), 50, 90, 20, GRAY); |             DrawText(TextFormat("CURRENT FRAME IMAGE.DATA OFFSET: %02i", nextFrameDataOffset), 50, 90, 20, GRAY); | ||||||
|              |  | ||||||
|             DrawText("FRAMES DELAY: ", 100, 305, 10, DARKGRAY); |             DrawText("FRAMES DELAY: ", 100, 305, 10, DARKGRAY); | ||||||
|             DrawText(TextFormat("%02i frames", frameDelay), 620, 305, 10, DARKGRAY); |             DrawText(TextFormat("%02i frames", frameDelay), 620, 305, 10, DARKGRAY); | ||||||
|             DrawText("PRESS RIGHT/LEFT KEYS to CHANGE SPEED!", 290, 350, 10, DARKGRAY); |             DrawText("PRESS RIGHT/LEFT KEYS to CHANGE SPEED!", 290, 350, 10, DARKGRAY); | ||||||
| @@ -113,7 +113,7 @@ int main(void) | |||||||
|     //-------------------------------------------------------------------------------------- |     //-------------------------------------------------------------------------------------- | ||||||
|     UnloadTexture(texScarfyAnim);   // Unload texture |     UnloadTexture(texScarfyAnim);   // Unload texture | ||||||
|     UnloadImage(imScarfyAnim);      // Unload image (contains all frames) |     UnloadImage(imScarfyAnim);      // Unload image (contains all frames) | ||||||
|      |  | ||||||
|     CloseWindow();                  // Close window and OpenGL context |     CloseWindow();                  // Close window and OpenGL context | ||||||
|     //-------------------------------------------------------------------------------------- |     //-------------------------------------------------------------------------------------- | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Ray
					Ray