Java-Gaming.org
Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
Featured games (78)
games approved by the League of Dukes
Games in Showcase (408)
games submitted by our members
Games in WIP (293)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Textures in LWJGL  (Read 2192 times)
0 Members and 1 Guest are viewing this topic.
Offline Harley Rana

Junior Member




Java games rock!


« Posted 2002-12-29 02:27:13 »

Hey im having some problems getting texture loading to work.  
Im loading the texture data with bufferedImage.getData().getPixels(0,0, width,height,pixels);

How do i call glGenTextures when it takes (int,int)instead of (int,int[]), as in gl4Java?

What is the correct method for loading textures in LWJGL?

Thanks heaps!  Harley Smiley
Offline elias

Senior Member





« Reply #1 - Posted 2002-12-29 10:02:06 »

*everything* in lwjgl not ordinary parameters like floats, int etc. are direct buffers of some kind, including write back parameters from GL.

So to make genTextures work, you'd have to do something like:
1  
2  
3  
4  
5  
6  
7  
        ByteBuffer buf = ByteBuffer.allocateDirect(4);
        buf.order(ByteOrder.nativeOrder());
        IntBuffer int_buf = buf.asIntBuffer();
        GL.genTextures(1, Sys.getDirectBufferAddress(int_buf));
        if (int_buf.buffer().get(0) == 0)
               throw new RuntimeException("Could not allocate new texture id!");
        return int_buf.get(0);

Likewise, when you want to upload pixel data into a GL texture, it has to be in a buffer and given as an address to GL through Sys.getDirectBufferAddress(..).

It might seem overly complicated, but it really is a the fastest way to call GL, that is using explicit C pointers.

Sys.getDirectBufferAddress() returns the int pointer address of a direct buffer (DON'T use a non-direct buffer), and thats' why for every gl function taking an array or simply a pointer, an int is taken by lwjgl.

Don't scare yourself because of this, lwjgl is really a slick binding, and almost every user of it (I believe) simply encapsulates the behaviour in utility classes.

The lwjgl author also released spgl (also on sourceforge) that sits on top of lwjgl and exposes more friendly behaviour.

- elias

Offline Exocet

Senior Newbie





« Reply #2 - Posted 2003-01-02 20:03:47 »

Any thoughts on creating a single texture generating func ?  such as gen1Texture()... so you don't have to deal with the byte buffers if you don't want to.  But then again... why would you want only 1 texture?
Games published by our own members! Check 'em out!
Try the Free Demo of Droid Assault
Offline elias

Senior Member





« Reply #3 - Posted 2003-01-02 20:22:25 »

I never saw the use for generating multiple texture handles at the same time. I always end up allocating them one after another - I see no use for consecutive texture handles.

Anyway, lwjgl is designed with simplicity and speed in mind. Therefore it's easy to get the "talking to a device driver" feeling with it, but that's intentional. lwjgl makes no attempt to be user friendly if that would make the layer between e.g. opengl and you any thicker. And that's why lwjgl will never include utility/helper functions like the one you mentioned. The Shaven Puppy Game Library by the same author is built ont top of lwjgl and tries to do just that.

- elias
- elias

Offline Exocet

Senior Newbie





« Reply #4 - Posted 2003-01-04 19:41:28 »

true.. but there are cases such as this where it is just more efficient to do it JNI

1  
2  
3  
GLuint texture;
glGenTextures(1, &texture);
return (jint) texture;


as opposed to the 4 byte, bytebuffer that would have to be generated then disposed of for the same effect within java.

- Tristan
Offline elias

Senior Member





« Reply #5 - Posted 2003-01-04 20:23:22 »

Nah, the utility class just holds one reference to a static 'result' buffer, and never release it.

- elias

Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
 
Get high quality music tracks for your game!

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

The invasion has landed! On Mars! And you're there to beat 'em!
cubemaster21 (147 views)
2013-05-17 21:29:12

alaslipknot (155 views)
2013-05-16 21:24:48

gouessej (187 views)
2013-05-16 00:53:38

gouessej (181 views)
2013-05-16 00:17:58

theagentd (191 views)
2013-05-15 15:01:13

theagentd (174 views)
2013-05-15 15:00:54

StreetDoggy (219 views)
2013-05-14 15:56:26

kutucuk (243 views)
2013-05-12 17:10:36

kutucuk (242 views)
2013-05-12 15:36:09

UnluckyDevil (248 views)
2013-05-12 05:09:57
Complex number cookbook
by Roquen
2013-04-24 12:47:31

2D Dynamic Lighting
by Oskuro
2013-04-17 16:46:12

2D Dynamic Lighting
by Oskuro
2013-04-17 16:45:57

2D Dynamic Lighting
by Oskuro
2013-04-17 16:23:20

Noise (bandpassed white)
by Roquen
2013-04-05 17:36:01

Noise (bandpassed white)
by Roquen
2013-04-03 16:17:38

Java Data structures
by Roquen
2013-03-29 13:21:12

Topic Request
by kutucuk
2013-03-22 21:42:01
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!
Page created in 0.12 seconds with 21 queries.