2016-08-17 1 views
0

OpenGL ES 3.1 프로그램을 작성 중이고 실행중인 장치 (Android 6에서 실행 중임)의 최대 작업 그룹 크기를 알고 싶습니다.계산 쉐이더에 대한 최대 작업 그룹 크기를 얻으시겠습니까?

GL_MAX_COMPUTE_WORK_GROUP_COUNTGL_MAX_COMPUTE_WORK_GROUP_SIZE 잘 작동 질의 PC의 경우

,하지만 난

OpenTK 코드 같은 것을하려고 할 때 안드로이드에, 나는 OpenGL error: InvalidEnum을 얻기 위해 동등 할 것 캔트 : 네이티브와

int[] work_grp_cnt = new int[3]; 
GL.GetInteger(All.MaxComputeWorkGroupCount, work_grp_cnt); 

같은 Android API :

int[] work_grp_cnt = new int[3]; 
IntBuffer maxCount = IntBuffer.Allocate(3); 
GLES20.GlGetIntegerv(GLES31.GlMaxComputeWorkGroupCount, maxCount); 
maxCount.Get(work_grp_cnt); 

(두 경우 모두 GLGetInteger가 동일한 InvalidEnum 오류를 발생시킵니다.) OpenGL ES 3.1에서 이것이 가능합니까?
소니 Xperia Z5를 사용하고 있습니다.

답변

1

C에서는 색인을 취하는 glGetIntegeri_v으로 전화해야합니다. GL_MAX_COMPUTE_WORK_GROUP_COUNT의 경우 색인은 쿼리하려는 차원입니다. 한 번에 하나의 값만 반환합니다.

이 기능과 동일한 Java를 찾아 사용해야합니다.

+0

. 또한 오류가 OpenGL쪽에 있는데, 잘못된 API를 호출한다고 생각합니다. 제안한 구문과 틀린 것은 아닙니다. – sydd

+0

그건 같은 기능이 아닙니다. "i_"부분이 중요합니다. –

+0

고마워, 네가 맞아. 다른 답변으로 작업 코드를 게시했습니다. – sydd

2

@ NicolBoas가 지적했듯이 잘못된 함수를 호출했습니다. Heres는 작업 코드 :

OpenTK :

 GL.GetInteger(All.MaxComputeWorkGroupCount, 0, out work_grp_cnt[0]); 
     GL.GetInteger(All.MaxComputeWorkGroupCount, 1, out work_grp_cnt[1]); 
     GL.GetInteger(All.MaxComputeWorkGroupCount, 2, out work_grp_cnt[2]); 

     GL.GetInteger(All.MaxComputeWorkGroupSize, 0, out work_grp_size[0]); 
     GL.GetInteger(All.MaxComputeWorkGroupSize, 1, out work_grp_size[1]); 
     GL.GetInteger(All.MaxComputeWorkGroupSize, 2, out work_grp_size[2]); 

기본 안드로이드 : 내 기능은 동일한 오류에 대한 자바를 추가 한

 GLES31.GlGetIntegeri_v(GLES31.GlMaxComputeWorkGroupCount, 0, work_grp_cnt, 0); 
     GLES31.GlGetIntegeri_v(GLES31.GlMaxComputeWorkGroupCount, 1, work_grp_cnt, 1); 
     GLES31.GlGetIntegeri_v(GLES31.GlMaxComputeWorkGroupCount, 2, work_grp_cnt, 2); 

     GLES31.GlGetIntegeri_v(GLES31.GlMaxComputeWorkGroupSize, 0, work_grp_size, 0); 
     GLES31.GlGetIntegeri_v(GLES31.GlMaxComputeWorkGroupSize, 1, work_grp_size, 1); 
     GLES31.GlGetIntegeri_v(GLES31.GlMaxComputeWorkGroupSize, 2, work_grp_size, 2);