feat(kotlin-compose): design system + 33 components + gallery_kt + e2e android emulator + scaffolder fixes
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
#pragma once
|
||||
|
||||
// sprite_batch — batched textured quad renderer on top of sokol_gfx.
|
||||
// Single draw call per atlas binding. Issue 0072b runtime gamedev.
|
||||
|
||||
#include "sokol_gfx.h"
|
||||
#include "math2d.h"
|
||||
|
||||
namespace fn::gfx {
|
||||
|
||||
struct SpriteBatch {
|
||||
sg_pipeline pipeline{};
|
||||
sg_buffer vbo{};
|
||||
sg_view current_view{}; // texture view bound this batch
|
||||
sg_sampler sampler{};
|
||||
void* cpu_buffer = nullptr; // Vertex* on heap
|
||||
int cpu_capacity_quads = 0;
|
||||
int cpu_count_quads = 0;
|
||||
float proj[16]{}; // current view-proj matrix (column-major)
|
||||
bool in_pass = false;
|
||||
bool ok = false;
|
||||
};
|
||||
|
||||
// Create the batcher. Allocates CPU buffer + sokol resources. cpu_capacity_quads
|
||||
// caps the per-flush quads (auto-flush when reached). Default 4096.
|
||||
SpriteBatch sprite_batch_create(int cpu_capacity_quads = 4096);
|
||||
void sprite_batch_destroy(SpriteBatch& b);
|
||||
|
||||
// Begin a batch with a column-major 4x4 view-projection.
|
||||
// Call between sg_begin_pass and sg_end_pass.
|
||||
void sprite_batch_begin(SpriteBatch& b, const float view_proj_col_major[16]);
|
||||
|
||||
// Queue one textured quad. dst is the screen rect. src is the UV rect inside the
|
||||
// texture, in pixels (0..image_size). tint multiplies the texture sample.
|
||||
// view must be a sg_view created with sg_make_view({.texture.image = ...}).
|
||||
void sprite_batch_draw(SpriteBatch& b, sg_view view, int img_w, int img_h,
|
||||
fn::math2d::Rect src, fn::math2d::Rect dst,
|
||||
fn::math2d::Color tint = fn::math2d::Color::white());
|
||||
|
||||
// Flush remaining quads.
|
||||
void sprite_batch_end(SpriteBatch& b);
|
||||
|
||||
} // namespace fn::gfx
|
||||
Reference in New Issue
Block a user