The GraphicsDevice class of XNA has the properties Textures and VertexTextures.

What is the exact difference? I don't really understand what MSDN tells me about this.

I usually use Effect parameters to pass textures to my HLSL shaders. What are the differences between these methods, which is faster?

  • \$\begingroup\$ No one should be faster. In DX there is bindtoVertex and bindToPixel. They just bind a resource for a certain stage in the shader. \$\endgroup\$ – Tordin Oct 24 '13 at 8:09
  • \$\begingroup\$ Ok this means I could use a Texture in the Vertex Shader? For what is this useful? Getting VertexColor from a Texture to have some kind of very low res texture? \$\endgroup\$ – codymanix Oct 24 '13 at 8:43
  • \$\begingroup\$ And what is the difference between passing a user texture as effect parameter and using the Textures collection? \$\endgroup\$ – codymanix Oct 24 '13 at 8:46

GraphicsDevice.Textures are your "traditional" textures; the one's you sample from during the fragment shader.

GraphicsDevice.VertexTextures are textures that you want to sample from in the vertex shader, which required specialized HLSL instructions (texldl, as noted in the documentation) on the D3D9-class hardware that XNA is based on. Vertex textures were a half-measure towards the more unified shader resource input pipe that is available on modern cards, but not via XNA. You probably do not need to concern yourself with the VertexTextures property for the time being.

Using the Effect API to send textures to the shader will, under the hood, do exactly the same set of steps that you would need to do if you manually assigned textures to specific samplers. I would recommend you continue to just use the Effect methods as they are likely going to be easier for you, since you already understand them.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.