summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBerke Güzel <wenekar1@gmail.com>2026-10-13 16:25:52 +0300
committerBerke Güzel <wenekar1@gmail.com>2026-10-13 16:25:52 +0300
commit3c39c55676162f83ed2eaf2fee3ec41254abc638 (patch)
treea0b90cea96459c6b03b85b9fbfeb2458e28782f6
parented963bba0b234d52fda14b2a8237dbf02ef4d655 (diff)
Fill the hello window with an RGB gradient
Red grows to the right, green downward, and blue fades as red grows. Rows now step by the frame's stride_bytes instead of assuming packed pixels. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
-rw-r--r--docs/getting-started.md4
-rw-r--r--examples/hello.c13
2 files changed, 12 insertions, 5 deletions
diff --git a/docs/getting-started.md b/docs/getting-started.md
index 906d425..73af4ab 100644
--- a/docs/getting-started.md
+++ b/docs/getting-started.md
@@ -39,8 +39,8 @@ CPU pixel targets are presented through the system's Metal device; applications
do not need to create or manage that device themselves.
The complete beginner example is [hello.c](../examples/hello.c). It lets
-`yasl_run()` create its window from `yasl_app_desc.window`, fills every pixel,
-and presents inside a frame callback.
+`yasl_run()` create its window from `yasl_app_desc.window`, fills every pixel
+with an RGB gradient, and presents inside a frame callback.
`yasl_run()` handles input delivery, display notifications, and cleanup. The
[interactive window](../examples/simple_window.c) adds pointer input; the
[tablet example](../examples/tablet.c) demonstrates retained application content,
diff --git a/examples/hello.c b/examples/hello.c
index 38a0cac..4c171ec 100644
--- a/examples/hello.c
+++ b/examples/hello.c
@@ -6,9 +6,16 @@ static bool failed;
static void draw(void *ud, struct yasl_surface *surface, struct yasl_frame_context *frame)
{
(void)ud;
- size_t count = (size_t)frame->size.x * frame->size.y;
- for (size_t i = 0; i < count; i++)
- frame->cpu.pixels[i] = 0xff306090; /* Opaque premultiplied ARGB. */
+ int w = frame->size.x, h = frame->size.y;
+ for (int y = 0; y < h; y++) {
+ uint32_t *row = frame->cpu.pixels + (size_t)y * (frame->cpu.stride_bytes / 4);
+ for (int x = 0; x < w; x++) {
+ /* Red grows rightward, green downward, blue fades; opaque premultiplied ARGB. */
+ uint32_t r = (uint32_t)(x * 255 / (w > 1 ? w - 1 : 1));
+ uint32_t g = (uint32_t)(y * 255 / (h > 1 ? h - 1 : 1));
+ row[x] = 0xff000000 | r << 16 | g << 8 | (255 - r);
+ }
+ }
if (!yasl_frame_present_cpu(frame, NULL, 0)) {
fprintf(stderr, "Could not present the draw target\n");