directx — автозагрузка C ++ или моя ошибка ?!

Является ли auto универсальным и работает с любым API, или я не использую его правильно, я думаю, что в этом случае должно работать, но сработает ошибка, если я изменю ее на конкретный тип, но почему?

//  Set  vertex  buffer
auto  stride = m_FullScreenVTFTonemapPass.stride;
auto  offset = m_FullScreenVTFTonemapPass.offset;
m_pD3DDevice->IASetInputLayout( m_FullScreenVTFTonemapPass.IALayout );
m_pD3DDevice->IASetVertexBuffers ( 0, 1, &m_FullScreenVTFTonemapPass.VBdata, &stride, &offset );
m_pD3DDevice->IASetPrimitiveTopology( D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP );

в функции IASetVertexBuffers () необходимо указывать шаг и смещение, но появляются ошибки, если я изменю один из них на шаг или смещение с помощью UINT, это работает, но почему не работает auto ?!

-1

Решение

Я решил проблему, так как IASetVertexBuffer () нужны два параметра UINT, и мое автоматическое объявление получало два простых целых числа (шаг, смещение), что было ошибкой. IASetVertexBuffer () не может привести от параметров типа int к UINT *. Вот и все.

auto  stride = quad->stride;
auto  offset = quad->offset;
m_pD3DDevice->IASetInputLayout( quad->IALayout );
m_pD3DDevice->IASetVertexBuffers(0, 1, &quad->VBdata, (UINT*)&stride, (UINT*)&offset);
m_pD3DDevice->IASetPrimitiveTopology( D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP );

Постскриптум В любом случае, если я буду настаивать на использовании auto, тогда я приведу эти значения с шагом (UINT *) и сместим их, и все. Работает без проблем.

1

Другие решения

Используйте auto только для итераторов и циклов. На мой взгляд, использование авто — плохая привычка.

Если вы зайдете в код через несколько дней или недель, вы будете ненавидеть себя за использование auto для всех возможных переменных. И если есть другой кодер, который должен прочитать ваш код, постарайтесь полностью его избежать.

В вашем особом случае? Что, по-твоему, будет лучше при использовании авто здесь? У UINT и auto есть 4 буквы, поэтому лень не может быть причиной. Если вы посмотрите на свой код и увидите UINT, вы сразу узнаете, к какому типу относится переменная.

0

авто это не определение типа но класс хранения (лайк статический).

Компилятор жалуется, потому что вы сказали это как и где (в этом случае в стеке), чтобы хранить что-то, но не то, что что-то должно быть.

Вы должны добавить определение типа после авто ключевое слово или как авто по умолчанию в любом случае, замени это с правильным типом.

UNIT stride = ......
-1
По вопросам рекламы [email protected]