114 lines
3.2 KiB
C++
114 lines
3.2 KiB
C++
|
|
#include "tier2/ifilesystem.h"
|
|
#include "materialsystem/igamewindow.h"
|
|
#include "materialsystem/imaterialsystem.h"
|
|
#include "tier1/interface.h"
|
|
#include "tier0/commandline.h"
|
|
#include "tier0/mem.h"
|
|
#include "sv_dll.h"
|
|
|
|
IRenderContext *g_pRenderContext;
|
|
IFileSystem *filesystem;
|
|
IGameWindowManager *g_pWindowManager;
|
|
|
|
extern "C" void FunnyMain( int argc, char **argv )
|
|
{
|
|
CommandLine()->CreateCommandLine(argc, argv);
|
|
|
|
CreateInterfaceFn pFilesystemFactory = Sys_GetFactory("filesystem_std");
|
|
CreateInterfaceFn pMaterialSystemFactory = Sys_GetFactory("MaterialSystem");
|
|
CreateInterfaceFn pRenderSystemFactory = Sys_GetFactory("RenderSystemVulkan");
|
|
|
|
filesystem = (IFileSystem*)pFilesystemFactory(FILESYSTEM_INTERFACE_VERSION, NULL);
|
|
filesystem->Init();
|
|
|
|
g_pWindowManager = (IGameWindowManager*)pRenderSystemFactory(GAME_WINDOW_MANAGER_INTERFACE_VERSION, NULL);
|
|
V_printf("%s\n", GAME_WINDOW_MANAGER_INTERFACE_VERSION);
|
|
g_pWindowManager->Init();
|
|
|
|
IGameWindow *pWindow = g_pWindowManager->CreateWindow();
|
|
pWindow->Init();
|
|
|
|
|
|
g_pRenderContext = (IRenderContext*)pRenderSystemFactory(RENDER_CONTEXT_INTERFACE_VERSION, NULL);
|
|
g_pRenderContext->SetMainWindowManager(g_pWindowManager);
|
|
g_pRenderContext->Init();
|
|
|
|
g_pRenderContext->RegisterGameWindow(pWindow);
|
|
|
|
|
|
ServerGameDLL()->Init();
|
|
|
|
IShader *pShader = NULL;
|
|
IBuffer *pCameraInfoBuffer = NULL;
|
|
IMaterial *pMaterial = NULL;
|
|
|
|
IImage *pOutputImage = NULL;
|
|
IVertexBuffer *pVertices = NULL;
|
|
|
|
float vertices[18] = {
|
|
-0.5, -0.5, 0,
|
|
0.5, -0.5, 0,
|
|
-0.5, 0.5, 0,
|
|
-0.5, 0.5, 0,
|
|
0.5, -0.5, 0,
|
|
0.5, 0.5, 0
|
|
|
|
};
|
|
|
|
pVertices = g_pRenderContext->CreateVertexBuffer(72);
|
|
|
|
void *pMapped = pVertices->Map();
|
|
V_memcpy(pMapped, vertices, 72);
|
|
pVertices->Unmap();
|
|
|
|
pCameraInfoBuffer = g_pRenderContext->CreateConstantBuffer(64);
|
|
|
|
pShader = g_pRenderContext->CreateShader("game/core/shaders/flat.shader_c");
|
|
pShader->AddLayout(0, 12);
|
|
pShader->AddAttribute(0, 0, VERTEX_FORMAT_XYZ32_SFLOAT, 0);
|
|
pShader->AddOutputImage(0, IMAGE_FORMAT_RGBA8_UNORM);
|
|
pShader->Build();
|
|
pMaterial = g_pRenderContext->CreateMaterial(pShader);
|
|
pMaterial->PSSetConstantsBuffer(0, pCameraInfoBuffer);
|
|
|
|
pOutputImage = g_pRenderContext->CreateRenderTarget(
|
|
100,
|
|
100,
|
|
IMAGE_FORMAT_RGBA8_UNORM,
|
|
MULTISAMPLE_TYPE_NONE);
|
|
|
|
|
|
for (;;) {
|
|
g_pWindowManager->Frame(0);
|
|
if (pWindow->BRenderSizeUpdated())
|
|
{
|
|
g_pRenderContext->DestroyImage(pOutputImage);
|
|
pOutputImage = g_pRenderContext->CreateRenderTarget(
|
|
pWindow->GetRenderWidth(),
|
|
pWindow->GetRenderHeight(),
|
|
IMAGE_FORMAT_RGBA8_UNORM,
|
|
MULTISAMPLE_TYPE_NONE);
|
|
}
|
|
|
|
IRenderCommandList *pCommandList = g_pRenderContext->CreateCommandList();
|
|
pCommandList->StartRecording();
|
|
|
|
pCommandList->SetRenderResolution(pWindow->GetRenderWidth(), pWindow->GetRenderHeight());
|
|
pCommandList->SetRenderTarget(0, pOutputImage);
|
|
pCommandList->SetClearColor(0, 0, 0, 0, 0);
|
|
|
|
pCommandList->SetMaterial(pMaterial);
|
|
pCommandList->SetVertexBuffer(0, pVertices);
|
|
pCommandList->DrawPrimitives(6, 0, 1, 0);
|
|
|
|
pCommandList->EndRecording();
|
|
pWindow->SetOutputImage(pOutputImage);
|
|
|
|
g_pRenderContext->SubmitCommandList(pCommandList);
|
|
g_pRenderContext->Frame(0);
|
|
g_pRenderContext->DestroyCommandList(pCommandList);
|
|
};
|
|
|
|
};
|