MappedObject

Hi, i’m trying to understand how this http://lwjgl.org/javadoc/org/lwjgl/util/mapped/MappedObject.html class works. I think this is what i need to convert in a standard way c++ structs; i searched a bit but i didn’t find any resources :\ I want to use this class properly from the start, so can someone help me? Maybe with a simple example? ;D
Thanks in advance,

Francesco

The Official Thread by Riven

Thanks for the reply.
I saw that thread but the links in the first post are broken and the example class MappedVec3 doesn’t compile for me so i thought it is an old thread.
The compilation fails because “the attribute sizeof is undefined for the annotation type MappedType”.
I referenced to the build path lwjgl_util.jar. Am i missing something?

An example of a mapped particle inner class (more like a struct though…):

    protected static class MappedParticle extends MappedObject {

        @MappedField(byteOffset = 0)
        private float x;
        @MappedField(byteOffset = 4)
        private float y;
        @MappedField(byteOffset = 8)
        private byte r;
        @MappedField(byteOffset = 9)
        private byte g;
        @MappedField(byteOffset = 10)
        private byte b;
        @MappedField(byteOffset = 11)
        private byte a;

        public void init(float x, float y, float r, float g, float b) {
            this.x = x;
            this.y = y;
            this.r = (byte) (r * 255);
            this.g = (byte) (g * 255);
            this.b = (byte) (b * 255);
            a = (byte) 255;
        }

        public void update(float xSpeed, float ySpeed) {
            x += xSpeed;
            y += ySpeed;
        }
    }

Starting the program with MappedObjects enabled (ParticleTest8 is my main class name):

    public static void main(String[] args) {
        MappedObjectTransformer.register(MappedParticle.class);
        if (MappedObjectClassLoader.fork(ParticleTest8.class, args)) {
            return;
        }

        //releaseInit();

        new ParticleTest8().gameloop();
    }

Creating and using individual objects:

ByteBuffer buffer = BufferUtils.createByteBuffer(particleByteSize * numParticles);
MappedParticle mappedParticleData = MappedParticle.map(buffer);

//OR (untested code):
//MappedParticle mappedParticleData = MappedParticle.malloc(numParticles);
//ByteBuffer buffer = mappedParticleData.backingByteBuffer();

for (int i = 0; i < numParticles; i++) {
    mappedParticleData.view = i;
    mappedParticleData.init(...);
}

This should get you started…

I’d just like to point out that the @MappedField annotation is optional. It’s useful only when you require custom padding/alignment of the mapped fields.

For a complete example see org.lwjgl.test.opengl.sprites.SpriteShootoutMapped in the LWJGL distribution.

Thank you guys, i understand now.
I played a bit with these classes, and i realized that they make code too difficult to read for the project I’m doing, so i won’t use them.
But thanks again for the help :slight_smile:

Francesco