2010-02-26 5 views
1

OpenGL을 사용하면 프래그먼트를 프레임 버퍼에 쓸 때 실행할 비트 단위의 논리 연산 (OR, XOR 등)을 설정할 수 있습니다.OpenGL의 glLogicOp와 동일한 DirectX가 있습니까?

저는 하나의 프레임 버퍼 픽셀을 사용하여 32 개의 슬라이스를 저장하는 빠른 장면 보셀 라이 제이션 (Elmar Eisemann의 논문에서 볼 수있는 것처럼)을 수행하고 싶습니다. 불행히도 저는 DirectX 9 환경에서 작업하고 있습니다. 뭔가를 놓치지 않으면 D3D는 이와 같은 비트 단위 연산을 지원하지 않습니다.

마음에 가장 먼저 떠오르는 것은 첨가제 블렌딩이지만 잘못된 결과가 나옵니다. 어떤 아이디어?

+0

조각 쉐이더? –

+0

조각 쉐이더는 프레임 버퍼에서 다시 읽을 수 없습니다 (SM 4.0에서도). – prideout

답변

1

아니, 당신은하지만 쉐이더를 에뮬레이션 할 수

다이렉트 X 9에서 동등한 없다. 그러나 Shader Model 4.0을 필요로하므로 DirectX 10 (GS/PS 및 텍스처 배열을 사용하여 수행했습니다). DirectX 11 Compute Shaders는 구현이 훨씬 쉽고 효율적이기 때문에 이제는 의미가 있습니다.

0

큰 문제는 DirectX가 파이프 라인을 통해 수레를 처리하도록 설정되어 있다는 것입니다 (텍스처에 쓰기 직전까지). 비트 연산이 2 개의 부동 소수점 사이에서 무엇을 기대합니까? 그것의 가능성은 당신이 기대하는대로 할 것입니다.

카드가 int를 지원할 수도 있지만이 기능은 DirectX의 작동 방식과 같이 사용자에게 "숨겨져 있습니다". 결과적으로 특정 카드가이를 지원한다고 보장 할 수 없습니다.

달성하려는 목표는 무엇입니까? 후에하는 일을하는 다른 방법이있을 수 있습니다.