[Perf] (MG_Backend/DirectGLES): Avoid redunant VBO binding.

This commit is contained in:
BZLZHH
2026-02-03 11:41:23 +08:00
parent edff307782
commit 207b746273
2 changed files with 20 additions and 1 deletions
@@ -174,10 +174,20 @@ namespace MobileGL::MG_Backend::DirectGLES {
} }
} }
SharedPtr<BackendBufferObject> BackendBufferObject::GetSharedPtr() {
return shared_from_this();
}
void BackendBufferObject::Bind() { void BackendBufferObject::Bind() {
#ifdef TRACY_ENABLE #ifdef TRACY_ENABLE
ZoneScopedC(TRACY_ZONECOLOR_BACKEND); ZoneScopedC(TRACY_ZONECOLOR_BACKEND);
#endif #endif
if (TempBufferTarget == GL_ARRAY_BUFFER) {
if (g_boundVertexBufferObject.get() == this) {
return;
}
g_boundVertexBufferObject = GetSharedPtr();
}
MG_External::GLES::glBindBuffer(TempBufferTarget, m_backendBufferId); MG_External::GLES::glBindBuffer(TempBufferTarget, m_backendBufferId);
} }
@@ -185,10 +195,17 @@ namespace MobileGL::MG_Backend::DirectGLES {
#ifdef TRACY_ENABLE #ifdef TRACY_ENABLE
ZoneScopedC(TRACY_ZONECOLOR_BACKEND); ZoneScopedC(TRACY_ZONECOLOR_BACKEND);
#endif #endif
if (target == GL_ARRAY_BUFFER) {
if (g_boundVertexBufferObject.get() == this) {
return;
}
g_boundVertexBufferObject = GetSharedPtr();
}
MG_External::GLES::glBindBuffer(target, m_backendBufferId); MG_External::GLES::glBindBuffer(target, m_backendBufferId);
} }
UnorderedMap<SharedPtr<MG_State::GLState::BufferObject>, SharedPtr<BackendBufferObject>> g_backendBufferObjects; UnorderedMap<SharedPtr<MG_State::GLState::BufferObject>, SharedPtr<BackendBufferObject>> g_backendBufferObjects;
SharedPtr<BackendBufferObject> g_boundVertexBufferObject;
} // namespace BufferImpl } // namespace BufferImpl
namespace VertexArrayImpl { namespace VertexArrayImpl {
+3 -1
View File
@@ -17,13 +17,14 @@
namespace MobileGL::MG_Backend::DirectGLES { namespace MobileGL::MG_Backend::DirectGLES {
namespace BufferImpl { namespace BufferImpl {
class BackendBufferObject { class BackendBufferObject : public std::enable_shared_from_this<BackendBufferObject> {
public: public:
BackendBufferObject(); BackendBufferObject();
void SyncToBackend(SharedPtr<MG_State::GLState::BufferObject>& stateBufferObject); void SyncToBackend(SharedPtr<MG_State::GLState::BufferObject>& stateBufferObject);
Uint GetBackendBufferId() { return m_backendBufferId; } Uint GetBackendBufferId() { return m_backendBufferId; }
void Bind(); void Bind();
void Bind(GLenum target); void Bind(GLenum target);
SharedPtr<BackendBufferObject> GetSharedPtr();
private: private:
void SyncToBackend_glBufferData(SharedPtr<MG_State::GLState::BufferObject>& stateBufferObject); void SyncToBackend_glBufferData(SharedPtr<MG_State::GLState::BufferObject>& stateBufferObject);
@@ -36,6 +37,7 @@ namespace MobileGL::MG_Backend::DirectGLES {
Bool m_isInitialized = false; Bool m_isInitialized = false;
}; };
extern SharedPtr<BackendBufferObject> g_boundVertexBufferObject;
extern UnorderedMap<SharedPtr<MG_State::GLState::BufferObject>, SharedPtr<BackendBufferObject>> extern UnorderedMap<SharedPtr<MG_State::GLState::BufferObject>, SharedPtr<BackendBufferObject>>
g_backendBufferObjects; g_backendBufferObjects;
} // namespace BufferImpl } // namespace BufferImpl