Я вернулся:)
Буду опять пилить движок. И чтобы не писать движки десятилетиями - ставлю таймер - 365 дней начиная с сегодня.
Репозиторий: https://github.com/warzes/BerylEngine
Платформа: пока Windows (в планах Linux, Android, браузеры)
GAPI: OpenGL на текущий момент требует 4.3 (или около того)
Цели: низкоуровневый минималистический движок под себя, не более.
Что уже имеется на момент создания темы: обертка на OpenGL, окно, инпут.
На самом деле пробные версии начал делать с января. Тему также хотел создать раньше, но все откладывал.
Ответы на вопросы:
что сейчас готово в обертке:
- создание окна через GLFW. обработка клавы/мыши.
- вершинный, константый, индексный буферы. (можно ставить один или сразу несколько вершинных буферов)
- вершинный и фрагментый шейдеры (скоро будет геометрический, и когда-нибудь тесселяция)
- стейты (бленд, глубина, растеризация, семплер)
- 2D текстуры.
- RT в текстуру.
Но это все конечно замечательно, но пилить движок сам по себе скучно. Поэтому к движку будет пилится и проект. о нем будет написано в следующем посте чуть позже:)
резерв
резерв
резерв
резерв
резерв
резерв
всяко ссылки
Пример вывода квада с текстурой (и шейдером)
//----------------------------------------------------------------------------- bool Sample::Init() { // Создание вершинного и фрагментного шейдеров std::vector<std::shared_ptr<Shader>> v = { std::make_shared<Shader>( ShaderType::Vertex, vShader, ShaderSourceType::String), std::make_shared<Shader>( ShaderType::Fragment, fShader, ShaderSourceType::String) }; // создание шейдерной программы m_data->shaders = RenderDevice::CreateShaderProgram( v); // семплер и текстура m_data->sampler = RenderDevice::CreateSamplerState( SamplerDescription::CreateLinearWrap( )); m_data->tex = RenderDevice::CreateTexture2D( "data/49.png"); // буфер для позиции вершин float vertices[] = { -0.8f, -0.8f, +0.8f, -0.8f, -0.8f, +0.8f, +0.8f, +0.8f,}; m_data->vb = RenderDevice::CreateVertexBuffer( vertices, sizeof( vertices)); // буфер для текстурных координат float texCoords[] = { 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, }; m_data->tb = RenderDevice::CreateVertexBuffer( texCoords, sizeof( texCoords)); // индексный буфер uint8_t indices[] = { 0, 1, 2, 1, 3, 2 }; m_data->ib = RenderDevice::CreateIndexBuffer( indices, 6, IndexElementSize::Bit8); // формат вершин m_data->format = RenderDevice::CreateVertexFormat( ); m_data->format->PushAttribute( "a_vertex", VectorType::Float2); m_data->format->NextBuffer( ); // сообщение что дальше описываются атрибуты следующего вершинного буфера m_data->format->PushAttribute( "a_texCoord", VectorType::Float2); m_data->format->Build( { m_data->vb,m_data->tb } , m_data->shaders); return true; } //----------------------------------------------------------------------------- void Sample::Render( ) { auto context = GetRenderContext( ); context->SetRenderTarget2D( ); context->Clear( 0.5f, 0.5f, 1.0f); m_data->shaders->Bind( ); m_data->format->Bind( ); m_data->sampler->Bind( 0); m_data->tex->Bind( 0); context->DrawElements( m_data->ib); } //-----------------------------------------------------------------------------
Прочитал как BeruLave

WhiteWolf
> Прочитал как BeruLave
ну так тоже можно:)
Aroch
yes
Просто сейчас я занимаюсь движком по 6-10 часов в день. С таким-то графиком что-то должно получится. Тем более что великих целей нет
....
Чтобы было повеселее, опишу проект, который планирую первым делать на этом движке
это стратегия с развитием поселения.
Защищаем реликвию в центре. Чем дольше выживаем - тем больше разрастается поселение вокруг нее (начинается с лагеря в две палатки, а потом и до замков дойдет)
Каждую игровую зиму на поселение непрерывно нападают монстры, с приходом весны атаки заканчиваются.
war_zes
> Я вернулся:)
Откуда?
war_zes
> анимаюсь движком по 6-10 часов в день
а как же работа?
war_zes
> BerylEngine
Это как ArcticEngine?