So I'm trying to create a Multisampled depth texture and I'm seeing some oddities.
First off, this GLES2-like call works :
glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, Width, Height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, NULL );
But then I can't use it for the multisampled texture :
glTexStorage2DMultisample( GL_TEXTURE_2D_MULTISAMPLE, 4, GL_DEPTH_COMPONENT, Width, Height, GL_TRUE );
It throws GL_INVALID_ENUM and reading the docs it can only be from texture target which is ok so the next wrong thing is GL_DEPTH_COMPONENT .
Then I tried creating GL_DEPTH_COMPONENT16,24 and 32 textures
glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, Width, Height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, NULL );
glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, Width, Height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL );
glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32F, Width, Height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL );
And while they all work I don't see my depth buffer based effects like depth of field so I can only assume the values are either not being saved (all 0s) or the format is wrong, like I would need an integer sampler. I am expecting in these scenarios to use a standard sampler2D and get a .r-only texture with values from 0..1 . I have the exact same issue with Qualcomm's Adreno 320, but I don't have it with Apple's A7 GPU or my AMD R9 280X.
Am I doing something wrong ?
Hi,
You stated that this works:
Specifically saying:
glTexImage2D works with just GL_DEPTH_COMPONENT as intenalformat
This doesnt seem correct to me, as it appears to be out of spec. It shouldnt work, and if it does, this could be a bug.
The spec states for glTexImage2D, you have to specify GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24, or GL_DEPTH_COMPONENT32F for the internalformat, NOT GL_DEPTH_COMPONENT.
https://www.khronos.org/opengles/sdk/docs/man3/html/glTexImage2D.xhtml
Regards,
Michael McGeagh
Yes, but since GLES2 uses the same glTexImage2D and because there is just GL_DEPTH_COMPONENT in GLES2 then it should work since GLES3 is backwards compatible, is it not ?
Very good point. The man pages should probably state that a bit more clearly.
Is it possible that you could provide us with a minimal reproducer for this issue? There isn't anything obviously wrong with your API usage at this point, so would help if we could do some analysis on the API trace.
Thanks,
Chris
Well I just have my benchmark app ( Relative Benchmark ) with which I could reproduce that but It's fairly complex and has a lot of draw calls and passes. I still have some visual errors when toggling features on and off though, like if you turn Motion Blur on high on and then off, most objects disappear although the log doesn't contain any errors ( I log most things to the android log including KHR_debug callbacks and calling glGetError after every API call )