feat: switch to rendering grid with EBO

This commit is contained in:
Matias 2025-07-14 18:18:32 +02:00
parent dbb4488c75
commit af189dc9b0
No known key found for this signature in database
GPG Key ID: ED35A6AC65A06B69

View File

@ -30,8 +30,8 @@ SShader* g_shader {};
constexpr unsigned int g_SUBDIVS = 2; constexpr unsigned int g_SUBDIVS = 2;
static_assert(g_SUBDIVS > 0); static_assert(g_SUBDIVS > 0);
GLuint g_VAO, g_VBO, g_VBO_UVs; GLuint g_VAO, g_VBO, g_VBO_UVs, g_EBO;
unsigned int g_vertCount = 0; unsigned int g_indexCount = 0;
class CBindOwnFramebufferPassElement final: public IPassElement { class CBindOwnFramebufferPassElement final: public IPassElement {
public: public:
@ -125,20 +125,8 @@ class CRenderWobblyWindowPassElement final: public IPassElement {
glBindBuffer(GL_ARRAY_BUFFER, g_VBO_UVs); glBindBuffer(GL_ARRAY_BUFFER, g_VBO_UVs);
glBufferSubData(GL_ARRAY_BUFFER, 0, UVs.size(), UVs.data()); glBufferSubData(GL_ARRAY_BUFFER, 0, UVs.size(), UVs.data());
GLCALL(glDisable(GL_CULL_FACE)); GLCALL(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_EBO));
GLCALL(glDrawArrays(GL_TRIANGLES, 0, g_vertCount)); GLCALL(glDrawElements(GL_TRIANGLE_STRIP, g_indexCount, GL_UNSIGNED_INT, 0));
int nBufferSize = 0;
glGetBufferParameteriv(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, &nBufferSize);
int originalVertexArraySize = (nBufferSize / sizeof(float));
std::println(
"Drew {} verts, from VBO that has {} floats",
g_vertCount,
originalVertexArraySize
);
// GLCALL(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_EBO));
// GLCALL(glDrawElements(GL_TRIANGLE_STRIP, g_indicesCount, GL_UNSIGNED_INT, 0));
GLCALL(glBindVertexArray(0)); GLCALL(glBindVertexArray(0));
pWindowFB->getTexture()->unbind(); pWindowFB->getTexture()->unbind();
@ -252,8 +240,7 @@ void hkRenderWindow(
void initGPUObjects() { void initGPUObjects() {
g_shader = &g_pHyprOpenGL->m_shaders->m_shRGBA; g_shader = &g_pHyprOpenGL->m_shaders->m_shRGBA;
std::vector<float> finalVerts; // std::vector<float> finalVerts;
{
const unsigned int vertsPerRow = g_SUBDIVS + 1; const unsigned int vertsPerRow = g_SUBDIVS + 1;
std::vector<float> verts; std::vector<float> verts;
verts.reserve(vertsPerRow * vertsPerRow * 2); verts.reserve(vertsPerRow * vertsPerRow * 2);
@ -266,15 +253,9 @@ void initGPUObjects() {
} }
} }
verts[4 * 2] = 0.7f; std::vector<GLuint> indices;
g_indexCount = 3 * 2 * g_SUBDIVS * g_SUBDIVS;
for (unsigned int i = 0; i < verts.size(); i += 2) { indices.reserve(g_indexCount);
std::println("Created vert ({}, {})", verts[i], verts[i + 1]);
}
std::vector<unsigned int> indices;
g_vertCount = 3 * 2 * g_SUBDIVS * g_SUBDIVS;
indices.reserve(g_vertCount);
for (int y = 0; y < g_SUBDIVS; ++y) { for (int y = 0; y < g_SUBDIVS; ++y) {
for (int x = 0; x < g_SUBDIVS; ++x) { for (int x = 0; x < g_SUBDIVS; ++x) {
@ -288,42 +269,27 @@ void initGPUObjects() {
} }
} }
finalVerts.reserve(g_vertCount);
for (auto&& index : indices) {
finalVerts.push_back(verts[index * 2]);
finalVerts.push_back(verts[index * 2 + 1]);
}
for (unsigned int i = 0; i < finalVerts.size(); i += 6) {
std::println(
"Created tri <({}, {}), ({}, {}), ({}, {})>",
finalVerts[i],
finalVerts[i + 1],
finalVerts[i + 2],
finalVerts[i + 3],
finalVerts[i + 4],
finalVerts[i + 5]
);
}
}
GLCALL(glGenVertexArrays(1, &g_VAO)); GLCALL(glGenVertexArrays(1, &g_VAO));
GLCALL(glGenBuffers(1, &g_VBO)); GLCALL(glGenBuffers(1, &g_VBO));
GLCALL(glGenBuffers(1, &g_VBO_UVs)); GLCALL(glGenBuffers(1, &g_VBO_UVs));
// GLCALL(glGenBuffers(1, &g_EBO)); GLCALL(glGenBuffers(1, &g_EBO));
GLCALL(glBindVertexArray(g_VAO)); GLCALL(glBindVertexArray(g_VAO));
// GLCALL(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_EBO)); GLCALL(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_EBO));
// GLCALL(glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size(), indices.data(), GL_STATIC_DRAW)); GLCALL(glBufferData(
GL_ELEMENT_ARRAY_BUFFER,
indices.size() * sizeof(GLuint),
indices.data(),
GL_STATIC_DRAW
));
GLCALL(glBindBuffer(GL_ARRAY_BUFFER, g_VBO)); GLCALL(glBindBuffer(GL_ARRAY_BUFFER, g_VBO));
{ {
std::println("Number of vertices in VBO: {}/2", finalVerts.size());
GLCALL(glBufferData( GLCALL(glBufferData(
GL_ARRAY_BUFFER, GL_ARRAY_BUFFER,
finalVerts.size() * sizeof(float), verts.size() * sizeof(float),
finalVerts.data(), verts.data(),
GL_DYNAMIC_DRAW GL_DYNAMIC_DRAW
)); ));
@ -342,8 +308,8 @@ void initGPUObjects() {
{ {
GLCALL(glBufferData( GLCALL(glBufferData(
GL_ARRAY_BUFFER, GL_ARRAY_BUFFER,
finalVerts.size() * sizeof(float), verts.size() * sizeof(float),
finalVerts.data(), verts.data(),
GL_DYNAMIC_DRAW GL_DYNAMIC_DRAW
)); // Initial dummy UVs )); // Initial dummy UVs
GLCALL(glEnableVertexAttribArray(g_shader->uniformLocations[SHADER_TEX_ATTRIB])); GLCALL(glEnableVertexAttribArray(g_shader->uniformLocations[SHADER_TEX_ATTRIB]));