Files
funnygame/game/client/game.cpp
2026-02-19 00:39:20 +02:00

95 lines
2.6 KiB
C++

#include "tier2/ifilesystem.h"
#include "materialsystem/imaterialsystem.h"
#include "enginebridge.h"
#include "worldrender.h"
#include "cglm/mat4.h"
#include "cglm/cglm.h"
IFileSystem *filesystem;
IRenderContext *g_pRenderContext;
IGameWindow *g_pMainWindow;
class CFunnyGameBridge: public IEngineBridge
{
virtual void Init() override;
virtual void Tick( float fDelta ) override;
virtual void Frame( float fDelta ) override;
virtual void Shutdown() override;
virtual void ConnectInterface( const char *psz, void *pInterface ) override;
};
IEngineBridge *EngineBridge()
{
static CFunnyGameBridge s_bridge;
return &s_bridge;
}
EXPOSE_INTERFACE_FN(EngineBridge, IEngineBridge, ENGINE_BRIDGE_INTERFACE_VERSION)
void CFunnyGameBridge::Init()
{
IVertexBuffer *pBuffer;
IBuffer *pDataBuffer;
IShader *pShader;
IMaterial *pMaterial;
g_pWorldRenderer->Init();
pShader = g_pRenderContext->CreateShader("game/core/shaders/mesh_raster.shader_c");
float cubeVertices[][3] = {
{-1, -1, 1}, { 1, -1, 1}, { 1, 1, 1},
{-1, -1, 1}, { 1, 1, 1}, {-1, 1, 1},
{-1, -1, -1}, {-1, 1, -1}, { 1, 1, -1},
{-1, -1, -1}, { 1, 1, -1}, { 1, -1, -1},
{-1, -1, -1}, {-1, -1, 1}, {-1, 1, 1},
{-1, -1, -1}, {-1, 1, 1}, {-1, 1, -1},
{ 1, -1, -1}, { 1, 1, -1}, { 1, 1, 1},
{ 1, -1, -1}, { 1, 1, 1}, { 1, -1, 1},
{-1, 1, -1}, {-1, 1, 1}, { 1, 1, 1},
{-1, 1, -1}, { 1, 1, 1}, { 1, 1, -1},
{-1, -1, -1}, { 1, -1, -1}, { 1, -1, 1},
{-1, -1, -1}, { 1, -1, 1}, {-1, -1, 1}
};
pBuffer = g_pRenderContext->CreateVertexBuffer(sizeof(cubeVertices));
pBuffer->Lock();
void *pMapped = pBuffer->Map();
V_memcpy(pMapped, cubeVertices, sizeof(cubeVertices));
pBuffer->Unmap();
pBuffer->Unlock();
IMesh *pMesh = g_pWorldRenderer->CreateMesh("Triangle");
g_pWorldRenderer->SetCameraPosition((Vector){0,0,-20});
g_pWorldRenderer->SetCameraRotation((Quat){1,0,0,0});
pMesh->ConfigureShader(pShader);
pShader->Build();
pMaterial = g_pRenderContext->CreateMaterial(pShader);
pMesh->SetVertices(pBuffer);
pMesh->SetMaterial(pMaterial);
IMeshInstance *pMeshInstance = g_pWorldRenderer->CreateInstance(pMesh);
pMeshInstance->SetPosition({1,1,1});
}
void CFunnyGameBridge::Tick( float fDelta )
{
}
void CFunnyGameBridge::Frame( float fDelta )
{
g_pWorldRenderer->Frame(fDelta);
}
void CFunnyGameBridge::Shutdown()
{
}
#define CONNECT_INTERFACE(szName, pGlobal) if (!V_strcmp(psz, szName)) { pGlobal = (typeof(pGlobal))pInterface; return; }
void CFunnyGameBridge::ConnectInterface( const char *psz, void *pInterface )
{
CONNECT_INTERFACE(RENDER_CONTEXT_INTERFACE_VERSION, g_pRenderContext);
CONNECT_INTERFACE("MainWindow", g_pMainWindow);
}