본문 바로가기

Developement/C/C++

(71)
[FLTK] Win32 에서 HWND 를 제대로 못 얻어 올때 일단 조이스틱, 마우스, 키보드의 일정 값들을 산술화 하는 테스트 프로그램을 FLTK 로 제작 중 이었습니다만, 이게 왠걸 ... DriectX 의 DInput 에 SetCooperativeLevel() 에서 계속 실패가 나는 것 이었습니다. 대체 왜 이러나 하고 보니, ( Process Hacker 사용 ) 엄? FLTK 에서 fl_xid( window ); 로 가져 온 HWND 와 실제 FLTK 에서 사용하고 있는 HWND 가 다릅니다.... 대체 저건 어디서 나온 값이지 ... 그래서 이전에 만든 FLTK 조이스틱 테스트 하는걸 보면, 이건 또 fl_xid() 로 정상인 HWND 를 넘겨 줍니다 ... 대체 왜 ?? 왜 ?? 왜 ?? 아마 FLTK 에서 2개 이상의 window를 생성 하고 있는 상..
[FLTK] + DirectX8 + MinGW, Direct Input 으로 조이스틱 쓰기 예제. 바로 전에 올린 post 에 이어서 몇가지 작업을 더 해 보고 예제를 올려 볼까 합니다.이번에 적용한 것들은 다음과 같습니다.joystick.h/cpp(c 로 컴파일 가능) 으로 별도 API 처리.FLTK ( 주의: fltk-1.3.3-ts 사용해야 flushing 계속 해도 죽지 않음 ) 를 사용한 시각적 표현.pthread 로 polling 을 통한 update 부터 화면 표시 까지 구현.단, 이 예제에서는 Xinput 이나, Analog 부분 ( Z axis, Z rotate ) 부분 처리는 빠져 있습니다.polling 은 thread 내에서 sleep 을 30ms 하므로, 이론상으로 1초에 30 번 가량일 듯 합니다만, 이정도면 손가락이 신의 속도가 아니면 문제는 없어 보입니다. 예제는 Code:..
MinGW 용 DirectX 8 input Joystick(조이스틱) 예제 (src, lib 포함) MinGW 에서 DirectX 쓰기란 MinGW-W64 오면서 참 많이 편해진 편 입니다만, 여전히 MSDN 에서 제공하는 기본 예제 조차 컴파일이 안되는 비극을 보면 갈 길이 멀어 보이기도 합니다. 이번엔 Joystick 을 DInput 으로 처리 하려니 되는게 없어 Wine 용 DirectX8 header 와 library 등을 MSDN 에서 제공하는 예제 소스와 함께 빌드 할 수 있도록 만들었습니다. 현재 이 소스는 MinGW-W64 기준 최신버젼 (5.1) 에서 빌드가 가능하며, CodeBlocks 에서 project 파일만 열어서 빌드 후 테스트 가능 합니다. 소스는 아래 첨부파일로 붙임을 하겠으며, 원래 소스가 MSDN 공개에서 가져 왔으며, DirectX8 기준이긴 하나, 이쪽 부분은 발전이..
리눅스에서 RaspberryPi 를 위한 ffmpeg 라이브러리 빌드 하기. 라즈베리파이(이하 RPI) 에서도 ffmpeg 을 쓰는데 뭔가 성능이 안나온다는 친구의 말을 듣고 일단 ffmpeg 을 RPI 개발 환경에서 빌드 할 수 있도록 간단히 꾸며 보았습니다. 단, 이 방법은 이미 다른 cross-platform 을 쓰고 있는 상태에서 빌드 하는 환경을 만들기 위해 단순히 ffmpeg 빌드를 위해 몇가지 스크립트를 추가해서 사용하는 방법을 설명 하고 있습니다. 먼저 RPI 빌드 툴을 받아야 하므로 아래처럼 했습니다. (이미 있으신 분들은 skip) 먼저 개인적으로 모든 소스를 밀어 넣는 Project 밑에 raspberrypi 디렉터리를 하나 만들었습니다. github 에서 RPI toolkit 을 clone 하여 tools 로 디렉터리가 만들어 지도록 합니다. 이로서 RPI ..
MinGW w64 로 ffmpeg 관련 링크 오류 ! minGW 의 버젼을 4.9.x 대로 올리면서 DirectX 와 기타 등등의 Windows 의 모든 걸 쓸 수 있도록 나오는 mingw-w64로 선택 했더니 ffmpeg 라이브러리에서 이런 오류가 나온다. unistd 에 포함되던 sleep, globalfree, glob, mkstamp 등이 기본 라이브러리에 없다는 말이다! 문제는 이게 4.9.x 버젼대에만 있는 것이 아니라 5.1 최신판도 마찬가지란 점... 해결책을 찾아야 하는데, 이걸 직접 내가 만들어 쓰는 것도 문제일 탠데 ... 방법을 찾는대로 이어서 포스팅 하도록 하겠다. 이 문제는 이전에 사용한 ffmpeg 을 새로운 minGW 로 빌드 하고, ffmpeg 에 다음 소스들을 수정 해야 한다. libavutil\file.c libavutil..
[FLTK]minGW 에서 OpenGL 3.x 사용하기 (Shader programming) 기본적으로 minGW 를 설치 하면 포함 되어 있는 OpenGL header 버젼은 1.2 대 버젼으로 현재 4.0 헤더가 크로노스 그룹에서 공개 된 걸 생각하면 한참이나 구시대의 유물인 상태 이다. 사실 이걸로는 GeForce2 나 RadeonX 시절의 pixel shader 없는 심심한 그래픽이나 그리는거 말곤 할수 있는게 없다. 이번엔 FLTK 에서 OpenGL shader programming 을 통한 YUV422 이미지를 Programming Object ARB 를 이용하여 texture 1+2+3 을 겹쳐 하나의 완성된 이미지로 만들어 내는걸 해 보기로 하면서 기본 MinGW 에서 수정 되어야 할 점과, OpenGL 프로그래밍을 할때 추가 해야 하는 부분들을 정리 해 보도록 하겠다. 먼저 기본..
[FLTK] ffmpeg library 붙이기 1단계 OK. 근래 ffmpeg 을 빌드 해서 BGRA 4bytes 픽셀 데이터를 얻어 화면에 뿌리는 작업을 하는 김에 FLTK 를 붙여 본 작업을 진행 하고 있습니다. 물론 이 작업은 순조롭게 진행 되어 2개의 후면 버퍼로 그리는데 지장 없이 완료 되었습니다. ffmpeg 의 기본 SDL 을 이용한 예제 보다 반응속도가 빠르고 frame skip 을 저해 하는 요소도 비동기적으로 설계된 부분덕분에 없는 편 입니다만, 화면을 처리 하는 부분이 thread 대신 timer 로 만들어 테스트 해서 초당 화면 렌더링 속도는 떨어지는 편 인 듯 합니다. 제작이 완료 되는 대로 사용된 ffmpeg 및 예제 소스는 제 gitHub resource 중에 포함 시키도록 하여 GPL/LGPL 에 따라 공개 하도록 하겠습니다.
[FLTK] Fl_RGB_Image 소멸시 주의 사항. 금일 이전에 만든 Rotating 이 되는 이미지 를 고속으로 FLTK 로 그리는 작업을 실행 중에 고속으로 메모리가 증가 하는 문제가 발생 했습니다. 이는 Fl_RGB_Image 의 생성시 unsigned char 형태의 array 로 생성 되는 경우, 참조되는 array 가 생성하는 쪽에서 제거를 해야 하는 형태로 만들어 지는 것을 간과 했기 때문 입니다. Fl_Image.H 의 Fl_RGB_Image 생성자 부분을 보면, Fl_RGB_Image(const uchar *bits, int W, int H, int D=3, int LD=0) : Fl_Image(W,H,D), array(bits), alloc_array(0), id_(0), mask_(0) {data((const char **)&array..