Login  Register

[SOLVED] Mapping two (different types of) Textures on the same geometry

Posted by elect on Feb 10, 2012; 9:19am
URL: https://forum.jogamp.org/SOLVED-Mapping-two-different-types-of-Textures-on-the-same-geometry-tp3731946.html

Hi,

I am rendering a cylinder and mapping two different textures to the top and to the bottom face (on two square, blending is enabled to cut the angles, the image to render is exactly a circle, all the rest is transparent).

Both the textures are loaded in the following way:


check3dFloorFile = new File(check3dFloorPath);
        
        try {
            check3dFloorTexture = TextureIO.newTexture(check3dFloorFile, true);
        } catch (IOException | GLException ex) {
            Logger.getLogger(Viewer.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        check3dFloorTexture.setTexParameteri(gl, GL2.GL_TEXTURE_MIN_FILTER,
                                                    GL2.GL_LINEAR_MIPMAP_LINEAR);
        check3dFloorTexture.setTexParameteri(gl, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR);
                
        check3dFloorBackFile = new File(check3dFloorBackPath);
        
        try {
            check3dFloorBackTexture = TextureIO.newTexture(check3dFloorBackFile, true);
        } catch (IOException | GLException ex) {
            Logger.getLogger(Viewer.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        check3dFloorBackTexture.setTexParameteri(gl, GL2.GL_TEXTURE_MIN_FILTER,
                                                    GL2.GL_LINEAR_MIPMAP_LINEAR);
        check3dFloorBackTexture.setTexParameteri(gl, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR);





The problem arises when I try to render to a texture (a blank one, that has nothing to do with this first two ones):


gl.glGenTextures(1, textureID, 0);
        gl.glBindTexture(GL2.GL_TEXTURE_2D, textureID[0]);
        
        gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_S, GL2.GL_REPEAT);
        gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_T, GL2.GL_REPEAT);
        gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_NEAREST);
        gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_NEAREST);
        
        // null means reserve texture memory, but texels are undefined
        gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, GL2.GL_RGB, floorWidth, floorHeight,
                                                    0, GL2.GL_RGB, GL2.GL_FLOAT, null);
        
        gl.glGenFramebuffers(1, frameBufferID, 0);
        gl.glBindFramebuffer(GL2.GL_FRAMEBUFFER, frameBufferID[0]);
        
        //Attach 2D texture to this FBO
        gl.glFramebufferTexture2D(GL2.GL_FRAMEBUFFER, GL2.GL_COLOR_ATTACHMENT0,
                                        GL2.GL_TEXTURE_2D, textureID[0], 0);
        
        // depth buffer
        //int[] depthRenderBufferID = new int[1];
        gl.glGenRenderbuffers(1, depthRenderBufferID, 0);
        gl.glBindRenderbuffer(GL2.GL_RENDERBUFFER, depthRenderBufferID[0]);
        gl.glRenderbufferStorage(GL2.GL_RENDERBUFFER, GL2.GL_DEPTH_COMPONENT,
                                                floorWidth, floorHeight);
        gl.glFramebufferRenderbuffer(GL2.GL_FRAMEBUFFER, GL2.GL_DEPTH_ATTACHMENT,
                                            GL2.GL_RENDERBUFFER, depthRenderBufferID[0]);
        
        if(gl.glCheckFramebufferStatus(GL2.GL_FRAMEBUFFER) == GL2.GL_FRAMEBUFFER_COMPLETE)
            System.out.println("[Viewer] GL_FRAMEBUFFER_COMPLETE!!");
        else
            System.out.println("..cazzo ^^");

//gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
        gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
       
        gl.glColor3f(0.0f, 0.0f, 0.0f);
        gl.glBegin(GL2.GL_TRIANGLES);
            gl.glVertex3f( 0.0f,  1.0f, 0.0f);
            gl.glVertex3f(-1.0f, -1.0f, 0.0f);
            gl.glVertex3f( 1.0f, -1.0f, 0.0f);
        gl.glEnd();




As soon as this code is executed, the texture mapped on the top of the cylinder disappears and all the top turns to black (after some modifications actually I do not see anything)..

Why?

Ps: my task is to map this third rendered texture on the top of the cylinder, over the already existing one..

I would like to underline that the first texture (mapped on the top) is loaded by using TextureIO while the third (the one that I want to apply on the first one) is created on the fly by render to texture. This basically means that I dont have any idea how I could bind a texture created with TextureIO (like for example the "check3dFloorTexture" )