C++ движок
[+] Добавлена система плагинов
[*] Дополнен рендерер DirectX10
[+] Обёрнуты несколько типов графических ресурсов для мультирендера
[*] Начал портировать свою математическую библиотеку с C# на С++
С плагинами долго провозился : ( Зато теперь удобно, можно с лёгкостью загрузить любой, поддерживаемый движком примерно так:
g_pEngine.GetPluginServer()->LoadPlugin("RendererDX10.dll");
понедельник, 18 октября 2010 г.
пятница, 15 октября 2010 г.
WIP News
Работа над С++ проектом сегодня ВРЕМЕННО ПРИостановилась. Всё дело в том, что мне необходимо (причины не важны) чтобы я мог скомпилировать движок как динамическую так и статическую библиотеку!
Изначально у меня проект динамической библиотеки. Аттачится к юзающему её проекту чётко, всё работает.
Решил скомпилить как статическую либу. Ну чтож.. как это сделать - х.з. аще : )) Полез в настройки проекта, поменял типа проекта с Dynamic Library (.dll) на Static Library (.lib). И реально! Проект скомпилился в .lib, вроде всё путём. Ан нет. Если я компилю с ней проект, юзающий движок, то компилляция прохоодит успешно! Но при запуске "игры" она всёравно требует .DLL движка. Как настроить - не ясно. Просмотрел 100500 раз настройки проекта.
slava_mib подсказал создать второй проект как статичную библиотеку, добавить в него существующие файлы и компилить LIB-ы спокойно. И это реально выход! Но хотелось бы конечно просто выбрать нужную конфигурацию солюшну и компилить без геморроя, только как это сделать и возможно ли - я не знаю.
Пока простаивает С++ движок, пишу C#.
Ну что.
-- Первым делом вычистил из движка последние остатки DirectX. Теперь gAPI можно встретить только внутри класса рендерера.
-- Пока подчищал - нашёл старый костыль, который подставил в место после отрисовки шадоумапы т.к. не знал природу бага, который возникал если не поставить этот костыль. Оказалось всё прозаично - вначале кадра я очищал Z-Bufer не 1 а 0 >_<
-- Оптимизтировал рендер в текстуру.
-- Сделал менеджер пост-эффектов.
Ну скажем вот так я добавил HDR сцену:
PostHDR HDR = new PostHDR();
scene.Graphics.PostEffectManager.Add(HDR);
Всё достаточно просто, однако менеджер ещё не завершён. Есть нерешённые проблемы.
[+] Добавил DirectX10 рендерер. Он ещё пустой.
Начал оборачивать ресурсы в DirectX10 рендерере.
Полностью обёрнуты:
InputLayout, VertexBuffer, IndexBuffer, VertexShader, PixelShader + Include(интерфейс), можно мои убер-шейдеры теперь компилить и в DX10 ^____^
также реализовал базовые функции рендерера - наблюдаю при запуске игры очищенное окно и GUI поверх него. Сцена ещё не рисуется в DX10.
Кстати. Отныне движок за кадр полноценно может рисовать сразу несколько сцен. Не просто одну сцену с разных камер а реально разные сцены. При создании сцены теперь необходимо указывать размер выходного изображения - текстуры, в которую отрендерилась сцена.
Собсно всё крайне просто - каждая сцена рисуется в текстуру, потом все ти текстуры передаются в OutputMerger который согласно указанным параметрам смешивает сцены. Блендит их или делает "картинку в картинке". Поверх результата накладывается GUI и всё это выводится на экран.
Как-то вот так...
Изначально у меня проект динамической библиотеки. Аттачится к юзающему её проекту чётко, всё работает.
Решил скомпилить как статическую либу. Ну чтож.. как это сделать - х.з. аще : )) Полез в настройки проекта, поменял типа проекта с Dynamic Library (.dll) на Static Library (.lib). И реально! Проект скомпилился в .lib, вроде всё путём. Ан нет. Если я компилю с ней проект, юзающий движок, то компилляция прохоодит успешно! Но при запуске "игры" она всёравно требует .DLL движка. Как настроить - не ясно. Просмотрел 100500 раз настройки проекта.
slava_mib подсказал создать второй проект как статичную библиотеку, добавить в него существующие файлы и компилить LIB-ы спокойно. И это реально выход! Но хотелось бы конечно просто выбрать нужную конфигурацию солюшну и компилить без геморроя, только как это сделать и возможно ли - я не знаю.
Пока простаивает С++ движок, пишу C#.
Ну что.
-- Первым делом вычистил из движка последние остатки DirectX. Теперь gAPI можно встретить только внутри класса рендерера.
-- Пока подчищал - нашёл старый костыль, который подставил в место после отрисовки шадоумапы т.к. не знал природу бага, который возникал если не поставить этот костыль. Оказалось всё прозаично - вначале кадра я очищал Z-Bufer не 1 а 0 >_<
-- Оптимизтировал рендер в текстуру.
-- Сделал менеджер пост-эффектов.
Ну скажем вот так я добавил HDR сцену:
PostHDR HDR = new PostHDR();
scene.Graphics.PostEffectManager.Add(HDR);
Всё достаточно просто, однако менеджер ещё не завершён. Есть нерешённые проблемы.
[+] Добавил DirectX10 рендерер. Он ещё пустой.
Начал оборачивать ресурсы в DirectX10 рендерере.
Полностью обёрнуты:
InputLayout, VertexBuffer, IndexBuffer, VertexShader, PixelShader + Include(интерфейс), можно мои убер-шейдеры теперь компилить и в DX10 ^____^
также реализовал базовые функции рендерера - наблюдаю при запуске игры очищенное окно и GUI поверх него. Сцена ещё не рисуется в DX10.
Кстати. Отныне движок за кадр полноценно может рисовать сразу несколько сцен. Не просто одну сцену с разных камер а реально разные сцены. При создании сцены теперь необходимо указывать размер выходного изображения - текстуры, в которую отрендерилась сцена.
Собсно всё крайне просто - каждая сцена рисуется в текстуру, потом все ти текстуры передаются в OutputMerger который согласно указанным параметрам смешивает сцены. Блендит их или делает "картинку в картинке". Поверх результата накладывается GUI и всё это выводится на экран.
Как-то вот так...
среда, 13 октября 2010 г.
Свершилось...
В общем меня много что достало при разработке движка на C#.
В особенности траблы с врапперами всякой херни.
То в SLIMDX какой-то баг, то во враппере OGG хрень, которую приходится вручную править и вместо одного часа ебстись со звуком недели две и т.п.
Для C# не вижу я годных готовых мощных решений в плане звука, физики и графики и т.п.
Я ненавижу XNA и за бесплатно юзать ни за что не буду : ) Собсно других альтернатив, кроме SlimDX я не вижу.
Да ну.. к чёрту всё! Решил переписать движок на С++.
Вот, пол дня уже как сижу и пытаюсь его переписывать и с каждой минутой всё плотнее и плотнее приходит осознание того, как я херово знаю C++ : D
А ещё назло инет АЦЦКИ лагает - погуглить траблы аще нереально!!!!! >_< жопа какаято. После C# - С++ напрягает.
Но "врагу не сдаётся наш гордый варяг" же : \ Без гугла так моим любимым методом тыка напишу всёравно.
Долго и упорно вспоминал WINAPI : D
В итоге таки сделал окошко : ))
Эт конечно только базовый вариант но уже оно есть, оно работает и это радует меня - нуба в С++ : )))
Также намутил главный класс движка, всякие енумы и т.п. Он может создовать рендерер:
g_pEngine.CreateRenderer(RT_DIRECTX10, RenderParams(320,240,0,false,false));
Пока что мегократко описал 4 рендерера - DX9,10, OGL, software. Буду вплотную заниматься DX10, потом остальные допишу (эт типа мультирендер возрождаю на С++)
Ещё написал базовый класс сцены, менеджера сцен, начал работу над логгером.
Маловато за сегодня но я просто ещё не привык к С++ : )
Перешёл на С++... решился таки..
В особенности траблы с врапперами всякой херни.
То в SLIMDX какой-то баг, то во враппере OGG хрень, которую приходится вручную править и вместо одного часа ебстись со звуком недели две и т.п.
Для C# не вижу я годных готовых мощных решений в плане звука, физики и графики и т.п.
Я ненавижу XNA и за бесплатно юзать ни за что не буду : ) Собсно других альтернатив, кроме SlimDX я не вижу.
Да ну.. к чёрту всё! Решил переписать движок на С++.
Вот, пол дня уже как сижу и пытаюсь его переписывать и с каждой минутой всё плотнее и плотнее приходит осознание того, как я херово знаю C++ : D
А ещё назло инет АЦЦКИ лагает - погуглить траблы аще нереально!!!!! >_< жопа какаято. После C# - С++ напрягает.
Но "врагу не сдаётся наш гордый варяг" же : \ Без гугла так моим любимым методом тыка напишу всёравно.
Долго и упорно вспоминал WINAPI : D
В итоге таки сделал окошко : ))
#include "RenderWindow.h"
#define L_WIN32
LRESULT __stdcall WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
DestroyWindow(hwnd);
break;
case WM_KEYDOWN:
switch(wparam)
{
case VK_ESCAPE:
PostQuitMessage(0);
break;
}
break;
}
return DefWindowProc(hwnd, message, wparam, lparam);
}
RenderWindow::RenderWindow(int width, int height)
{
g_hInst = GetModuleHandle(NULL);
g_hwnd = NULL;
//memset(&g_wndClass,0,sizeof(WNDCLASSEX));
g_wndClass.cbSize = sizeof(WNDCLASSEX);
g_wndClass.cbClsExtra = NULL;
g_wndClass.cbWndExtra = NULL;
g_wndClass.hbrBackground = (HBRUSH)GetStockObject(1);
g_wndClass.hCursor = (HCURSOR)LoadCursor(g_hInst, IDI_APPLICATION);
g_wndClass.hIcon = LoadIcon(g_hInst, IDI_APPLICATION);
g_wndClass.hIconSm = LoadIcon(g_hInst, IDI_APPLICATION);
g_wndClass.hInstance = g_hInst;
g_wndClass.lpfnWndProc = WndProc;
g_wndClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
g_wndClass.lpszMenuName = NULL;
g_wndClass.lpszClassName = L"Onotole";
if(!RegisterClassEx(&g_wndClass))
{
MessageBox(g_hwnd, L"Can not create window class! We all gonna die!!", L"OH SHIT!", MB_OK);
}
if(!(g_hwnd = CreateWindowEx(NULL, L"Onotole", L"Onotole window", WS_OVERLAPPEDWINDOW, 10,10,width,height,NULL,NULL, g_hInst, NULL)))
{
MessageBox(g_hwnd, L"Can not create window! We all gonna die!!", L"HOLY SHIT!", MB_OK);
}
ShowWindow(g_hwnd, SW_SHOWNORMAL);
UpdateWindow(g_hwnd);
SetForegroundWindow(g_hwnd);
SetFocus(g_hwnd);
}
void RenderWindow::Update()
{
#ifdef L_WIN32
MSG msg;
while(PeekMessage(&msg,0,0,0,PM_NOREMOVE)) {
if(!GetMessage(&msg,0,0,0)) break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
#endif
}
void RenderWindow::SetCaption(wchar_t* text)
{
SetWindowText(g_hwnd,text);
}
RenderWindow::~RenderWindow(void)
{
}
Эт конечно только базовый вариант но уже оно есть, оно работает и это радует меня - нуба в С++ : )))
Также намутил главный класс движка, всякие енумы и т.п. Он может создовать рендерер:
g_pEngine.CreateRenderer(RT_DIRECTX10, RenderParams(320,240,0,false,false));
Пока что мегократко описал 4 рендерера - DX9,10, OGL, software. Буду вплотную заниматься DX10, потом остальные допишу (эт типа мультирендер возрождаю на С++)
Ещё написал базовый класс сцены, менеджера сцен, начал работу над логгером.
Маловато за сегодня но я просто ещё не привык к С++ : )
Перешёл на С++... решился таки..
вторник, 28 сентября 2010 г.
Апдейт скринов.
суббота, 25 сентября 2010 г.
WIP News
С прошлого поста как то было очень мало времени на двиг : ( Почти нихрена не сделал, фак.
Вот, взялся за него опять. Поднимаю системы частиц, делаю их более гибкими, так как они резко понадобились.
Собсно пока прицепил квады, сделал разные типы ориентации(гусары - молчать) квадов, сделал базовую физику для них. Сейчас пишу аффекторы столкновений, т.к. физдвиг юзать в планах нет в самое ближайшее время.

Вот, взялся за него опять. Поднимаю системы частиц, делаю их более гибкими, так как они резко понадобились.
Собсно пока прицепил квады, сделал разные типы ориентации(гусары - молчать) квадов, сделал базовую физику для них. Сейчас пишу аффекторы столкновений, т.к. физдвиг юзать в планах нет в самое ближайшее время.

пятница, 23 июля 2010 г.
Анимация и события.
Сегодня,правда в сыром пока ещё виде, сделал привязку скриптов/собьтий к любому времени трека анимации (не только к ключевым кадрам но и ммежду ними ессно). Теперь с помощью этой фишки я озвучил шаги игрвого персонажа в точное время анимации а не тупо "проигрывание зацикленного трека ходьбы" что ИМХО УГ ещё то. Класс. Можно привязать к событиям что угодно, хоть скрипт порабощения мира и на каждом шагу own it : D
четверг, 22 июля 2010 г.
Багфиксы.
пятница, 9 июля 2010 г.
GUI. Продолжение.
Вот наконецто защитил диплом и имею больше свободного времени на движок.
Пофиксил несколько оставшихся мемориликов, пофиксил подчистку всего мусора после выгрузки движка (в видеопамяти некоторые объекты оставались : \ ) И решил пройтись сначала по движку и привести всё в подобающий вид. Начал с GUI. Множества контролов пока ещё не хватает но больше всего не радовало отсутствие нормальной поддержки скинов для GUI. Вот, посидело немножко, переписал дофига в GUI (по красивше) и сделал поддержку скинов. Правда нужен ещё редактор скинов так как вручную я риальне запарился считать пиксели : D
Вот тут окошко, чекбокс и кнопка. Всё отскинено. Окно под Win7 сделал xDD Только нету кнопок закрытия, сворачивания и т.п. Осталось допилить RadioButton и написать всяческие списки. А так всё шоколадно.
Пофиксил несколько оставшихся мемориликов, пофиксил подчистку всего мусора после выгрузки движка (в видеопамяти некоторые объекты оставались : \ ) И решил пройтись сначала по движку и привести всё в подобающий вид. Начал с GUI. Множества контролов пока ещё не хватает но больше всего не радовало отсутствие нормальной поддержки скинов для GUI. Вот, посидело немножко, переписал дофига в GUI (по красивше) и сделал поддержку скинов. Правда нужен ещё редактор скинов так как вручную я риальне запарился считать пиксели : D
Вот тут окошко, чекбокс и кнопка. Всё отскинено. Окно под Win7 сделал xDD Только нету кнопок закрытия, сворачивания и т.п. Осталось допилить RadioButton и написать всяческие списки. А так всё шоколадно.
Подписаться на:
Сообщения (Atom)



