Skip to content

Commit e1a72db

Browse files
committed
Add MultiDrawIndirect to RendererAPI
Fix glad loader
1 parent c105763 commit e1a72db

29 files changed

+92
-180
lines changed

Mahakam/src/Mahakam/Renderer/GL.cpp

+57-75
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#include "Mahakam/Core/Profiler.h"
55
#include "Mahakam/Core/SharedLibrary.h"
66

7+
#include "Mahakam/Asset/Asset.h"
8+
79
#include "Mesh.h"
810
#include "Texture.h"
911

@@ -101,160 +103,140 @@ namespace Mahakam
101103
}
102104

103105
#pragma region Mesh
104-
//Ref<Mesh> GL::GetScreenQuad()
105-
MH_DEFINE_FUNC(GL::GetScreenQuad, Ref<SubMesh>)
106+
Ref<SubMesh> GL::GetScreenQuad()
106107
{
107108
return s_StaticScreenQuad;
108-
};
109+
}
109110

110-
//Ref<Mesh> GL::GetSphere()
111-
MH_DEFINE_FUNC(GL::GetSphere, Ref<SubMesh>)
111+
Ref<SubMesh> GL::GetSphere()
112112
{
113113
return s_StaticSphereMesh;
114-
};
114+
}
115115

116-
//Ref<Mesh> GL::GetInvertedPyramid()
117-
MH_DEFINE_FUNC(GL::GetInvertedPyramid, Ref<SubMesh>)
116+
Ref<SubMesh> GL::GetInvertedPyramid()
118117
{
119118
return s_StaticInvertedPyramid;
120-
};
119+
}
121120

122-
//Ref<Mesh> GL::GetInvertedSphere()
123-
MH_DEFINE_FUNC(GL::GetInvertedSphere, Ref<SubMesh>)
121+
Ref<SubMesh> GL::GetInvertedSphere()
124122
{
125123
return s_StaticInvertedSphereMesh;
126-
};
124+
}
127125

128-
//Ref<Mesh> GL::GetInvertedCube()
129-
MH_DEFINE_FUNC(GL::GetInvertedCube, Ref<SubMesh>)
126+
Ref<SubMesh> GL::GetInvertedCube()
130127
{
131128
return s_StaticInvertedCubemapMesh;
132-
};
129+
}
133130

134-
//Ref<Mesh> GL::GetCube()
135-
MH_DEFINE_FUNC(GL::GetCube, Ref<SubMesh>)
131+
Ref<SubMesh> GL::GetCube()
136132
{
137133
return s_StaticCube;
138-
};
134+
}
139135
#pragma endregion
140136

141137
#pragma region Texture
142-
//Ref<Texture2D> GL::GetTexture2DRed()
143-
MH_DEFINE_FUNC(GL::GetTexture2DRed, Asset<Texture2D>)
138+
Asset<Texture2D> GL::GetTexture2DRed()
144139
{
145140
return s_Texture2DRed;
146-
};
141+
}
147142

148-
//Ref<Texture2D> GL::GetTexture2DWhite()
149-
MH_DEFINE_FUNC(GL::GetTexture2DWhite, Asset<Texture2D>)
143+
Asset<Texture2D> GL::GetTexture2DWhite()
150144
{
151145
return s_Texture2DWhite;
152-
};
146+
}
153147

154-
//Ref<Texture2D> GL::GetTexture2DBlack()
155-
MH_DEFINE_FUNC(GL::GetTexture2DBlack, Asset<Texture2D>)
148+
Asset<Texture2D> GL::GetTexture2DBlack()
156149
{
157150
return s_Texture2DBlack;
158-
};
151+
}
159152

160-
//Ref<Texture2D> GL::GetTexture2DBump()
161-
MH_DEFINE_FUNC(GL::GetTexture2DBump, Asset<Texture2D>)
153+
Asset<Texture2D> GL::GetTexture2DBump()
162154
{
163155
return s_Texture2DBump;
164-
};
156+
}
165157

166-
//Ref<TextureCube> GL::GetTextureCubeWhite()
167-
MH_DEFINE_FUNC(GL::GetTextureCubeWhite, Asset<TextureCube>)
158+
Asset<TextureCube> GL::GetTextureCubeWhite()
168159
{
169160
return s_TextureCubeWhite;
170-
};
161+
}
171162

172-
//Ref<TextureCube> GL::GetTextureCubeGrey()
173-
MH_DEFINE_FUNC(GL::GetTextureCubeGrey, Asset<TextureCube>)
163+
Asset<TextureCube> GL::GetTextureCubeGrey()
174164
{
175165
return s_TextureCubeGrey;
176-
};
166+
}
177167
#pragma endregion
178168

179-
//const char* GL::GetGraphicsVendor()
180-
MH_DEFINE_FUNC(GL::GetGraphicsVendor, const char*)
169+
const char* GL::GetGraphicsVendor()
181170
{
182171
return s_RendererAPI->GetGraphicsVendor();
183-
};
172+
}
184173

185-
//void GL::SetViewportImpl(uint32_t x, uint32_t y, uint32_t w, uint32_t h, bool scissor)
186-
MH_DEFINE_FUNC(GL::SetViewportImpl, void, uint32_t x, uint32_t y, uint32_t w, uint32_t h, bool scissor)
174+
void GL::SetViewportImpl(uint32_t x, uint32_t y, uint32_t w, uint32_t h, bool scissor)
187175
{
188176
s_RendererAPI->SetViewport(x, y, w, h, scissor);
189-
};
177+
}
190178

191-
//void GL::FinishRendering()
192-
MH_DEFINE_FUNC(GL::FinishRendering, void)
179+
void GL::FinishRendering()
193180
{
194181
s_RendererAPI->FinishRendering();
195-
};
182+
}
196183

197-
//void GL::SetClearColor(const glm::vec4& color)
198-
MH_DEFINE_FUNC(GL::SetClearColor, void, const glm::vec4& color)
184+
void GL::SetClearColor(const glm::vec4& color)
199185
{
200186
s_RendererAPI->SetClearColor(color);
201-
};
187+
}
202188

203-
//void GL::ClearImpl(bool color, bool depth)
204-
MH_DEFINE_FUNC(GL::ClearImpl, void, bool color, bool depth)
189+
void GL::ClearImpl(bool color, bool depth)
205190
{
206191
s_RendererAPI->Clear(color, depth);
207-
};
192+
}
208193

209-
//void GL::EnableCullingImpl(bool enable, bool cullFront)
210-
MH_DEFINE_FUNC(GL::EnableCullingImpl, void, bool enable, bool cullFront)
194+
void GL::EnableCullingImpl(bool enable, bool cullFront)
211195
{
212196
s_RendererAPI->EnableCulling(enable, cullFront);
213-
};
197+
}
214198

215-
//void GL::EnableZWriting(bool enable)
216-
MH_DEFINE_FUNC(GL::EnableZWriting, void, bool enable)
199+
void GL::EnableZWriting(bool enable)
217200
{
218201
s_RendererAPI->EnableZWriting(enable);
219-
};
202+
}
220203

221-
//void GL::SetZTesting(RendererAPI::DepthMode mode)
222-
MH_DEFINE_FUNC(GL::SetZTesting, void, RendererAPI::DepthMode mode)
204+
void GL::SetZTesting(RendererAPI::DepthMode mode)
223205
{
224206
s_RendererAPI->SetZTesting(mode);
225-
};
207+
}
226208

227-
//void GL::SetFillMode(bool enable)
228-
MH_DEFINE_FUNC(GL::SetFillMode, void, bool enable)
209+
void GL::SetFillMode(bool enable)
229210
{
230211
s_RendererAPI->SetFillMode(enable);
231-
};
212+
}
232213

233-
//void GL::SetBlendMode(RendererAPI::BlendMode src, RendererAPI::BlendMode dst, bool enable)
234-
MH_DEFINE_FUNC(GL::SetBlendMode, void, RendererAPI::BlendMode src, RendererAPI::BlendMode dst, bool enable)
214+
void GL::SetBlendMode(RendererAPI::BlendMode src, RendererAPI::BlendMode dst, bool enable)
235215
{
236216
s_RendererAPI->SetBlendMode(src, dst, enable);
237-
};
217+
}
238218

239219
#pragma region Draw
240-
//void GL::DrawScreenQuad()
241-
MH_DEFINE_FUNC(GL::DrawScreenQuad, void)
220+
void GL::DrawScreenQuad()
242221
{
243222
s_StaticScreenQuad->Bind();
244223
s_RendererAPI->DrawIndexed(s_StaticScreenQuad->GetIndexCount());
245-
};
224+
}
246225

247-
//void GL::DrawIndexed(uint32_t indexCount)
248-
MH_DEFINE_FUNC(GL::DrawIndexed, void, uint32_t indexCount)
226+
void GL::DrawIndexed(uint32_t indexCount)
249227
{
250228
s_RendererAPI->DrawIndexed(indexCount);
251-
};
229+
}
252230

253-
//void GL::DrawInstanced(uint32_t indexCount, uint32_t count)
254-
MH_DEFINE_FUNC(GL::DrawInstanced, void, uint32_t indexCount, uint32_t count)
231+
void GL::DrawInstanced(uint32_t indexCount, uint32_t count)
255232
{
256233
s_RendererAPI->DrawInstanced(indexCount, count);
257-
};
234+
}
235+
236+
void GL::MultiDrawIndexed(const void* indirect, uint32_t stride, uint32_t count)
237+
{
238+
s_RendererAPI->MultiDrawIndexed(indirect, stride, count);
239+
}
258240
#pragma endregion
259241

260242
Ref<SubMesh> GL::CreateScreenQuad()

Mahakam/src/Mahakam/Renderer/GL.h

+18-9
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44

55
#include "Mahakam/Core/Types.h"
66

7-
#include "Mahakam/Asset/Asset.h"
8-
97
namespace Mahakam
108
{
9+
template<typename T>
10+
class Asset;
11+
1112
class SubMesh;
1213
class Texture2D;
1314
class TextureCube;
@@ -42,10 +43,10 @@ namespace Mahakam
4243
MH_DECLARE_FUNC(GetInvertedCube, Ref<SubMesh>);
4344
MH_DECLARE_FUNC(GetCube, Ref<SubMesh>);
4445

45-
MH_DECLARE_FUNC(GetTexture2DRed, Asset<Texture2D>);
46-
MH_DECLARE_FUNC(GetTexture2DWhite, Asset<Texture2D>);
47-
MH_DECLARE_FUNC(GetTexture2DBlack, Asset<Texture2D>);
48-
MH_DECLARE_FUNC(GetTexture2DBump, Asset<Texture2D>);
46+
static Asset<Texture2D> GetTexture2DRed();
47+
static Asset<Texture2D> GetTexture2DWhite();
48+
static Asset<Texture2D> GetTexture2DBlack();
49+
static Asset<Texture2D> GetTexture2DBump();
4950
MH_DECLARE_FUNC(GetTextureCubeWhite, Asset<TextureCube>);
5051
MH_DECLARE_FUNC(GetTextureCubeGrey, Asset<TextureCube>);
5152

@@ -66,11 +67,19 @@ namespace Mahakam
6667
MH_DECLARE_FUNC(SetFillMode, void, bool fill);
6768
MH_DECLARE_FUNC(SetBlendMode, void, RendererAPI::BlendMode src, RendererAPI::BlendMode dst, bool enable);
6869

69-
MH_DECLARE_FUNC(DrawScreenQuad, void);
70-
MH_DECLARE_FUNC(DrawIndexed, void, uint32_t indexCount);
71-
MH_DECLARE_FUNC(DrawInstanced, void, uint32_t indexCount, uint32_t count);
70+
static void DrawScreenQuad();
71+
static void DrawIndexed(uint32_t indexCount);
72+
static void DrawInstanced(uint32_t indexCount, uint32_t count);
73+
74+
template<typename T>
75+
static void MultiDrawIndexed(const T* indirect, uint32_t count)
76+
{
77+
MultiDrawIndexed(indirect, sizeof(T), count);
78+
}
7279

7380
private:
81+
static void MultiDrawIndexed(const void* indirect, uint32_t stride, uint32_t count);
82+
7483
static Ref<SubMesh> CreateScreenQuad();
7584
static Ref<SubMesh> CreatePyramid();
7685

Mahakam/src/Mahakam/Renderer/RendererAPI.h

+1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ namespace Mahakam
6565
virtual void SetFillMode(bool fill) = 0;
6666
virtual void SetBlendMode(BlendMode src, BlendMode dst, bool enable) = 0;
6767

68+
virtual void MultiDrawIndexed(const void* indirect, uint32_t stride, uint32_t count) = 0;
6869
virtual void DrawIndexed(uint32_t count) = 0;
6970
virtual void DrawInstanced(uint32_t indexCount, uint32_t count) = 0;
7071

Mahakam/src/Platform/Headless/HeadlessRendererAPI.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ namespace Mahakam
2828

2929
void HeadlessRendererAPI::SetBlendMode(BlendMode src, BlendMode dst, bool enable) {}
3030

31+
void HeadlessRendererAPI::MultiDrawIndexed(const void* indirect, uint32_t stride, uint32_t count) {}
32+
3133
void HeadlessRendererAPI::DrawIndexed(uint32_t count) {}
3234

3335
void HeadlessRendererAPI::DrawInstanced(uint32_t indexCount, uint32_t count) {}

Mahakam/src/Platform/Headless/HeadlessRendererAPI.h

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ namespace Mahakam
2323
virtual void SetFillMode(bool fill) override;
2424
virtual void SetBlendMode(BlendMode src, BlendMode dst, bool enable) override;
2525

26+
virtual void MultiDrawIndexed(const void* indirect, uint32_t stride, uint32_t count) override;
2627
virtual void DrawIndexed(uint32_t count) override;
2728
virtual void DrawInstanced(uint32_t indexCount, uint32_t count) override;
2829
};

Mahakam/src/Platform/OpenGL/OpenGLContext.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ namespace Mahakam
2828
{
2929
MH_PROFILE_FUNCTION();
3030

31-
int status = gladLoadGL(glfwGetProcAddress);
31+
int status = gladLoadGLLoader(reinterpret_cast<GLADloadproc>(glfwGetProcAddress));
3232
MH_ASSERT(status, "Could not initialize glad!");
3333

3434
MH_ASSERT(glGetError, "Could not initialize OpenGL functions!");

Mahakam/src/Platform/OpenGL/OpenGLRendererAPI.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,11 @@ namespace Mahakam
187187
}
188188
}
189189

190+
void OpenGLRendererAPI::MultiDrawIndexed(const void* indirect, uint32_t stride, uint32_t count)
191+
{
192+
MH_GL_CALL(glMultiDrawElementsIndirect(GL_TRIANGLES, GL_UNSIGNED_INT, indirect, count, stride));
193+
}
194+
190195
void OpenGLRendererAPI::DrawIndexed(uint32_t count)
191196
{
192197
MH_GL_CALL(glDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_INT, nullptr));

Mahakam/src/Platform/OpenGL/OpenGLRendererAPI.h

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ namespace Mahakam
2626
virtual void SetFillMode(bool fill) override;
2727
virtual void SetBlendMode(BlendMode src, BlendMode dst, bool enable) override;
2828

29+
virtual void MultiDrawIndexed(const void* indirect, uint32_t stride, uint32_t count) override;
2930
virtual void DrawIndexed(uint32_t count) override;
3031
virtual void DrawInstanced(uint32_t indexCount, uint32_t count) override;
3132
};

Mahakam/src/Platform/OpenGL/OpenGLTexture.cpp

-2
Original file line numberDiff line numberDiff line change
@@ -277,8 +277,6 @@ namespace Mahakam
277277

278278
void OpenGLTexture2D::Bind(uint32_t slot) const
279279
{
280-
//glGetTextureHandleARB(m_RendererID);
281-
282280
MH_GL_CALL(glBindTextureUnit(slot, m_RendererID));
283281
}
284282

Sandbox/assets/10127498216877445756.asset.legacy

-12
This file was deleted.

Sandbox/assets/11869644962294522068.asset.legacy

-1
This file was deleted.

Sandbox/assets/11945816250811211738.asset.legacy

-5
This file was deleted.

Sandbox/assets/13155307824895996659.asset.legacy

-5
This file was deleted.

Sandbox/assets/13750326872447612574.asset.legacy

-1
This file was deleted.

Sandbox/assets/1413214223373882268.asset.legacy

-3
This file was deleted.

Sandbox/assets/1413214623375882268.asset.legacy

-3
This file was deleted.

Sandbox/assets/15739498696759362444.asset.legacy

-7
This file was deleted.

Sandbox/assets/332566198138111729.asset.legacy

-1
This file was deleted.

Sandbox/assets/46003763570734560.asset.legacy

-12
This file was deleted.

0 commit comments

Comments
 (0)