본문 바로가기

FLTK

(45)
[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 RTSP player ver 0.3.9.60 이번 버젼은 오디오 응답성을 제외 하고 비디오 자원 낭비를 줄이고 (이전 버젼은 너무 빨리 그려서 이전 버퍼까지 그리는 바람에 떨림처럼 보이는 문제가 있었습니다) 덤으로 CPU 낭비도 줄였습니다. 이미 그린 프레임은 그리지 않으며, 이로 인해 pause->resume 시 약간의 딜레이가 있을 수 있습니다. 현재 지원은 사실상 들어오는 비디오 크기 모든 사이즈를 지원 하며 (720p, 1080p, 또는 2K, 4K 등등 ..) 이는 전적으로 CPU 성능에 렌더링 프레임 수가 차이가 나게 됩니다. Intel Core i5-4460 기준으로 1080p 60Hz 는 30+ frames/sec 로 그릴 수 있습니다. CPU 사용률은 20% 정도를 사용하고, 720p 는 역시 30+ frames/sec 로 그립니다..
FLTK를 이용한 RTSP stream player (Win32) 이 프로그램은 현재 제작중인 엔진을 테스트 하기 위해 만든 프로그램이나, 일반적인 RTSP 환경에서도 쓸 수 있기 때문에 공개 합니다. 다만 이 프로그램은 PC 성능에 따라 rendering performance 가 차이가 날 수 있음을 먼저 밝히며, 오디오 기능이 빠져 있음을 알리는 바 입니다. 접속은 프로그램 실행시 바로 선택 할 수 있으며 기본으로 rtsp protocl 을 모두 지정해서 써 주셔야 합니다. 기본으로 테스트를 위해 만든 프로그램이다 보니 주소 오류에 대해서는 처리가 안되어 있음을 인지 해야 합니다. RTSP 서버에 붙게 되면 위 화면처럼 해당 스트림 크기로 자동으로 창이 조절 되면서 실행 됩니다. 아쉽게도 별도로 윈도우 크기를 조절할 수 있도록 만들어 지지는 않았습니다. 이 프로그램..
[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..
FLTK 1.3.3 TS(Thread Safe) Project 현재 GUI 시장에서 사실 QT 와 같은 덩치가 큰 GUI 도 있겠지만, 간단한/가벼운 걸 만드는데 과연 저 무거운걸 써야 하나? 라는 고민을 해야 하는 사람에게 FLTK 는 꽤 좋은 선택일 것 입니다. 그러나, FLTK 는 구조상 Thread 상에서 GUI 갱신을 무자비 하게 되면 알수 없는 Lock up 에 걸리는 문제가 생깁니다. (이 부분은 Fl.cxx 내에 구현된 wait/flush 관련 부분의 고질적인 문제로 파악이 되고, 특히 Windows 의 경우 HDC 와 HWND 의 무결성 검사 부분이 많이 누락되어 있습니다. (TTF 처리 부분 역시) 그래서 개인적으로 FLTK 1.3.3 을 기준으로 일부 코드를 수정한 TS 모델을 진행 중 입니다. 그래서 이름이 FLTK-1.3.3-TS 이며, 이는..
[FLTK] Fl_Group 을 이용한 화면 분할 및 자동 크기 조정. FLTK 는 Windows 나 X11 에서 창의 크기를 조정 할 수 있도록 만들어 져 있습니다만, 기본적으로 resize 를 지원 할 경우 최초 만들어진 창의 크기에 각 위젯(Fl_Widget) 들이 만들어진 크기의 비율(ratio) 로 그 크기가 조정 되게 됩니다. 이런 방법은 최초 만들어진 UI 의 디자인적 요소를 해치지 않고 그 비율을 유지 한다는 장점이 있을 수도 있지만, 좀 더 detail 한 UI 를 적용 하는데 있어서는 오히려 해가 되는 경우가 있습니다. 예를 들어 다음과 같이 만들어진 프로그램의 경우, 최초 실행되는 크기에서 윈도우 크기를 변경 할 경우 비율대로 커지게 되면 다음과 같이 글자 크기만 빼고 비율 대로 늘어지는 모습을 가지게 됩니다. 비율대로 커지는것 까지는 좋게 생각할 수 있..
[FLTK] X11/nano-X 에서 FLTK 화면 flushing FLTK 를 X11 이나 nano-X 에서 그리는 경우 화면 갱신을 Fl::check(); 또는 Fl::wait(); 등으로 갱신 시키지 않는 방법으로 이전의 글을 posting 했습니다만, 실제 nano-X 에서는 XFlush() 를 쓰지 않고 갱신 하는 것이 좀 더 안정이 있는 것으로 판단 되어 수정된 코드를 올립니다. 특히 XFlush() 는 thread-unsafe 이므로 중복으로 호출 되는 경우가 없어야 하는 것을 고려 해야 하므로 static bool 변수를 하나 사용하여 중복 호출의 위험을 줄였습니다. #ifdef _WIN32 #include #else #include #endif static bool isRedrawingFLTK = false; void RedrawFLTK() { if ( ..