mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-08 20:28:32 +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);
|
||||
}
|
||||
|
||||
TEST_F(TextureTest, GetTexLevelParameterOnBufferStorageReportsErrorInsteadOfTerminating) {
|
||||
// TextureStorageType is {Mipmap, Buffer} and the level queries only answer out of a mipmap
|
||||
// chain, so every glGetTexLevelParameter* on a GL_TEXTURE_BUFFER texture reached a
|
||||
// THROW_UNIMPL_EXCEPTION default: label and killed the process.
|
||||
TEST_F(TextureTest, GetTexLevelParameterAnswersBufferStorageGeometry) {
|
||||
// TextureStorageType is {Mipmap, Buffer} and the level queries used to answer only out of a
|
||||
// mipmap chain, so every glGetTexLevelParameter* on a GL_TEXTURE_BUFFER texture reached a
|
||||
// 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;
|
||||
MG_Impl::GLImpl::CreateTextures(GL_TEXTURE_BUFFER, 1, &texture);
|
||||
MG_Impl::GLImpl::BindTexture(GL_TEXTURE_BUFFER, texture);
|
||||
MG_Impl::GLImpl::TexBuffer(GL_TEXTURE_BUFFER, GL_R8, 0);
|
||||
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;
|
||||
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;
|
||||
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