Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[Manta] r1940 - trunk/Image


Chronological Thread 
  • From: bigler@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [Manta] r1940 - trunk/Image
  • Date: Wed, 19 Dec 2007 11:48:28 -0700 (MST)

Author: bigler
Date: Wed Dec 19 11:48:28 2007
New Revision: 1940

Modified:
   trunk/Image/SimpleImage.h
   trunk/Image/SimpleImage_special.cc
Log:
Image/SimpleImage.h
Image/SimpleImage_special.cc

  Added templated splat function to do the pixel splatting.
  Refactored code to use this function.


Modified: trunk/Image/SimpleImage.h
==============================================================================
--- trunk/Image/SimpleImage.h   (original)
+++ trunk/Image/SimpleImage.h   Wed Dec 19 11:48:28 2007
@@ -57,6 +57,9 @@
     SimpleImage(const Image&);
     SimpleImage& operator=(const SimpleImage&);
 
+    // This splats
+    void splat(const Fragment& fragment);
+
     char* data;
     Pixel** eyeStart[2];
   };
@@ -108,29 +111,35 @@
   }
 
   template<class Pixel>
-  void SimpleImage<Pixel>::set(const Fragment& fragment)
+  void SimpleImage<Pixel>::splat(const Fragment& fragment)
   {
-    if(fragment.xPixelSize != 1 || fragment.yPixelSize != 1){
-      // NOTE(boulos): This branch tries to copy fragments where a
-      // single sample splats onto several pixels
-      for(int i=fragment.begin();i<fragment.end();i++){
-        Pixel pix;
-        convertToPixel(pix, fragment.getColor(i).convertRGB());
-
-        // start splatting
-        int y_index = fragment.getY(i);
-        int last_x = std::min(xres - fragment.getX(i), fragment.xPixelSize);
-        for(int y=0;y<fragment.yPixelSize;y++){
-
-          if (y_index >= yres) break;
-
-          Pixel* row = eyeStart[fragment.getWhichEye(i)][y_index];
-          for(int x=0;x<last_x;x++)
-            row[fragment.getX(i) + x] = pix;
+    // NOTE(boulos): This branch tries to copy fragments where a
+    // single sample splats onto several pixels
+    for(int i=fragment.begin();i<fragment.end();i++){
+      Pixel pix;
+      convertToPixel(pix, fragment.getColor(i).convertRGB());
+
+      // start splatting
+      int y_index = fragment.getY(i);
+      int last_x = std::min(xres - fragment.getX(i), fragment.xPixelSize);
+      for(int y=0;y<fragment.yPixelSize;y++){
+
+        if (y_index >= yres) break;
+
+        Pixel* row = eyeStart[fragment.getWhichEye(i)][y_index];
+        for(int x=0;x<last_x;x++)
+          row[fragment.getX(i) + x] = pix;
 
-          y_index++;
-        }
+        y_index++;
       }
+    }
+  }
+  
+  template<class Pixel>
+  void SimpleImage<Pixel>::set(const Fragment& fragment)
+  {
+    if(fragment.xPixelSize != 1 || fragment.yPixelSize != 1){
+      splat(fragment);
     } else 
if(fragment.getFlag(Fragment::ConsecutiveX|Fragment::ConstantEye)){
       int b = fragment.begin();
       Pixel* pix = 
eyeStart[fragment.getWhichEye(b)][fragment.getY(b)]+fragment.getX(b);

Modified: trunk/Image/SimpleImage_special.cc
==============================================================================
--- trunk/Image/SimpleImage_special.cc  (original)
+++ trunk/Image/SimpleImage_special.cc  Wed Dec 19 11:48:28 2007
@@ -10,26 +10,7 @@
 void SimpleImage<ARGB8Pixel>::set(const Fragment& fragment)
 {
   if(fragment.xPixelSize != 1 || fragment.yPixelSize != 1){
-    // NOTE(boulos): This branch tries to copy fragments where a
-    // single sample splats onto several pixels
-    for(int i=fragment.begin();i<fragment.end();i++){
-      ARGB8Pixel pix;
-      convertToPixel(pix, fragment.getColor(i).convertRGB());
-
-      // start splatting
-      int y_index = fragment.getY(i);
-      int last_x = std::min(xres - fragment.getX(i), fragment.xPixelSize);
-      for(int y=0;y<fragment.yPixelSize;y++){
-
-        if (y_index >= yres) break;
-
-        ARGB8Pixel* row = eyeStart[fragment.getWhichEye(i)][y_index];
-        for(int x=0;x<last_x;x++)
-          row[fragment.getX(i) + x] = pix;
-
-        y_index++;
-      }
-    }
+    splat(fragment);
   } else if(fragment.getFlag(Fragment::ConsecutiveX|Fragment::ConstantEye)){
     int b = fragment.begin();
     ARGB8Pixel* pix = 
eyeStart[fragment.getWhichEye(b)][fragment.getY(b)]+fragment.getX(b);
@@ -76,7 +57,9 @@
 template<>
 void SimpleImage<BGRA8Pixel>::set(const Fragment& fragment)
 {
-  if(fragment.getFlag(Fragment::ConsecutiveX|Fragment::ConstantEye)){
+  if(fragment.xPixelSize != 1 || fragment.yPixelSize != 1){
+    splat(fragment);
+  } else if(fragment.getFlag(Fragment::ConsecutiveX|Fragment::ConstantEye)){
     int b = fragment.begin();
     BGRA8Pixel* pix = 
eyeStart[fragment.getWhichEye(b)][fragment.getY(b)]+fragment.getX(b);
 #if MANTA_SSE
@@ -140,26 +123,7 @@
 void SimpleImage<RGBA8Pixel>::set(const Fragment& fragment)
 {
   if(fragment.xPixelSize != 1 || fragment.yPixelSize != 1){
-    // NOTE(boulos): This branch tries to copy fragments where a
-    // single sample splats onto several pixels
-    for(int i=fragment.begin();i<fragment.end();i++){
-      RGBA8Pixel pix;
-      convertToPixel(pix, fragment.getColor(i).convertRGB());
-
-      // start splatting
-      int y_index = fragment.getY(i);
-      int last_x = std::min(xres - fragment.getX(i), fragment.xPixelSize);
-      for(int y=0;y<fragment.yPixelSize;y++){
-
-        if (y_index >= yres) break;
-
-        RGBA8Pixel* row = eyeStart[fragment.getWhichEye(i)][y_index];
-        for(int x=0;x<last_x;x++)
-          row[fragment.getX(i) + x] = pix;
-
-        y_index++;
-      }
-    }
+    splat(fragment);
   } else if(fragment.getFlag(Fragment::ConsecutiveX|Fragment::ConstantEye)) {
     int b = fragment.begin();
     RGBA8Pixel* pix = 
eyeStart[fragment.getWhichEye(b)][fragment.getY(b)]+fragment.getX(b);
@@ -223,7 +187,9 @@
 template<>
 void SimpleImage<RGBAfloatPixel>::set(const Fragment& fragment)
 {
-  if(fragment.getFlag(Fragment::ConsecutiveX|Fragment::ConstantEye)){
+  if(fragment.xPixelSize != 1 || fragment.yPixelSize != 1){
+    splat(fragment);
+  } else if(fragment.getFlag(Fragment::ConsecutiveX|Fragment::ConstantEye)){
     int b = fragment.begin();
     RGBAfloatPixel* pix = 
eyeStart[fragment.getWhichEye(b)][fragment.getY(b)]+fragment.getX(b);
 #if MANTA_SSE




  • [Manta] r1940 - trunk/Image, bigler, 12/19/2007

Archive powered by MHonArc 2.6.16.

Top of page