glBlitFramebuffer를 사용하여 RGBA 색상 부착의 읽기 프레임 버퍼에서 R8 색상 첨부의 그리기 프레임 버퍼의 빨간색 구성 요소로 알파 구성 요소를 복사 할 수 있습니까? 그렇지 않다면 어떻게할까요?glBlitFramebuffer & swizzle
분명히 swizzle 마스크는 glBlitFramebuffer에서 사용되지 않습니다.
glBlitFramebuffer를 사용하여 RGBA 색상 부착의 읽기 프레임 버퍼에서 R8 색상 첨부의 그리기 프레임 버퍼의 빨간색 구성 요소로 알파 구성 요소를 복사 할 수 있습니까? 그렇지 않다면 어떻게할까요?glBlitFramebuffer & swizzle
분명히 swizzle 마스크는 glBlitFramebuffer에서 사용되지 않습니다.
GPU에서 메모리를 CPU로 다시 가져 오지 않고이 작업을 수행하는 유일한 방법은 렌더링 작업의 일부 형태입니다. 블리트는 그것을 할 수 없습니다.
사용할 수있는 경우 compute shader을 사용할 수 있습니다. Image Load Store을 통해 원본 이미지와 대상 이미지를 바인딩하고 계산 쉐이더의 호출 색인을 기반으로 읽기/쓰기를 수행하면됩니다.
그러나이 복사 작업을 통해 얻고 자하는 것이 무엇인지 정확하게 알 수 없습니다. GL_R8
텍스처를 바운드 텍스처/이미지로만 읽으려는 경우 RGBA 이미지의 view texture을 작성하기 만하면됩니다. 뷰를 만드는 이유는 뷰에 다른 swizzle mask을 부여 할 수 있기 때문입니다. 알파를 빨강으로 바꾸고 녹색/파랑/알파를 0,0,1로 설정하면됩니다.
명백히 진실한 GL_R8
텍스처로 액세스하는 것이 효율적이지는 않습니다. 하지만 잠재적으로 값 비싼 복사 작업을 수행 할 필요가 없습니다. GL 4.5 직접 주 액세스를 사용
호출
GLuint alpha_tex;
glCreateTexture(GL_TEXTURE_2D, &alpha_tex);
glTextureView(alpha_tex, GL_TEXTURE_2D, rgba_tex, GL_RGBA8, 0, num_mipmaps(rgba_tex), 0, 1)
GLint swizzleMask[] = {GL_ALPHA, GL_ZERO, GL_ZERO, GL_ONE};
glTexureParameteriv(alpha_tex, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask);
당신 덕분에 빠른 답변에 대한 많은 니콜을. 나는 최근의 OpenGL을 사용할 수 없기 때문에 다른 옵션을 사용하여 프래그먼트 쉐이더를 사용하려고합니다 : gl_FragColor = texture (samp, tc.xy); 소스의 현재 텍스처 스위 즐을 취할 것이지만, dest의 스위 즐을 취하지는 않습니다. 나는 shader에서 dest swizzle mask를 할 필요가 있다고 가정한다 : vec4 (texture (samp, tc.xy) .a) ex. – elmarco