summaryrefslogtreecommitdiff
path: root/games/0ad/files/patch-GL-OOB-fix
blob: 1f5548cc668461af2379c814ccd21c578813c9d3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
From a1f7568df9814d0dc399fc1e4f1c122da24a8f05 Mon Sep 17 00:00:00 2001
From: Vladislav Belov <vladislavbelovdev@gmail.com>
Date: Fri, 7 Feb 2025 22:24:00 +0100
Subject: [PATCH] Fixes out of bounds during GL buffer binding.

---
 source/renderer/backend/gl/DeviceCommandContext.cpp | 4 ++++
 source/renderer/backend/gl/DeviceCommandContext.h   | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/source/renderer/backend/gl/DeviceCommandContext.cpp b/source/renderer/backend/gl/DeviceCommandContext.cpp
index dacdd4377b..87bc323305 100644
--- source/renderer/backend/gl/DeviceCommandContext.cpp
+++ source/renderer/backend/gl/DeviceCommandContext.cpp
@@ -246,6 +246,9 @@ CDeviceCommandContext::CDeviceCommandContext(CDevice* device)
 	for (size_t index = 0; index < m_BoundBuffers.size(); ++index)
 	{
 		const CBuffer::Type type = static_cast<CBuffer::Type>(index);
+		// Currently we don't support upload buffers for GL.
+		if (type == CBuffer::Type::UPLOAD)
+			continue;
 		const GLenum target = BufferTypeToGLTarget(type);
 		const GLuint handle = 0;
 		m_BoundBuffers[index].first = target;
@@ -1456,6 +1459,7 @@ CDeviceCommandContext::ScopedBufferBind::ScopedBufferBind(
 {
 	ENSURE(buffer);
 	m_CacheIndex = static_cast<size_t>(buffer->GetType());
+	ENSURE(m_CacheIndex < m_DeviceCommandContext->m_BoundBuffers.size());
 	const GLenum target = BufferTypeToGLTarget(buffer->GetType());
 	const GLuint handle = buffer->GetHandle();
 	if (m_DeviceCommandContext->m_BoundBuffers[m_CacheIndex].first == target &&
diff --git a/source/renderer/backend/gl/DeviceCommandContext.h b/source/renderer/backend/gl/DeviceCommandContext.h
index 5f1a251007..3d23d89c06 100644
--- source/renderer/backend/gl/DeviceCommandContext.h
+++ source/renderer/backend/gl/DeviceCommandContext.h
@@ -221,7 +221,7 @@ private:
 	};
 
 	using BoundBuffer = std::pair<GLenum, GLuint>;
-	std::array<BoundBuffer, 2> m_BoundBuffers;
+	std::array<BoundBuffer, 4> m_BoundBuffers;
 	class ScopedBufferBind
 	{
 	public:
-- 
2.43.5