diff options
author | Ton Roosendaal <ton@blender.org> | 2006-06-02 21:45:49 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2006-06-02 21:45:49 +0400 |
commit | d40c1fc2030142b07990f01bbcf2c0dfa770075f (patch) | |
tree | bcc9b3da947f565fc43af29046d4141ce45b915c /source/blender/src/renderwin.c | |
parent | db0f3846a54fcbba7915df32515c705a359181ac (diff) |
Bugfix:
- OpenGL render didn't display the render buffer
- OpenGL anim render always exported to movie, now it supports formats like
normal renders.
Diffstat (limited to 'source/blender/src/renderwin.c')
-rw-r--r-- | source/blender/src/renderwin.c | 43 |
1 files changed, 39 insertions, 4 deletions
diff --git a/source/blender/src/renderwin.c b/source/blender/src/renderwin.c index 9254b0405c2..64d64ad9da5 100644 --- a/source/blender/src/renderwin.c +++ b/source/blender/src/renderwin.c @@ -68,6 +68,7 @@ #include "DNA_vec_types.h" #include "BKE_global.h" +#include "BKE_image.h" #include "BKE_scene.h" #include "BKE_utildefines.h" #include "BKE_writeavi.h" /* movie handle */ @@ -94,6 +95,9 @@ #include "RE_pipeline.h" +#include "IMB_imbuf.h" +#include "IMB_imbuf_types.h" + #include "blendef.h" #include "mydevice.h" #include "winlay.h" @@ -345,7 +349,7 @@ static void renderwin_draw(RenderWin *rw, int just_clear) else RE_GetResultImage(RE_GetRender(G.scene->id.name), &rres); - if(rres.rectf) { + if(rres.rectf || rres.rect32) { glPixelZoom(rw->zoom, rw->zoom); if(rw->flags & RW_FLAGS_ALPHA) { @@ -1247,17 +1251,46 @@ void BIF_do_ogl_render(View3D *v3d, int anim) bMovieHandle *mh= BKE_get_movie_handle(G.scene->r.imtype); int cfrao= CFRA; - mh->start_movie(&G.scene->r, winx, winy); + if(BKE_imtype_is_movie(G.scene->r.imtype)) + mh->start_movie(&G.scene->r, winx, winy); for(CFRA= SFRA; CFRA<=EFRA; CFRA++) { drawview3d_render(v3d, winx, winy); glReadPixels(0, 0, winx, winy, GL_RGBA, GL_UNSIGNED_BYTE, rr->rect32); window_swap_buffers(render_win->win); - mh->append_movie(CFRA, rr->rect32, winx, winy); + if(BKE_imtype_is_movie(G.scene->r.imtype)) { + mh->append_movie(CFRA, rr->rect32, winx, winy); + printf("Append frame %d", G.scene->r.cfra); + } + else { + ImBuf *ibuf= IMB_allocImBuf(winx, winy, G.scene->r.planes, 0, 0); + char name[FILE_MAXDIR+FILE_MAXFILE]; + int ok; + + BKE_makepicstring(name, (G.scene->r.cfra)); + + ibuf->rect= rr->rect32; + ok= BKE_write_ibuf(ibuf, name, G.scene->r.imtype, G.scene->r.subimtype, G.scene->r.quality); + + if(ok==0) { + printf("Write error: cannot save %s\n", name); + break; + } + else printf("Saved: %s", name); + + /* imbuf knows which rects are not part of ibuf */ + IMB_freeImBuf(ibuf); + } + /* movie stats prints have no line break */ + printf("\n"); + if(test_break()) break; } - mh->end_movie(); + + if(BKE_imtype_is_movie(G.scene->r.imtype)) + mh->end_movie(); + CFRA= cfrao; } else { @@ -1266,6 +1299,8 @@ void BIF_do_ogl_render(View3D *v3d, int anim) window_swap_buffers(render_win->win); } + renderwin_draw(render_win, 0); + mainwindow_make_active(); if(anim) |