Implemented glClearBuffer*
TRAC #23475
Author: Geoff Lang
Signed-off-by: Jamie Madill
Signed-off-by: Shannon Woods
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index 35580b3..34dc3a1 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -8374,8 +8374,24 @@
return gl::error(GL_INVALID_OPERATION);
}
- // glClearBufferiv
- UNIMPLEMENTED();
+ switch (buffer)
+ {
+ case GL_COLOR:
+ if (drawbuffer < 0 || drawbuffer >= static_cast<GLint>(context->getMaximumRenderTargets()))
+ {
+ return gl::error(GL_INVALID_VALUE);
+ }
+ break;
+ case GL_STENCIL:
+ if (drawbuffer != 0)
+ {
+ return gl::error(GL_INVALID_VALUE);
+ }
+ default:
+ return gl::error(GL_INVALID_ENUM);
+ }
+
+ context->clearBufferiv(buffer, drawbuffer, value);
}
}
catch(std::bad_alloc&)
@@ -8400,8 +8416,19 @@
return gl::error(GL_INVALID_OPERATION);
}
- // glClearBufferuiv
- UNIMPLEMENTED();
+ switch (buffer)
+ {
+ case GL_COLOR:
+ if (drawbuffer < 0 || drawbuffer >= static_cast<GLint>(context->getMaximumRenderTargets()))
+ {
+ return gl::error(GL_INVALID_VALUE);
+ }
+ break;
+ default:
+ return gl::error(GL_INVALID_ENUM);
+ }
+
+ context->clearBufferuiv(buffer, drawbuffer, value);
}
}
catch(std::bad_alloc&)
@@ -8426,8 +8453,25 @@
return gl::error(GL_INVALID_OPERATION);
}
- // glClearBufferfv
- UNIMPLEMENTED();
+ switch (buffer)
+ {
+ case GL_COLOR:
+ if (drawbuffer < 0 || drawbuffer >= static_cast<GLint>(context->getMaximumRenderTargets()))
+ {
+ return gl::error(GL_INVALID_VALUE);
+ }
+ break;
+ case GL_DEPTH:
+ if (drawbuffer != 0)
+ {
+ return gl::error(GL_INVALID_VALUE);
+ }
+ break;
+ default:
+ return gl::error(GL_INVALID_ENUM);
+ }
+
+ context->clearBufferfv(buffer, drawbuffer, value);
}
}
catch(std::bad_alloc&)
@@ -8452,8 +8496,19 @@
return gl::error(GL_INVALID_OPERATION);
}
- // glClearBufferfi
- UNIMPLEMENTED();
+ switch (buffer)
+ {
+ case GL_DEPTH_STENCIL:
+ if (drawbuffer != 0)
+ {
+ return gl::error(GL_INVALID_VALUE);
+ }
+ break;
+ default:
+ return gl::error(GL_INVALID_ENUM);
+ }
+
+ context->clearBufferfi(buffer, drawbuffer, depth, stencil);
}
}
catch(std::bad_alloc&)