Skip to content

Commit 28146df

Browse files
Merge pull request #62
fix uniform buffer data not apply issue
2 parents 47560bf + 54e473d commit 28146df

File tree

6 files changed

+41
-37
lines changed

6 files changed

+41
-37
lines changed

include/Core/UniformBuffer.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class UniformBuffer {
3030
void SetData(int offset, const T &data);
3131

3232
private:
33+
GLuint m_Binding;
3334
GLuint m_BufferId;
3435
};
3536
} // namespace Core

include/Core/UniformBuffer.inl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
namespace Core {
44
template <typename T>
55
UniformBuffer<T>::UniformBuffer(const Program &program, const std::string &name,
6-
int binding) {
6+
int binding)
7+
: m_Binding(binding) {
78
GLint uniformBlockIndex =
89
glGetUniformBlockIndex(program.GetId(), name.c_str());
910
glUniformBlockBinding(program.GetId(), uniformBlockIndex, binding);
@@ -12,9 +13,9 @@ UniformBuffer<T>::UniformBuffer(const Program &program, const std::string &name,
1213
glBindBuffer(GL_UNIFORM_BUFFER, m_BufferId);
1314
glBufferData(GL_UNIFORM_BUFFER, static_cast<GLsizeiptr>(sizeof(T)), nullptr,
1415
GL_DYNAMIC_DRAW);
16+
glBindBufferBase(GL_UNIFORM_BUFFER, m_Binding, m_BufferId);
1517

1618
glBindBuffer(GL_UNIFORM_BUFFER, 0);
17-
glBindBufferBase(GL_UNIFORM_BUFFER, binding, m_BufferId);
1819
}
1920

2021
template <typename T>
@@ -41,5 +42,6 @@ void UniformBuffer<T>::SetData(int offset, const T &data) {
4142
glBindBuffer(GL_UNIFORM_BUFFER, m_BufferId);
4243
glBufferSubData(GL_UNIFORM_BUFFER, offset,
4344
static_cast<GLsizeiptr>(sizeof(T)), &data);
45+
glBindBufferBase(GL_UNIFORM_BUFFER, m_Binding, m_BufferId);
4446
}
4547
} // namespace Core

include/Util/TransformUtils.hpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
#ifndef UTIL_TRANSFORM_UTILS_HPP
22
#define UTIL_TRANSFORM_UTILS_HPP
33

4+
#include "Core/Drawable.hpp"
5+
46
#include "Util/Transform.hpp"
57
#include "pch.hpp"
68

79
namespace Util {
810

9-
glm::mat4 TransformToMat4(const Transform &transform, const float zIndex);
11+
glm::mat4 TransformToMat4(const Transform &transform, float zIndex);
12+
13+
Core::Matrices ConvertToUniformBufferData(const Util::Transform &transform,
14+
float zIndex);
1015

11-
}
16+
} // namespace Util
1217

1318
#endif // UTIL_TRANSFORM_UTILS_HPP

src/Util/Image.cpp

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ Image::Image(const std::string &filepath) {
3232
}
3333

3434
void Image::Draw(const Util::Transform &transform, const float zIndex) {
35-
// FIXME: temporary fix
36-
InitUniformBuffer(transform, zIndex);
35+
auto data = Util::ConvertToUniformBufferData(transform, zIndex);
36+
s_UniformBuffer->SetData(0, data);
3737

3838
m_Texture->Bind(UNIFORM_SURFACE_LOCATION);
3939
s_Program->Bind();
@@ -97,21 +97,7 @@ void Image::InitUniformBuffer(const Util::Transform &transform,
9797
s_UniformBuffer = std::make_unique<Core::UniformBuffer<Core::Matrices>>(
9898
*s_Program, "Matrices", 0);
9999

100-
constexpr glm::mat4 eye(1.F);
101-
102-
constexpr float nearClip = -100;
103-
constexpr float farClip = 100;
104-
105-
auto projection =
106-
glm::ortho<float>(0.0F, 1.0F, 0.0F, 1.0F, nearClip, farClip);
107-
auto view = glm::scale(eye, {1.F / WINDOW_WIDTH, 1.F / WINDOW_HEIGHT, 1.F}) *
108-
glm::translate(eye, {WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2, 0});
109-
110-
Core::Matrices data = {
111-
Util::TransformToMat4(transform, zIndex),
112-
projection * view,
113-
};
114-
100+
auto data = Util::ConvertToUniformBufferData(transform, zIndex);
115101
s_UniformBuffer->SetData(0, data);
116102
}
117103

src/Util/Text.cpp

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ Text::Text(const std::string &font, int size, const std::string &text) {
4343

4444
void Text::Draw(const Util::Transform &transform, const float zIndex) {
4545
// FIXME: temporary fix
46-
InitUniformBuffer(transform, zIndex);
46+
auto data = Util::ConvertToUniformBufferData(transform, zIndex);
47+
s_UniformBuffer->SetData(0, data);
4748

4849
m_Texture->Bind(UNIFORM_SURFACE_LOCATION);
4950
s_Program->Bind();
@@ -107,21 +108,7 @@ void Text::InitUniformBuffer(const Util::Transform &transform,
107108
s_UniformBuffer = std::make_unique<Core::UniformBuffer<Core::Matrices>>(
108109
*s_Program, "Matrices", 0);
109110

110-
constexpr glm::mat4 eye(1.F);
111-
112-
constexpr float nearClip = -100;
113-
constexpr float farClip = 100;
114-
115-
auto projection =
116-
glm::ortho<float>(0.0F, 1.0F, 0.0F, 1.0F, nearClip, farClip);
117-
auto view = glm::scale(eye, {1.F / WINDOW_WIDTH, 1.F / WINDOW_HEIGHT, 1.F}) *
118-
glm::translate(eye, {WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2, 0});
119-
120-
Core::Matrices data = {
121-
Util::TransformToMat4(transform, zIndex),
122-
projection * view,
123-
};
124-
111+
auto data = Util::ConvertToUniformBufferData(transform, zIndex);
125112
s_UniformBuffer->SetData(0, data);
126113
}
127114

src/Util/TransformUtils.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#include "Util/TransformUtils.hpp"
22

3+
#include "config.hpp"
4+
35
namespace Util {
46

57
glm::mat4 TransformToMat4(const Transform &transform, const float zIndex) {
@@ -11,4 +13,25 @@ glm::mat4 TransformToMat4(const Transform &transform, const float zIndex) {
1113
glm::scale(eye, {transform.scale, 1});
1214
}
1315

16+
Core::Matrices ConvertToUniformBufferData(const Util::Transform &transform,
17+
const float zIndex) {
18+
constexpr glm::mat4 eye(1.F);
19+
20+
constexpr float nearClip = -100;
21+
constexpr float farClip = 100;
22+
23+
auto projection =
24+
glm::ortho<float>(0.0F, 1.0F, 0.0F, 1.0F, nearClip, farClip);
25+
auto view =
26+
glm::scale(eye, {1.F / WINDOW_WIDTH, 1.F / WINDOW_HEIGHT, 1.F}) *
27+
glm::translate(eye, {WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2, 0});
28+
29+
Core::Matrices data = {
30+
Util::TransformToMat4(transform, zIndex),
31+
projection * view,
32+
};
33+
34+
return data;
35+
}
36+
1437
} // namespace Util

0 commit comments

Comments
 (0)