'분류 전체보기'에 해당되는 글 145건

  1. 2010/11/05 늅늅 2010.11.05 수영일지 - 12주차 마감
  2. 2010/11/01 늅늅 2010.11.01 수영일지
  3. 2010/10/25 늅늅 NIKE We run seoul 10k 참가 후기
  4. 2010/10/15 늅늅 2010.10.15 수영일지 - 11주차 마감 (2)
  5. 2010/10/13 늅늅 2010 영화 보기 목록 중간결산 (2)
  6. 2010/10/13 늅늅 2010.10.13 수영일지
  7. 2010/10/08 늅늅 자출 후기
  8. 2010/10/06 늅늅 2010.10.06 수영일지
  9. 2010/10/05 늅늅 제8회 국제 평화 마라톤 - 10km 참가 후기
  10. 2010/10/04 늅늅 2010.10.04 수영일지

지난글에서 만들었던 libirrlicht.a를 이용해서 안드로이드 irrlicht 프로젝트를 만드는 과정을 정리한다.

0. 먼저 이클립스에서 Android 프로젝트를 하나 생성한다. 이름같은건 적당히 지어주고, 사용 SDK 버전은 8이상으로 해줘야 한다(irrlicht 빌드할때 사용한 버전과 맞추는게 좋다)

사용자 삽입 이미지


1. 지난글에서 사용했던 프로젝트를 재활용할 것이다.(새로 예제 만들긴 귀찮...;;;) 다음 소스들을 프로젝트 폴더로 복사해온다. 복사할때는 그냥 탐색기로 해당 폴더로 이동한 다음 드래그&드롭으로 이클립스 프로젝트에 떨구고 대화상자에서 copy를 선택하면 된다.
 
 . irrlicht 폴더의 include 폴더를 복사해온다.
 . jni폴더를 생성하고 irrlicht/jni 폴더안의 다음 파일들을 복사해온다.
  - android-activity.cpp
    : JNI 함수 이름들을 변경해야 한다. 정석대로라면 javah로 생성하는게 맞는거겠지만.. 그냥 find&replace로 바꿔버리겠다.
함수이름의 앞부분이 "Java_com_ellismarkov_irrlicht_" 이런식으로 되있을텐데 본인이 생성한 프로젝트의 패키지 이름으로 변경하면 된다. 예를들어 패키지 이름이 kr.newbie.irrlichtTest 라면
Java_kr_newbie_irrlichtTest_ 라고 변경하면 된다.
     nativeInitGL 함수에서 createDevice 함수를 호출하는 부분을 보면 irrlicht 엔진을 OpenGL ES2로 생성하게 되어있는데 ES1으로 바꾸자(irrlicht를 ES1으로만 컴파일 해놔서리... ㅡㅅㅡ;;)
  - android-receiver.cpp
  - android-receiver.h
  - app-android.cpp
    : app-android.cpp 파일의 앞부분에서 다음 네 라인을 찾아서 주석처리하고,
#include <android-logger.h>
#include <importgl.h>
#include <os.h>
using namespace os;
      line. 161의
Printer::Logger = new CAndroidLogger();
      이 부분도 주석처리한다.

  . src 폴더에 IrrlichtGLView.java, IrrlichtTest.java, Utils.java 파일을 복사해온다.

2. src 폴더에 java 파일들을 복사해넣으면 아마 에러가 뜰 것이다. 소스 제일 앞부분의 package를 새로 만든 프로젝트의 패키지 이름과 맞춰준다. 패키지 이름을 잊었다면 AndroidManifest.xml 파일을 참고.

3. 새로생성된 프로젝트의 액티비티는 사용하지 않을 것인다. AndroidManifest.xml 파일을 열어서

<activity android:name=".IrrlichtTestActivity"
                  android:label="@string/app_name">

   android:name <- 이부분의 값을 .IrrlichtTest로 바꾸자.

4. irrlicht/obj/local.armeabi 폴더에 가면 libirrlicht.a 파일이 있다. jni 폴더로 복사해온다.

5. 중요한걸 하나 뻬먹었다. irrlicht/jni폴더의 Android.mk 파일도 복사해온다. ㅋㅋ;
   그리고 Android.mk 파일을 다음과 같이 수정한다.

#
# COSOperator.cpp was removed from IRROTHEROBJ
LOCAL_PATH := $(call my-dir)
#
# 1. Load Static library (.a)
#
include $(CLEAR_VARS)
LOCAL_MODULE := static_irrlicht
LOCAL_SRC_FILES = ./libirrlicht.a
include $(PREBUILT_STATIC_LIBRARY)
#
# 2. Build Shared library (.so)
#
include $(CLEAR_VARS)
LOCAL_STATIC_LIBRARIES := static_irrlicht
ANDROID = android-activity.cpp android-receiver.cpp app-android.cpp
LOCAL_MODULE := irrlicht
LOCAL_ARM_MODE   := arm
LOCAL_CFLAGS := -O3 -DANDROID_NDK -I./../include/
LOCAL_SRC_FILES := $(ANDROID)
LOCAL_LDLIBS := -ldl -llog -lGLESv1_CM -lGLESv2
include $(BUILD_SHARED_LIBRARY)


6. cygwin 에서 jni 폴더로 이동한 다음에 ndk-build 커맨드를 실행한다.

7. 이클립스 패키지 익스플로러를 새로고침하면 obj 폴더가 추가된것이 보일것이다. F11키를 눌러서 Debug Run을 실행시키면 짜잔~! 열심히 뛰고 있는 시드니가 보인다 ^0^/

사용자 삽입 이미지


2011/12/04 21:50 2011/12/04 21:50

JNI를 이용하면 C++로 작성된 irrlicht 엔진을 Android 플랫폼에서도 돌아가게 할 수 있다.

인터넷 검색 및 삽질(-_-)끝에 알아낸 것들을 정리해둔다.

--------------------------------------------------------------

1. 프로그램 및 SDK 준비
 . Cygwin 설치
  - http://www.cygwin.com/
  - 설치시 git 플러그인을 같이 설치하는게 좋다.
    git를 이용해서 android로 포팅된 irrlicht 엔진 소스를 얻어오는데
    외부 프로그램으로 하려면 좀 귀찮아서... ㅡ,.ㅡ;
 . JDK 설치
  - http://www.oracle.com/technetwork/java/javase/downloads/index.html
 . Android SDK 설치
  - http://developer.android.com/sdk/index.html
 . Android NDK 설치
  - http://developer.android.com/sdk/ndk/index.html
  - NDK 설치 후 설치 경로를 시스템 환경변수 PATH에 추가시키자. 나중에 커맨드 칠때 편하다;

2. Android Irrlcht 소스 받기
 . Cygwin을 실행시킨 후 소스를 받을 디렉토리로 이동 후에 다음 커맨드를 입력한다.

git clone git://gitorious.org/irrlichtandroid/irrlichtandroid.git

 좀 기다리면 irrlichtandroid란 폴더에 소스가 다운받아져 있을 것이다.


3. Static Library로 빌드
 . irrlichtandroid/project/include/IrrCompileConfig.h 파일을 열어서 102번째 줄의 선언문을 다음같이 변경한다.

//++ ellis ++ // ANDROID NDK CAUSES TO BE HERE
//++ ellis ++ #define _IRR_POSIX_API_
//++ ellis ++ #define _IRR_COMPILE_WITH_X11_DEVICE_
//++ ellis ++ // Three lines added for android
#define _IRR_ANDROID_PLATEFORM_
#define _IRR_COMPILE_WITH_ANDROID_DEVICE_
#define _IRR_COMPILE_WITH_OGLES1_
// #define _IRR_COMPILE_WITH_OGLES2_  // <- 주석처리!
#define _DEBUG

  - OpenGL ES1 이나 ES2중 하나만 선택해야 빌드가 될텐데 일단 ES1으로 선택한다.
    (나중에 CreateDevice 함수로 Irrlicht Device를 만들때도 이때 선택한 그래픽옵션으로 만들어야 한다)

. irrlichtandroid/project/jni/Android.mk 파일을 다음과 같이 수정한다.

#
# COSOperator.cpp was removed from IRROTHEROBJ
LOCAL_PATH := $(call my-dir)
#
# 1. Build Static library (.a)
#
include $(CLEAR_VARS)
IRRMESHLOADER = CBSPMeshFileLoader.cpp CMD2MeshFileLoader.cpp CMD3MeshFileLoader.cpp CMS3DMeshFileLoader.cpp CB3DMeshFileLoader.cpp C3DSMeshFileLoader.cpp COgreMeshFileLoader.cpp COBJMeshFileLoader.cpp CColladaFileLoader.cpp CCSMLoader.cpp CDMFLoader.cpp CLMTSMeshFileLoader.cpp CMY3DMeshFileLoader.cpp COCTLoader.cpp CXMeshFileLoader.cpp CIrrMeshFileLoader.cpp CSTLMeshFileLoader.cpp CLWOMeshFileLoader.cpp CPLYMeshFileLoader.cpp
IRRMESHWRITER = CColladaMeshWriter.cpp CIrrMeshWriter.cpp CSTLMeshWriter.cpp COBJMeshWriter.cpp CPLYMeshWriter.cpp
IRRMESHOBJ = $(IRRMESHLOADER) $(IRRMESHWRITER) CSkinnedMesh.cpp CBoneSceneNode.cpp CMeshSceneNode.cpp CAnimatedMeshSceneNode.cpp CAnimatedMeshMD2.cpp CAnimatedMeshMD3.cpp CQ3LevelMesh.cpp CQuake3ShaderSceneNode.cpp
IRROBJ = CBillboardSceneNode.cpp CCameraSceneNode.cpp CDummyTransformationSceneNode.cpp CEmptySceneNode.cpp CGeometryCreator.cpp CLightSceneNode.cpp CMeshManipulator.cpp CMetaTriangleSelector.cpp COctreeSceneNode.cpp COctreeTriangleSelector.cpp CSceneCollisionManager.cpp CSceneManager.cpp CShadowVolumeSceneNode.cpp CSkyBoxSceneNode.cpp CSkyDomeSceneNode.cpp CTerrainSceneNode.cpp CTerrainTriangleSelector.cpp CVolumeLightSceneNode.cpp CCubeSceneNode.cpp CSphereSceneNode.cpp CTextSceneNode.cpp CTriangleBBSelector.cpp CTriangleSelector.cpp CWaterSurfaceSceneNode.cpp CMeshCache.cpp CDefaultSceneNodeAnimatorFactory.cpp CDefaultSceneNodeFactory.cpp
IRRPARTICLEOBJ = CParticleAnimatedMeshSceneNodeEmitter.cpp CParticleBoxEmitter.cpp CParticleCylinderEmitter.cpp CParticleMeshEmitter.cpp CParticlePointEmitter.cpp CParticleRingEmitter.cpp CParticleSphereEmitter.cpp CParticleAttractionAffector.cpp CParticleFadeOutAffector.cpp CParticleGravityAffector.cpp CParticleRotationAffector.cpp CParticleSystemSceneNode.cpp CParticleScaleAffector.cpp
IRRANIMOBJ = CSceneNodeAnimatorCameraFPS.cpp CSceneNodeAnimatorCameraMaya.cpp CSceneNodeAnimatorCollisionResponse.cpp CSceneNodeAnimatorDelete.cpp CSceneNodeAnimatorFlyCircle.cpp CSceneNodeAnimatorFlyStraight.cpp CSceneNodeAnimatorFollowSpline.cpp CSceneNodeAnimatorRotation.cpp CSceneNodeAnimatorTexture.cpp
IRRDRVROBJ = CNullDriver.cpp COGLESDriver.cpp COGLESTexture.cpp COGLESExtensionHandler.cpp
IRRDRVOBJ2 = COGLES2Driver.cpp COGLES2FixedPipelineShader.cpp COGLES2ParallaxMapRenderer.cpp COGLES2SLMaterialRenderer.cpp COGLES2ExtensionHandler.cpp COGLES2NormalMapRenderer.cpp COGLES2Renderer2D.cpp COGLES2Texture.cpp
IRRIMAGEOBJ = CColorConverter.cpp CImage.cpp CImageLoaderBMP.cpp CImageLoaderJPG.cpp CImageLoaderPCX.cpp CImageLoaderPNG.cpp CImageLoaderPSD.cpp CImageLoaderTGA.cpp CImageLoaderPPM.cpp CImageLoaderWAL.cpp CImageLoaderRGB.cpp CImageWriterBMP.cpp CImageWriterJPG.cpp CImageWriterPCX.cpp CImageWriterPNG.cpp CImageWriterPPM.cpp CImageWriterPSD.cpp CImageWriterTGA.cpp
IRRVIDEOOBJ = CVideoModeList.cpp CFPSCounter.cpp $(IRRDRVROBJ) $(IRRIMAGEOBJ)
IRRSWRENDEROBJ = CSoftwareDriver.cpp CSoftwareTexture.cpp CTRFlat.cpp CTRFlatWire.cpp CTRGouraud.cpp CTRGouraudWire.cpp CTRTextureFlat.cpp CTRTextureFlatWire.cpp CTRTextureGouraud.cpp CTRTextureGouraudAdd.cpp CTRTextureGouraudNoZ.cpp CTRTextureGouraudWire.cpp CZBuffer.cpp CTRTextureGouraudVertexAlpha2.cpp CTRTextureGouraudNoZ2.cpp CTRTextureLightMap2_M2.cpp CTRTextureLightMap2_M4.cpp CTRTextureLightMap2_M1.cpp CSoftwareDriver2.cpp CSoftwareTexture2.cpp CTRTextureGouraud2.cpp CTRGouraud2.cpp CTRGouraudAlpha2.cpp CTRGouraudAlphaNoZ2.cpp CTRTextureDetailMap2.cpp CTRTextureGouraudAdd2.cpp CTRTextureGouraudAddNoZ2.cpp CTRTextureWire2.cpp CTRTextureLightMap2_Add.cpp CTRTextureLightMapGouraud2_M4.cpp IBurningShader.cpp CTRTextureBlend.cpp CTRTextureGouraudAlpha.cpp CTRTextureGouraudAlphaNoZ.cpp CDepthBuffer.cpp CBurningShader_Raster_Reference.cpp
IRRIOOBJ = CFileList.cpp CFileSystem.cpp CLimitReadFile.cpp CMemoryFile.cpp CReadFile.cpp CWriteFile.cpp CXMLReader.cpp CXMLWriter.cpp CZipReader.cpp CPakReader.cpp CNPKReader.cpp CTarReader.cpp CMountPointReader.cpp irrXML.cpp CAttributes.cpp lzma/LzmaDec.c
IRROTHEROBJ = CIrrDeviceConsole.cpp CIrrDeviceStub.cpp CLogger.cpp Irrlicht.cpp os.cpp
IRRGUIOBJ = CGUIButton.cpp CGUICheckBox.cpp CGUIComboBox.cpp CGUIContextMenu.cpp CGUIEditBox.cpp CGUIEnvironment.cpp CGUIFileOpenDialog.cpp CGUIFont.cpp CGUIImage.cpp CGUIInOutFader.cpp CGUIListBox.cpp CGUIMenu.cpp CGUIMeshViewer.cpp CGUIMessageBox.cpp CGUIModalScreen.cpp CGUIScrollBar.cpp CGUISpinBox.cpp CGUISkin.cpp CGUIStaticText.cpp CGUITabControl.cpp CGUITable.cpp CGUIToolBar.cpp CGUIWindow.cpp CGUIColorSelectDialog.cpp CDefaultGUIElementFactory.cpp CGUISpriteBank.cpp CGUIImageList.cpp CGUITreeView.cpp
ZLIBOBJ = zlib/adler32.c zlib/compress.c zlib/crc32.c zlib/deflate.c zlib/inffast.c zlib/inflate.c zlib/inftrees.c zlib/trees.c zlib/uncompr.c zlib/zutil.c
JPEGLIBOBJ = jpeglib/jcapimin.c jpeglib/jcapistd.c jpeglib/jccoefct.c jpeglib/jccolor.c jpeglib/jcdctmgr.c jpeglib/jchuff.c jpeglib/jcinit.c jpeglib/jcmainct.c jpeglib/jcmarker.c jpeglib/jcmaster.c jpeglib/jcomapi.c jpeglib/jcparam.c jpeglib/jcprepct.c jpeglib/jcsample.c jpeglib/jctrans.c jpeglib/jdapimin.c jpeglib/jdapistd.c jpeglib/jdatadst.c jpeglib/jdatasrc.c jpeglib/jdcoefct.c jpeglib/jdcolor.c jpeglib/jddctmgr.c jpeglib/jdhuff.c jpeglib/jdinput.c jpeglib/jdmainct.c jpeglib/jdmarker.c jpeglib/jdmaster.c jpeglib/jdmerge.c jpeglib/jdpostct.c jpeglib/jdsample.c jpeglib/jdtrans.c jpeglib/jerror.c jpeglib/jfdctflt.c jpeglib/jfdctfst.c jpeglib/jfdctint.c jpeglib/jidctflt.c jpeglib/jidctfst.c jpeglib/jidctint.c jpeglib/jmemmgr.c jpeglib/jmemnobs.c jpeglib/jquant1.c jpeglib/jquant2.c jpeglib/jutils.c jpeglib/jcarith.c jpeglib/jdarith.c jpeglib/jaricom.c
LIBPNGOBJ = libpng/png.c libpng/pngerror.c libpng/pngget.c libpng/pngmem.c libpng/pngpread.c libpng/pngread.c libpng/pngrio.c libpng/pngrtran.c libpng/pngrutil.c libpng/pngset.c libpng/pngtrans.c libpng/pngwio.c libpng/pngwrite.c libpng/pngwtran.c libpng/pngwutil.c
LIBAESGM = aesGladman/aescrypt.cpp aesGladman/aeskey.cpp aesGladman/aestab.cpp aesGladman/fileenc.cpp aesGladman/hmac.cpp aesGladman/prng.cpp aesGladman/pwd2key.cpp aesGladman/sha1.cpp aesGladman/sha2.cpp
BZIP2OBJ = bzip2/blocksort.c bzip2/huffman.c bzip2/crctable.c bzip2/randtable.c bzip2/bzcompress.c bzip2/decompress.c bzip2/bzlib.c
ANDROID = importgl.cpp CIrrDeviceAndroid.cpp
LOCAL_MODULE := irrlicht
LOCAL_ARM_MODE   := arm
LOCAL_CFLAGS := -O3 -DANDROID_NDK -DDISABLE_IMPORTGL -I./../include/ -I./include/
LOCAL_SRC_FILES := \
     $(ANDROID) \
     $(IRRVIDEOOBJ) $(IRRDRVOBJ2) \
     $(IRRMESHOBJ) $(IRROBJ) $(IRRPARTICLEOBJ) $(IRRANIMOBJ) \
     $(IRRSWRENDEROBJ) $(IRRIOOBJ) $(IRROTHEROBJ) \
     $(IRRGUIOBJ) $(ZLIBOBJ) $(JPEGLIBOBJ) $(LIBPNGOBJ) $(LIBAESGM) \
     $(BZIP2OBJ)
LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog -lGLESv2
include $(BUILD_STATIC_LIBRARY)
#
# 2. Build Shared library (.so)
#
include $(CLEAR_VARS)
LOCAL_MODULE    := fakeIrrlicht
LOCAL_STATIC_LIBRARIES := irrlicht
include $(BUILD_SHARED_LIBRARY)

 . irrlichtandroid/project/jni 폴더로 이동한 후 ndk로 빌드하면 .a 파일이 생성!

ndk-bulid --jobs <CPU 코어수>

  - 멀티코어를 이용해서 빌드하면 빌드속도가 꽤 많이 단축되니 꼭 멀티코어 빌드로 하자.
    다만, 멀티코어 빌드시 별 이유없이 실패할 때가 있는데 그땐 그냥 obj 폴더를 지우고
    다시 빌드하면 된다. (아마도 버그인듯;)
 
 . 빌드가 성공하면 irrlichtandroid/project/obj/local/armeabi 폴더에 libirrlicht.a 파일이 생성되있을것이다.
   같이 생성된 so파일(libfakeIrrlicht.so)는 사용하지 않으니 무시할 것! (어차피 빈 껍데기 ㅋ)
 
 . irrlicht 프로젝트에서 사용하는 방법은 다음글에 계속.. 

2011/11/20 21:57 2011/11/20 21:57

20110917 영월 자전거 여행

여행 RSS Icon ATOM Icon 2011/09/17 21:25 늅늅

제목은 영월 자전거 여행.. 이지만 사실은 사고 사례 전파입니다 =_=;



아침 7시. 영월 일주 계획을 짜고 청량리발 첫기차로 기세좋게 출발했습니다..


가는데 대략 3시간정도 걸리더군요.


영월역에 도착해서 분해했던 자전거를 다시 조립하고 첫번째 목적지인 별마로 천문대로 출발했습니다


어라연 계곡쪽으로 가서 현대생활 미술관을 지나가는 코스로 가는데


중간에 어라연 입구에서 동강을 따라 쭉 올라가다가 삼옥교를 건너가야 합니다.


그런데 삼옥교 들어가기 전에 코스가 언덕 하나 넘고 쭉~ 내리막길 입니다.



차도 없겠다 브레이크 안잡고 내려가다 삼옥교로 들어가는 삼거리에서


좌회전하다가 너무 빠른 속도에 방향 제어 실패-_-;


인도 턱에 걸려 굴렀습니다;;;;; 90'커브에서 속도를 안줄이다니 미쳤지요;;;;;;



사용자 삽입 이미지


결과는 헬멧 깨지고 오른쪽 팔 / 무릎 까짐 ;ㅁ;


자전거 드롭바 후드도 휘어서 |__| <- 이렇게 되야 되는데 /__| <- 이렇게 됬네요;


덧붙여 앞바퀴 브레이크도 위치가 뒤틀림;


으헝허허허어헝허엏어허허어헝ㅎ엏 ㅠㅜ



바로 일어나서 몸 좀 추스리고 자전거 간단정비 하고.. 계속 별마로 천문대로 올라가려다가


뭔가 이건 아니다 싶은 생각이 갑자기 들면서 안아프던 가슴이 아파오기 시작하네요;;


다시 영월역으로 돌아와서 근처 약국(이라지만 없어서 영월 시내까지 들어가서 겨우 찾았어요)에서 소독약 사다 바르고


기차표 바꾸고 점심먹고 집으로 복귀했습니다.


사용자 삽입 이미지


사용자 삽입 이미지


으앙 이게 뭐야 ;ㅁ;



집에와서 헬멧 살펴보니 제법 크게 자빠졌었네요


사용자 삽입 이미지


사용자 삽입 이미지



저게 내 머리였다고 생각하면 어휴.... ㅎㄷㄷㄷㄷ;;;


헬멧은 차캤슴다 ㅠㅜ 부디 다음 생에선 칫솔로 태어나 김태희에게 팔려가길...


샤워하면서 보니까 팔만 긁힌게 아니라 등쪽에도 상처가 난거 같네요;


머리도 살짝 두통이 있고.. 오른팔 들어서 움직이면 가슴도 아픈게


내일 병원에 꼭 가봐야할 듯-_-;;;;


자전거 타실때 꼭 헬멧 착용하시고,


내리막에서 감속, 커브 돌기전 감속 잊지 마세요 ㅠㅜ


이상 사고 사례 전파였습니다 ㅠㅠ

2011/09/17 21:25 2011/09/17 21:25

날자고도의 탄막슈팅 사이트를 운영하고 계시는 날자고도님이 GameCodi에서

"60분 걸리는 빌드를 1분대로" 라는 모임을 여서서 참가하였다.



장소는 강남 토즈라는데 뭐 세미나실 빌려주고 이런 곳인듯.

강남이랑 인연이 없다보니 그동넬 첨가봤는데

토욜이라 그런지 더운날씨에도 거리에 사람들이 바글바글하다=_=;;

그런데 거리의 여자들이 하나같이 선글라스를 쓰고 있는건 좀 웃겼다 ㅋㅋㅋ


각설하고, 토즈에 가보니 아무도 없음... -_-;

시작 20분전인데! 나 혼자! ㅠㅠ


한 10분전쯤 되니까 슬슬 사람들이 들어온다.

게임코디에선 서로 댓글도 달아주는 사이지만

오프라인에선 처음 보는 사람들이라 어색어색... 서먹서먹...


여기서 잠깐 게임 코디 인물평

게임코디님 : 날자고도님 오시기 전에 분위기 메이커 해주심 ㅎㅎ
                  예상외로 훈남이셨음 ㅋㅋ

날자고도님 : 차가 막혀서 지각-_-; 잠시나마 횡령설이 돌았음 ㅋ

포인트님 : 포인트님이 좋아합니다! 바로 앞자리에 계셔서 얼굴을 제대로 못봄.
               후덕하신 등짝만 기억...



간략히 강의 내용을 요약하면..

. 코드가 많아질수록 빌드 타임이 증가 -> 대략 지수함수 그래프의 모양을 띔 ㅋ

. 컴파일이 오래 걸리는 이유
 - 게임엔진, 표준 라이브러리, 내가 만든 소스가 어우러져서
    별다른 수정이 없어도 모든 코드가 매번 재컴파일 되기 때문

. VC의 해법 : 미리 컴파일 된 헤더  -> 의외로 안쓰는 사람이 많다! (나도 포함-.-;;;)
 - 절대 바뀌지 않는 헤더만 첨부 (회사의 코어 라이브러리 등)

. 코드의 종속성 없애기
 - 프로그래머 종속성 (사람 종속성)
  : A가 만들어야 B가 작업가능 (보통 따로 작업 가능하지 않음?)
    혹은 그래픽 리소스가 있어야 작업가능
    이건 PM의 능력이 좋으면 해결되지 않을까??
    약간 설명이 부족한 듯...
 - 헤더 안에 헤더를 넣지 말자 (코드 종속성)
  : 모든 헤더를 cpp에?
 - 멤버 클래스는 포인터로 관리
  : 전방 선언을 할 클래스를 모은다(클래스 선언을 모은다) -> 미리 컴파일된 헤더 이용
    Effective C++에 나오는 방법과 유사...
    관련 질문으로 이렇게 전방선언으로 처리하면 Debug할떄 Heap 덤프에서 제대로 확인하기
    어렵다고 하는데(질문자 내공이 있어보였음 ㄷㄷ) 관련 내용 확인 필요
  - 멀티코어 빌드
   : 프로젝트의 멀티코어 옵션을 On 해주는 것만으로 빌드속도 향상!
     /MP 플래그 + 최소 빌드 가능 : 아니오
     VS2005에선 멀티코어 빌드관련 버그가 있음.. 2008이상부터 추천


샘플 예제로는 날자고도의 탄막슈팅에 가보면 예제프로젝트들이 모두 위의 기법을 이용해서

제작되었다고 한다.. 이거슨 고도의 사이트 광고 ㅋㅋㅋ;;


어떻게보면 기본적인 사항들인데 실무에서 하다보면

여러가지 이유로(귀찮다거나, 귀찮을거 같거나, 귀찮아서) 안하게 되는 사항들이 있다..

대표적인게 미리컴파일된 헤더 ㅋㅋ;;

한번쯤 내가 만든 소스들을 점검해보고 앞으로 만들 소스들에도 적용할 수 있도록 해야겠다.

2011/09/03 18:59 2011/09/03 18:59

2011 속초 솔로잉

여행 RSS Icon ATOM Icon 2011/08/06 09:18 늅늅
모처럼 여름 휴가를 받았는데 딱히 할 일도 없고..

클릿 페달도 질렀겠다 전부터 해보고 싶었던 장거리 라이딩에 도전해보았다.
사용자 삽입 이미지

용문으로 가는 지하철 첫차 안에서..


사용자 삽입 이미지

인제 들어가기 전에 낙차후 잠시 휴식.. 속도계 자석 잃어버림-_-;



사용자 삽입 이미지

미시령 옛길 초입. 여기서 부터 지옥이 시작됨.. 정상까지 3Km 밖에 안되지만 그 3Km가 전부 경사도 10%를 넘나드는 업힐구간임 ㄷㄷㄷ


사용자 삽입 이미지

미시령 정상에서.. 결국 끌바로 올라왔다 ㅠㅜ



사용자 삽입 이미지

이거 한장 찍었다는데 의미를 둠 ㅎㅎㅎ

2011/08/06 09:18 2011/08/06 09:18

수영 종료..

수영일지 RSS Icon ATOM Icon 2011/06/09 19:29 늅늅
어제부로 수영장 등록을 취소하고 당분간은 수영장엘 나가지 않게 됬다.

개인적으로 이런저런 일들이 생겨서 그만두게 되었지만

끝끝내 접영을 배우지 못한것이 아쉽다.

한달만 더 다녔으면 배웠을꺼 같기도 한데.

걍 다음에 여유 생기면 그때 배워야지 ㅠㅜ

그래도 거진 1년 가까이 배우면서 (한 10개월 됬나?) 원래 목적이었던

"물에 빠져 죽지 않을정도"의 수영실력은 기른듯 싶다.


앞으로 수영일지 업데이트도 없을테고 카테고리 그냥 닫아버릴까 ㅋㅋ;;
2011/06/09 19:29 2011/06/09 19:29

2011.05.11 수영일지

수영일지 RSS Icon ATOM Icon 2011/05/11 09:33 늅늅
어제 자기전에 맥주를 마시고 잤더니 아침에 못일어날 뻔 했다-_-;

어찌어찌 일어나서 갔는데...

사람이 별로 없어서 쾌적하게 수영할 수 있었다.

역시 5월쯤 되니까 사람들이 빠지기 시작하는군.. ㅎㅎ

하지만 곧 6월. 다시 꽉꽉 들어찰꺼야 OTL

목욕탕 되기전에 접영으로 넘어가야 할텐데 ㅠㅜ
2011/05/11 09:33 2011/05/11 09:33

2011.04.27 수영일지

수영일지 RSS Icon ATOM Icon 2011/04/27 11:38 늅늅

수영장 빠지지 말아야지! 해놓고 또 한 일주일 빠졌다-_-;

아니다. 2주구나;; 에이, 몰라. 이미 지난일이야ㅡ,.ㅡ;

그래도 전에 했을때는 막 허리에 서포터 차고 발차기 했었는데

오늘은 걍 하네... 진도가 생각보다 빠른듯?

다음 시간엔 아마 자유수영할텐데

그때 많이 연습해둬야겠다.

2011/04/27 11:38 2011/04/27 11:38

2011.04.13 수영일지

수영일지 RSS Icon ATOM Icon 2011/04/13 07:53 늅늅

지난주 월요일 이후로 쭉- 빠졌다-_-;

핑계라면 일이 바빠서... 하지만 못간건 못간거. 제길 OTL

오늘 아침에도 일어나서 갈까 말까 5분간 고민하다가

겨우겨우 출발했다; 점점 근성이 약해지는게 느껴진다..


전에 적은대로 수영강사가 바뀌면서

평영레인에서 접영도 가르치는데

접영 배우는 사람 8 평영 배우는 사람 2의 비율로 있어서

레인의 3/1정도만 평영연습을 할 수 있다.

너무 짧아서 그닥 연습이 되는거 같지는 않다;

킥 두세번이면 끝이니 원;;;

뭐, 그래도 강사가 나름 열심히 가르쳐주려고 하는게 보이니 다행이라면 다행.

이젠 진짜 빠지지 말고 열심히 해야겠다.

2011/04/13 07:53 2011/04/13 07:53

써커 펀치

영화 RSS Icon ATOM Icon 2011/04/11 07:35 늅늅

이 영화의 예고편을 보고 '아... 뭔가 정신나간 영화가 하나 나오는구나' 라며

어서 본편을 개봉하길 기다렸는데 드디어 국내에 정식 개봉이 되었다.

영화평이 극과 극으로 갈리는 영화인데 나처럼 취향에 딱 들어맞으면

그냥 말이 필요없다. 무조건 보는거다 ㅋㅋㅋㅋ


시원시원한 액션, 밀덕을 자극하는 FM 총격씬,

SF에서 판타지까지 거의 모든 장르를 뛰어넘는 씬 구성... 최고!


게다가 요즘 영화의 필수요소인 반전도 빼먹지 않고 존재한다 ㅋ
(뻔하긴 하지만-_-;)

영화 주제도 쉽고, 나름 생각할꺼리 및 떡밥도 던지고..

개인적으론 강추! 다만 자신이 오덕이나 밀덕이 아니라면 그닥..
(혹은 그 문화에 어느정도 익숙하지 않다면)

본 사람만..

2011 첫영화로 선택하길 잘했다!

2011/04/11 07:35 2011/04/11 07:35