2014-04-24 3 views
0

GLES 2.0 사양에서는 RGBA4444가 프레임 버퍼에 유효한 색상 유형이라고 말합니다. 텍스쳐로 렌더링 할 때 어떻게 알파 채널에 데이터를 쓸 수 있습니까? 조각 쉐이더에서 할 수 있습니까? ES 2.0을 지원하는 모든 iOS 및 Android 기기에서 사용할 수없는 확장 프로그램을 사용하지 않고도이 작업을 수행 할 수 있습니까?프레임 버퍼 컬러 버퍼의 알파 채널에 쓰기

이것은 혼란의 원형 크기가 알파 채널의 각 픽셀에 인코딩 될 수있는 피사계 심도 효과에 유용합니다.

또한 알파 채널에 쓰는 데 특별한 프래그먼트 셰이더가 필요하지 않는 것이 좋습니다. 그렇지 않으면, 쉐이더를 블러 계산에 사용 된 프레임 버퍼에 렌더링 할 때와 메인 버퍼에 직접 렌더링 할 때 모든 쉐이더를 스왑 아웃해야합니다.

답변

0

예 조각 쉐이더에서 알파 채널을 변경할 수 있습니다. 조각 쉐이더에서 알파 채널에 액세스하기위한 특정 확장 기능이 필요하지 않습니다. 데이터는 다음과 같이 쉽게 작성할 수 있습니다.

gl_FragColor.a = your_float_value; // set alpha separately 
gl_FragColor = your_vec4_value; // alpha is a part of vec4 value (a or w component) 

적절한 알파 값을 계산하고 알파 채널을 설정하려면 셰이더를 변경해야합니다.

+0

프레임 버퍼에 쓰는 것에 대해 이야기하고 있습니다. 이것은 프래그먼트 셰이더의 알파 색상으로, 사용자가 설정 한 blendfunc에서 사용됩니다. 내가 알고 싶은 것은 텍스처 (프레임 버퍼 컬러 버퍼)에 렌더링 할 때 텍스처의 알파 채널에 쓰는 방법입니다. – Tenfour04

+0

블렌딩은 FBO 또는 기본 프레임 버퍼로 드로잉하는 것과 같은 방식으로 작동합니다. 기본 혼합 함수는 단편의 색상에 ** 1.0 **을 곱한 다음 색상 버퍼에 씁니다. 기술적으로 색상 버퍼의 기존 색상에 ** 0.0 **을 곱하고 그 값을 더합니다. 그러나 ** 0.0 **을 곱하면 왜 무시할만한 가치가 있는지 설명 할 필요가 없습니다. 그럼에도 불구하고 기본 프레임 버퍼의 픽셀 형식은 여기에서 전혀 관련이 없습니다. 알파 채널 (예 :'GL_RGBA8')을 저장하는 *** 텍스처 이미지 ***가 필요합니다. –

0

RGBA4444를 사용하면 성능이 현저하게 향상 될 수 있습니다. 결국 각 색상 + 알파의 비트 해상도는 8888 카운터 파트의 절반입니다.

내가 아는 한, 형식을 반영하기 위해 텍스처를 변환해야합니다.

8888 형식에서 일반적으로 따르는 방식이 다소 번거롭기 만 한데요.

또 다른 작업은 실제 사용하기 전에 텍스처 형식을 변환하는 것이지만 결국에는 비용이 많이 드는 과정입니다.

는 여기에 대해 매우 좋은 논의가 :

Creating and loading .pngs in RGBA4444 RGBA5551 for openGL

내가 어떤 식 으로든 도움이 되었으면합니다.

마우리 지오

+0

텍스쳐로 렌더링하는 것에 대해 말하고 있습니다. 모든 장치가 ESA 2.0 사양에 없기 때문에 컬러 쓰기 가능한 프레임 버퍼에 대해 RGBA8888을 지원하지는 않습니다. 그러나 그것은 그 요점입니다. 텍스처에 렌더링 할 때 컬러 버퍼의 알파 채널에 쓰는 방법을 묻습니다. – Tenfour04