mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-12 14:18:31 +09:00
[Feat] (BufferState): Implement glDeleteBuffers.
This commit is contained in:
+1
-1
@@ -27,7 +27,7 @@ namespace MG_Global {
|
|||||||
}
|
}
|
||||||
|
|
||||||
namespace Common {
|
namespace Common {
|
||||||
inline constexpr int LogLevel = MG_Constants::Common::LOG_LEVEL_DEBUG;
|
inline constexpr int LogLevel = MG_Constants::Common::LOG_LEVEL_INFO;
|
||||||
|
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
inline const char* LOG_FILE_PATH = "/sdcard/MG/latest.log";
|
inline const char* LOG_FILE_PATH = "/sdcard/MG/latest.log";
|
||||||
|
|||||||
@@ -117,4 +117,15 @@ namespace MG_GL::GL {
|
|||||||
MG_Util::Debug::LogD("Buffer %u is %s", buffer, isValid ? "valid" : "invalid");
|
MG_Util::Debug::LogD("Buffer %u is %s", buffer, isValid ? "valid" : "invalid");
|
||||||
return isValid ? GL_TRUE : GL_FALSE;
|
return isValid ? GL_TRUE : GL_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DeleteBuffers(GLsizei n, const GLuint *buffers) {
|
||||||
|
MG_Util::Debug::LogD("glDeleteBuffers, n: %d, buffers: %p", n, buffers);
|
||||||
|
|
||||||
|
GLenum result = MG_State::DeleteBuffers(n, buffers);
|
||||||
|
if (result == GL_NO_ERROR)
|
||||||
|
return;
|
||||||
|
|
||||||
|
MG_State::SetError(result);
|
||||||
|
MG_Util::Debug::LogE("Error from MG State: %s", MG_Util::Debug::GLEnumToString(result));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,7 @@ namespace MG_GL::GL {
|
|||||||
void BufferData(GLenum target, GLsizeiptr size, const void* data, GLenum usage);
|
void BufferData(GLenum target, GLsizeiptr size, const void* data, GLenum usage);
|
||||||
void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params);
|
void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params);
|
||||||
void GenBuffers(GLsizei n, GLuint* buffers);
|
void GenBuffers(GLsizei n, GLuint* buffers);
|
||||||
|
void DeleteBuffers(GLsizei n, const GLuint *buffers);
|
||||||
GLboolean IsBuffer(GLuint buffer);
|
GLboolean IsBuffer(GLuint buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -448,6 +448,17 @@ namespace MG_GL::GL {
|
|||||||
// static std::unordered_map<GLuint, void*> s_bufferDirtyFlags_bufferObj;
|
// static std::unordered_map<GLuint, void*> s_bufferDirtyFlags_bufferObj;
|
||||||
void SyncAllBuffersToGLES(BufferState* bufferState) {
|
void SyncAllBuffersToGLES(BufferState* bufferState) {
|
||||||
GLint prev_buf = 0;
|
GLint prev_buf = 0;
|
||||||
|
// Delete removed buffers in GLES
|
||||||
|
std::vector<GLuint> buffersToErase;
|
||||||
|
for (auto it = s_bufferMap.begin(); it != s_bufferMap.end(); ++it) {
|
||||||
|
if (bufferState->buffers_.find(it->first) == bufferState->buffers_.end()) {
|
||||||
|
CallAndCheck(::GLES::glDeleteBuffers(1, &it->second);)
|
||||||
|
buffersToErase.push_back(it->first);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (GLuint mgname : buffersToErase) {
|
||||||
|
s_bufferMap.erase(mgname);
|
||||||
|
}
|
||||||
CallAndCheck(::GLES::glGetIntegerv(GL_COPY_WRITE_BUFFER_BINDING, &prev_buf);)
|
CallAndCheck(::GLES::glGetIntegerv(GL_COPY_WRITE_BUFFER_BINDING, &prev_buf);)
|
||||||
|
|
||||||
for (auto& [mgname, obj] : bufferState->buffers_) {
|
for (auto& [mgname, obj] : bufferState->buffers_) {
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ DECLARE_GL_FUNCTION_STUB_HEAD(void, CopyTexSubImage2D, GLenum target, GLint leve
|
|||||||
DECLARE_GL_FUNCTION_HEAD(GLuint, CreateProgram) DECLARE_GL_FUNCTION_END(GLuint, CreateProgram)
|
DECLARE_GL_FUNCTION_HEAD(GLuint, CreateProgram) DECLARE_GL_FUNCTION_END(GLuint, CreateProgram)
|
||||||
DECLARE_GL_FUNCTION_HEAD(GLuint, CreateShader, GLenum type) DECLARE_GL_FUNCTION_END(GLuint, CreateShader, type)
|
DECLARE_GL_FUNCTION_HEAD(GLuint, CreateShader, GLenum type) DECLARE_GL_FUNCTION_END(GLuint, CreateShader, type)
|
||||||
DECLARE_GL_FUNCTION_STUB_HEAD(void, CullFace, GLenum mode) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, CullFace, mode)
|
DECLARE_GL_FUNCTION_STUB_HEAD(void, CullFace, GLenum mode) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, CullFace, mode)
|
||||||
DECLARE_GL_FUNCTION_STUB_HEAD(void, DeleteBuffers, GLsizei n, const GLuint *buffers) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, DeleteBuffers, n,buffers)
|
DECLARE_GL_FUNCTION_HEAD(void, DeleteBuffers, GLsizei n, const GLuint *buffers) DECLARE_GL_FUNCTION_END_NO_RETURN(void, DeleteBuffers, n,buffers)
|
||||||
DECLARE_GL_FUNCTION_HEAD(void, DeleteFramebuffers, GLsizei n, const GLuint *framebuffers) DECLARE_GL_FUNCTION_END_NO_RETURN(void, DeleteFramebuffers, n,framebuffers)
|
DECLARE_GL_FUNCTION_HEAD(void, DeleteFramebuffers, GLsizei n, const GLuint *framebuffers) DECLARE_GL_FUNCTION_END_NO_RETURN(void, DeleteFramebuffers, n,framebuffers)
|
||||||
DECLARE_GL_FUNCTION_HEAD(void, DeleteProgram, GLuint program) DECLARE_GL_FUNCTION_END_NO_RETURN(void, DeleteProgram, program)
|
DECLARE_GL_FUNCTION_HEAD(void, DeleteProgram, GLuint program) DECLARE_GL_FUNCTION_END_NO_RETURN(void, DeleteProgram, program)
|
||||||
DECLARE_GL_FUNCTION_STUB_HEAD(void, DeleteRenderbuffers, GLsizei n, const GLuint *renderbuffers) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, DeleteRenderbuffers, n,renderbuffers)
|
DECLARE_GL_FUNCTION_STUB_HEAD(void, DeleteRenderbuffers, GLsizei n, const GLuint *renderbuffers) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, DeleteRenderbuffers, n,renderbuffers)
|
||||||
|
|||||||
@@ -170,6 +170,17 @@ void BufferState::Delete(GLuint buffer) {
|
|||||||
MG_Util::Debug::LogD("MG_State: Buffer: Delete buffer %u", buffer);
|
MG_Util::Debug::LogD("MG_State: Buffer: Delete buffer %u", buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GLenum BufferState::DeleteN(GLsizei n, const GLuint* buffers) {
|
||||||
|
MG_Util::Debug::LogD("MG_State: Buffer: DeleteN called with n=%d", n);
|
||||||
|
if (n < 0) return GL_INVALID_VALUE;
|
||||||
|
|
||||||
|
for (GLsizei i = 0; i < n; ++i) {
|
||||||
|
Delete(buffers[i]);
|
||||||
|
}
|
||||||
|
MG_Util::Debug::LogD("MG_State: Buffer: DeleteN deleted buffers successfully");
|
||||||
|
return GL_NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
bool BufferState::IsValidTarget_(GLenum target) {
|
bool BufferState::IsValidTarget_(GLenum target) {
|
||||||
MG_Util::Debug::LogD("MG_State: Buffer: IsValidTarget_ called with target=0x%x,result=%d", target, !(MG_Constants::Buffer::VALID_TARGETS.find(target) == MG_Constants::Buffer::VALID_TARGETS.end()));
|
MG_Util::Debug::LogD("MG_State: Buffer: IsValidTarget_ called with target=0x%x,result=%d", target, !(MG_Constants::Buffer::VALID_TARGETS.find(target) == MG_Constants::Buffer::VALID_TARGETS.end()));
|
||||||
return !(MG_Constants::Buffer::VALID_TARGETS.find(target) == MG_Constants::Buffer::VALID_TARGETS.end());
|
return !(MG_Constants::Buffer::VALID_TARGETS.find(target) == MG_Constants::Buffer::VALID_TARGETS.end());
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ public:
|
|||||||
bool ValidateAllocatedHandle(GLuint buffer);
|
bool ValidateAllocatedHandle(GLuint buffer);
|
||||||
bool ValidateGeneratedName(GLuint buffer);
|
bool ValidateGeneratedName(GLuint buffer);
|
||||||
void Delete(GLuint buffer);
|
void Delete(GLuint buffer);
|
||||||
|
GLenum DeleteN(GLsizei n, const GLuint* buffers);
|
||||||
GLuint GetCurrentBinding(GLenum target) const;
|
GLuint GetCurrentBinding(GLenum target) const;
|
||||||
|
|
||||||
unordered_map<GLenum, GLuint> currentBindings_;
|
unordered_map<GLenum, GLuint> currentBindings_;
|
||||||
|
|||||||
@@ -198,6 +198,10 @@ namespace MG_State {
|
|||||||
return MG_State_T::bufferState->Delete(buffer);
|
return MG_State_T::bufferState->Delete(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GLenum DeleteBuffers(GLsizei n, const GLuint* buffers) {
|
||||||
|
return MG_State_T::bufferState->DeleteN(n, buffers);
|
||||||
|
}
|
||||||
|
|
||||||
GLenum QueryBufferPropertyIntVector(GLenum target, GLenum pname, GLint* params) {
|
GLenum QueryBufferPropertyIntVector(GLenum target, GLenum pname, GLint* params) {
|
||||||
return MG_State_T::bufferState->QueryPropertyIntVector(target, pname, params);
|
return MG_State_T::bufferState->QueryPropertyIntVector(target, pname, params);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ namespace MG_State {
|
|||||||
bool ValidateAllocatedBufferHandle(GLuint buffer);
|
bool ValidateAllocatedBufferHandle(GLuint buffer);
|
||||||
bool ValidateGeneratedName(GLuint buffer);
|
bool ValidateGeneratedName(GLuint buffer);
|
||||||
void DeleteBuffer(GLuint buffer);
|
void DeleteBuffer(GLuint buffer);
|
||||||
|
GLenum DeleteBuffers(GLsizei n, const GLuint* buffers);
|
||||||
GLenum QueryBufferPropertyIntVector(GLenum target, GLenum pname, GLint* params);
|
GLenum QueryBufferPropertyIntVector(GLenum target, GLenum pname, GLint* params);
|
||||||
|
|
||||||
// VertexArray
|
// VertexArray
|
||||||
|
|||||||
Reference in New Issue
Block a user