qvolray
annotate src/demo.cc @ 18:3d05c261a2f4
demo metaballs crash & burn
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Wed, 11 Apr 2012 06:08:59 +0300 |
parents | |
children | 4c62be57fc1a |
rev | line source |
---|---|
nuclear@18 | 1 #include <GL/glew.h> |
nuclear@18 | 2 #include "demo.h" |
nuclear@18 | 3 #include "sdr.h" |
nuclear@18 | 4 #include "volray.h" |
nuclear@18 | 5 |
nuclear@18 | 6 #define SZ 128 |
nuclear@18 | 7 |
nuclear@18 | 8 static Volume *vol; |
nuclear@18 | 9 static unsigned int sdr_mballs; |
nuclear@18 | 10 static unsigned int fbo; |
nuclear@18 | 11 |
nuclear@18 | 12 bool init_demo() |
nuclear@18 | 13 { |
nuclear@18 | 14 if(!(sdr_mballs = create_program_load("sdr/demo.v.glsl", "sdr/demo.p.glsl"))) { |
nuclear@18 | 15 return false; |
nuclear@18 | 16 } |
nuclear@18 | 17 |
nuclear@18 | 18 vol = new Volume; |
nuclear@18 | 19 vol->create(SZ, SZ, SZ); |
nuclear@18 | 20 volray_setvolume(vol); |
nuclear@18 | 21 |
nuclear@18 | 22 glGenFramebuffers(1, &fbo); |
nuclear@18 | 23 glBindFramebuffer(GL_FRAMEBUFFER, fbo); |
nuclear@18 | 24 glFramebufferTexture3D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_3D, |
nuclear@18 | 25 vol->get_texture(), 0, 0); |
nuclear@18 | 26 |
nuclear@18 | 27 unsigned int stat = glCheckFramebufferStatus(GL_FRAMEBUFFER); |
nuclear@18 | 28 if(stat != GL_FRAMEBUFFER_COMPLETE) { |
nuclear@18 | 29 printf("incomplete framebuffer: %u\n", stat); |
nuclear@18 | 30 delete vol; |
nuclear@18 | 31 return false; |
nuclear@18 | 32 } |
nuclear@18 | 33 glBindFramebuffer(GL_FRAMEBUFFER, 0); |
nuclear@18 | 34 |
nuclear@18 | 35 return true; |
nuclear@18 | 36 } |
nuclear@18 | 37 |
nuclear@18 | 38 void draw_demo() |
nuclear@18 | 39 { |
nuclear@18 | 40 if(volray_getvolume() != vol) { |
nuclear@18 | 41 return; |
nuclear@18 | 42 } |
nuclear@18 | 43 |
nuclear@18 | 44 glBindFramebuffer(GL_FRAMEBUFFER, fbo); |
nuclear@18 | 45 bind_program(sdr_mballs); |
nuclear@18 | 46 |
nuclear@18 | 47 for(int i=0; i<SZ; i++) { |
nuclear@18 | 48 glFramebufferTexture3D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_3D, |
nuclear@18 | 49 vol->get_texture(), 0, i); |
nuclear@18 | 50 |
nuclear@18 | 51 glBegin(GL_QUADS); |
nuclear@18 | 52 glVertex2f(-1, -1); |
nuclear@18 | 53 glVertex2f(1, -1); |
nuclear@18 | 54 glVertex2f(1, 1); |
nuclear@18 | 55 glVertex2f(-1, 1); |
nuclear@18 | 56 glEnd(); |
nuclear@18 | 57 } |
nuclear@18 | 58 |
nuclear@18 | 59 bind_program(0); |
nuclear@18 | 60 glBindFramebuffer(GL_FRAMEBUFFER, 0); |
nuclear@18 | 61 } |