|
From: Black A. <ne...@ud...> - 2004-04-01 19:03:04
|
Hello All,
[Jihar]
>Плюс надо что-то решать с кодировкой, потому что она разная у всех, и
>читать архив неудобно.
[/Jihar]
Давайте все установим windows-1251, а то я половину писем прочитать не
могу.
[Jihar]
>Насчет стиля - у меня щас в времени в обрез просто, я даже никак не
>посмотрю OpenML ангела :(. Как маненько освобожусь, предложу свой
>вариант стиля, пока можете предлагать свои.
[/Jihar]
Там в OpenML не мой стиль, т.е. не тот которого я обычно
придерживаюсь.
Надо бы договорится по ключевым вопросам:
1) Сколько неймспейсов будет. Я за один единственный, т.к. плодить их
не вижу смысла. Сразу скажу, что я не в восторге от конструкций вида
rgde::ICore или lpCore->GetLaLaLa(rgdgpu::Lalala), где тут
преимущества пространства имен? Проще уж IRGDCore, IRGDGPUDRIVER.
Поэтому я предлагаю оставить только пространство rgde, дабы избавится
от префикса rgd в названиях интерфейсов и структур, а сам namespace
активировать using namespace rgde;
2) Условимся о количестве файлов. У движка будет SDK и рабочие файлы.
На количество последних в принципе не накладывается никаких
ограничений, конечный пользователь их и не увидет (если внутрь двига
не полезет ессно). А вот с SDK необходим сдравый смысл, не стоит
повторять подвиг DirectX с его 146 заголовочными файлами. У движка
будет несколько модулей core, engine, render, world и драйверы
устройств. Предлагаю на каждый модуль по заголовочному файлу, все
интерфейсы модуля определены в нем, там же описаны и необходимые
структуры. Также необходим один файл с базовыми типами данных.
3) Способ декларирования интерфейсов. Тут либо вариант Jihar'a, либо
мой:
[Jihar]
interface ICore : public IUnknown
{
virtual HRESULT STDCALL QueryInterface(REFIID riid, void** ppvObj) = 0;
virtual ULONG STDCALL AddRef() = 0;
virtual ULONG STDCALL Release() = 0;
virtual HRESULT STDCALL InitCore(LPRGDEINITSTRUCT lpInitStruct) = 0;
virtual HRESULT STDCALL ShutdownCore() = 0;
...
};
[/Jihar]
[Black Angel]
DECLARE_INTERFACE_(ICore, IUnknown)
{
STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
STDMETHOD(InitCore)(THIS_ LPRGDEINITSTRUCT lpInitStruct) PURE;
STDMETHOD(ShutdownCore)(THIS) PURE;
};
[/Black Angel]
Тут необходимо учитывать, что читать заголовочные файлы SDK нет
необходимости, все интерфейсы и структуры будут описаны в
документации. Вообщем тут дело вкуса и привычки.
4) Далее договоримся о константах. Два варианта либо enum, либо
#define.
Пока все, но еще много чего надо бы обсудить. Когда сформируем стиль
кода, я запишу его в RGDEvangelion и позднее серъёздные изменения
вноситься уже не будут.
--
Best regards,
Black Angel mailto:ne...@ud...
|