java - libGDX Strange Rendering Bug -
i've started first libgdx game, , going well, renders fine after minute nothing renders, rendering calls still made , sprite batch works fine, i'm left black screen, have changed 'glclearcolor()' i'm still left black screen. i've have no idea whta be.
my main class:
@override public void create() { gdx.graphics.setdisplaymode(settings.screenwidth, settings.screenheight, settings.fullscreen); gdx.graphics.setvsync(settings.vsync); gdx.graphics.settitle("trench warfare"); batch = new spritebatch(1000); previous = system.currenttimemillis(); currentmap = new map(this, 0); currentmap.addobject(new colourmapobject(this, 0)); } private void update() {settings.screenheight, settings.fullscreen); gdx.graphics.setvsync(settings.vsync); batch.setcolor(new color(settings.brightness, settings.brightness, settings.brightness, 1.0f)); float delta = ((float)(system.currenttimemillis() - previous)) / 1000.0f; previous = system.currenttimemillis(); currentmap.update(delta); } @override public void render() { //always called update(); gdx.gl.glclearcolor(1, 0, 0, 1); //red colour still black screen. gdx.gl.glclear(gl20.gl_color_buffer_bit); batch.begin(); currentmap.render(batch); //basicly list of textures rendered, never stop rendering (being called) despite black screen. batch.end(); batch.flush(); }
edit: we've determined after time spritebatch render black screen on red clear colour, stops rendering texture. i've determined spritebatch's tint or colour stays white during black screen.
edit, code takes in texture , turns different texture different colours:
public class colourmapobject extends mapobject { public enum type { dirt, water, trench, } private texture terrainmap; private texture trenchmap; private texture soldiermap; private texture buildingmap; private texture shipmap; private int levelid; private texture finaltexture; private type[][] types; public colourmapobject(trenchmain main, int levelid) { super(main); this.levelid = levelid; //finaltexture = new texture("/map" + string.valueof(levelid) + "/terrainmap.png"); finaltexture = new texture("black.png"); finaltexture.gettexturedata().prepare(); loadmap(levelid); } private void loadmap(int levelid) { //terrainmap = new texture("/map" + string.valueof(levelid) + "/terrainmap.png"); terrainmap = new texture("terrainmap.png"); types = new type[terrainmap.getwidth()][terrainmap.getheight()]; terrainmap.gettexturedata().prepare(); pixmap pixmap = terrainmap.gettexturedata().consumepixmap(); for(int x = 0; x < terrainmap.getwidth(); x++) { for(int y = 0; y < terrainmap.getheight(); y++) { types[x][y] = randommapcolour.gettype(new color(pixmap.getpixel(x, y))); if(types[x][y] == null) types[x][y] = type.dirt; } } // trenchmap = new texture("/map" + string.valueof(levelid) + "/trenchmap.png"); // // // soldiermap = new texture("/map" + string.valueof(levelid) + "/soldiermap.png"); // // // buildingmap = new texture("/map" + string.valueof(levelid) + "/buildingmap.png"); // // // shipmap = new texture("/map" + string.valueof(levelid) + "/shipmap.png"); } @override public void update(float delta) { super.update(delta); pixmap draw = new pixmap(settings.screenwidth, settings.screenheight, format.rgb888); float px = (float)terrainmap.getwidth() / (float)draw.getwidth(); float py = (float)terrainmap.getheight() / (float)draw.getheight(); for(int x = 0; x < draw.getwidth(); x++) { for(int y = 0; y < draw.getheight(); y++) { switch(types[(int)((float)x * px)][(int)((float)y * py)]) { case dirt: draw.drawpixel(x, y, randommapcolour.getdirtcolour()); break; case trench: draw.drawpixel(x, y, randommapcolour.gettrenchcolour()); break; case water: draw.drawpixel(x, y, randommapcolour.getwatercolour()); break; } } } finaltexture = new texture(draw); } @override public void render(spritebatch batch) { super.render(batch); float sx = ((float)trenchmain.getscreenwidth()) / ((float)finaltexture.getwidth()); float sy = ((float)trenchmain.getscreenheight()) / ((float)finaltexture.getheight()); batch.draw(finaltexture, 0, 0, 0, 0, finaltexture.getwidth(), finaltexture.getheight(), sx, sy, 0, 0, 0, finaltexture.getwidth(), finaltexture.getheight(), false, false); }
i figuired out, wonder, doing creating new finaltexture
every update disposing of old one.
simply dispose of texture. finaltexture.dispose();
Comments
Post a Comment