Finish text render test

This commit is contained in:
Nathan McRae 2023-06-16 21:01:59 -07:00
parent deb02fa359
commit 8a16eff9ba
3 changed files with 52 additions and 9 deletions

BIN
FreeSans.ttf Normal file

Binary file not shown.

View File

@ -6,7 +6,7 @@ pub fn build(b: *Builder) void {
exe.setBuildMode(mode);
exe.linkSystemLibrary("SDL2");
exe.linkSystemLibrary("SDL_TTF");
exe.linkSystemLibrary("SDL2_TTF");
exe.linkSystemLibrary("c");
b.default_step.dependOn(&exe.step);

View File

@ -1,11 +1,8 @@
const std = @import("std");
const c = @cImport({
@cInclude("SDL2/SDL.h");
});
const t = @cImport({
@cInclude("SDL/SDL_ttf.h");
@cInclude("SDL.h");
@cInclude("SDL_ttf.h");
});
const assert = @import("std").debug.assert;
@ -36,18 +33,55 @@ pub fn main() !void {
const source_code = @embedFile("GapProbeScan.cs");
const color_result = c.SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
const color_result: c_int = c.SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
if (color_result != 0) {
c.SDL_Log("Unable to set draw color: %d", color_result);
return error.SDLInitializationFailed;
}
const ttf_init_result = t.TTF_Init();
// https://github.com/cirosantilli/cpp-cheat/blob/e52ed4b838e2697d8f44ab5bef3e7a170705d48e/sdl/ttf.c
const ttf_init_result: c_int = c.TTF_Init();
if (ttf_init_result != 0) {
c.SDL_Log("Unable to init TTF: %d", ttf_init_result);
return error.TTFInitializationFailed;
}
defer t.TTF_Quit();
defer c.TTF_Quit();
const text_color: c.SDL_Color = c.SDL_Color {
.r = 0,
.g = 0,
.b = 0,
.a = 255
};
// TODO: can we embed this file?
const font: ?*c.TTF_Font = c.TTF_OpenFont("FreeSans.ttf", 24);
if (font == null) {
const err = c.TTF_GetError();
c.SDL_Log("Unable to load font: %s", err);
return error.TTFFontLoadFailed;
}
const surface: [*c]c.SDL_Surface = c.TTF_RenderText_Solid(font, "Hello, World!", text_color);
if (surface == null) {
c.SDL_Log("Unable to render text");
return error.RenderTextFailed;
}
defer c.SDL_FreeSurface(surface);
const texture: ?*c.SDL_Texture = c.SDL_CreateTextureFromSurface(renderer, surface);
if (texture == null) {
c.SDL_Log("Unable to create texture from surface");
return error.CreateTextureFailed;
}
defer c.SDL_DestroyTexture(texture);
const rect = c.SDL_Rect {
.x = 0,
.y = 0,
.w = surface.*.w,
.h = surface.*.h,
};
// const surface = c.SDL_GetWindowSurface(screen);
@ -153,6 +187,15 @@ pub fn main() !void {
x += 1;
}
// Display text
if (c.SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255) != 0) {
c.SDL_Log("Unable to set draw color");
}
if (c.SDL_RenderCopy(renderer, texture, null, &rect) != 0) {
c.SDL_Log("Unable to render copy");
}
c.SDL_RenderPresent(renderer);
c.SDL_Delay(17);