java - Lines drawn randomly -
i got weird bug. i'm doing video game in java lwjgl implement graphics. can find unusual : 95% of times, gui looks must , 5% remaining of lines not drawn. checked if part of code must draw line read , is. can't figure out happens. ave thought how prepare ?
thank !!
edit : figure out didn't explain ou anything... create easier, tried implement gui element of awt bundle in lwjgl. untill now, have implemented label, progressbar, window , mainpanel (to draw background of gui).
as can see below, progressbar , label set within window manage everything, namely position , size of element within it. so, when draw window, draw within @ same time : in case, progressbar , label. label, time displayed progressbar not. because i'm sure bug must come drawing method of progressbar, had @ end of post.
this code of class draw on screen : public class connectiondrawer implements interfacedrawer {
private boolean needupdate = true; private blockingqueue<string> in; private progressbar bar; private mainpanel background; private window load_window; private label text; public connectiondrawer() { in = new linkedblockingqueue<string>(); bar = new progressbar(); bar.setbordercolor(1.0f, 1.0f, 1.0f, 1.0f); bar.setbarcolor(1.0f, 0f, 0f, 1.0f); bar.setmaxvalue(3); bar.setpadding(1); bar.setcurrentvalue(0); elementproperties prop_bar = new elementproperties( elementproperties.absolute, elementproperties.absolute); prop_bar.setabsolutesize(280, 30); prop_bar.setabsoluteposition(10, 40); text = new label("trying connect server..."); text.setborder(false); text.setsize(label.medium); text.setcolor(color.white); text.setverticalalign(label.top); text.sethorizontalalign(label.left); elementproperties prop_bar1 = new elementproperties( elementproperties.absolute, elementproperties.absolute); prop_bar1.setabsolutesize(280, 30); prop_bar1.setabsoluteposition(10, 5); background = new mainpanel(); background .setbackground(graphiccontroller.gettextureloader().cloudy_background); load_window = new window(); load_window.setbackgroundcolor(0f, 0f, 0f, 0.5f); load_window.enablebackground(true); load_window.enableborder(true); load_window.setbordercolor(0, 0, 0); load_window.addcomponent(bar, prop_bar); load_window.addcomponent(text, prop_bar1); } @override public void draw() { // todo auto-generated method stub graphiccontroller.getwindow().initgl2d(); gl11.glcolor3f(1.0f, 1.0f, 1.0f); if (needupdate) { load_window.setdimension(300, 80); load_window.setposition(data.getactifresolution().getwidth() - 310, data.getactifresolution().getheight() - 90); needupdate = false; } background.draw(); graphiccontroller.gettextureloader().white_text.bind(); load_window.draw(); } public void updateneeded() { this.needupdate = true; } @override public void checkkeyboard() { // todo auto-generated method stub if (display.iscloserequested()) graphiccontroller.getwindow().changedone(); } @override public void postmessage(object obj) { // todo auto-generated method stub in.add((string) obj); } }
and code of progressbar class not drawn every times :
public void draw() { system.out.println("progress draw"); //system.out.println(b_r+";"+b_g+";"+b_b+";"+b_a); gl11.glcolor4f(b_r, b_g, b_b, b_a); gl11.glbegin(gl11.gl_lines); { gl11.glvertex2f(x, y); gl11.glvertex2f(x + width, y); gl11.glvertex2f(x + width, y); gl11.glvertex2f(x + width, y + height); gl11.glvertex2f(x + width, y + height); gl11.glvertex2f(x, y + height); gl11.glvertex2f(x, y + height); gl11.glvertex2f(x, y); } gl11.glend(); float ratio; if (max == 0 || current == 0) { system.out.println("progress draw end"); return; } else if (max == 0) { ratio = 0; } else { ratio = ((float) current) / ((float) max); } gl11.glcolor4f(i_r, i_g, i_b, i_a); gl11.glbegin(gl11.gl_quads); { gl11.glvertex2f(x + pad_inside, y + pad_inside + 1); gl11.glvertex2f(x - 1 + ratio * width - pad_inside, y + pad_inside + 1); gl11.glvertex2f(x - 1 + ratio * width - pad_inside, y + height - pad_inside - 1); gl11.glvertex2f(x + pad_inside, y + height - pad_inside - 1); } gl11.glend(); }
so after multiple check, identify source of error. in fact, comes class displays text on screen. think need disable gl_texture_2d alternative after displaying text.
java user-interface lwjgl
No comments:
Post a Comment