Jump to content
  • Advertisement
Sign in to follow this  
Jacob Jingle

gl_PerVertex OpenGL Error

This topic is 2117 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

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
Advertisement

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
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!