Skip to content

Commit

Permalink
Add textures raw data example
Browse files Browse the repository at this point in the history
  • Loading branch information
wilsonsilva committed Oct 24, 2023
1 parent c77467a commit a5df771
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 0 deletions.
1 change: 1 addition & 0 deletions examples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,4 +102,5 @@ Examples using raylib textures functionality, including image/textures loading/g
| 52 | [textures_image_processing](textures/textures_image_processing.rb) | <img src="textures/textures_image_processing.png" alt="textures_image_processing" width="80"> | ⭐️⭐️⭐️☆ | 1.4 | 3.5 | [Ray](https://github.com/raysan5) |
| 53 | [textures_image_text](textures/textures_image_text.rb) | <img src="textures/textures_image_text.png" alt="textures_image_text" width="80"> | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Ray](https://github.com/raysan5) |
| 54 | [textures_to_image](textures/textures_to_image.rb) | <img src="textures/textures_to_image.png" alt="textures_to_image" width="80"> | ⭐️☆☆☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) |
| 55 | [textures_raw_data](textures/textures_raw_data.rb) | <img src="textures/textures_raw_data.png" alt="textures_raw_data" width="80"> | ⭐️⭐️⭐️☆ | 1.3 | 3.5 | [Ray](https://github.com/raysan5) |
| 58 | [textures_background_scrolling](textures/textures_background_scrolling.rb) | <img src="textures/textures_background_scrolling.png" alt="textures_background_scrolling" width="80"> | ⭐️☆☆☆ | 2.0 | 2.5 | [Ray](https://github.com/raysan5) |
Binary file added examples/textures/resources/fudesumi.raw
Binary file not shown.
Binary file added examples/textures/textures_raw_data.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
87 changes: 87 additions & 0 deletions examples/textures/textures_raw_data.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# ******************************************************************************************
#
# raylib [textures] example - Load textures from raw data
#
# NOTE: Images are loaded in CPU memory (RAM); textures are loaded in GPU memory (VRAM)
#
# Example originally created with raylib 1.3, last time updated with raylib 3.5
#
# Example ported to Ruby by Wilson Silva (@wilsonsilva). Works with Raylib 4.5
#
# Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
# BSD-like license that allows static linking with closed source software
#
# Copyright (c) 2015-2023 Ramon Santamaria (@raysan5)
#
# ******************************************************************************************

require 'bundler/setup'
require 'raylib'

# Initialization
# --------------------------------------------------------------------------------------
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 450

Raylib.init_window(SCREEN_WIDTH, SCREEN_HEIGHT, 'raylib [textures] example - texture from raw data')

# NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required)

# Load RAW image data (512x512, 32bit RGBA, no file header)
fudesumi_raw = Raylib.load_image_raw(File.join(__dir__, 'resources/fudesumi.raw'), 384, 512, Raylib::PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, 0)
fudesumi = Raylib.load_texture_from_image(fudesumi_raw) # Upload CPU (RAM) image to GPU (VRAM)
Raylib.unload_image(fudesumi_raw)

# Generate a checked texture by code
width = 960
height = 480

# Dynamic memory allocation to store pixels data (Color type)
pixels_data = Array.new(width * height) do |i|
x, y = i % width, i / width
color = ((x/32 + y/32)/1) % 2 == 0 ? Raylib::ORANGE : Raylib::GOLD
[color.r, color.g, color.b, color.a]
end.flatten

# Convert the array to a pointer
pixels = FFI::MemoryPointer.new(:uchar, width * height * 4)
pixels.put_array_of_uchar(0, pixels_data)

# Load pixels data into an image structure and create texture
checked_im = Raylib::Image.create(
pixels, # We can assign pixels directly to data
width,
height,
1,
Raylib::PIXELFORMAT_UNCOMPRESSED_R8G8B8A8
)
checked = Raylib.load_texture_from_image(checked_im)
Raylib.unload_image(checked_im) # Unload CPU (RAM) image data (pixels)
# --------------------------------------------------------------------------------------

# Main game loop
until Raylib.window_should_close
# Draw
# ----------------------------------------------------------------------------------
Raylib.begin_drawing
Raylib.clear_background(Raylib::RAYWHITE)

Raylib.draw_texture(checked, SCREEN_WIDTH/2 - checked.width/2, SCREEN_HEIGHT/2 - checked.height/2, Raylib.fade(Raylib::WHITE, 0.5))
Raylib.draw_texture(fudesumi, 430, -30, Raylib::WHITE)

Raylib.draw_text('CHECKED TEXTURE ', 84, 85, 30, Raylib::BROWN)
Raylib.draw_text('GENERATED by CODE', 72, 148, 30, Raylib::BROWN)
Raylib.draw_text('and RAW IMAGE LOADING', 46, 210, 30, Raylib::BROWN)

Raylib.draw_text('(c) Fudesumi sprite by Eiden Marsal', 310, SCREEN_HEIGHT - 20, 10, Raylib::BROWN)

Raylib.end_drawing
# ----------------------------------------------------------------------------------
end

# De-Initialization
# --------------------------------------------------------------------------------------
Raylib.unload_texture(fudesumi) # Texture unloading
Raylib.unload_texture(checked) # Texture unloading
Raylib.close_window # Close window and OpenGL context
# --------------------------------------------------------------------------------------

0 comments on commit a5df771

Please sign in to comment.