ФлеймФорумОбщее

Проблематика говноAPI (4 стр)

Страницы: 13 4 5 622 Следующая »
#45
7:57, 4 июля 2024

nes
> А чо, с сырым инпутом заморачиваться не стал?
Потому что xbox контроллер нужен, а не просто клавиатура

Aroch
> а флажка для буферизированного опроса там нет?
нету

#46
8:01, 4 июля 2024

Имбирная Ведьмочка
XInput геймпады умеют прикидываться DInput

#47
8:05, 4 июля 2024

monobogdan
> XInput геймпады умеют прикидываться DInput
Только без обратной связи типа вибраций

#48
8:06, 4 июля 2024

=A=L=X=
> И она пригодилась где то?
Даже если и не пригодилась конкретно в дх — это не причина его убирать, точно так же, как если ты никогда не попадал в аварию на своей машине — это не причина выбрасывать аптечку и огнетушитель.

На счёт конкретно дх я не знаю, а вот по винапи в целом — прецеденты определённо есть, когда добавляли новую версию с новым двСайз, так что нельзя сказать, якобы пожаров вообще никогда не случалось и нигде и огнетушители не нужны как концепция.

#49
8:08, 4 июля 2024

Юзайте SDL.
Там если геймпад поддерживает DInput он может стать объектом вида Joystick.
Но если он поддерживает XInput, то он так же может стать объектом вида Gamepad.
Но даже если геймпад не поддерживает XInput, но GUID его драйвера есть во встроенной в SDL базе данных геймпадов, то он тоже сможет стать объектом вида Gamepad и SDL сама автоматически замапит кнопки куда надо.

#50
8:11, 4 июля 2024

Имбирная Ведьмочка

DX базирован на COM-интерфейсах - сущности которая уже прекрасно расширяется в любых степенях и возможностях через QueryInterface и все эти ублюдские dwSize там с самого начала не были нужны. Всё это было одной большой ошибкой той же степени в какой OpenGL никак не могли проапгрейдить на по настоящему новую версию с новыми функциями без старых функций.

#51
8:24, 4 июля 2024

=A=L=X=
> DX базирован на COM-интерфейсах - сущности которая уже прекрасно расширяется в любых степенях и возможностях через QueryInterface и все эти ублюдские dwSize там с самого начала не были нужны.
Контр-аргумент: зачем плодить кучу новых интерфейсов, когда можно просто добавить селектор dwSize в структуру-параметр?

#52
8:39, 4 июля 2024

MrShoor
> нету
ну тогда страдать и довольствоваться хотя бы тем что есть dwPacketNumber и не делать лишнюю работу если опрос слишком частый и изменений не было. Его всё равно не имеет смысла использовать за пределами игровых устройств и потеря стэйта при лаге обрабатывающего потока не должно быть большой потерей, в сравнении с тем что у пользователя есть куда большая проблема раз начались лаги.

#53
8:42, 4 июля 2024

Имбирная Ведьмочка
> Контр-аргумент: зачем плодить кучу новых интерфейсов, когда можно просто добавить селектор dwSize в структуру-параметр?

Затем чтобы не превращать код в мешанину когда вместо того чтобы передать параметры в функцию их сперва запихивают в структуру-передатчик.
Давай возьмём пример из первопоста, один метод:

  // Fill format
  Format.dwSize    = sizeof(DIDATAFORMAT);
  Format.dwObjSize = sizeof(DIOBJECTDATAFORMAT);
  Format.dwFlags   = 2,
  Format.dwDataSize = sizeof( State );
  Format.dwNumObjs = 7;
  Format.rgodf = RGDOF;
  HRESULT Result;
  ...
  Result = Device->SetDataFormat( &Format );

Если переписать по другому, то это могло бы выглядеть так:

  // параметры: Flags, DataSize, NumObjs, ArrayOfFormatDescriptiors 
  Result = Device->SetDataFormat( 2, sizeof( State ), 7, RGDOF );

Код чище, проще, не пестрит ненужными идентификаторами и тому подобное.
Если закладывать возможность расширения параметров, то лучше сделать последний параметр void *extInfo и в него пихать возможные расширения в будущем. Но это крайние меры и они не должны быть популярными - MS  отличие от OpenGL справедливо делала новую версию DX полностью выкидывая устаревшие интерфейсы на мороз.

#54
8:48, 4 июля 2024

=A=L=X=
> полностью выкидывая устаревшие интерфейсы на мороз.
это было бы так если бы приложения использующие старые версии dx не запускались. На уровне интерфейса ты может и можешь творить любую дичь, но уровнем ниже при работе с драйверами и железом это всё равно придется как-то разруливать и делать совсем уж резкие изменения это многократно усложнять себе работу.

#55
8:49, 4 июля 2024

На самом деле это частный случай крестопроблем,... ну что стоило добавить в стандарт  именованные инициализаторы для структур, например.

#56
8:50, 4 июля 2024

=A=L=X=
> И она пригодилась где то?
Она кстати таки пригодилась. Я сейчас сходу не скажу, но точно помню, что встречал несколько функций, в которых структура расширялась именно за счет dwSize

#57
8:51, 4 июля 2024

Aroch
> это было бы так если бы приложения использующие старые версии dx не запускались.

Это так, просто дистрибутивы DirectX несут в себе и старые версии тоже.

#58
8:53, 4 июля 2024

MrShoor
> Я сейчас сходу не скажу, но точно помню, что встречал несколько функций, в которых структура расширялась именно за счет dwSize

И код еще более ублюдским становился, потому что теперь надо передавать указатель не на расширенную структуру, а на её подструктуру.
Уж лучше void *extInfo.

#59
9:28, 4 июля 2024

=A=L=X=
> потому что теперь надо передавать указатель не на расширенную структуру, а на её подструктуру.
Всмысле? На расширенную структуру указатель и передавался. Ты о чем?

=A=L=X=
> И код еще более ублюдским становился
Как по мне, то вот этот код:

  // Fill format
  Format.dwSize    = sizeof(DIDATAFORMAT);
  Format.dwObjSize = sizeof(DIOBJECTDATAFORMAT);
  Format.dwFlags   = 2,
  Format.dwDataSize = sizeof( State );
  Format.dwNumObjs = 7;
  Format.rgodf = RGDOF;
  HRESULT Result;
  ...
  Result = Device->SetDataFormat( &Format );

Читается намного проще, чем твой:

Result = Device->SetDataFormat( 2, sizeof( State ), 7, RGDOF );

Ты в своем примере сходу сможешь сказать что такое 2 и что такое 7 ты передал в свой SetDataFormat? Читабельность кода важнее удобства набора (да и с современными IDE по поводу удобства набора - спорный аргумент)

Страницы: 13 4 5 622 Следующая »
ФлеймФорумОбщее