Jump to content

  • Log In with Google      Sign In   
  • Create Account

gl_PerVertex OpenGL Error


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 Jacob Jingle   Members   -  Reputation: 223

Like
0Likes
Like

Posted 30 January 2013 - 04:28 AM

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;
}


Sponsor:

#2 swiftcoder   Senior Moderators   -  Reputation: 10364

Like
0Likes
Like

Posted 30 January 2013 - 09:26 AM

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


Tristam MacDonald - Software Engineer @Amazon - [swiftcoding]


#3 Jacob Jingle   Members   -  Reputation: 223

Like
0Likes
Like

Posted 31 January 2013 - 01:59 AM

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. :(






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS