В общем меня много что достало при разработке движка на C#.
В особенности траблы с врапперами всякой херни.
То в 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, потом остальные допишу (эт типа мультирендер возрождаю на С++)
Ещё написал базовый класс сцены, менеджера сцен, начал работу над логгером.
Маловато за сегодня но я просто ещё не привык к С++ : )
Перешёл на С++… решился таки..