95 lines
2.6 KiB
C++
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);
|
|
}
|
|
|