본문 바로가기

전체 글

(69)
tag union으로 타입마다 함수 호출하기 pub const SCENE = union(enum) { TITLE: title, SELECT_GAME_MODE: select_game_mode,};pub var scene = SCENE.TITLE;const tags = comptime std.meta.tags(SCENE);inline for (tags.*) |t| {//모든 씬마다 업데이트 호출 std.meta.TagPayload(SCENE, t).update();}//title.update();//select_game_mode.update();위 코드와 같이 장면들의 각 타입을 기입해서 union을 만들어서 tags 함수로 해당 union 모든 태그를 가져온후 루프를 돌려서 그 태그의 해당하는 타입을 TagPayload로 가져와서 u..
zig에서 C 문자열 다루기 const zigString: []const u8 = std.mem.span(c_string);const c_string: [:0]u8 = try allocator.dupeZ(u8, zigString);std.mem.span 함수는 c 문자열에서 c문자열이 0으로 끝나는 지점(길이) 까지 문자열 slice로 변환해줍니다. 이때 같은 메모리 공간을 사용하므로 추가적인 할당은 없습니다.(결과 slice에는 0이 포함되지 않음.) allocator.dupeZ 함수는 zig string(위에 말했던 slice 문자열)을 0으로 끝나는 c_string으로 변환해줍니다. 이때는 뒤에 0이 들어갈 공간이 있어야 하기 때문에 길이+1만큼 메모리를 할당해서 복사해서 줍니다.
2024/10/10 엑박패드 입력 일단 windows 만 구현 엑스박스 게임 패드 키/트리거 입력 감지 및 진동을 구현해봤습니다. 원본 코드는 Getting xbox controller input without xinput (github.com) 여기를 참고했는데 DeviceIoContol 함수를 사용해서 로우 입력으로 받는 방식이라 엑스박스 패드 말고도 다른 장치도 사용할수 있게 구조를 만들어봤습니다. 코드는 raw_input.zig__raw_input.zigxbox_pad_input.zigwindows.zig input 이벤트 부분main_input.zig 에서 확인하실수 있습니다. 감사합니다.
2024-10-08 UPDATE #1 vulkan 관련 오류 해결 + 멀티 스레드, 그래픽 구현 부분 리펙토링 등 안녕하세요, 일기 형식으로 써봤습니다. zig game engine project를 개발하면서 이제 2D 그래픽 기능은 어느정도 완성된 상태에서 일지를 처음 쓰는데 이름은 그냥 우연히 zig를 한 몇달전 처음 접하게 되었는데 게임 엔진에 사용할 언어를 zig로 정해서 그렇게 지었습니다. 뭐 그래서 zig가 아니어도 될수도 있지만 현재로써는 아쉬운점이 살짝 있어도 zig가 만족스럽네요. 암튼 이번에 수정한 내용은 제가 한 2~3일동안 계속 고민하다가 제대로 된 커밋도 못하고 그래서 지금 제 머리속에서도 잘 정리가 안돼 있는데..ㅎㅎ 크게 나눠보면 1. Vulkan 관련 디바이스 로스트 오류 해결2. 멀티 스레드 구현, 안정화3. 윈도우 사이즈 조절할때 동작 구현4. 안드로이드 환경에서 화면 회전할 때 동작..
CMake 로 빌드 할 수 있는 Lua(링크) lua는 기본적으로 빌드시 CMake 를 지원하지 않기 때문에 CMake 지원을 추가한 깃허브 레포가 있어 공유합니다.walterschell/Lua: CMake based build of Lua (5.4.6 and 5.3.3) (github.com)
Lua : 다른 언어와 연동시 print로 문자열 안나올때 직접 출력 함수 연결하기 lua의 경우 다른 언어 보통 C랑 연동할때 print로 출력할 경우 기본적으로 stdout에 써지도록 되어있지만 저처럼 그걸 바꾸고 싶을때는 라이브러리 코드를 살짝 고치고 빌드 해주면 됩니다. lauxlib.h 에서extern size_t lua_writestring(const void* ptr, size_t size);/* print a newline and flush the output */#if !defined(lua_writeline)//#define lua_writeline() (lua_writestring("\n", 1), fflush(stdout))#define lua_writeline() lua_writestring("\n", 1)#endif/* print an ..
정규식 특정 문장을 검색해서 대체하는 방법(VSCode 에서) () 괄호는 그룹화나 캡쳐를 할 수 있다. 그리고 (.*)는 특정위치의 모든종류의 문장 캡쳐가 가능하다. -> *는 0번 또는 임의의 갯수 만큼 반 ,+는 1번 또는 그 이상 반복그리고 치환해야 할때는 캡쳐된 부분을 $1,$2...로 구분하여 안녕하세요 반갑습니다/안녕하세요 (.+)/g 를 적용하여 "반갑습니다" 찾기그리고 $1 잘가요 를 적용해서 "반갑습니다 잘가요" 문장 만들기  정규식 검색 바꾸기 기능이 필요해서 살짝 공부한 대로 정리했습니다.
임의의 크기 행렬 구현 const std = @import("std");pub const matrix4x4 = matrix(f32, 4, 4);pub const matrix3x3 = matrix(f32, 3, 3);pub const matrix_error = error{not_exist_inverse_matrix};/// row ↕, col ↔pub fn matrix(comptime T: type, row: comptime_int, col: comptime_int) type { switch (@typeInfo(T)) { .Int, .Float, .ComptimeInt, .ComptimeFloat => {}, else => { @compileError("not a number ..