00001
00008 #include "scene.h"
00009
00010
00019 void TScene::CreateRenderTarget(int resX, int resY, GLint tex_format, GLenum tex_type )
00020 {
00021
00022 if(resX == -1 || resY == -1)
00023 {
00024 resX = resx;
00025 resY = resy;
00026 }
00027
00028
00029 RT_resX = resX;
00030 RT_resY = resY;
00031
00032
00033 glGenTextures(1, &render_texture);
00034 glBindTexture(GL_TEXTURE_2D, render_texture);
00035 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
00036 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
00037 glTexImage2D(GL_TEXTURE_2D, 0, tex_format, resX, resY, 0, GL_RGBA, tex_type, NULL);
00038
00039
00040 glGenTextures(1, &bloom_texture);
00041 glBindTexture(GL_TEXTURE_2D, bloom_texture);
00042 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
00043 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
00044 glTexImage2D(GL_TEXTURE_2D, 0, tex_format, resX, resY, 0, GL_RGBA, tex_type, NULL);
00045
00046
00047 glGenTextures(1, &blur_texture);
00048 glBindTexture(GL_TEXTURE_2D, blur_texture);
00049 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
00050 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
00051 glTexImage2D(GL_TEXTURE_2D, 0, tex_format, resX, resY, 0, GL_RGBA, tex_type, NULL);
00052
00053
00054 glGenTextures(1, &normal_texture);
00055 glBindTexture(GL_TEXTURE_2D, normal_texture);
00056 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
00057 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
00058 glTexImage2D(GL_TEXTURE_2D, 0, tex_format, resX, resY, 0, GL_RGBA, tex_type, NULL);
00059
00060 glGenRenderbuffers(1, &r_buffer_depth);
00061 glBindRenderbuffer(GL_RENDERBUFFER, r_buffer_depth);
00062 glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT,resX, resY);
00063
00064
00065 if(msamples > 1 && GLEW_EXT_framebuffer_multisample)
00066 {
00067
00068 glGenRenderbuffers(1, &msaa_r_buffer_color);
00069 glBindRenderbuffer(GL_RENDERBUFFER, msaa_r_buffer_color);
00070 glRenderbufferStorageMultisample(GL_RENDERBUFFER, msamples, tex_format, resX, resY);
00071
00072
00073 glGenRenderbuffers(1, &msaa_r_buffer_depth);
00074 glBindRenderbuffer(GL_RENDERBUFFER, msaa_r_buffer_depth);
00075 glRenderbufferStorageMultisample(GL_RENDERBUFFER, msamples, GL_DEPTH_COMPONENT,resX, resY);
00076
00077
00078 glGenFramebuffers(1, &msaa_f_buffer);
00079 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, msaa_f_buffer);
00080 glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, msaa_r_buffer_color);
00081 glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, msaa_r_buffer_depth);
00082
00083
00084 if( glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
00085 {
00086 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_UNDEFINED)
00087 cout<<"FBO ERROR:GL_FRAMEBUFFER_UNDEFINED\n";
00088 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT)
00089 cout<<"FBO ERROR:GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT\n";
00090 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT)
00091 cout<<"FBO ERROR:GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\n";
00092 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT)
00093 cout<<"FBO ERROR:GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER\n";
00094 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT)
00095 cout<<"FBO ERROR:GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER\n";
00096 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT)
00097 cout<<"FBO ERROR:GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE\n";
00098 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT)
00099 cout<<"FBO ERROR:GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS\n";
00100 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_UNSUPPORTED_EXT)
00101 cout<<"FBO ERROR:GL_FRAMEBUFFER_UNSUPPORTED\n";
00102 cout<<"WARNING: Multisampled FBO creation failed, falling back to regular FBO.\n";
00103 msamples = 1;
00104 }
00105 }
00106
00107
00108 glGenFramebuffers(1, &f_buffer);
00109 glBindFramebufferEXT(GL_FRAMEBUFFER, f_buffer);
00110
00111
00112 glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D, render_texture, 0);
00113
00114 if(useSSAO)
00115 glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT1,GL_TEXTURE_2D, normal_texture, 0);
00116
00117
00118 glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_RENDERBUFFER, r_buffer_depth);
00119
00120
00121 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
00122 {
00123 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_UNDEFINED)
00124 cout<<"FBO ERROR:GL_FRAMEBUFFER_UNDEFINED\n";
00125 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT)
00126 cout<<"FBO ERROR:GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT\n";
00127 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT)
00128 cout<<"FBO ERROR:GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\n";
00129 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT)
00130 cout<<"FBO ERROR:GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER\n";
00131 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT)
00132 cout<<"FBO ERROR:GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER\n";
00133 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT)
00134 cout<<"FBO ERROR:GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE\n";
00135 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT)
00136 cout<<"FBO ERROR:GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS\n";
00137 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_UNSUPPORTED_EXT)
00138 cout<<"FBO ERROR:GL_FRAMEBUFFER_UNSUPPORTED\n";
00139 ShowMessage("ERROR: FBO creation failed!",false);
00140 useHDR = useSSAO = false;
00141 throw ERR;
00142 }
00143
00144
00145
00146
00147 glBindFramebufferEXT(GL_FRAMEBUFFER, 0);
00148
00149
00150 tex_cache["render_texture"] = render_texture;
00151 tex_cache["bloom_texture"] = bloom_texture;
00152 tex_cache["normal_texture"] = normal_texture;
00153 tex_cache["blur_texture"] = blur_texture;
00154
00155
00156 UpdateLoadList(17);
00157
00158
00159 AddObject("screen_quad",SCREEN_QUAD);
00160
00161
00162 AddMaterial("mat_bloom_hdr",white,white,white,0.0,0.0,0.0,NONE);
00163 AddMaterial("mat_bloom_ssao",white,white,white,0.0,0.0,0.0,NONE);
00164 AddMaterial("mat_bloom_hdr_ssao",white,white,white,0.0,0.0,0.0,NONE);
00165
00166
00167 AddTexture("mat_bloom_hdr","render_texture",RENDER_TEXTURE);
00168 CustomShader("mat_bloom_hdr","data/shaders/quad.vert",NULL,"data/shaders/bloom_ssao.frag",NULL,"#define BLOOM\n");
00169
00170
00171 AddTexture("mat_bloom_ssao","normal_texture",NORMAL_TEXTURE);
00172 AddTexture("mat_bloom_ssao","data/tex/random.tga");
00173 CustomShader("mat_bloom_ssao","data/shaders/quad.vert",NULL,"data/shaders/bloom_ssao.frag",NULL,"#define SSAO\n");
00174
00175
00176 AddTexture("mat_bloom_hdr_ssao","render_texture",RENDER_TEXTURE);
00177 AddTexture("mat_bloom_hdr_ssao","normal_texture",NORMAL_TEXTURE);
00178 AddTexture("mat_bloom_hdr_ssao","data/tex/random.tga");
00179 CustomShader("mat_bloom_hdr_ssao","data/shaders/quad.vert",NULL,"data/shaders/bloom_ssao.frag",NULL,"#define BLOOM\n#define SSAO\n");
00180
00181
00182 AddMaterial("mat_tonemap",white,white,white,0.0,0.0,0.0,NONE);
00183 AddTexture("mat_tonemap","render_texture",RENDER_TEXTURE);
00184 AddTexture("mat_tonemap","blur_texture",BLUR_TEXTURE);
00185 CustomShader("mat_tonemap","data/shaders/quad.vert",NULL,"data/shaders/tonemap.frag");
00186
00187
00188 AddMaterial("mat_blur_horiz",white,white,white,0.0,0.0,0.0,NONE);
00189 AddTexture("mat_blur_horiz","bloom_texture",BLOOM_TEXTURE);
00190 CustomShader("mat_blur_horiz","data/shaders/quad.vert",NULL,"data/shaders/blur.frag",NULL,"#define HORIZONTAL\n");
00191 AddMaterial("mat_blur_vert",white,white,white,0.0,0.0,0.0,NONE);
00192 AddTexture("mat_blur_vert","bloom_texture",BLOOM_TEXTURE);
00193 CustomShader("mat_blur_vert","data/shaders/quad.vert",NULL,"data/shaders/blur.frag","#define VERTICAL\n");
00194 }
00195
00204 void TScene::ResizeRenderTarget(int resX, int resY, GLint tex_format, GLenum tex_type )
00205 {
00206
00207 if(f_buffer == NULL) return;
00208
00209
00210 glBindTexture(GL_TEXTURE_2D, render_texture);
00211 glTexImage2D(GL_TEXTURE_2D, 0, tex_format, resX, resY, 0, GL_RGBA, tex_type, NULL);
00212
00213
00214 glBindTexture(GL_TEXTURE_2D, bloom_texture);
00215 glTexImage2D(GL_TEXTURE_2D, 0, tex_format, resx, resy, 0, GL_RGBA, tex_type, NULL);
00216
00217
00218 glBindTexture(GL_TEXTURE_2D, blur_texture);
00219 glTexImage2D(GL_TEXTURE_2D, 0, tex_format, resx, resy, 0, GL_RGBA, tex_type, NULL);
00220
00221
00222 glBindTexture(GL_TEXTURE_2D, normal_texture);
00223 glTexImage2D(GL_TEXTURE_2D, 0, tex_format, resx, resy, 0, GL_RGBA, tex_type, NULL);
00224
00225
00226 glBindRenderbuffer(GL_RENDERBUFFER, r_buffer_depth);
00227 glRenderbufferStorage(GL_RENDERBUFFER,GL_DEPTH_COMPONENT32F,resx, resy);
00228
00229 glBindFramebufferEXT(GL_FRAMEBUFFER, r_buffer_depth);
00230 glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_RENDERBUFFER, r_buffer_depth);
00231 glBindFramebufferEXT(GL_FRAMEBUFFER, 0);
00232 }
00233
00240 bool TScene::CreateRenderCubeMap(TObject *obj)
00241 {
00242 cout<<"Creating dynamic cube map for \""<<obj->GetName()<<"\"...\n";
00243
00244
00245
00246 {
00247 glDeleteFramebuffers(1, &obj->cf_buffer);
00248 glDeleteRenderbuffers(1, &obj->cr_buffer);
00249 glDeleteTextures(1, &obj->render_cubemap);
00250 }
00251
00252
00253 glGenTextures(1, &obj->render_cubemap);
00254 glBindTexture(GL_TEXTURE_CUBE_MAP, obj->render_cubemap);
00255
00256
00257 for(int i=0; i<6; i++)
00258 glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGBA, obj->refl_size, obj->refl_size, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
00259
00260
00261 glTexParameteri( GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE );
00262 glTexParameteri( GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
00263 glTexParameteri( GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
00264 glTexParameteri( GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
00265
00266
00267
00268 glGenRenderbuffers(1, &obj->cr_buffer);
00269 glBindRenderbuffer(GL_RENDERBUFFER, obj->cr_buffer);
00270 glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, obj->refl_size, obj->refl_size);
00271
00272
00273 glGenFramebuffers(1, &obj->cf_buffer);
00274 glBindFramebufferEXT(GL_FRAMEBUFFER, obj->cf_buffer);
00275
00276
00277 if(use_gshader_ref)
00278 {
00279
00280 glGenTextures(1, &obj->render_cubemap_depth);
00281 glBindTexture(GL_TEXTURE_CUBE_MAP, obj->render_cubemap_depth);
00282
00283
00284 for(int i=0; i<6; i++)
00285 glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_DEPTH_COMPONENT, obj->refl_size, obj->refl_size, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);
00286
00287
00288 glTexParameteri( GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
00289 glTexParameteri( GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
00290
00291
00292 glFramebufferTextureARB(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, obj->render_cubemap, 0);
00293 glFramebufferTextureARB(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, obj->render_cubemap_depth, 0);
00294 }
00295
00296 else
00297 {
00298 for(int i=0; i<6; i++)
00299 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0+i, GL_TEXTURE_CUBE_MAP_POSITIVE_X+i, obj->render_cubemap, 0);
00300
00301 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, obj->cr_buffer);
00302 }
00303
00304
00305
00306 if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
00307 {
00308 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_UNDEFINED)
00309 cout<<"FBO ERROR:GL_FRAMEBUFFER_UNDEFINED\n";
00310 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT)
00311 cout<<"FBO ERROR:GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT\n";
00312 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT)
00313 cout<<"FBO ERROR:GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\n";
00314 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT)
00315 cout<<"FBO ERROR:GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER\n";
00316 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT)
00317 cout<<"FBO ERROR:GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER\n";
00318 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT)
00319 cout<<"FBO ERROR:GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE\n";
00320 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT)
00321 cout<<"FBO ERROR:GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS\n";
00322 if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_UNSUPPORTED_EXT)
00323 cout<<"FBO ERROR:GL_FRAMEBUFFER_UNSUPPORTED\n";
00324 ShowMessage("ERROR: Framebuffer object creation failed!",false);
00325 return false;
00326 }
00327 glBindFramebufferEXT(GL_FRAMEBUFFER, 0);
00328
00329 string texname = obj->GetName() + "Cubemap";
00330 tex_cache[texname] = obj->render_cubemap;
00331
00332
00333 cout<<"Adding cube texture to material \""<<obj->GetMatName()<<"\"\n";
00334 materials[obj->GetMatName()].AddTexture("dynamic_cube",CUBEMAP_ENV,ADD,1.0,1.0,1.0,true,false,obj->render_cubemap);
00335 return true;
00336 }
00337
00338
00344 void TScene::RenderToCubeMap(TObject *obj)
00345 {
00346
00347 glPushAttrib(GL_VIEWPORT_BIT);
00348 glViewport(0, 0, obj->refl_size, obj->refl_size);
00349
00350
00351 glBindFramebufferEXT(GL_FRAMEBUFFER, obj->cf_buffer);
00352
00353
00354 glMatrixMode(GL_PROJECTION);
00355 glPushMatrix();
00356 glLoadIdentity();
00357
00358 TVector pos = obj->GetPosition();
00359 string obj_name = obj->GetName();
00360
00361
00362 gluPerspective (90.0f, 1.0, 0.5, 100.0);
00363
00364
00365 if(use_gshader_ref)
00366 {
00367
00368 for(im = materials.begin(); im != materials.end(); im++)
00369 im->second.UseGShaderCubeMapRender(true);
00370
00371 glMatrixMode(GL_MODELVIEW);
00372 glPushMatrix();
00373 glLoadIdentity();
00374
00375
00376 glTranslatef(-pos.x,-pos.y,-pos.z);
00377 glGetFloatv(GL_MODELVIEW_MATRIX, tmpMatrix);
00378
00379
00380
00381 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
00382
00383
00384 for(il = lights.begin(); il != lights.end(); il++)
00385 il->KeepPos();
00386
00387 map<string,TObject>::iterator ii;
00388 for(ii = objects.begin(); ii != objects.end(); ii++)
00389 if(ii->first != obj_name)
00390 ii->second.Draw(viewMatrix);
00391
00392 glMatrixMode(GL_MODELVIEW);
00393 glPopMatrix();
00394
00395
00396 for(im = materials.begin(); im != materials.end(); im++)
00397 im->second.UseGShaderCubeMapRender(false);
00398 }
00399
00400
00401 else
00402 {
00403 for(int i=0; i<6; i++)
00404 {
00405 glMatrixMode(GL_MODELVIEW);
00406 glPushMatrix();
00407 glLoadIdentity();
00408
00409
00410 switch(i)
00411 {
00412 case 0: glRotatef( 90.0,0.0,1.0,0.0); glRotatef( 180.0,1.0,0.0,0.0); break;
00413 case 1: glRotatef(-90.0,0.0,1.0,0.0); glRotatef( 180.0,1.0,0.0,0.0); break;
00414 case 2: glRotatef(-90.0,1.0,0.0,0.0); break;
00415 case 3: glRotatef( 90.0,1.0,0.0,0.0); break;
00416 case 4: glRotatef(180.0,0.0,1.0,0.0); glRotatef( 180.0,0.0,0.0,1.0); break;
00417 case 5: glRotatef( 180.0,0.0,0.0,1.0); break;
00418 }
00419
00420 glTranslatef(-pos.x,-pos.y,-pos.z);
00421 glGetFloatv(GL_MODELVIEW_MATRIX, tmpMatrix);
00422
00423 glDrawBuffer(GL_COLOR_ATTACHMENT0+i);
00424 glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
00425 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
00426
00427
00428 for(il = lights.begin(); il != lights.end(); il++)
00429 il->KeepPos();
00430
00431 map<string,TObject>::iterator ii;
00432 for(ii = objects.begin(); ii != objects.end(); ii++)
00433 if(ii->first != obj_name)
00434 ii->second.Draw(tmpMatrix);
00435
00436 glMatrixMode(GL_MODELVIEW);
00437 glPopMatrix();
00438 }
00439 }
00440
00441 glBindFramebufferEXT(GL_FRAMEBUFFER, 0);
00442 glDrawBuffer(GL_BACK);
00443
00444 glMatrixMode(GL_PROJECTION);
00445 glPopMatrix();
00446
00447 glPopAttrib();
00448 }