대충 그림판 게임을 어떻게 구현할지 고민하고 있었던 나

1. 타일맵 엄청 작게 하기 -> 답도 없는 오버헤드, 기각
2. image를 픽셀 단위로 다루고 imagetexture로 화면에 표시 -> 텍스쳐 업데이트가 엄청난 리소스를 잡아먹어서 느려짐, 기각

3. shader, 기타 등등의 복잡한 방법 -> 복잡한거 싫어하는 미친 뉴비라서 기각


그렇게 모든 걸 포기하고 할복 직전까지 가려던 차에 뭔가 위화감을 느낌

a04424ad2c06782ab47e5a67ee91766dc28ff1ecdaacc7cebf11d5c65cd0d7214902b6c20e804b8afe9325c0f7db

2번 방법에서의 리소스 하마가 이 texture2d.update 메소드임
근데 내가 한 일주일 전쯤에 분명히 image를 만지다가 이런 코드를 쓴 기억이 있었음
그런데 아무리 그 기억을 더듬어봐도 프레임이 확 떨어진다던가 그랬던 적은 없었던거임

그건 환각이었을까... 하면서 texture update 관련해서 구글링을 시작
그리고 발견한 것


https://github.com/godotengine/godot/pull/79771


 
내용은 이미지의 rgb 포맷에 따라 update 퍼포먼스가 다르다는 것
그리고 놀랍게도 alpha값이 있는 rgba류 포맷이 rgb류 포맷보다 평균적으로 5배 빠르다는, 나름대로 충격적인 사실을 알게 되었다...
(3 component보다 4 component가 메모리 정렬에서 더 낫다고 함)



a04424ad2c06782ab47e5a67ee91766dc28ff1ecdaacc7cebf11d4c359d0de21aadd3062b34a19242234122597b8

미친새끼 검거완료

RGB8 포맷을 RGBA8로 바꾸고 다시 실행했다
게이밍노트북에서 표기되는 프레임은 빈 씬에선 5000 이상이었고,
저 이미지 포맷이 RGB8이었을 땐 3~400,
그리고 포맷을 RGBA8로 했을 땐 1800~2000이 나왔다.
여기서 조금 더해서 타이머로 0.05초에 한 번씩으로 갱신 시간을 늘리니 4500~5000 까지 방어가 되었다.

쨌든 이 방법으로 겜을 구현해보려 합니다...
도움을 주셨던 분들께 감사드립니다
그럼 이만