Войти
ПрограммированиеФорумОбщее

Движок на Си (15 стр)

Advanced: Тема повышенной сложности или важная.

Страницы: 112 13 14 15 16 17 Следующая »
#210
8:46, 28 июня 2019

=A=L=X=
OLE вещь крутая, но по своему медленная - обычно никто не реализовывает getidsofnames, а отдаёт это RTTI или генераторам кода. Маршаллинг ручками по моему примеру будет быстрее, и должен работать и на x86, и на x64. С ARM(и другими RISC 32х битными камнями) ситуация чуть другая - там всё распихивается по регистрам, поэтому тем же препроцессором достаточно заменить номер регистра на свой.


#211
9:42, 28 июня 2019

monobogdan

Ты еще забываешь, что бывает не только ARM или x86, но и Visual C++ и GCC, поэтому на асме хардкорить конечно круто, если оно того стоит, но кроссплатформенность и кросскомпиляторность снижается сильно.

#212
10:31, 28 июня 2019

exchg
> Ну покажи как ты их собираешься добавить и хранить в таблице ))))
то есть, это не рабочий вариант, и это вы просто так накидали

+ Показать

monobogdan
>Всё ещё есть возможность вызывать функции, складывая аргументы в стёк ручками. Правда, для >каждой платформы придется реализовывать это самому, и это не сработает с fastcall. Это основа >маршаллинга практически в любом скриптовом языке

Вроде похоже на то, что я хочу, а я хочу просто вызывать функции с разными параметрами.
А можно где нить по подробнее прочитать? прежде чем я начну задавать глупые вопросы.

=A=L=X=
>А откуда эти параметры да еще и разные берутся?
не очень понял вопроса, но я же где то располагаю переменные

int max_cars = 5;
MODEL cars_models[5];

init_cars(max_cars, cars_models);
#213
10:48, 28 июня 2019

u960
> Вроде похоже на то, что я хочу, а я хочу просто вызывать функции с разными
> параметрами.
> А можно где нить по подробнее прочитать? прежде чем я начну задавать глупые
> вопросы.
Хватит самых базовых знаний о том, что выдаёт компилятор на выхлопе и как происходит вызов функций.
Попробуй на godbolt повызывать функции с разными аргументами чтобы лучше понять.

=A=L=X=
> GCC
У этого оптимизатор кстати имеет моду сам делать fastcall там, где это можно(т.е раскладывать по регистрам), поэтому да, нужно быть осторожнее с этим. С другой стороны, автоматический OLE-подобный диспатчер тоже можно написать без особых усилий, экспортируя их с каким нибудь специальным префиксом. Тогда потери производительности вообще не будет, и сама функция сможет решать, как ей работать с аргументами.

#214
(Правка: 11:35) 11:34, 28 июня 2019

u960
> то есть, это не рабочий вариант, и это вы просто так накидали
Это Я накидал и прошу я тебя показать как ТЫ это видишь. Я веду к тому, что накидай прототип псевдокодом, а потом посмотри на него и подумай - как он будет развернут. Там на самом деле не много вариантов. И ты увидишь, что единственный возможный вариант передать все и сразу в одном месте, средствами языка, это задвинуть туда указатель как у меня в примере.

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

monobogdan
> и на x64
Это там где соглашение о вызове предусматривает, что первые N аргументов приезжают в регистрах, причем в разных для линукс и виндовс?

#215
12:57, 28 июня 2019

Daniil Petrov
> но за глаза хватило геморроя и с C++ ))
+1

#216
12:58, 28 июня 2019

mr.DIMAS
> Почти два года в свободное от работы время пишу движок на Си (C99 если точнее)

даже Кармак давно уже перешёл на C++ :)

#217
14:08, 28 июня 2019

mr.DIMAS

Молодец. Все круто, единственное кодстайл немного вырвиглазный - все наменования, кроме макросов в нижнем регистре, но это больше на любителя. Мне больше нравится кодстайл в quake :)

#218
16:02, 28 июня 2019

u960
> я хочу просто вызывать функции с разными параметрами
рекомендую начать с этого
exchg
> из диспетчера вызывать враппер из которого будешь дергать оригинальную функцию.
> Это не так красиво.

и раз тут уже упомянули скриптовые языки, можно заморочиться рефлекшном, т.е. добавлением метаинформации чтобы понимать сколько полей в структуре, какого размера, и возможно типа, оно тогда механически раскладывается на аргументы и обратно, но дело это не быстрое и довольно ёмкое, т.е. boilerplate приличный, в пределе как биндинги к скриптовым языкам

#219
17:57, 9 июля 2019

https://github.com/PJayB/Quake-III-Arena-D3D11
Так вот надо в С.

#220
21:08, 9 июля 2019

8xBit4
> Так вот надо в С
сам Кармак директ не жаловал, кто же знал что openGL так отстанет в производительности

#221
22:38, 9 июля 2019

8xBit4
Держи, ты потерял

++
#222
22:38, 9 июля 2019

#!
> кто же знал что openGL так отстанет в производительности

да ладно уж

#223
3:11, 10 июля 2019

Первый квейк мог работать через свой quakegl, урезанную и оптимизированную для нужд quake софтрендерную реализацию opengl. Примерно вдвое быстрее стандартной работала. Акселераторы то тогда были редкостью, большинство играло на компах без них, на софтовом рендере.

Вроде бы, во втором квейке эта возможность сохранялась, дальше - вряд ли, потребность отпала, абы какие акселераторы появились везде, даже на чисто офисной технике.

#224
14:53, 10 июля 2019

Zab
> урезанную и оптимизированную для нужд quake софтрендерную реализацию opengl.
> Примерно вдвое быстрее стандартной работала.
В смысле софтрендер, косящий под опенгл, работал вдвое быстрее штатного софтрендера? Или он работал вдвое быстрее опенгла на компах без видеокарт? И при этом всё равно выглядел как софтрендер, только урезанный (без пересвеченных текстур, например).

Страницы: 112 13 14 15 16 17 Следующая »
ПрограммированиеФорумОбщее