ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/RpictSimulManager.cpp
(Generate patch)

Comparing ray/src/rt/RpictSimulManager.cpp (file contents):
Revision 2.11 by greg, Tue Aug 27 18:50:01 2024 UTC vs.
Revision 2.12 by greg, Mon Sep 16 23:49:13 2024 UTC

# Line 105 | Line 105 | RpictSimulManager::NewFrame(const VIEW &v, int xydim[2
105  
106          if (!xydim) return false;
107          if (!ap) ap = &pasp;
108 <        pvw = vw;                       // save previous view for motion blur
109 <        vw = v;
108 >        if (&v == &vw) {
109 >                pvw.type = 0;
110 >        } else {
111 >                pvw = vw;               // save previous view for motion blur
112 >                vw = v;
113 >        }
114          const char *    verr = setview(&vw);
115          if (verr) {
116                  error(WARNING, verr);
# Line 684 | Line 688 | RpictSimulManager::NewOutput(FILE *pdfp[2], const char
688                          error(INTERNAL, "writing picture to a command not supported");
689                          return RDTnone;
690                  }
691 <                fd = open(pfname, O_WRONLY|O_CREAT|O_EXCL, 0666);
691 >                fd = open(pfname, O_RDWR|O_CREAT|O_EXCL, 0666);
692          }
693          if (fd < 0) {
694                  if ((frameNo <= 0) | (errno != EEXIST)) {
# Line 695 | Line 699 | RpictSimulManager::NewOutput(FILE *pdfp[2], const char
699          }
700          if (fd == 1)
701                  pdfp[0] = stdout;
702 <        else if (!(pdfp[0] = fdopen(fd, "w")))
702 >        else if (!(pdfp[0] = fdopen(fd, "w+")))
703                  error(SYSTEM, "failure calling fdopen()");
704          SET_FILE_BINARY(pdfp[0]);               // write picture header
705          if ((pdfp[0] != stdout) | (frameNo <= 1)) {
706                  newheader("RADIANCE", pdfp[0]);
707 <                fputs(GetHeader(), pdfp[0]);
707 >                fputs(GetHeadStr(), pdfp[0]);
708          }
709          fputs(VIEWSTR, pdfp[0]); fprintview(&vw, pdfp[0]); fputc('\n', pdfp[0]);
710          if (frameNo > 0)
# Line 760 | Line 764 | RpictSimulManager::NewOutput(FILE *pdfp[2], const char
764                  if (dfname[0] == '!')
765                          pdfp[1] = popen(dfname+1, "w");
766                  else
767 <                        pdfp[1] = fopen(dfname, "w");
767 >                        pdfp[1] = fopen(dfname, "w+");
768                  if (!pdfp[1]) {
769                          sprintf(errmsg, "cannot open depth output '%s'", dfname);
770                          error(SYSTEM, errmsg);
# Line 772 | Line 776 | RpictSimulManager::NewOutput(FILE *pdfp[2], const char
776          }
777          if (RDTdepthT(dt) == RDTdshort) {       // write header for 16-bit depth?
778                  newheader("RADIANCE", pdfp[1]);
779 <                fputs(GetHeader(), pdfp[1]);
779 >                fputs(GetHeadStr(), pdfp[1]);
780                  fputs(VIEWSTR, pdfp[1]); fprintview(&vw, pdfp[1]); fputc('\n', pdfp[1]);
781                  fputs(DEPTHSTR, pdfp[1]); fputs(dunit, pdfp[1]); fputc('\n', pdfp[1]);
782                  fputformat(DEPTH16FMT, pdfp[1]);
# Line 1002 | Line 1006 | RpictSimulManager::ReopenOutput(FILE *pdfp[2], const c
1006                  pdfp[0] = NULL;
1007                  return RDTnone;
1008          }
1009 +        if (hinfo.gotview) {                    // header view overrides
1010 +                pvw = vw;
1011 +                vw = hinfo.vw;
1012 +        }
1013          if (!dfname)                            // no depth file?
1014                  return dt;
1015  
# Line 1021 | Line 1029 | RpictSimulManager::ReopenOutput(FILE *pdfp[2], const c
1029          }
1030          SET_FILE_BINARY(pdfp[1]);
1031          int     n, len = strlen(HDRSTR);
1032 <        char    buf[32];                // sniff for 16-bit header
1032 >        char    buf[32];                        // sniff for 16-bit header
1033          if (getbinary(buf, 1, len+1, pdfp[1]) < len+1) {
1034                  sprintf(errmsg, "empty depth file '%s'", dfname);
1035                  error(SYSTEM, errmsg);
# Line 1031 | Line 1039 | RpictSimulManager::ReopenOutput(FILE *pdfp[2], const c
1039          }
1040          for (n = 0; n < len; n++)
1041                  if (buf[n] != HDRSTR[n])
1042 <                        break;          // not a Radiance header
1042 >                        break;                  // not a Radiance header
1043          rewind(pdfp[1]);
1044          if ((n < len) | !isprint(buf[len]))
1045                  return RDTnewDT(dt, RDTdfloat);
1046  
1047 <        HeaderInfo      dinfo;          // thinking it's 16-bit encoded
1047 >        HeaderInfo      dinfo;                  // thinking it's 16-bit encoded
1048          if (getheader(pdfp[1], head_check, &dinfo) < 0)
1049                  sprintf(errmsg, "bad header in encoded depth file '%s'",
1050                                  dfname);
# Line 1075 | Line 1083 | RpictSimulManager::ResumeFrame(const char *pfname, con
1083          case RDTxyze:
1084                  break;
1085          case RDTscolr:
1086 <                bytesPer = hinfo.ncomp + 1;     // XXX assumes no compression
1086 >                bytesPer = NCSAMP + 1;  // XXX assumes no compression
1087                  break;
1088          case RDTrgb:
1089          case RDTxyz:
1090                  bytesPer = sizeof(float)*3;
1091                  break;
1092          case RDTscolor:
1093 <                bytesPer = sizeof(float)*hinfo.ncomp;
1093 >                bytesPer = sizeof(float)*NCSAMP;
1094                  break;
1095          default:
1096 <                sprintf(errmsg, "unknown format (%s) for '%s'", hinfo.fmt, pfname);
1096 >                sprintf(errmsg, "unknown format for '%s'", pfname);
1097                  error(USER, errmsg);
1098                  fclose(pdfp[0]);
1099                  if (pdfp[1]) fclose(pdfp[1]);
# Line 1099 | Line 1107 | RpictSimulManager::ResumeFrame(const char *pfname, con
1107                  if (pdfp[1]) fclose(pdfp[1]);
1108                  return RDTnone;
1109          }
1110 <        vw.type = 0;                            // set up new (unreferenced) frame
1103 <        frameNo = 0;
1110 >        frameNo = 0;                            // set up unreferenced frame
1111          int     hvdim[2] = {res.xr, res.yr};
1112          double  noAdj = 0;
1113 <        if (!NewFrame(hinfo.vw, hvdim, &noAdj) ||
1113 >        if (!NewFrame(vw, hvdim, &noAdj) ||
1114                          (hvdim[0] != res.xr) | (hvdim[1] != res.yr)) {
1115                  error(CONSISTENCY, "unexpected resolution change in ResumeFrame()");
1116                  fclose(pdfp[0]);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines