Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8367585
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 9, 20262026-06-09T13:11:49+00:00 2026-06-09T13:11:49+00:00

I’m writing a 2D RPG using the LWJGL and Java 1.6. By now, I

  • 0

I’m writing a 2D RPG using the LWJGL and Java 1.6. By now, I have a ‘World’ class, which holds an ArrayList of Tile (interface with basic code for every Tile) and a GrassTile class, which makes the use of a Spritesheet.

When using Immediate mode to draw a grid of 64×64 GrassTiles I get around 100 FPS and do this by calling the .draw() method from each tile inside the ArrayList, which binds the spritesheet and draws a certain area of it (with glTexCoord2f()). So I heard it’s better to use VBO’s, got a basic tutorial and tried to implement them on the .draw() method.

Now there are two issues: I don’t know how to bind only a certain area of a texture to a VBO (the whole texture would be simply glBindTexture()) so I tried using them with colours only.
That takes me to second issue: I got only +20 FPS (120 total) which is not really what I expected, so I suppose I’m doing something wrong. Also, I am making a single VBO for each GrassTile while iterating inside the ArrayList. I think that’s kind of wrong, because I can simply throw all the tiles inside a single FloatBuffer.

So, how can I draw similar geometry in a better way and how can I bind only a certain area of a Texture to a VBO?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-09T13:11:51+00:00Added an answer on June 9, 2026 at 1:11 pm

    So, how can I draw similar geometry in a better way…

    Like @Ian Mallett described; put all your vertex data into a single vertex buffer object. This makes it possible to render your map in one call. If your map get 1000 times bigger you may want to implement a camera solution which only draws the vertices that are being shown on the screen, but that is a question that will arise later if you’re planning on a significantly bigger map.

    …and how can I bind only a certain area of a Texture to a VBO?

    You can only bind a whole texture. You have to point to a certain area of the texture that you want to be mapped.

    Every texture coordinate relates to a specific vertex. Every tile relates to four vertices. Common tiles in your game will share the same texture, hence the ’tile map’ name. Make use of that. Place all your tile textures in a texture sheet and bind that texture sheet.
    For every new ’tile’ you create, check whether the area is meant to be air, grass or ground and then point to the part of the texture that corresponds to what you intend.

    Let’s say your texture area in pixels are 100×100. The ground area is 15×15 from the lower left corner. Follow the logic above explains the example code being shown below:

    // The vertexData array simply contains information
    // about a tile's four vertices (or six 
    // vertices if you draw using GL_TRIANGLES).
    
    mVertexBuffer.put(0, vertexData[0]);
    mVertexBuffer.put(1, vertex[1]);
    mVertexBuffer.put(2, vertex[2]);
    mVertexBuffer.put(3, vertex[3]);
    mVertexBuffer.put(4, vertex[4]);
    mVertexBuffer.put(5, vertex[5]);
    mVertexBuffer.put(6, vertex[6]);
    mVertexBuffer.put(7, vertex[7]);
    mVertexBuffer.put(8, vertex[8]);
    mVertexBuffer.put(9, vertex[9]);
    mVertexBuffer.put(10, vertex[10]);
    mVertexBuffer.put(11, vertex[11]);
    
    if (tileIsGround) {
       mTextureCoordBuffer.put(0, 0.0f);
       mTextureCoordBuffer.put(1, 0.0f);
    
       mTextureCoordBuffer.put(2, 0.15f);
       mTextureCoordBuffer.put(3, 0.0f);
    
       mTextureCoordBuffer.put(4, 0.15f);
       mTextureCoordBuffer.put(5, 0.15f);
    
       mTextureCoordBuffer.put(6, 0.15f);
       mTextureCoordBuffer.put(7, 0.0f);
    } else { /* Other texture coordinates. */ }
    

    You actually wrote the solution. The only difference is that you should upload the texture coordinates data to the GPU.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have thousands of HTML files to process using Groovy/Java and I need to
I have a jquery bug and I've been looking for hours now, I can't
I have a string like this: La Torre Eiffel paragonata all’Everest What PHP function
this is what i have right now Drawing an RSS feed into the php,
I have a text area in my form which accepts all possible characters from
I have a .ini file as follows: [playlist] numberofentries=2 File1=http://87.230.82.17:80 Title1=(#1 - 365/1400) Example
link Im having trouble converting the html entites into html characters, (&# 8217;) i
That's pretty much it. I'm using Nokogiri to scrape a web page what has
I have just tried to save a simple *.rtf file with some websites and
I am trying to understand how to use SyndicationItem to display feed which is

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.