이런걸 만들고 있습니다.

'게임 개발 > Unity' 카테고리의 다른 글

기록 #2  (0) 2020.05.09
Rect Transform 잠깐 메모  (0) 2020.02.09
분명 자주 쓰는데 자주 까먹는 기능들  (0) 2019.12.27

지금은 학원 팀 프로젝트 기간이다.

 

프로젝트가 열심히 난항을 겪고 있지만 (...) 뭐 아무래도 좋다는 느낌으로 작업중이었는데,

 

다른 팀의 인원과 대화하다가 문득 메모리 관리 얘기가 나왔던게 아닌가.

 

'어? 우리팀 한번도 안터졌는데?' 라는 생각과 동시에 그럴리가 없는데 라는 생각이 같이 드는게 아닌가.

 

그래서, 메모리 누수 분석 코드를 넣고 돌려보았는데...

 

.....

 

사실상 이정도면 모든 호출에서 다 터지는 수준

상상을 초월하는 결과가 나오고 있는게 아닌가..

 

단순히 저 호출단위에, 평균적으로 보이는 120, 384 바이트를 대입하면... 약 3억 6천 바이트, 즉 거의 300메가바이트 언저리의 누수가 발생중이라는 소리가 된다.

 

아니 실행 프로세스 메모리가 250을 안넘는데요

이것도 처참한 상황이지만, 더 심각한건 따로 있었다.

 

특정 메모리 영역에서, 있어서는 안되는 메모리 누수가 발생중이었었다..

 

단일 330KB 누수

아니 무슨 1개 메모리 포인터 누수가...

 

이건 안되겠다 싶어서 팀원들에게 깃 업로드를 전부 중지시키고, 오늘은 하루종일 누수만 잡았다.

 

할당된것도 빼보고, 강제로 셧다운도 시키고, 구역 하나씩 분리해서 해본결과..

 

최소한의 조치

일단... 메인 스테이지에서 메모리 누수는 전부 잡는데 성공했다...

 

하지만 각자가 짠 특수한 구조로 된 영역에서는 여전히 메모리가 줄줄새서....

 

오늘 밤은 일찍 자기 글러먹은거 같다 ㅎ.

'신변잡기 > 일상' 카테고리의 다른 글

PC 카톡은 왜 삭제기능이 없을까...  (0) 2022.11.20
근황  (0) 2022.04.25
올해의 목표  (0) 2021.01.03
근황 2  (0) 2020.10.15
근황  (0) 2020.07.14

git에 특정 조건을 걸어서 메시지등을 출력하는 hook이라는 기능이 있다.

(더 상세한 내용은 이 블로그 말고 다른곳을 검색해보기 바란다)

 

훅을 처음 써보면서, shell script도 제대로 쓸줄몰라 엄청 해멨으나 일단 원하는걸 하나 구현해놨기에 기록해둔다.

 

원하는건 코드 컨벤션을 맞추기 위해 설정한 문구 중

모든 코드 스타일을

void foo()
{
codes;
}

  방식으로 픽스하기 위한 조건이었다.

 

그걸 위해, 검색해서 pre-commit 을 수정해보려고 하니... 에러가 뜬다.

 

error: cannot spawn .git/hooks/pre-commit: No such file or directory

 

대충 이런 문구다.

 

요약하면 pre-commit이라는 hook이 없다는 얘긴데...

 

정확한 이유는 파악하지 못했으나, git 용 hook에 필수적으로 포함되어야 하는 문구들이 있는 모양이었다.

 

해서, 검색을 통해 어떤 문구가 있어야하는지 파악을 해두고, 문구 적용을 시켜보도록 했다.

 

 

 

#단순히 ") {" 스타일이 들어오면 밴 먹임

disallowed="){"


git diff --cached --name-status | while read x file; do
	if ["$x" == 'D']; then continue; fi #뭔 의미지? 'D'가 뭐지?
	
	if grep ')\s{' $file ; then
    echo "ERROR: 코드 스타일 에러입니다."
    exit 1
	fi	
	
	for word in "$disallowed"
	do
	    if egrep $word $file ; then
        echo "ERROR: Disallowed expression \"${word}\" in file: ${file}"
        exit 1
    fi
    done
		
done || exit $?

 

완성된건 이런 스타일인데, 정리하면 다음과 같다.

 

1. disalowed에 "없어야 될 문자열"을 기록한다.

2. git에서 수정된 사항을 읽는다.

3 (은 이해를 못했습니다...)

4. 파일을 전체 검색하며, 조건에 맞는 문자열이 있는지 검사후, 조건에 만족하면 echo  메시지를 띄운 후 에러를 리턴한다.

5. 정상 통과 하면 while문을 종료시키고 끝낸다.

 

의 구조이다.

 

웃긴점은, 이를 좀 "있어보이게" / "다른 사용자들이 큰 수정할 필요없이" 적용을 시키기 위해 core.hooksPath를 수정해줬더니 저 hook 조차 에러를 검사하여 리턴해버리는게 아닌가...

이거 뭔... 제 발등 찍기도 아니고

해서, 이런 경우에는 hookspath를 임의로 수정해준 뒤, 커밋 갱신을 해줘야 하는 소소한 불편함(?)이 발생하고 있다.

 


 

해당 문서를 위해

woowabros.github.io/tools/2017/07/12/git_hook.html

 

훅으로 Git에 훅 들어가기 - 우아한형제들 기술 블로그

들어가며…

woowabros.github.io

singun.github.io/2019/03/16/git-hook-pre-commit/

 

특정 문자열이 커밋되는 것을 막아보자 - Programming Singun

페이스북이나 인스타그림 등의 open api를 사용하기 위해서는 인증을 위한 토큰 값이나 키 값을 사용해야 할 때가 있습니다. 민감할 수 있는 정보라 git 에 커밋하는게 그리 달갑지 않아, 이런 경우

singun.github.io

두 문서를 참고하였습니다. 감사합니다.

사실 원래 좀 적을게 많은데 다 까먹어버렸구 까먹기전에 하나라도 더 적고자...

 

뭐. 학원과정중인데, D3DX - 2DX 때는 스프라이트가 표현을 전부 도와줬지만,

D3DX에서는 원래 버텍스를 세팅하고, 표면을 만들어서 그 위에다 덧 씌우는 식으로 작업이... 되어야 하는데...

 

이게 일단 설명없이 시도해보려고 하니까 되게 막막하더라.

 

일단... 하다가 막혔던것 위주로.

 

1. 선생님! 텍스쳐 입혔는데 텍스쳐가 박살나요!

작업중에 이런 광경을 목격했다.

처음에는 이게 무슨 상황인지 전혀 이해가 안되어서 (분명 Y축값은 전부 0이었다!) 좀 유심히 찾아본결과...

 

단순 Color만 들어가있는 CVERTEX 구조체와, UV가 들어가있는 UVERTEX 구조체의 사이즈가 다른데 VERTEX구조체를 변경했음에도 불구하고 기본 버텍스 사이즈를 변경하지 않아서 생긴 문제였다.

 

뭔 소리냐... 하면...

 

 

이 파트 얘긴데

 

우측 26번줄에서 버텍스 타입을 VTX_TEXTURE (=UVERTEX 구조체) 로 변경했음에도 불구하고 버텍스 사이즈 변수가 여전히 VTX_COLOR (=CVERTEX)로 지정되어있는것이다...

해서, SetStreamSource 할때는 CVERTEX 사이즈로 읽는데, 정작 버퍼에 들어간건 UVERTEX니까 저렇게 엉망진창으로 나올수밖에...

 

 

 

2. 선생님! 텍스쳐를 여러개 넣었는데 하나만 출력돼요!

 

이거는 솔직히 이해가 좀 잘 안됐(고, 아직도 잘 안되)는데...

 

먼저, 2D 시절에 텍스쳐를 그릴때 어떻게 했는지 다시 보고 오자.

 

맨 마지막줄이다.

 

 

CGraphic_Device::Get_Instance()->Get_Sprite()->Draw(pTexInfo->pTexture, nullptr, &D3DXVECTOR3(fCenterX, fCenterY, 0.f), nullptr, D3DCOLOR_ARGB(255, 255, 255, 255));

 

이 말은 즉슨, "장치를 통해 생성된 스프라이트에 크기를 지정해주고, 지정된 텍스쳐를 출력시킨다" 라는 의미.

 

즉, 장치를 이용해서 텍스쳐를 지정해주고 있다는 얘기와 일치... 한다고 볼 수 있을까? (솔직히 확신이 들진 않는다)

 

 

아무튼... 이래서 텍스쳐를 두개 불러왔음에도 불구하고 세팅을 하나만 해주면

 

그냥 처참하게 모든 물체에 같은 텍스쳐가 입혀지게 된다.

 

그래서 어쩌란거냐? 랜더할때 텍스쳐를 매번 지정해줘야 한다는것이다...

 

"아니 선생님, 그러면 매번 엑세스한다고 자원낭비되고 뭐 그런거 없나요?"

 

라는 질문이 들어온다면

 

"애초부터 그러고 있었다" 라는 대답밖에는 나올게 없다...

 

이제와서 깨달은 얘기지만, 랜더 하고 있을때 매번 스프라이트를 지정해주고 있지 않았던가...

 

그럼 뭐, 3D에서도 별 다른건 없다고 생각한다. 역시나 여기서도 텍스쳐를 매번 지정해줘야지

 

 

 

결과물. 이미지가 뒤집힌건 단순히 uv를 잘못준것이다.

 

가끔씩은 이해가 안되더라도 일단 납득부터 하는게 통할때도 있는것 같다...

1. 취업하기

2. 다이어트 끝내기

3. 연애하기

 

뭐 그렇습니다.

 

6개월뒤에 근황 올려볼게요 어떻게 되나. 

'신변잡기 > 일상' 카테고리의 다른 글

근황  (0) 2022.04.25
오늘 있었던 일  (0) 2021.02.01
근황 2  (0) 2020.10.15
근황  (0) 2020.07.14
올해 목표  (0) 2020.05.18

마지막 인덱스 데이터가 와장창

 

작업중, 파일을 불러올때 마지막 줄이 계속 오염이 일어나서 프로그램이 깨지는 현상을 목격함.

 

 

뭔가 했더니 값 읽어오는 >>포인터<< 변수가 데이터 로드 블럭 나가면서 데이터를 오염시켜서 생긴 문제였음.

코드 블럭 나가자마자 nullptr 찍어주는거로 해결.

 

원인 찾는건 조금 걸렸지만 아무튼 간단하게 해결

'프로그래밍 > C/C++' 카테고리의 다른 글

기록용 : 메모리 누수 찾기  (0) 2021.07.18
짧은 기록  (0) 2021.06.18
Const 키워드.  (0) 2020.08.18
오늘의 실수.  (0) 2020.03.29
Visual C++에서 C++ 버전확인하는 방법.  (3) 2020.02.27

제목이 짱 긴데.

 

정확히는

 

"Visual Studio 2017 이후 버전에서 MFCDirectX 9동시에 사용하려고 할 시" 발생하는 문제와, 해결법에 대한 내용입니다.

 

아니 요즘 세상에 아무리 그래도 DX9을 쓴다구요? 할 수도 있는데...

 

네 씁니다. 써요... 네...

 

 

* 해당 문제는 Visual Studio 2017 이후부터 발생합니다. 

 

 

일단, MFC를 사용하지 않고 그냥 DX9를 프로젝트에 임포트 했을때는 정상 작동하는것을 상정하고 이야기를 합니다.

 

MFC 프로젝트를 생성하고, pch.h나 framework.h에 d3d9.h, d3dx9.h를 인클루드 해주고 프로젝트를 빌드 돌리면,

 

정신이 아득해진다...

아마 이런 현상을 목격할 가능성이 큽니다.

 

이 문제는, (정확하진 않으나) 추측상, Windows 10 SDK에 기본 탑재되어있는 DX 10~12 버전과, 임의로 설치한 DX 9 버전간의 충돌로 인해 발생하는 문제로 보입니다.

 

뜬금없이 뭔 충돌이냐? 하겠습니다만... Visual Studio 최신버전, 특히 2019 (v142 MFC)를 사용하는 경우에는 기본 세팅이 Win 10 SDK 기반인지라... 아니 이게 충돌이 왜 나지? 싶은데 충돌이 나더라구요.

 

해결법은 의외로 간단했습니다.

 

* 해당 방식으로 해결이 되지 않는 경우, VS2015를 설치하신 뒤에 해당 버전에 동봉되는 SDK 8.1을 사용하시면 됩니다.

 

1. developer.microsoft.com/ko-kr/windows/downloads/sdk-archive/

 

Windows SDK 아카이브 - Windows 앱 개발

이 비보안 업데이트에는 품질 향상이 포함됩니다. MRMSupport.dll 로드 실패로 인해 개발자가 Windows 7에서 UWP 앱을 빌드하지 못하는 문제를 해결했습니다. MidlRT 및 MDMerge가 Windows 7에서 실행되지 않는

developer.microsoft.com

해당 링크에서 Win SDK 8.1 버전을 다운로드 합니다.

 

2. 설치합니다.

 

3. 원하는 프로젝트에서, 프로젝트 > 속성 > 일반 > Windows SDK 버전을 10.0 에서 8.1로 변경합니다.

 

 

 

이 부분을..
이렇게 바꾸면 됩니다.

 

 

 

SDK 버전을 낮추게 되면, 구문오류는 더이상 발생하지 않고 빌드가 성공하게 됩니다.

 

 

이랬던것이
"아무튼 실행됨" 상태로 바뀝니다.

하지만, 온갖 매크로 재정의 경고문구가 발생하는것으로 봐서는... 이 조차 문제가 발생할 여지가 있어 보입니다.

 

이는 문제 발생시 그때 대응하기로 했습니다... 일단은 경고문구에 나와있다시피 Win 8.1 SDK와 DX9 SDK 간의 충돌이니까요.

1. 학원을 다니기 시작했습니다.

개발적인 능력보다는 뭐가 부족한지를 찾아내고 개선해나가는것을 목표로 삼고 있습니다.

 

2. 미니 프로젝트를 시작했습니다... 만...

저도 바쁘고 같이 작업하는분도 사정이 있어서 진행이 제대로 될런지는... 좀 의문이네요.

 

3. 학원을 다니고, 취업성공패키지 상담을 받으면서 문제점을 하나 파악했습니다.

"작업의 완성도가 떨어진다."

실제로도 이러한 점 때문에 학원 시연회에서 낮은 점수를 받았기도 했구요.

업무를 진행하는건 잘하는데, 그걸 끝맺는것에 약점을 가지고 있는것 같습니다. 개선해야겠지요.

 

4. 예전에 면접봤던 팀에서 게임을 출시했더라구요.

조금 착잡한 생각이 들곤 합니다. 내가 좀만 더 잘 했으면 저기에 있을텐데... 하고

하필 학원하고 그 면접본 회사가 근처에 있어서 지나갈때마다 보는데 볼때마다 한숨만 나오더라구요

ㅎㅎ... 이걸 이겨내야할텐데.

 

솔직하게 잘 지내는것 같진 않습니다. 그냥 꾸역꾸역 해나가는 기분이에요. 

'신변잡기 > 일상' 카테고리의 다른 글

오늘 있었던 일  (0) 2021.02.01
올해의 목표  (0) 2021.01.03
근황  (0) 2020.07.14
올해 목표  (0) 2020.05.18
오랫만에 책을 펴보았습니다.  (0) 2020.01.01

+ Recent posts