BLOG main image

분류 전체보기 (321)
free (36)
영화 (85)
드라마 (21)
게임 (28)
만화/책 (34)
개발 (46)
IT (68)
연예 (3)
Visitors up to today!
Today hit, Yesterday hit
TETRIS
rss
2013. 6. 11. 13:50

앱을 실행해서 작동하다가, 홈 버튼을 누르거나 전화가 오는 등의 이유로 백그라운드로 전환 되었을 때 다시 앱으로 돌아오고 나서 스프라이트가 검정색으로 나오는 현상이 일어났다. 


이 문제는 cocos2d-x 의 예전 버전을 사용할 때는 없었던 현상인데, 2.1.3 으로 업그레이드 한 후에 발생하기 시작했다. 하지만 예전 버전에서도 같은 현상이 일어난다는 얘기도 있다.


void AppDelegate::applicationWillEnterForeground()

{

 //CCDirector::sharedDirector()->stopAnimation(); 

 //CCDirector::sharedDirector()->resume(); 

CCDirector::sharedDirector()->startAnimation();

CocosDenshion::SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();

}


Foreground 로 복귀했을 때 AppDelegate 의 applicationWillEnterForeground 메서드는 정상 호출되고, 음악도 플레이가 다시 시작되는 것으로 보아 이쪽의 문제는 아니었다.


위의 주석 부분에 해당 되는 내용을 추가하면 된다는 조언도 있었으나 아무 소용 없었다.


이 현상이 발생한 후로는 LogCat 에 아래와 같은 로그가 남기 시작하는데,


D/cocos2d-x debug info(13584): OpenGL error 0x0502 in /SomeFolder/cocos/x2.1.3/cocos2d-2.1rc0-x-2.1.3/SomeAppName/proj.android/../../cocos2dx/sprite_nodes/CCSprite.cpp draw 589

D/cocos2d-x debug info(13584): OpenGL error 0x0501 in /SomeFolder/cocos/x2.1.3/cocos2d-2.1rc0-x-2.1.3/SomeAppName/proj.android/../../cocos2dx/sprite_nodes/CCSprite.cpp draw 589

D/cocos2d-x debug info(13584): OpenGL error 0x0502 in /SomeFolder/cocos/x2.1.3/cocos2d-2.1rc0-x-2.1.3/SomeAppName/proj.android/../../cocos2dx/sprite_nodes/CCSprite.cpp draw 589


딱 봐도 OpenGL 관련해서 Sprite 처리에 문제가 생겼음을 알 수 있다.

알수는 있다... 해결을 못해서 그렇지... 

당연히 cocos2d 엔진 만든 놈들이 해결해야지...?


다행이도, 해결 방법은 있었다.


우선, cocos2dx 의 header 파일 하나를 수정한다.


cocos2dx/platform/CCPlatformMacros.h

[84] #define CC_ENABLE_CACHE_TEXTURE_DATA 1


그리고, 아래 파일의 주석을 제거한다.

/proj.android/jni/hellocpp/main.cpp 


void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv*  env, jobject thiz, jint w, jint h)

{

    if (!CCDirector::sharedDirector()->getOpenGLView())

    {

        CCEGLView *view = CCEGLView::sharedOpenGLView();

        view->setFrameSize(w, h);


        AppDelegate *pAppDelegate = new AppDelegate();

        CCApplication::sharedApplication()->run();

    }

    else

    {

        ccDrawInit();

        ccGLInvalidateStateCache();

        

        CCShaderCache::sharedShaderCache()->reloadDefaultShaders();

        CCTextureCache::reloadAllTextures();

        CCNotificationCenter::sharedNotificationCenter()->postNotification(EVNET_COME_TO_FOREGROUND, NULL);

        CCDirector::sharedDirector()->setGLDefaultValues(); 

    }

}


코드만 봐도 reloadAllTextures() ... 뭔가 될 것 같은 느낌이 팍 온다 (...)


이걸 해주고 리빌드를 해주면, 정상적으로 작동!


그 동안 홈 버튼 누르고 나갔다가 들어왔을 때 앱이 안되서 정말 짜증났었는데, 이렇게 해결하면 됨.



2013. 5. 13. 20:01

굉장히 훌륭한 IDE 인 Visual Studio 에 신기하게도 "새 파일"의 인코딩을 설정하는 옵션이 없다. 

2012 버전에는 생겼는지 모르겠는데, 2010 에는 없다. 

단순하면서 "당연한" 기능인데 대체 이걸 왜 빼먹은건지 모르겠다.


그렇다고 설정 불가능한 것은 아니다.


C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcprojectitems


여기에 가보면, hfile.h 과 newc++file.cpp 이라는 파일이 있는데,

이것을 Notepad++ 같은 에디터로 열어서, UTF-8 로 인코딩을 변환해서 저장하면...


그 후 생성하는 C++ 의 header 파일과 source 은 UTF-8 이 된다. 


아, C# 의 경우에는 기본이 UTF-8 이다. 위의 경우에는 VC++ 의 경우에만...


2013. 5. 12. 02:11

여러 장소에서 개발을 해야 할 상황이 좀 생겼다. 각각 개발하는게 아니라 장소를 바꾸더라도 개발하던 것은 그대로 이어서 할 수 있어야 한다는 조건.


이런 상황에 가장 적합한 장비는 당연히 "노트북" 이다.


하지만, 난 몇 주 전에 노트북을 팔아버렸지...;;

게다가 그 노트북이 있었더라도 성능 문제로 개발용으로 사용하기는 무리였고,

성능이 나쁘지 않았더라도 난 노트북이 싫어! -_-

내가 가는 모든 곳에 내 데스크탑이 있었으면 좋겠음. 집, 사무실, 커피숍, 영화관, 편의점... (응?)


어쨌든 기존에 사용하던 데스크탑과 새로 구입한 집에서 사용할 맥미니에 완벽하게 동일한 개발 환경을 셋팅했다. 이렇게 되면 소스 + 각종 리소스가 문제인데, 이것은 SVN 이 깔끔하게 해결해준다. 버전 관리까지 해준다는 점에서 노트북을 들고 다니며 사용하는 것보다도 더 좋은 상황. 조금 더 나아가서 GIT 이나 머큐리얼을 사용하면 더 좋겠지만, 이번 프로젝트에서는 그것까지는 어렵고... SVN 으로도 충분히 만족.


문제는 SVN 에 포함시킬 수 없는 작업 파일들이다. 여러가지 단발성 작업 파일을 SVN 에 올렸다가 지웠다가 하는 것은 전혀 효과적이라 볼 수 없다. 


그래서 오랜만에 N드라이브를 다시 사용하기로 결심.

KT Olleh 핸드폰을 사용하고 있어서, 용량면에서 더 유리한 U Cloud 를 사용하는 방법도 있지만, 그렇게 되면 그렇지 않아도 뭉치면 올레 때문에 KT 에 묶여 있는데, 더 노예가 될 것 같아서 깔끔하게 포기하고, 그래도 좀 익숙한 N 드라이브를 설치. 다음 클라우드도 있는데, 맥 환경에서의 지원이 N 드라이브가 낫다는 얘기가 있어서...


소스는 SVN 으로, 기타 파일은 N 드라이브로 사용하니 여러 데스크탑에서 작업하는데 큰 어려움이 없어졌다.



그런데, 사정상 "듀얼 모니터" 를 사용하기가 어려워졌다.

아~ 개발자에게 고성능 CPU, 충분한 램, 빠른 SSD, 기계식 키보드, 예쁜 여자 친구나 아내, 그리고 듀얼 모니터는 정말 필수 중의 필수인데... 


그래서, 맥처럼 가상 데스크탑 (VirtuaWin) 을 쓰기로 결심. 

듀얼 모니터와는 비교할 수도 없지만, 그래도 데스크탑 1개에 프로그램 100개 실행해 놓는 것보단 나으니까.


윈도우키 + 방향키로 데스크탑 전환을 해보려고 엄청 애썼는데, Windows 7 에서 윈도우 단축키는 전체를 끄거나 켤 수는 있어도 일부를 바꾸는 것은 쉽지 않았다. 결국 CTRL + 윈도우키 + 방향키로 타협. 익숙해지니까 실수가 적다는 점에서 오히려 더 나은것 같기도 함. (그렇지만 가능한 방법을 찾게된다면 바꾸겠지...)



그런데, N드라이브 사용하면 할수록... NAS 를 사용하고 싶어지는군-_-;