summaryrefslogtreecommitdiff
path: root/src/gl_calls.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gl_calls.cpp')
-rw-r--r--src/gl_calls.cpp37
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");