Allow drawing instanced glow color without explicit location

This commit is contained in:
Benau 2016-12-23 10:36:35 +08:00
parent a339975df6
commit f7e2122b79
3 changed files with 14 additions and 18 deletions

View File

@ -1,15 +1,16 @@
#if __VERSION__ >= 330
layout(location = 0) in vec3 Position;
layout(location = 1) in vec3 Normal;
layout(location = 2) in vec4 Color;
layout(location = 3) in vec2 Texcoord;
layout(location = 5) in vec3 Tangent;
layout(location = 6) in vec3 Bitangent;
layout(location = 7) in vec3 Origin;
layout(location = 8) in vec3 Orientation;
layout(location = 9) in vec3 Scale;
layout(location = 15) in vec4 GlowColor;
layout(location = 10) in vec4 misc_data;
#else
in vec3 Position;
in vec3 Origin;
in vec3 Orientation;
in vec3 Scale;
in vec4 misc_data;
#endif
flat out vec4 glowColor;
#stk_include "utils/getworldmatrix.vert"
@ -19,5 +20,5 @@ void main(void)
mat4 ModelMatrix = getWorldMatrix(Origin, Orientation, Scale);
mat4 TransposeInverseModelView = transpose(getInverseWorldMatrix(Origin, Orientation, Scale) * InverseViewMatrix);
gl_Position = ProjectionViewMatrix * ModelMatrix * vec4(Position, 1.);
glowColor = GlowColor;
glowColor = misc_data;
}

View File

@ -288,12 +288,7 @@ void IndirectDrawPolicy::drawGlow(const DrawCalls& draw_calls,
const std::vector<GlowData>& glows) const
{
#if !defined(USE_GLES2)
//to draw Glow with indirect commands, we also need GL_ARB_explicit_attrib_location extension
//TODO: add a way to render glow without explicit attrib
if(CVS->isARBExplicitAttribLocationUsable())
{
draw_calls.drawIndirectGlow();
}
#endif // !defined(USE_GLES2)
}

View File

@ -217,9 +217,9 @@ template<>
void VAOInstanceUtil<GlowInstanceData>::SetVertexAttrib()
{
SetVertexAttrib_impl();
glEnableVertexAttribArray(15);
glVertexAttribPointer(15, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(GlowInstanceData), (GLvoid*)(9 * sizeof(float)));
glVertexAttribDivisorARB(15, 1);
glEnableVertexAttribArray(10);
glVertexAttribPointer(10, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(GlowInstanceData), (GLvoid*)(9 * sizeof(float)));
glVertexAttribDivisorARB(10, 1);
}