mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-11 21:58:31 +09:00
[Perf] (MG_Backend/DirectGLES): Avoid redunant VBO binding.
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user