Я пытаюсь выполнить запрос окклюзии для двух треугольников, расположенных на разных Z в Android OpenGLES 3.0.
Вот как я использую:
In onSurfaceCreated():
GLES30.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
GLES30.glEnable(GLES30.GL_DEPTH_TEST); // enabling Deoth test
In onDrawFrame():
GLES30.glClear(GLES30.GL_DEPTH_BUFFER_BIT | GLES30.GL_COLOR_BUFFER_BIT);
Matrix.setIdentityM(mModelMatrix, 0);
Matrix.setIdentityM(mModelMatrix, 0);
Matrix.translateM(mModelMatrix, 0, 0.0f, 0.0f, 1.0f); // translating at some differnt z = 1.0
drawTriangle(mTriangle1Vertices); // method for drawing traingle1
Matrix.setIdentityM(mModelMatrix, 0);
Matrix.translateM(mModelMatrix, 0, 0.0f, 0.0f, 0.0f); // other triangle at Z = 0.0
// Occlusion Query for Triangle2
IntBuffer testBox = IntBuffer.allocate(1);
IntBuffer hasBeenTested = IntBuffer.allocate(1);
IntBuffer theParams = IntBuffer.allocate(1);
GLES30.glGenQueries(1, testBox);
int retid = testBox.get(0);
GLES30.glBeginQuery(GLES30.GL_ANY_SAMPLES_PASSED, retid);
drawTriangle(mTriangle2Vertices); // drawing traingle 2 ie at Z = 0.0
GLES30.glEndQuery(retid);
int retQuerry = testBox.get(0);
GLES30.glGetQueryObjectuiv(retid, GLES30.GL_QUERY_RESULT, theParams);
int isHidden = theParams.get(0); // THIS IS ALWAYS ZERO even if I REVERSE the Z- translation of the triangles
Log.i("occ", " isHiddedn " + isHidden);
GLES30.glDeleteQueries(1, testBox);
В методе drawTriangle()
я просто передаю цвет, вершину и MVP uinform в вершинный шейдер.
На экране моего устройства я вижу, что TRAINGLE 2 полностью перекрывается ТРЕУГОЛЬНИКОМ 1. Также, если я обращаю Z-перемещение, другой треугольник полностью перекрывается. Но все же результаты теста (isHidden) остаются прежними? Где я ошибаюсь? Как правильно провести тест на окклюзию?