Sign in to follow this  
Jacob Jingle

gl_PerVertex OpenGL Error

Recommended Posts

I just upgraded my Nvidia drivers and now I'm getting this error: ARB_separate_shader_objects requires built-in block gl_PerVertex to be redeclared before accesing its members

 

How do I fix this? I don't use gl_PerVertex in my code...

// frag
#version 420 core

#define POSITION	0
#define GEOMUV      1
#define INDEX       2
#define FRAG_COLOR	0

uniform sampler2DArray freetype;
layout(location = FRAG_COLOR, index = 0) out vec4 out_Color;

in Data
{
    vec2 UV;
    flat int Index;
} gdata;

void main(void)
{
	out_Color =  texture(freetype, vec3(gdata.UV, gdata.Index)).rgba;
}
//geom
#version 420 core

#define POSITION	0
#define GEOMUV      1
#define INDEX       2
#define FRAG_COLOR	0

layout(points) in; // x, y, width, height
layout(triangle_strip, max_vertices = 4) out;

uniform mat4 MVP;

in Data
{
    ivec4 pos; // x, y, width, height
    vec2 UV;
    flat int Index;
} vdata[1];

out Data
{
    vec2 UV;
    flat int Index;
} gdata;

void main() 
{
  int x = vdata[0].pos.x;
  int y = vdata[0].pos.y;
  int widthx  = vdata[0].pos.z + vdata[0].pos.x;
  int heighty = vdata[0].pos.w + vdata[0].pos.y;

  // bottom left quad
  gl_Position   = MVP * vec4(x, heighty, 0, 1);
  gdata.UV      = vec2(0.0, 0.0);
  gdata.Index   = vdata[0].Index;
  EmitVertex();

  // bottom right quad
  gl_Position   = MVP * vec4(widthx, heighty, 0, 1);
  gdata.UV      = vec2(1.0, 0.0);
  gdata.Index   = vdata[0].Index;
  EmitVertex();

  // top right quad
  gl_Position   = MVP * vec4(x, y, 0, 1);
  gdata.UV      = vec2(0.0, 1.0);
  gdata.Index   = vdata[0].Index;
  EmitVertex();
    
  // top left quad
  gl_Position   = MVP * vec4(widthx, y, 0, 1);
  gdata.UV      = vec2(1.0, 1.0);
  gdata.Index   = vdata[0].Index;
  EmitVertex();

  EndPrimitive();
}

 

// vert file
#version 420 core

#define POSITION	0
#define GEOMUV      1
#define INDEX       2
#define FRAG_COLOR	0

layout(location = POSITION) in ivec4 in_Position;
layout(location = GEOMUV)   in vec2 in_UV;
layout(location = INDEX)    flat in int in_Index;

out Data
{
    ivec4 pos;
    vec2 UV;
    flat int Index;
} vdata;
	
void main(void)
{
   vdata.pos   = in_Position;
   vdata.UV    = in_UV;
   vdata.Index = in_Index;
}

Share this post


Link to post
Share on other sites

You use gl_Position, though, and that is part of the gl_PerVertex block. See the man page for gl_Position for (some) details.

Can't believe I missed that, thanks.

 

I added (geom shader):

out gl_PerVertex
{
    vec4 gl_Position;
};

 

And that got rid of that error, but now my program isn't drawing anything. What a pain. :(

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this