diff options
author | Fox Caminiti <fox@foxcam.net> | 2023-02-11 17:37:49 -0500 |
---|---|---|
committer | Fox Caminiti <fox@foxcam.net> | 2023-02-11 17:37:49 -0500 |
commit | bd25daeae033e4f905ae0145831a7d8fdd92e471 (patch) | |
tree | 7e602f31449d8eb58212a028e91e7eb32e4bbf84 /src/gl_calls.cpp | |
parent | 52c6ad3f2686cb66a8954ca5dac7f3eba4676cc3 (diff) |
v4.0
Diffstat (limited to 'src/gl_calls.cpp')
-rw-r--r-- | src/gl_calls.cpp | 37 |
1 files changed, 17 insertions, 20 deletions
diff --git a/src/gl_calls.cpp b/src/gl_calls.cpp index 8d5ef8c..5d65100 100644 --- a/src/gl_calls.cpp +++ b/src/gl_calls.cpp @@ -116,11 +116,6 @@ static void GL_InitDefaultVerts() { glBindBuffer(GL_ARRAY_BUFFER, DefaultVerts.VertexBufferObject); glBufferData(GL_ARRAY_BUFFER, sizeof(GL_DefaultVertices), GL_DefaultVertices, GL_STATIC_DRAW); - glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)0); - glEnableVertexAttribArray(0); - glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float))); - glEnableVertexAttribArray(1); - glGenVertexArrays(1, &ShapeVerts.VertexArrayObject); glGenBuffers(1, &ShapeVerts.VertexBufferObject); } @@ -212,20 +207,17 @@ GL_BlitStencil(gl_effect_layer *TestM, void *StrokeData, void *FillData, uint32 glUniform3f(Uniform, 0, 0, 0); glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glBindVertexArray(0); + glBindVertexArray(ShapeVerts.VertexArrayObject); glStencilFunc(GL_EQUAL, StencilLayer, 0xFF); glStencilOp(GL_KEEP, GL_KEEP, Mode); - // fill - // vertices - glBindBuffer(GL_ARRAY_BUFFER, ShapeVerts.VertexBufferObject); - glBufferData(GL_ARRAY_BUFFER, sizeof(real32) * 4 * FillCount, FillData, GL_STATIC_DRAW); - glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)0); - glEnableVertexAttribArray(0); - glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)(2 * sizeof(float))); + glBindBuffer(GL_ARRAY_BUFFER, ShapeVerts.VertexBufferObject); + glBufferData(GL_ARRAY_BUFFER, sizeof(real32) * 4 * FillCount, FillData, GL_STATIC_DRAW); + glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)0); + glEnableVertexAttribArray(0); + glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)(2 * sizeof(float))); - glDrawElements(GL_TRIANGLE_STRIP, 6, GL_UNSIGNED_INT, 0); - // + glDrawArrays(GL_TRIANGLE_FAN, 0, FillCount); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glBindVertexArray(0); @@ -264,11 +256,11 @@ GL_RasterizeShape2(gl_effect_layer *TestM, void *StrokeData, void *FillData, uin // the stencil buffer, but since we also are using it to mask out precomps, // every shape has to be drawn a second time to "clean up" the buffer. - if (RenderMode & gl_renderflag_fill && RenderMode & gl_renderflag_concave) + if (RenderMode & gl_renderflag_fill && !(RenderMode & gl_renderflag_convex)) { // disable color component writing and allow stencil writing using the shape layer's vertices glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glBindVertexArray(0); + glBindVertexArray(ShapeVerts.VertexArrayObject); glStencilFunc(GL_ALWAYS, 0, 0xFF); glStencilOpSeparate(GL_FRONT, GL_KEEP, GL_KEEP, GL_INCR_WRAP); @@ -279,6 +271,8 @@ GL_RasterizeShape2(gl_effect_layer *TestM, void *StrokeData, void *FillData, uin Uniform = glGetUniformLocation(DefaultShaderProgram, "FragmentMode"); glUniform1i(Uniform, 1); + glBindVertexArray(ShapeVerts.VertexArrayObject); + glBindBuffer(GL_ARRAY_BUFFER, ShapeVerts.VertexBufferObject); glBufferData(GL_ARRAY_BUFFER, sizeof(real32) * 4 * FillCount, FillData, GL_STATIC_DRAW); glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)0); @@ -291,7 +285,7 @@ GL_RasterizeShape2(gl_effect_layer *TestM, void *StrokeData, void *FillData, uin // allow color component writing glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glBindVertexArray(0); + glBindVertexArray(DefaultVerts.VertexArrayObject); glStencilFunc(GL_EQUAL, StencilLayer + 1, 0xFF); glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); @@ -318,7 +312,7 @@ GL_RasterizeShape2(gl_effect_layer *TestM, void *StrokeData, void *FillData, uin // get cleaned by setting StencilOp to GL_DECR. glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glBindVertexArray(0); + glBindVertexArray(DefaultVerts.VertexArrayObject); glStencilFunc(GL_ALWAYS, 0, 0xFF); glStencilOpSeparate(GL_FRONT, GL_KEEP, GL_KEEP, GL_DECR_WRAP); @@ -329,6 +323,8 @@ GL_RasterizeShape2(gl_effect_layer *TestM, void *StrokeData, void *FillData, uin Uniform = glGetUniformLocation(DefaultShaderProgram, "FragmentMode"); glUniform1i(Uniform, 1); + glBindVertexArray(ShapeVerts.VertexArrayObject); + glBindBuffer(GL_ARRAY_BUFFER, ShapeVerts.VertexBufferObject); glBufferData(GL_ARRAY_BUFFER, sizeof(real32) * 4 * FillCount, FillData, GL_STATIC_DRAW); glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)0); @@ -341,7 +337,7 @@ GL_RasterizeShape2(gl_effect_layer *TestM, void *StrokeData, void *FillData, uin else if (RenderMode & gl_renderflag_fill) { glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - glBindVertexArray(0); + glBindVertexArray(ShapeVerts.VertexArrayObject); glStencilFunc(GL_EQUAL, StencilLayer, 0xFF); glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); @@ -370,6 +366,7 @@ GL_RasterizeShape2(gl_effect_layer *TestM, void *StrokeData, void *FillData, uin // stroke component if (RenderMode & gl_renderflag_stroke) { + glBindVertexArray(ShapeVerts.VertexArrayObject); Uniform = glGetUniformLocation(DefaultShaderProgram, "VertexMode"); glUniform1i(Uniform, 1); Uniform = glGetUniformLocation(DefaultShaderProgram, "FragmentMode"); |