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 763129
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 14, 20262026-05-14T16:30:40+00:00 2026-05-14T16:30:40+00:00

Okay, so I am trying to render a scene to a small 32×32 texture

  • 0

Okay, so I am trying to render a scene to a small 32×32 texture and ran into problems. I get an “invalid framebuffer operation” error when I try to actually draw anything to the texture. I have simplified the code below so that it simply tries to render a quad to a texture and then bind that quad as a texture for another quad that is rendered to the screen. So my question is this… where is the error? This is using JOGL 1.1.1. The error occurs at Checkpoint2 in the code.

import java.awt.event.*;

import javax.media.opengl.*;
import javax.media.opengl.glu.*;
import javax.swing.JFrame;
import java.nio.*;

public class Main extends JFrame implements GLEventListener, KeyListener, MouseListener, MouseMotionListener, ActionListener{


/* GL related variables */
private final GLCanvas canvas;
private GL gl;
private GLU glu;

private int winW = 600, winH = 600;

private int texRender_FBO;
private int texRender_RB;
private int texRender_32x32;

public static void main(String args[]) {
    new Main();
}

/* creates OpenGL window */
public Main() {
    super("Problem Child");
    canvas = new GLCanvas();
    canvas.addGLEventListener(this);
    canvas.addKeyListener(this);
    canvas.addMouseListener(this);
    canvas.addMouseMotionListener(this);
    getContentPane().add(canvas);
    setSize(winW, winH);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
    canvas.requestFocus();
}

/* gl display function */
public void display(GLAutoDrawable drawable) {
    gl.glBindFramebufferEXT(GL.GL_FRAMEBUFFER_EXT, this.texRender_FBO);
    gl.glPushAttrib(GL.GL_VIEWPORT_BIT);
    gl.glViewport(0, 0, 32, 32);
    gl.glClearColor(1.f, 0.f, 0.f, 1.f);
    System.out.print("Checkpoint1: "); outputError();
    gl.glBegin(GL.GL_QUADS);
    {
        //gl.glTexCoord2f(0.0f, 0.0f);
        gl.glColor3f(1.f, 0.f, 0.f);
        gl.glVertex3f(0.0f, 1.0f, 1.0f);
        //gl.glTexCoord2f(1.0f, 0.0f);
        gl.glColor3f(1.f, 1.f, 0.f);
        gl.glVertex3f(1.0f, 1.0f, 1.0f);
        //gl.glTexCoord2f(1.0f, 1.0f);
        gl.glColor3f(1.f, 1.f, 1.f);
        gl.glVertex3f(1.0f, 0.0f, 1.0f);
        //gl.glTexCoord2f(0.0f, 1.0f);
        gl.glColor3f(1.f, 0.f, 1.f);
        gl.glVertex3f(0.0f, 0.0f, 1.0f);
    }
    gl.glEnd(); System.out.print("Checkpoint2: "); outputError(); //Here I get an invalid framebuffer operation

    gl.glPopAttrib();
    gl.glBindFramebufferEXT(GL.GL_FRAMEBUFFER_EXT, 0);
    gl.glClearColor(0.f, 0.f, 0.f, 1.f);
    gl.glClear(GL.GL_COLOR_BUFFER_BIT);


    gl.glColor3f(1.f, 1.f, 1.f);
    gl.glBindTexture(GL.GL_TEXTURE_1D, this.texRender_32x32);
    gl.glBegin(GL.GL_QUADS);
    {
        gl.glTexCoord2f(0.0f, 0.0f);
        //gl.glColor3f(1.f, 0.f, 0.f);
        gl.glVertex3f(0.0f, 1.0f, 1.0f);
        gl.glTexCoord2f(1.0f, 0.0f);
        //gl.glColor3f(1.f, 1.f, 0.f);
        gl.glVertex3f(1.0f, 1.0f, 1.0f);
        gl.glTexCoord2f(1.0f, 1.0f);
        //gl.glColor3f(1.f, 1.f, 1.f);
        gl.glVertex3f(1.0f, 0.0f, 1.0f);
        gl.glTexCoord2f(0.0f, 1.0f);
        //gl.glColor3f(1.f, 0.f, 1.f);
        gl.glVertex3f(0.0f, 0.0f, 1.0f);
    }
    gl.glEnd();
}

/* initialize GL */
public void init(GLAutoDrawable drawable) {
    gl = drawable.getGL();
    glu = new GLU();

    gl.glClearColor(.3f, .3f, .3f, 1f);
    gl.glClearDepth(1.0f);

    gl.glMatrixMode(GL.GL_PROJECTION);
    gl.glLoadIdentity();
    gl.glOrtho(0, 1, 0, 1, -10, 10);
    gl.glMatrixMode(GL.GL_MODELVIEW);

    //Set up the 32x32 texture
    this.texRender_FBO = genFBO(gl);
    gl.glBindFramebufferEXT(GL.GL_FRAMEBUFFER_EXT, this.texRender_FBO);

    this.texRender_32x32 = genTexture(gl);
    gl.glBindTexture(GL.GL_TEXTURE_2D, this.texRender_32x32);
    gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGB_FLOAT32_ATI, 32, 32, 0, GL.GL_RGB, GL.GL_FLOAT, null);
    gl.glFramebufferTexture2DEXT(GL.GL_FRAMEBUFFER_EXT, GL.GL_COLOR_ATTACHMENT0_EXT, GL.GL_TEXTURE_2D, this.texRender_32x32, 0);
    //gl.glDrawBuffer(GL.GL_COLOR_ATTACHMENT0_EXT);

    this.texRender_RB = genRB(gl);
    gl.glBindRenderbufferEXT(GL.GL_RENDERBUFFER_EXT, this.texRender_RB);
    gl.glRenderbufferStorageEXT(GL.GL_RENDERBUFFER_EXT, GL.GL_DEPTH_COMPONENT24, 32, 32);
    gl.glFramebufferRenderbufferEXT(GL.GL_FRAMEBUFFER_EXT, GL.GL_DEPTH_ATTACHMENT_EXT, GL.GL_RENDERBUFFER_EXT, this.texRender_RB);

    gl.glBindFramebufferEXT(GL.GL_FRAMEBUFFER_EXT, 0);
    gl.glBindRenderbufferEXT(GL.GL_RENDERBUFFER_EXT, 0);
    outputError();
}

private void outputError() {
    int c;
    if ((c = gl.glGetError()) != GL.GL_NO_ERROR)
        System.out.println(glu.gluErrorString(c));
}

private int genRB(GL gl) {
    int[] array = new int[1];
    IntBuffer ib = IntBuffer.wrap(array);
    gl.glGenRenderbuffersEXT(1, ib);
    return ib.get(0);
}

private int genFBO(GL gl) {
    int[] array = new int[1];
    IntBuffer ib = IntBuffer.wrap(array);
    gl.glGenFramebuffersEXT(1, ib);
    return ib.get(0);
}

private int genTexture(GL gl) {
    final int[] tmp = new int[1];
    gl.glGenTextures(1, tmp, 0);
    return tmp[0];
}

/* mouse and keyboard callback functions */
public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
    winW = width;
    winH = height;

    gl.glViewport(0, 0, width, height);
}

//Sorry about these, I just had to delete massive amounts of code to boil this thing down and these are hangers-on
public void mousePressed(MouseEvent e) {}
public void mouseDragged(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void keyPressed(KeyEvent e) {}
public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) { }
public void keyTyped(KeyEvent e) { }
public void keyReleased(KeyEvent e) { }
public void mouseMoved(MouseEvent e) { }
public void actionPerformed(ActionEvent e) { }
public void mouseClicked(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }

}
  • 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-05-14T16:30:41+00:00Added an answer on May 14, 2026 at 4:30 pm

    Try a different internalFormat for texRender_32x32. I think that has to be some RGBA format and not just RGB.

    EDIT:
    Ok, I think I found it. You are using the default min-filters for the texture which would imply mipmapping. Add this line after creating & binding the texture and everything should work:

    gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR);
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Okay so I have been trying to get into IoC lately. However, I keep
I've been stuck for hours trying to render a Core Animation layer tree into
Okay so what I'm trying to do is get the filename from OpenFileDialog/SaveFileDialog, only
Okay, I'm trying to load a 2d array and having some problems. Here's my
Okay I have been trying to get this to work for some time now.
Okay. I'm trying to get a page to display 100% of the height of
Okay, I've been trying to get this for almost 4 hours now, and it
Okay so I am trying to get some ideas on how to go about
okay, so I'm trying to get a directory of folders and sub folders, but
Okay I'm trying to go for a more pythonic method of doing things. How

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.