OpenGL의 그래픽 코드에서 어떻게 가장 효과적인 자동 테스트를 단위 테스트하거나 수행 하시겠습니까?


17

C ++의 OpenGL 위에 게임과 함께 제공되는 그래픽 엔진을 작성하고 있습니다. 또한 우수한 코딩 프로세스와 자동화 된 테스트의 팬이기도합니다. 그래픽 코드 + 테스트는 출력이 시각적으로 만 보이거나 매우 시각적으로 지향되기 때문에 매우 비합리적입니다.

예를 들어, 바이트 단위로 화면에 렌더링되는 원시 이미지 스트림을 분석한다고 상상해보십시오. 비교할 테스트 데이터가 필요합니다. 생성 / 구현이 어렵고 렌더링 된 이미지가 동일하지 않은 경우가 많습니다. 다른 시간에 실행될 때 바이트 수준-알고리즘의 작은 변경으로 인해이 접근법이 완전히 망칠 수 있습니다.

기본적으로 다른 테스트 장면을 렌더링하고 그림자 매핑, 애니메이션 등을 표시 할 수있는 시각적 단위 테스트 스위트를 만들려고합니다. CI의 일부로 이러한 장면은 비디오로 렌더링됩니다. 다른 측정 항목을 가진 파일 (또는 실행 파일로 남겨 둘 수도 있음)입니다. 그래도 비디오 파일을 수동으로 검사해야하지만 다소 자동화되고 표준화되어야합니다.

어떻게 생각해? 더 좋은 방법이 있기를 바라고 있습니까?


2
이것은 좋은 질문 입니다. 전에 gamedev.stackexchange.com 에서 더 나은 답변을 얻을 수 있을지 궁금합니다 .
FrustratedWithFormsDesigner 2016 년

3
OpenGL을 사용하므로 Khronos 그룹 이이 API에 대한 적합성 테스트 를 수행하는 방법을 연구하십시오 . 프로젝트를 처리 한 전 프로젝트의 동료들은 Khronos 그래픽 테스트가 완벽에 가깝다고 말합니다.
gnat

@FrustratedWithFormsDesigner 고마워, gamedev.stackexchange에 대해 완전히 잊어 버렸습니다 ... 프로그래머를 완전히 철저히 검색했지만 그중 하나는 아닙니다. 단위 테스트에 대한 대부분의 답변은 일반적으로 테스트되는 것들에 초점을 맞추는 것처럼 보이므로 중복되지 않을 수도 있습니다. 감사합니다. :)
Max

답변:


8

opencv 이미지 처리 라이브러리는 이미지를 저장하고 참조 이미지와 비교하여 수행합니다 . 근사한 이미지 일치 등을 처리 하는 많은 C ++ 테스트 함수와 매크로 가 있습니다.


좀 더 깊이 확인하려고하지만 그 페이지는 대략적인 이미지 일치에 대해 아무 말도하지 않습니다. 프레임을 비교할 때 회귀 테스트에 효과가 있는지 알고 있습니까? 그런 다음 장면을 처음 렌더링 할 때 육안으로 검사 할 수 있습니다. OpenCV에 사용할 수있는 준비된 기능이 있습니까? : p
Max

@max는 일반적으로 참조 프레임을 생성하고 테스트를 만들 때 한 번 실행되는 테스트 기능의 '골드'버전이 있습니다. 배포판에는 몇 가지 "테스트 이미지 비교"매크로가 있습니다. 내가 거기 이미지에 OpenGL을 버퍼를 다시 읽어 아무것도의 특정는하지만 쉽게 충분히 생각하지 않습니다
마틴 베켓

4

테스트 프레임 워크는 테스트 이미지를 버퍼로 렌더링하고 렌더링 된 이미지를 검색하여 해당 목적을 위해 이전에 생성 된 "골든"참조 이미지와 비교할 수 있습니다.

테스트 결과가 정확히 동일 하게 유지되지 않을 경우에는이 방법이 효과적이지 않습니다 . 그러나 테스트 및 참조 이미지의 제곱 차이를 계산하여 임계 값과 비교할 수 있습니다.

성능의 주요 회귀는 또 다른 가능한 실패 모드이므로 성능 데이터 로깅 및 확인을 제공 할 수도 있습니다.


4

출력 이미지를 비교할 수 없더라도 최소한 렌더링이 적절하게 완료되는지 테스트 할 수 있습니다 (충돌, 대기 시간 등). 물론 이미지를 확인하는 방법을 찾는 것이 더 좋지만, 이미지가없는 경우에도 테스트에서 얻은 것이 있습니다.


2
정확히 : 비슷한 질문에 답하려고했습니다 ( "만약 맹목적으로 비디오 파일을 생성하는 단위 테스트가 있고 사소한 테스트를 수행하는 경우에도 (예 : 올바른 길이, 완전히 검은 색이 아니고 완전히 흰색이 아닌)) 충분할 수 있습니다. 많은 회귀 오류를 잡을 수 있습니다. 특히 단순히 함수에서 예외를 발생시키는 오류가 발생했습니다. ") 그러나 두 번째 유사한 답변이 필요하지 않으므로 여기에 의견으로 남겨 두십시오.
user281377
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.