2010-11-26 3 views
2

내 응용 프로그램은 픽셀 단위로 "애니메이션"을 생성하므로 효율적으로 그릴 필요가 있습니다. 특히 고해상도에서 만족스럽지 않은 결과를 가진 다양한 전략/라이브러리를 시도했습니다. 좋아,하지만 느린;빠른 픽셀 드로잉 라이브러리

  • SDL : 여기

    내가 무엇을 시도했다입니다

  • OpenGL : 비효율적 인 픽셀 연산;

  • xlib : 더 좋지만 여전히 느림;

  • svgalib, directfb, (다른 프레임 버퍼 구현) : 그들은 것 완벽한하지만 최종 사용자에 대한 설정을 확실히 너무 까다로운.

(참고 : 그렇게 저를 수정하시기 바랍니다 않다면 나는이 주장에 대한 어쩌면 틀렸다)와

  • 빠른 픽셀 그리기

    는 내가 필요하면 다음과 같다 OpenGL에 필적하는 연주;

  • 리눅스 (보너스 기능으로 크로스 플랫폼)에서 작동해야합니다.

  • 이중 버퍼링 및 수직 동기화를 지원해야합니다.

  • 하드웨어와 관련된 것은 휴대용이어야합니다.

  • 오픈 소스 여야합니다.

깨달음/아이디어/제안 사항을 제공해 주시겠습니까?

+2

좋은 해결책을 찾았습니까? 나는 똑같은 문제를 겪고있다. 1920x1080p 프레임의 각 픽셀을 수동으로 그릴 수있는 빠른 방법을 알아낼 수 없습니다. – Myforwik

+0

예, [접근 허용] (http://stackoverflow.com/a/4288283/477168)에 따르면 최상의 접근 방식은 OpenGL 텍스처 인 것으로 보입니다. – cYrus

+0

SDL 자체가 병목 현상이 아닌 X11로 판단됩니다. SDL이 추상 레이어이기 때문에 SDL 픽셀 조작을 변환하여 대기 시간의 소스 인 X11 백엔드를 사용합니다. X가없는 머신에서 SDL을 실행 해보면 이제는 Linux 프레임 버퍼에 직접 인쇄되기 때문에 상당히 빨리 실행된다는 것을 알 수 있습니다. –

답변

3

픽셀이 희박하거나 밀도가 있습니까 (예 : 비트 맵)? 밀집 비트 맵을 픽셀에서 생성하는 경우 비트 맵을 OpenGL 텍스처로 변환하고 OpenGL API를 사용하여 일부 프레임 속도에서 렌더링하는 것이 좋습니다.

기본적인 문제는 그래픽 하드웨어가 다른 하드웨어 플랫폼에서 매우 다르다는 것입니다. 어느 것이 든 속도가 느려지는 추상화 계층을 선택하거나 현재 존재하지 않는 그래픽 하드웨어 유형에 더 근접하게 코드를 작성하십시오.

+2

밀도. OpenGL 텍스처를 사용해 보겠습니다. 하지만 나에게 여전히 불분명 한 점이 있습니다. 예를 들어이 브라우저 창을 드래그하는 등 전체 화면을 다시 그리는 것이 이상하지는 않습니다. 내 애플리케이션에서 그런 페인트를 수행하려고 할 때 상황이 복잡해지는 이유는 무엇입니까? (바보 같은 질문에 대해 미안하다.) – cYrus

+0

결국 나는 이식 할 수없는 해결책을 받아 들인다. 그러나 최종 사용자를위한 설치의 용이성은 필수적이다. – cYrus

+1

+1 : 'OpenGL' 텍스처와 함께'PBO '를 사용하는 것이 가장 좋은 방법 인 것 같습니다. 감사. – cYrus

1

나는 당신이 무엇을 잘못하고 있는지 확실하지 않지만, 한 번에 하나씩 픽셀을 디스플레이 표면에 쓰고있을 수 있습니다.

하지 마십시오.

대신 디스플레이 화면과 동일한 형식으로 주 메모리 에 렌더링 화면을 생성 한 다음 렌더링 된 이미지 전체를 단일 작업으로 디스플레이에 복사합니다. 최신 GPU는 트랜잭션 당 매우 느리지 만 단일 작업으로 많은 양의 데이터를 매우 빠르게 이동할 수 있습니다.

+0

나는 그것을하지 않는다. 당신이 말하는 것은 더블 버퍼링이다. 'SDL'과'xlib'로 시도해 보았지만 모든 것을 향상 시켰지만 충분하지 않았습니다. – cYrus

0

렌더링 라이브러리 (opengl)와 윈도우 관리자 (SDL 및 xlib)가 혼동스럽게 보입니다.

챌린지를 원하면 창 관리자 (SDL, glut 또는 xlib)를 선택하고 이중 버퍼 모드를 활성화 한 다음 직접 렌더링을했는지 확인하십시오.

어떤 종류의 그래픽 카드가 있습니까? 대부분 GPU에서 픽셀을 처리합니다. OpenGL에서 픽셀 쉐이더를 만드는 방법을 찾으십시오. 픽셀 쉐이더는 픽셀 단위로 처리됩니다.

+4

'SDL'과'xlib'는 창 관리자가 아닙니다. 확실하게 그것의 주요 특징이 아니다. – cYrus

+0

@cYrus Hmmm은 그 진술을 뒷받침 할 수있는 링크를 가지고 있습니까? 나는 (예를 들면) SDL이 오디오를 할 수 있고, xlib이 원격 서버에 윈도우를 표시 할 수 있다는 것을 알고 있지만, 그들의 주된 기능은 윈도우를 관리하는 것이다. –

+0

www.libsdl.com에서 :«Simple DirectMedia Layer는 오디오, 키보드, 마우스, 조이스틱, OpenGL을 통한 3D 하드웨어 및 2D 비디오 프레임 버퍼에 낮은 수준의 액세스를 제공하도록 설계된 크로스 플랫폼 멀티미디어 라이브러리입니다. 그것은 MPEG 재생 소프트웨어, 에뮬레이터 및 "Civilization : Call To Power"와 같은 많은 유명한 게임에서 사용됩니다. » – cYrus

관련 문제