java - Rendering to an FBO in LWJGL -
i trying render basic quads fbo in lwjgl java, isn't rendering , not know why.
import static org.lwjgl.opengl.gl11.*; import static org.lwjgl.util.glu.glu.*; import java.nio.bytebuffer; import java.nio.byteorder; import java.nio.floatbuffer; import java.nio.intbuffer; import org.lwjgl.bufferutils; import org.lwjgl.lwjglexception; import org.lwjgl.sys; import org.lwjgl.input.keyboard; import org.lwjgl.input.mouse; import org.lwjgl.opengl.display; import org.lwjgl.opengl.displaymode; import org.lwjgl.opengl.extframebufferobject; import org.lwjgl.opengl.glcontext; import org.newdawn.slick.color; import elec0.utils.camera; import elec0.utils.vector2f; import elec0.utils.vector3f; public class lwjglfbo { private camera camera = new camera(); private boolean running = true, wireframe = false; private long lastfps; private int fps; // boolean fboenabled = glcontext.getcapabilities().gl_ext_framebuffer_object; private int ifbobuffer; public void start() { initgl(); init(); lastfps = gettime(); while(!display.iscloserequested()) { updatefps(); pollinput(); render(); display.update(); display.sync(60); // limit fps 60 } display.destroy(); system.exit(0); } private void render() { glclear(gl_color_buffer_bit | gl_depth_buffer_bit); glmatrixmode(gl_modelview); glloadidentity(); /*glulookat(0, 0, 5, // set lookat 0, 0, 0, 0, 1, 0);*/ camera.render(); drawgrid(); // render fill, it's lines int verts = 0; extframebufferobject.glbindframebufferext( extframebufferobject.gl_framebuffer_ext, ifbobuffer ); glpushattrib(gl_viewport_bit); glviewport( 0, 0, 800, 600); glclear(gl_color_buffer_bit); for(int z = 0; z < 20; ++z) { for(int y = 0; y < 20; ++y) { for(int x = 0; x < 20; ++x) { glpushmatrix(); gltranslatef(x, y, z); drawbox(); // verts+=24; glpopmatrix(); } } } // system.out.println(verts); extframebufferobject.glbindframebufferext( extframebufferobject.gl_framebuffer_ext, 0); glpopattrib(); // render if(wireframe) glpolygonmode( gl_front_and_back, gl_line ); else glpolygonmode( gl_front_and_back, gl_fill ); } private void drawbox() { /* draws sides of unit cube (0,0,0)-(1,1,1) */ glbegin(gl_polygon);/* f1: front */ glnormal3f(-1.0f,0.0f,0.0f); glvertex3f(0.0f,0.0f,0.0f); glvertex3f(0.0f,0.0f,1.0f); glvertex3f(1.0f,0.0f,1.0f); glvertex3f(1.0f,0.0f,0.0f); glend(); glbegin(gl_polygon);/* f2: bottom */ glnormal3f(0.0f,0.0f,-1.0f); glvertex3f(0.0f,0.0f,0.0f); glvertex3f(1.0f,0.0f,0.0f); glvertex3f(1.0f,1.0f,0.0f); glvertex3f(0.0f,1.0f,0.0f); glend(); glbegin(gl_polygon);/* f3:back */ glnormal3f(1.0f,0.0f,0.0f); glvertex3f(1.0f,1.0f,0.0f); glvertex3f(1.0f,1.0f,1.0f); glvertex3f(0.0f,1.0f,1.0f); glvertex3f(0.0f,1.0f,0.0f); glend(); glbegin(gl_polygon);/* f4: top */ glnormal3f(0.0f,0.0f,1.0f); glvertex3f(1.0f,1.0f,1.0f); glvertex3f(1.0f,0.0f,1.0f); glvertex3f(0.0f,0.0f,1.0f); glvertex3f(0.0f,1.0f,1.0f); glend(); glbegin(gl_polygon);/* f5: left */ glnormal3f(0.0f,1.0f,0.0f); glvertex3f(0.0f,0.0f,0.0f); glvertex3f(0.0f,1.0f,0.0f); glvertex3f(0.0f,1.0f,1.0f); glvertex3f(0.0f,0.0f,1.0f); glend(); glbegin(gl_polygon);/* f6: right */ glnormal3f(0.0f,-1.0f,0.0f); glvertex3f(1.0f,0.0f,0.0f); glvertex3f(1.0f,0.0f,1.0f); glvertex3f(1.0f,1.0f,1.0f); glvertex3f(1.0f,1.0f,0.0f); glend(); } private void init() { mouse.setgrabbed(true); camera.initcamera(); camera.farplane = 1000; camera.initperspective(); } private void initgl() { try { display.setdisplaymode(new displaymode(800, 600)); display.create(); display.setvsyncenabled(true); } catch (lwjglexception e) { e.printstacktrace(); system.exit(0); } glviewport(0, 0, display.getwidth(), display.getheight()); glenable(gl_texture_2d); // enable texture mapping glshademodel(gl_smooth); // enable smooth shading glclearcolor(0.0f, 0.0f, 0.0f, 1.0f); // black background glcleardepth(1.0); // depth buffer setup glenable(gl_depth_test); // enables depth testing gldepthfunc(gl_lequal); // type of depth testing glmatrixmode(gl_modelview); glloadidentity(); intbuffer buffer = bytebuffer.allocatedirect(1*4).order(byteorder.nativeorder()).asintbuffer(); // allocate 1 int byte buffer extframebufferobject.glgenframebuffersext( buffer ); // generate ifbobuffer = buffer.get(); // glenable(gl_fog); // floatbuffer fogcolor = bufferutils.createfloatbuffer(4); // fogcolor.put(0f).put(0f).put(0f).put(1f).flip(); // // int fogmode = gl_linear; // glfogi(gl_fog_mode, fogmode); // glfog(gl_fog_color, fogcolor); // glfogf(gl_fog_density, 0.35f); // glhint(gl_fog_hint, gl_dont_care); // glfogf(gl_fog_start, 100.0f); // glfogf(gl_fog_end, 500.0f); // alpha blending glenable(gl_blend); glblendfunc(gl_src_alpha, gl_one_minus_src_alpha); glmatrixmode(gl_modelview); // select modelview matrix glhint(gl_perspective_correction_hint, gl_nicest); } private long lastf; private void pollinput() { int x = mouse.getx(); int y = display.getheight() - mouse.gety(); float speed = .1f; int ikeypressspeed = 50; int idelta = getdelta(); speed *= idelta; if(keyboard.iskeydown(keyboard.key_lshift)) speed *= 4; if(keyboard.iskeydown(keyboard.key_w)) { camera.moveforwards(speed); } if(keyboard.iskeydown(keyboard.key_s)) { camera.moveforwards(-speed); } if(keyboard.iskeydown(keyboard.key_a)) { camera.moveright(-speed); } if(keyboard.iskeydown(keyboard.key_d)) { camera.moveright(speed); } if(keyboard.iskeydown(keyboard.key_space)) { camera.moveup(speed); } if(keyboard.iskeydown(keyboard.key_escape)) { display.destroy(); system.exit(0); } if(keyboard.iskeydown(keyboard.key_p)) { if(gettime() - lastf > ikeypressspeed) wireframe = !wireframe; lastf = gettime(); } if(keyboard.iskeydown(keyboard.key_n)) { if(gettime() - lastf > ikeypressspeed) lastf = gettime(); } if(keyboard.iskeydown(keyboard.key_c)) { if(gettime() - lastf > ikeypressspeed) lastf = gettime(); } checkmousemove(x, y); } vector2f previous = new vector2f(), mousepos = new vector2f(); private float mouse_sensitivity = 4.0f; private void checkmousemove(float x, float y) { float deltx, delty; int centx = display.getwidth()/2, centy = display.getheight()/2; deltx = (float)(centx - x) / mouse_sensitivity; delty = (float)(centy - y) / mouse_sensitivity; camera.rotate(delty, deltx, 0); mouse.setcursorposition(centx, centy); } public long gettime() { return (sys.gettime() * 1000) / sys.gettimerresolution(); } public void updatefps() { if (gettime() - lastfps > 1000) { display.settitle("fps: " + fps); fps = 0; //reset fps counter lastfps += 1000; //add 1 second } fps++; } long lastframe; public int getdelta() { long time = gettime(); int delta = (int) (time - lastframe); lastframe = time; return delta; } private void drawgrid() { glpushmatrix(); gldisable(gl_texture_2d); glcolor3f(0.25f, 0.25f, 0.25f); float gridsize = 30; int mx = 64, mz = 64; gltranslatef(-(mx+gridsize)/2, -5, -(mz+gridsize)/2); for(int x = 0; x < mx; ++x) { for(int z = 0; z < mz; ++z) { glbegin(gl_line_loop); glvertex3f(x, 0, z); glvertex3f(x+gridsize, 0, z); glvertex3f(x+gridsize, 0, z+gridsize); glvertex3f(x, 0, z+gridsize); glend(); } } glenable(gl_texture_2d); glpopmatrix(); } public static void main(string[] args) { lwjglfbo city = new lwjglfbo(); city.start(); } }
i took time through code , may have missed couldn't find anywhere took fbo texture , rendered on screen.
i saw drew grid , drew cubes didn't see being bound of cubes.
Comments
Post a Comment