Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2006-06-02 21:45:49 +0400
committerTon Roosendaal <ton@blender.org>2006-06-02 21:45:49 +0400
commitd40c1fc2030142b07990f01bbcf2c0dfa770075f (patch)
treebcc9b3da947f565fc43af29046d4141ce45b915c
parentdb0f3846a54fcbba7915df32515c705a359181ac (diff)
Bugfix:
- OpenGL render didn't display the render buffer - OpenGL anim render always exported to movie, now it supports formats like normal renders.
-rw-r--r--source/blender/src/renderwin.c43
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)