mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-12 14:18:31 +09:00
[Test] (MG_Test): expect buffer-texture level queries to answer, not to error
This commit is contained in:
@@ -4194,24 +4194,30 @@ TEST_F(TextureTest, CopyTexImage1DReportsUnsupportedInsteadOfTerminating) {
|
|||||||
ExpectSingleGlError(GL_INVALID_OPERATION);
|
ExpectSingleGlError(GL_INVALID_OPERATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(TextureTest, GetTexLevelParameterOnBufferStorageReportsErrorInsteadOfTerminating) {
|
TEST_F(TextureTest, GetTexLevelParameterAnswersBufferStorageGeometry) {
|
||||||
// TextureStorageType is {Mipmap, Buffer} and the level queries only answer out of a mipmap
|
// TextureStorageType is {Mipmap, Buffer} and the level queries used to answer only out of a
|
||||||
// chain, so every glGetTexLevelParameter* on a GL_TEXTURE_BUFFER texture reached a
|
// mipmap chain, so every glGetTexLevelParameter* on a GL_TEXTURE_BUFFER texture reached a
|
||||||
// THROW_UNIMPL_EXCEPTION default: label and killed the process.
|
// THROW_UNIMPL_EXCEPTION default: label and killed the process. It now answers out of the
|
||||||
|
// attached buffer range instead (GL 4.6 core 8.9): a buffer texture is one-dimensional, and
|
||||||
|
// with no buffer attached it addresses no texels at all.
|
||||||
GLuint texture = 0;
|
GLuint texture = 0;
|
||||||
MG_Impl::GLImpl::CreateTextures(GL_TEXTURE_BUFFER, 1, &texture);
|
MG_Impl::GLImpl::CreateTextures(GL_TEXTURE_BUFFER, 1, &texture);
|
||||||
MG_Impl::GLImpl::BindTexture(GL_TEXTURE_BUFFER, texture);
|
MG_Impl::GLImpl::BindTexture(GL_TEXTURE_BUFFER, texture);
|
||||||
MG_Impl::GLImpl::TexBuffer(GL_TEXTURE_BUFFER, GL_R8, 0);
|
MG_Impl::GLImpl::TexBuffer(GL_TEXTURE_BUFFER, GL_R8, 0);
|
||||||
DrainPendingGlErrors();
|
DrainPendingGlErrors();
|
||||||
|
|
||||||
for (const GLenum pname : {GL_TEXTURE_WIDTH, GL_TEXTURE_HEIGHT, GL_TEXTURE_DEPTH}) {
|
const std::pair<GLenum, GLint> expectations[] = {
|
||||||
|
{GL_TEXTURE_WIDTH, 0}, {GL_TEXTURE_HEIGHT, 1}, {GL_TEXTURE_DEPTH, 1}};
|
||||||
|
for (const auto& [pname, expected] : expectations) {
|
||||||
GLint intParam = 0x20202020;
|
GLint intParam = 0x20202020;
|
||||||
MG_Impl::GLImpl::GetTexLevelParameteriv(GL_TEXTURE_BUFFER, 0, pname, &intParam);
|
MG_Impl::GLImpl::GetTexLevelParameteriv(GL_TEXTURE_BUFFER, 0, pname, &intParam);
|
||||||
ExpectSingleGlError(GL_INVALID_OPERATION);
|
EXPECT_EQ(MG_Impl::GLImpl::GetError(), static_cast<GLenum>(GL_NO_ERROR));
|
||||||
|
EXPECT_EQ(intParam, expected) << "pname " << pname;
|
||||||
|
|
||||||
GLfloat floatParam = 12345.0f;
|
GLfloat floatParam = 12345.0f;
|
||||||
MG_Impl::GLImpl::GetTexLevelParameterfv(GL_TEXTURE_BUFFER, 0, pname, &floatParam);
|
MG_Impl::GLImpl::GetTexLevelParameterfv(GL_TEXTURE_BUFFER, 0, pname, &floatParam);
|
||||||
ExpectSingleGlError(GL_INVALID_OPERATION);
|
EXPECT_EQ(MG_Impl::GLImpl::GetError(), static_cast<GLenum>(GL_NO_ERROR));
|
||||||
|
EXPECT_EQ(floatParam, static_cast<GLfloat>(expected)) << "pname " << pname;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user