I’m moving my tile map drawing from SpriteBatch to VertexBuffer method. I’ve decided to write my own FX to refresh my memory(I have experience from XNA). First I encountered problems with setting parameters from code:
// CS class
this._dungeonShader.Parameters["tileDataTexture"].SetValue(this._tileDataTexture);
this._dungeonShader.Parameters["tilePaletteTexture"].SetValue(this._tileDataTexture);
…
// FX file
Texture2D tileDataTexture;
Texture2D tilePaletteTexture;
sampler s_tileData = sampler_state {
Texture = <tileDataTexture >;
};
sampler s_tilePalette = sampler_state {
Texture = <tilePaletteTexture>;
};
Result was very strange and both samplers were returning wrong values. Furthermore samplers result depended on the order of texture declaration and when I changed it to:
//Texture2D tileDataTexture;
//Texture2D tilePaletteTexture;
Texture2D tilePaletteTexture;
Texture2D tileDataTexture;
I’ve received different result. After changing my game code to:
/*this._dungeonShader.Parameters["tileDataTexture"].SetValue(this._tileDataTexture);
this._dungeonShader.Parameters["tilePaletteTexture"].SetValue(this._tileDataTexture);*/
this._graphicsDevice.Textures[0] = this._tileDataTexture;
this._graphicsDevice.Textures[1] = this._paletteTexture;
it worked as it should.
Now I’m trying to define SamplerState.PointClamp in FX file:
SamplerState Sampler {
MipFilter = POINT;
MinFilter = POINT;
MagFilter = POINT;
AddressU = Clamp;
AddressV = Clamp;
AddressW = Clamp;
MaxMipLevel = 0;
};
Again without success and again when I used directly GraphicsDevice it worked:
this._graphicsDevice.SamplerStates[0] = SamplerState.PointClamp;
This is my first HLSL experience after several years but I don’t remember that I had such a problems with XNA. Can someone tell me what am I doing wrong? Or maybe this is bug?