1
\$\begingroup\$

I'm trying to use Texture2D set and get colors, but I encountered a strange behavior. Here's the code to reproduce it:

Texture2D tex = new Texture2D(2,2, TextureFormat.RGBA32 ,false);

Color col = new Color(1.0f,0.5f,1.0f,0.5f); //col values: 1.00, 0.500, 1.00, 0.500
tex.setPixel(0,0,col);
Color colDebug = tex.getPixel(0,0);  //col values: 1.00, 0.502, 1.00, 0.502

The Color retrieved with getPixel is different from the Color set before. I initially thought about float approximation, but when inspectin col the value stored are correct, so can't be that reason.

It sounds weird even a sampling error because the getValue returns a value really similar that not seems to be interpolated with anything else. Anyway I tried even to add these lines after building the texture but nothing change:

this.tex.filterMode = FilterMode.Point;
this.tex.wrapMode = TextureWrapMode.Clamp;
this.tex.anisoLevel = 1;

What's my mistake? What am I missing?

In addition to that. I'm using tex to store Rect coordinates returned from atlas generation, in order to be able of retriving the correct uv coordinate of an atlas inside a shader. Is this a right way to go?

\$\endgroup\$

1 Answer 1

1
\$\begingroup\$

I think I have understand the reason. Color store each component as a float value (32 bit for each component) right?

When I set the color with setPixel it's implicitely converted to Color32, so some values are truncated and when I get them back they are different.

\$\endgroup\$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .