Jump to content

  • Log In with Google      Sign In   
  • Create Account

Banner advertising on our site currently available from just $5!


1. Learn about the promo. 2. Sign up for GDNet+. 3. Set up your advert!


Indices and vertices


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
4 replies to this topic

#1 Kaptein   Prime Members   -  Reputation: 2207

Like
0Likes
Like

Posted 25 June 2014 - 08:45 PM

I'm converting a "huge" pipeline to support indices, and I have a strange problem.

 

Each vertex array can be still drawn on its own, since I'm in the "make it work stage." So I thought I would start with mapping each vertex in a one-to-one mapping to indices. Considering that the vertex order contains the correct winding/order to represent the terrain properly, this shouldn't be a problem, right?

 

Because it's not working. And I'm slowly going crazy. My entire indices array is basically a sequential array of numbers 0->N-1 where N is the number of vertices. There are small constant patches of terrain that contain errors.

 

This should work, and I'm just looking for a bug of my own creation, right?

 



Sponsor:

#2 Samith   Members   -  Reputation: 2394

Like
0Likes
Like

Posted 25 June 2014 - 08:55 PM

Do you have primitive restarting enabled, and if so are any of your indices the primitive restart value?



#3 Kaptein   Prime Members   -  Reputation: 2207

Like
0Likes
Like

Posted 25 June 2014 - 09:52 PM

No, but thanks for the tip. I set it to 65535 (and disabled just in case)

 

It's looking more and more like my own fault. I'm assembling a generated terrain from parts that are sorted by shader.

I'm writing every single test I can come up with, but everything is just right.. The problem is that I don't understand where my logic fails. =)

What a classic.

 

Looks like I'll be showering and toileteering alot to find this logic error.


Edited by Kaptein, 25 June 2014 - 09:57 PM.


#4 Krohm   Crossbones+   -  Reputation: 3757

Like
0Likes
Like

Posted 25 June 2014 - 10:31 PM

I find unlikely a mesh terrain can generate perfectly sequential index arrays. Are you sure the filter is pulling up the correct values?

If your terrain is 2D, use height maps directly. They're both easier and more efficient.

 

In general, to take two vertex buffers and concatenate them to fit a single one, there are two approaches (in case this is what you're asking)

  1. Mark the corresponding drawcall to use an index offset (fast, but cannot be batched)
  2. Use a buffer offset (as above but slower, not recommended)
  3. As you upload the indices, add the count of previously loaded vertices (slow, but only once at loading time, can be batched).

Edited by Krohm, 25 June 2014 - 10:35 PM.


#5 Kaptein   Prime Members   -  Reputation: 2207

Like
0Likes
Like

Posted 26 June 2014 - 11:17 AM

Yes, I'm currently doing #3.

 

 

I finally found the problem, completely by mistake:

glDrawElements(GL_QUADS, cv->indices[i], GL_UNSIGNED_SHORT, (GLvoid*) (intptr_t) (cv->indexoffset[i]*2));

 

For some reason, the "offset" value is in bytes. I just multiplied by 2 there just to see how fast it would crash.

It boggles the mind.


Edited by Kaptein, 26 June 2014 - 11:30 AM.





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