I'm trying to access some variables in my shader, but I think I'm doing this wrong. Say I have a constant buffer that looks like this:

cbuffer perFrame
    float foo;
    float bar;

I got an ID3D10EffectConstantBuffer reference to it, and I can get a specific index by calling GetMemberByIndex, but how can I figure out how many members perFrame has so that I can get each member without going out of bounds?


If you have an ID3DX10EffectVariable that represents perFrame, then you should be able to call GetType to get an ID3DX10EffectType for perFrame. Then you can call GetDesc on that type instance to get a D3DX10_EFFECT_TYPE_DESC which has a Members field which should give you want you need.

That said, I think accessing members by index is generally fairly brittle and that giving fields semantics whenever possible to more desirable.

Note that I have never actually tried this on structures denoted cbuffer so there may be some additional hoops you need to jump through if things don't quite work out -- constant buffers may have some specialized rules or handling via the effect interface. But I'm reasonably sure this will at least set you on the right track given that constant buffers seem to be well-understood by the API.

EDIT: I retargetted all the links to point at the D3D10 versions and not the D3D11 versions.


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.