2016-11-18 6 views
-1

OpenGL에서 삼각형에 원 텍스처를 렌더링했습니다. 이것은 잘 작동합니다.opengl : 플랫폼간에 블렌딩 결과가 일치하지 않습니다.

GL_BLEND를 활성화하고 원하는 색상을 설정 한 다음 GL_ONE 및 GL_ONE_MINUS_SRC_ALPHA와 함께 glBlendFunc를 사용합니다. 내 주요 플랫폼에

glEnable(GL_BLEND); 
glBlendFunc(GL_ONE,GL_ONE_MINUS_SRC_ALPHA); 
glColor4(0x0,0xCC,0x0,0xFF); 

는 (리눅스) 나는 어떤 사각형 배경을 하나의 원을했다 렌더링하지 않으며, 예상대로 서로 보이는 옆에 동그라미를 렌더링 어디, 원하는 결과를 얻을 수 있습니다.

그러나 플랫폼을 변경하면이 경우 Windows 10으로 바뀌고이 문제는 Windows-Linux 문제 일뿐만 아니라 하드웨어 의존도가 아닌지 의심 스럽습니까? 이 결과를 얻을 수 있습니다. green circles

대신 반투명 한 흰색 배경으로 보이는 원 ​​텍스처가 렌더링됩니다. 따라서 서로의 위에 원을 그리면 이상한 결과가 나타납니다.

첫 번째 blendfunc 매개 변수로 GL_SRC_ALPHA를 사용하면 문제가 제거되지만 플랫폼간에 다시 일치하지 않는 문제는 텍스처가 가장자리 주위에 회색으로 표시됩니다.

+0

동일한 조건에서 테스트했는지 확인하십시오. 질감에 알파가 무엇입니까? (이미지 로더 문제 일 수 있으며 GL 자체가 아닐 수 있습니다)? 두 플랫폼 모두에서 gfx/드라이버는 무엇입니까? 두 플랫폼 모두에서 귀하의 픽셀 포맷은 무엇입니까? (r, g, b, a 당 비트) – Spektre

+0

@Spektre 특히, 내 이미지는 255 알파가없는 픽셀 외부에 0 알파가있는 [this] (http://i.imgur.com/Fvzd68b.png)입니다. 'glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 너비, 높이, 0, GL_BGRA, GL_UNSIGNEDBYTE, scan0);을 사용하여로드되고 벌금이로드되고'glGenerateMipMap'도로드 후에 사용됩니다. 나는 리눅스에서 [radeon 오픈 소스 드라이버] (https://wiki.freedesktop.org/xorg/radeon/)를 사용하고 있으며 Radeon R9 280x 용 Windows의 최신 드라이버는 구형이 아닙니다. 카드. 마지막으로, 내 pixelformat은 32 비트/픽셀 (8888)입니다. – cloud

+0

'glTexImage2D'는 이미지를 CPU 메모리에서 GL 메모리로 텍스처로로드하지만 파일에서 CPU 메모리로 이미지를 어떻게로드 했습니까? (즉, 이미지 로더 및 그 동작은 플랫폼에 따라 다를 수 있음) – Spektre

답변

0

불일치는 결국 플랫폼 당 이미지 로더의 구현과 다른 것처럼 보이지만 흥미롭게도 이미지 로더를 변경하여 해결하지 못했습니다.

나는 방금 이미지가 저장되는 방식을 변경했습니다. 김프에서 프로세스는 다음과 같습니다. 이미지 내보내기 (png) -> "배경색 저장"비활성화 - "투명한 픽셀에서 색상 값 저장"을 비활성화하면 문제가 더 이상 나타나지 않습니다.