Quick Flow
단색 clear도 안 보임 → 창·현재 컨텍스트·기본 FBO·swap·크기
단색 clear는 보임 → 셰이더·VAO·draw·좌표·깊이·컬링
삼각형은 보임 → 텍스처·uniform·입력 데이터·패스 연결
특정 패스만 실패 → FBO·viewport·읽기/쓰기 충돌·이전 상태한 번에 모든 설정을 바꾸지 않고, 실패가 시작되는 가장 작은 출력을 찾습니다. 이 순서는 개발자가 진단할 때 사용하는 절차이며 특정 GPU에서의 실행 결과를 전제로 하지 않습니다.
증상별 첫 확인
| 증상 | 먼저 확인할 계약 | 연결 |
|---|---|---|
| 창이 없거나 즉시 닫힘 | 버전 요청·오류 콜백·초기화 반환 | 초기화 |
| clear 색도 안 보임 | framebuffer 0·픽셀 크기·write mask·scissor·swap | 프레임·출력 |
| clear만 보이고 메시 없음 | compile/link·gl_Position·VAO·count·컬링 | 정점·프로그램 |
| 모양이 길게 늘어짐 | stride·offset·타입·인덱스 범위 | 입력 레이아웃 |
| 물체가 전부 한 점 | 0인 행렬 uniform·잘못된 위치·w 성분 | 행렬 |
| 텍스처만 검거나 흰색 | 유닛·sampler 타입·밉 완전성·UV | 텍스처 |
| 다음 프레임부터 실패 | 상태 복원·자원 수명·갱신 순서 | 객체·패스 |
고정 출력으로 분리
문제가 있는 프래그먼트 셰이더를 임시로 일정한 색 출력으로 바꾸면 텍스처·조명 계산과 위치 입력을 구분할 수 있습니다. 단, 실패하는 프로그램을 사용 중인 상태에서 재링크할 때는 링크 성공과 uniform 재설정을 함께 확인합니다.
#version 330 core
out vec4 color;
void main() {
color = vec4(1.0, 0.0, 1.0, 1.0);
}이 출력이 보이면 텍스처·조명 경로를 차례로 복원합니다. 보이지 않으면 프래그먼트 계산 이전의 정점·위치·래스터 상태를 봅니다. 깊이·컬링·블렌드·scissor를 진단 목적으로 단순화할 수 있지만, 원인을 찾은 뒤 제품의 의도한 상태로 돌려야 합니다.
캡처에서 읽는 정보
지원되는 그래픽스 캡처 도구에서는 draw 직전 파이프라인, 실제 입력 버퍼, 프로그램, 첨부 이미지와 픽셀 이력을 확인합니다. 사용 도구의 OS·OpenGL 프로파일 지원부터 확인합니다. 캡처 도구를 설치해야만 레퍼런스를 사용할 수 있는 것은 아니며, 오류·컴파일 로그와 최소 코드 분리도 유효한 방법입니다.
프레임 끝만 보지 말고 처음 잘못된 자원이 만들어지거나 연결된 draw를 찾습니다. CPU 코드의 변수 이름과 실제 바인딩이 같다고 가정하지 않습니다. 오류와 메시지의 객체 라벨·패스 그룹이 위치를 찾는 데 도움이 됩니다.
버전 혼합의 전형적 증상
Core 3.3에 glBegin·행렬 스택·고정 텍스처 enable을 섞은 경우는 상태 하나를 더 켜는 것으로 해결되지 않습니다. 요구 프로파일을 맞추거나 전체 그리기 경로를 현대 방식으로 옮깁니다. 반대로 상위 DSA·compute 호출은 함수 로딩과 실제 기능 지원이 필요합니다.
오류 없음, 링크 성공, FBO COMPLETE는 각각 좁은 조건의 증거입니다. 이 세 가지가 모두 맞아도 잘못된 변환·색 공간·draw 순서로 의도와 다른 화면이 나올 수 있습니다. 전체 삼각형 예제를 최소 비교 기준으로 사용할 수 있습니다.
참고 링크
4 sources