2014-04-15 2 views
2

내 프로젝트의 목적은 Android 디바이스에서 라이브 카메라 피드를 얻고, OpenCL을 사용하여 해당 이미지에서 실시간 필터링을 수행하고 디스플레이에 출력을 렌더링하는 것입니다.OpenCL clCreateFromGL 다른 텍스처 타겟을 사용하는 텍스처

저는 이것을 실시간으로 수행하기 위해 OpenCL-OpenGL interop을 사용하고 있습니다.

EGLContext와 EGLDisplay를 사용하여 공유 컨텍스트를 성공적으로 만들었습니다. 이제는 OpenCL 커널에서이 이미지에 액세스 할 수 있도록 clCreateFromGLTexture를 사용하려고합니다. 그러나 문제는 안드로이드는 텍스처를 바인딩 할 때 타겟이 GL_TEXTURE_EXTERNAL_OES (여기서는 http://developer.android.com/reference/android/graphics/SurfaceTexture.html) 여야합니다.하지만이 텍스처 타겟은 clCreateFromGLTexture (https://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateFromGLTexture2D.html)를 사용할 때 유효한 텍스처 타겟이 아닙니다.

그래서이 문제를 해결하는 방법을 모르겠습니다.

내가 안드로이드에 GL 텍스처를 만드는 방법이 있습니다 :

GLES20.glGenTextures(1, texture_id, 0); 
    GLES20.glBindTexture(texture_target, texture_target); 

을하고이 나는 CL 메모리 개체 만들려고하고 있어요 방법입니다

glTexImage2D(texture_target, 0, GL_RGBA, 640, 480, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 
    cl_mem camera_image = clCreateFromGLTexture(m_context, CL_MEM_READ_WRITE, texture_target, 0, texture_id, &err); 

내가하려고 할 때 내가 오류를 GL 텍스처로부터 cl 메모리 객체를 생성하는 것은 CL_INVALID_VALUE입니다.

저는 OpenGL을 처음 접했기 때문에 내가 보았을지도 모르는 기본적인 것이있을 수 있습니다.

답변

0

카메라에서받은 텍스쳐는 예상했던 일반적인 텍스쳐가 아닙니다. 셰이더에서 읽는다면 확장자를 쉐이더에 지정해야합니다.

GL_TEXTURE_EXTERNAL_OES 타겟에서 일반적인 방법으로 생성 된 다른 텍스처로 추가 사본을 수행해야합니다. 운이 좋으면 두 가지 모두를 fbo 's에 바인딩 한 다음 blit을 실행하면됩니다. 그래도 작동하지 않는다면 항상 렌더 텍스처로 일반 텍스처를 사용하고 카메라 이미지로 쿼드 텍스처를 그릴 수 있습니다.

+0

안녕하세요 sharpneli, 답장을 보내 주셔서 감사합니다. OpenGL ES 참조 페이지 (http://www.khronos.org/opengles/sdk/docs/man/)를 읽었으나 GL_TEXTURE_EXTERNAL_OES를 FBO에 바인딩하는 방법을 찾을 수 없습니다. 일반 텍스쳐를 렌더링 타겟으로 사용하여 어떤 의미인지 자세히 설명해주십시오. 미안 OpenGL을 처음 접했을 때이 모든 전문 용어를 이해하려고합니다. – amirhbp

관련 문제