Как отключить тест глубины, но включить обновление текстуры глубины (например, glDepthMask (GL_TRUE)) в металле? - PullRequest
1 голос
/ 04 апреля 2019

В OpenGL мы можем отключить тест глубины и обновлять текстуру глубины (текстура глубины привязывается к GL_DEPTH_ATTACHMENT FBO с помощью glFramebufferTexture2D) следующими способами:

glDisable(GL_DEPTH_TEST); 
glDepthMask(GL_TRUE);

glDisable(GL_DEPTH_TEST)означает, что все фрагменты будут "всегда проходить", поэтому я установил MTLCompareFunctionAlways в depthCompareFunction из MTLDepthStencilDescriptor.

glDepthMask(GL_TRUE) означает, что текстура глубины будет обновлена ​​со значением глубины фрагментов, каким бы оно ни былоранее имел.В металле я установил true на depthWriteEnabled из MTLDepthStencilDescriptor.

К сожалению, окончательный результат рендеринга неверен.Это я правильно понимаю?Если да, то как правильно установить его в металле.

1 Ответ

0 голосов
/ 08 апреля 2019

Даже если буфер глубины существует и маска глубины не равна нулю, буфер глубины не обновляется, если тест глубины отключен. Для безусловной записи в буфер глубины тест глубины должен быть включен и установлен на GL_ALWAYS с помощью glDepthFunc.

...