I posted without finishing the title -_- It's suppose to say "My lwjgl buffer to texture code in eclipse won't correctly render the texture, but gives no errors"
I made this method that renders text from a text sprite sheet to a texture, but it doesn't write any text to it, and is instead completely blank. I looked through the code and positioning of vertexs, but they all appear correct. The only thing I could see being wrong is the code that sets up the buffer, but I don't know what's wrong with it. Could someone please help me?
Here is the class that's calling the method:
Here is the info that's being inputted into the instance of WeaponSelection.class
And here is the console output for the first cycle:
Tue Jan 13 14:53:14 CST 2015 INFO:Use Java PNG Loader = true
Frame Skipping: true
Loading Default World...
xscroll: 0
yscroll: 0
Done!
textSpriteSheet is null!
WROTE TO TEXTURE!
X: 20
Y: 5
WROTE TO TEXTURE!
X: 28
Y: 5
WROTE TO TEXTURE!
X: 36
Y: 5
WROTE TO TEXTURE!
X: 44
Y: 5
WROTE TO TEXTURE!
X: 52
Y: 5
WROTE TO TEXTURE!
X: 60
Y: 5
WROTE TO TEXTURE!
X: 68
Y: 5
WROTE TO TEXTURE!
X: 76
Y: 5
WROTE TO TEXTURE!
X: 84
Y: 5
WROTE TO TEXTURE!
private static Texture textSpriteSheet;
private static String[][] textMatrix = {
{"","","!","(",")","%","#","'","\"","^","+","_",",","-",".","/"},
{"0","1","2","3","4","5","6","7","8","9",":"," ","","=","","?"},
{"[c]","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O"},
{"P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e"},
{"f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u"},
{"v","w","x","y","z","\"",";","<",">"," "," "," "," "," "," "," "}
};
/**
*
* @param texture Texture to be written to
* @param x X coordinate of the top left pixel of the area to write to on the texture
* @param y Y coordinate of the top left pixel of the area to write to on the texture
* @param untilWrap How many characters until the text writes down to the next line
* @param text What text to write into texture
* @return Inputed texture with the specified text written into it.
*/
public static Texture WriteToTexture(Texture texture, int dimension, int x, int y, int untilWrap, String text){
boolean FBOEnabled = GLContext.getCapabilities().GL_EXT_framebuffer_object;
if (!FBOEnabled){
System.out.println("The FBO extension is not supported!");
return texture;
}
if (textSpriteSheet==null){
textSpriteSheet = QuickLoad("Mega_Man_Font_8x8");
System.out.println("textSpriteSheet is null!");
}
int textX = x;
int textY = y;
/**Set up FBO to render to texture**/
//Generally a good idea to enable texturing first
GL11.glEnable(GL11.GL_TEXTURE_2D);
//Create Frame Buffer Object (FBO)
IntBuffer buffer = ByteBuffer.allocateDirect(1*4).order(ByteOrder.nativeOrder()).asIntBuffer(); // allocate a 1 int byte buffer
EXTFramebufferObject.glGenFramebuffersEXT(buffer); // generate
int myFBOId = buffer.get();
//Bind Texture to FBO
EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, myFBOId);
EXTFramebufferObject.glFramebufferTexture2DEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_COLOR_ATTACHMENT0_EXT,GL11.GL_TEXTURE_2D, texture.getTextureID(), 0);
//Completeness check
int framebuffer = EXTFramebufferObject.glCheckFramebufferStatusEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT);
switch (framebuffer) {
case EXTFramebufferObject.GL_FRAMEBUFFER_COMPLETE_EXT:
break;
case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:
throw new RuntimeException( "FrameBuffer: " + myFBOId + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT exception" );
case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
throw new RuntimeException( "FrameBuffer: " + myFBOId + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT exception" );
case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
throw new RuntimeException( "FrameBuffer: " + myFBOId + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT exception" );
case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
throw new RuntimeException( "FrameBuffer: " + myFBOId + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT exception" );
case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT:
throw new RuntimeException( "FrameBuffer: " + myFBOId + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT exception" );
case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:
throw new RuntimeException( "FrameBuffer: " + myFBOId + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT exception" );
default:
throw new RuntimeException( "Unexpected reply from glCheckFramebufferStatusEXT: " + framebuffer );
}
//Bind FBO
EXTFramebufferObject.glBindFramebufferEXT( EXTFramebufferObject.GL_FRAMEBUFFER_EXT, myFBOId );
GL11.glPushAttrib(GL11.GL_VIEWPORT_BIT);
GL11.glViewport( 0, 0, 128, 128);
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
//Render text
while (!text.equals("")){
String character = text.substring(0,1);
text = text.substring(1);
boolean typed = false;
for (int i = 0; i<textMatrix.length; i++){
for (int j = 0; j<textMatrix[i].length; j++){
if (character.equals("@")){
textX = x;
textY+=8;
typed = true;
break;
}
if (character.equals(textMatrix[i][j])){
//DrawQuadTex(textSpriteSheet, (int) textX, (int) textY, 8, 8, 128, 128, j*8, i*8, 8, "");
textSpriteSheet.bind();
glTranslatef(textX, textY, 0);
glBegin(GL_QUADS);
glTexCoord2f(j*8/dimension, i*8/dimension);//top left corner
glVertex2f(0,0);
glTexCoord2f((j*8+8)/dimension, i*8/dimension);//top right corner
glVertex2f(8,0);
glTexCoord2f((j*8+8)/dimension, (i*8+8)/dimension);//bottom right corner
glVertex2f(8,8);
glTexCoord2f(j*8/dimension, (i*8+8)/dimension);//bottom left corner
glVertex2f(0,8);
glEnd();
glLoadIdentity();
System.out.println("WROTE TO TEXTURE!\nX: "+textX+"\nY: "+textY);
textX+=8;
if ((textX-x)/8>untilWrap){
textX = x;
textY+=8;
}
typed = true;
break;
}
}
if (typed){break;}
}
}
//Unbind Texture
EXTFramebufferObject.glBindFramebufferEXT( EXTFramebufferObject.GL_FRAMEBUFFER_EXT, 0);
GL11.glPopAttrib();
//Return texture
return texture;
}
package data;
import static helpers.Artist.*; import org.newdawn.slick.opengl.Texture;
public class WeaponSelection extends Actor{
private double x;
private double y;
private int iconSpriteX;
private int iconSpriteY;
private int untilWrap;
private String text;
private Texture texture = QuickLoad("blank_128x128");
//private static Texture iconSpriteSheet = QuickLoad("mega_man_weapon_icons_by_blistalk-d5mybk8");
public WeaponSelection(double x, double y, int iconSpriteX, int iconSpriteY, int untilWrap, String text){
this.x = x;
this.y = y;
this.iconSpriteX = iconSpriteX;
this.iconSpriteY = iconSpriteY;
this.untilWrap = untilWrap;
this.text = text;
}
boolean first = true;
public void Draw(){
if (first){
texture = WriteToTexture(texture, 128, 20, 5, untilWrap, text);
first = false;
}
//insert weapon icon drawing code here
DrawQuadTex(texture, (int)x, (int) y, 128, 128, 128, 128, 0, 0, 128, "");
}
}
WeaponSelection textTest = new WeaponSelection(0,0,0,0,10,"B. CRACKER");

