Text archives Help
- 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.