depth, normals i guess
This commit is contained in:
@@ -16,6 +16,8 @@ class CFunnyGameBridge: public IEngineBridge
|
||||
virtual void Frame( float fDelta ) override;
|
||||
virtual void Shutdown() override;
|
||||
virtual void ConnectInterface( const char *psz, void *pInterface ) override;
|
||||
IMeshInstance *m_pMeshInstance;
|
||||
float m_fTime = 0;
|
||||
};
|
||||
|
||||
IEngineBridge *EngineBridge()
|
||||
@@ -35,26 +37,17 @@ void CFunnyGameBridge::Init()
|
||||
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));
|
||||
IFileHandle *pHandle = filesystem->Open("game/core/meshes/cube.fmesh_c", FILEMODE_READ);
|
||||
float *pData = (float*)V_malloc(filesystem->Size(pHandle));
|
||||
filesystem->Read(pHandle, pData, filesystem->Size(pHandle));
|
||||
pBuffer = g_pRenderContext->CreateVertexBuffer(filesystem->Size(pHandle));
|
||||
pBuffer->Lock();
|
||||
void *pMapped = pBuffer->Map();
|
||||
V_memcpy(pMapped, cubeVertices, sizeof(cubeVertices));
|
||||
V_memcpy(pMapped, pData, filesystem->Size(pHandle));
|
||||
pBuffer->Unmap();
|
||||
pBuffer->Unlock();
|
||||
V_free(pData);
|
||||
filesystem->Close(pHandle);
|
||||
|
||||
|
||||
IMesh *pMesh = g_pWorldRenderer->CreateMesh("Triangle");
|
||||
@@ -67,8 +60,8 @@ void CFunnyGameBridge::Init()
|
||||
|
||||
pMesh->SetVertices(pBuffer);
|
||||
pMesh->SetMaterial(pMaterial);
|
||||
IMeshInstance *pMeshInstance = g_pWorldRenderer->CreateInstance(pMesh);
|
||||
pMeshInstance->SetPosition({1,1,1});
|
||||
m_pMeshInstance = g_pWorldRenderer->CreateInstance(pMesh);
|
||||
m_pMeshInstance->SetScale({5, 5, 5});
|
||||
}
|
||||
|
||||
void CFunnyGameBridge::Tick( float fDelta )
|
||||
@@ -77,6 +70,11 @@ void CFunnyGameBridge::Tick( float fDelta )
|
||||
|
||||
void CFunnyGameBridge::Frame( float fDelta )
|
||||
{
|
||||
versor q;
|
||||
m_fTime += fDelta;
|
||||
glm_euler_zyx_quat((vec3){0,m_fTime, 0}, q);
|
||||
m_pMeshInstance->SetPosition({sin(m_fTime/3)*10,0,0});
|
||||
m_pMeshInstance->SetRotation({q[0], q[1], q[2], q[3]});
|
||||
g_pWorldRenderer->Frame(fDelta);
|
||||
}
|
||||
|
||||
@@ -89,6 +87,7 @@ void CFunnyGameBridge::Shutdown()
|
||||
void CFunnyGameBridge::ConnectInterface( const char *psz, void *pInterface )
|
||||
{
|
||||
CONNECT_INTERFACE(RENDER_CONTEXT_INTERFACE_VERSION, g_pRenderContext);
|
||||
CONNECT_INTERFACE(FILESYSTEM_INTERFACE_VERSION, filesystem);
|
||||
CONNECT_INTERFACE("MainWindow", g_pMainWindow);
|
||||
}
|
||||
|
||||
|
||||
@@ -9,11 +9,13 @@
|
||||
struct ViewBuffer_t
|
||||
{
|
||||
mat4 m_matCameraProjection;
|
||||
vec4 m_vCameraPosition;
|
||||
};
|
||||
|
||||
struct PerMeshData_t
|
||||
{
|
||||
mat4 m_matTranslation;
|
||||
mat4 m_matRotation;
|
||||
};
|
||||
|
||||
class CFunnyMeshInstance;
|
||||
@@ -35,11 +37,15 @@ public:
|
||||
|
||||
void CFunnyMesh::ConfigureShader( IShader *pShader )
|
||||
{
|
||||
pShader->AddLayout(0, 12);
|
||||
pShader->AddLayout(0, 32);
|
||||
pShader->AddAttribute(0, 0, VERTEX_FORMAT_XYZ32_SFLOAT, 0);
|
||||
// color
|
||||
pShader->AddAttribute(0, 1, VERTEX_FORMAT_XY32_SFLOAT, 12);
|
||||
pShader->AddAttribute(0, 2, VERTEX_FORMAT_XYZ32_SFLOAT, 20);
|
||||
// albedo
|
||||
pShader->AddOutputImage(0, IMAGE_FORMAT_RGBA8_UNORM);
|
||||
|
||||
pShader->SetMultisampling(MULTISAMPLE_TYPE_1_SAMPLES);
|
||||
|
||||
pShader->SetDepthImage(IMAGE_FORMAT_D32_SFLOAT);
|
||||
}
|
||||
|
||||
@@ -70,7 +76,7 @@ public:
|
||||
PerMeshData_t m_data = {};
|
||||
Quat m_vRotation = {};
|
||||
Vector m_vPosition = {};
|
||||
Vector m_vScale = {};
|
||||
Vector m_vScale = { 1, 1, 1 };
|
||||
|
||||
};
|
||||
|
||||
@@ -91,7 +97,27 @@ void CFunnyMeshInstance::SetScale( Vector vScale )
|
||||
}
|
||||
void CFunnyMeshInstance::Frame()
|
||||
{
|
||||
vec3 v;
|
||||
versor q;
|
||||
mat4 m;
|
||||
glm_mat4_identity(m_data.m_matTranslation);
|
||||
glm_mat4_identity(m_data.m_matRotation);
|
||||
v[0] = m_vPosition.x;
|
||||
v[1] = m_vPosition.y;
|
||||
v[2] = m_vPosition.z;
|
||||
glm_translate(m_data.m_matTranslation, v);
|
||||
q[0] = m_vRotation.x;
|
||||
q[1] = m_vRotation.y;
|
||||
q[2] = m_vRotation.z;
|
||||
q[3] = m_vRotation.w;
|
||||
glm_quat_mat4(q, m);
|
||||
glm_mat4_mul(m_data.m_matTranslation, m, m_data.m_matTranslation);
|
||||
glm_mat4_mul(m_data.m_matRotation, m, m_data.m_matRotation);
|
||||
v[0] = m_vScale.x;
|
||||
v[1] = m_vScale.y;
|
||||
v[2] = m_vScale.z;
|
||||
glm_scale_make(m, v);
|
||||
glm_mat4_mul(m_data.m_matTranslation, m, m_data.m_matTranslation);
|
||||
}
|
||||
|
||||
|
||||
@@ -164,7 +190,8 @@ void CFunnyWorldRenderer::Frame( float fDelta )
|
||||
*/
|
||||
m_pViewBufferData = (ViewBuffer_t*)m_pViewBuffer->Map();
|
||||
m_pViewBuffer->Lock();
|
||||
V_memcpy(m_pViewBufferData, matCamera, sizeof(matCamera));
|
||||
V_memcpy(&m_pViewBufferData->m_matCameraProjection, matCamera, sizeof(matCamera));
|
||||
V_memcpy(&m_pViewBufferData->m_vCameraPosition, m_vPos, sizeof(vec3));
|
||||
m_pViewBuffer->Unlock();
|
||||
m_pViewBuffer->Unmap();
|
||||
|
||||
@@ -222,7 +249,7 @@ void CFunnyWorldRenderer::Frame( float fDelta )
|
||||
continue;
|
||||
m_pRasterCommandList->SetMaterial(mesh->m_pMaterial);
|
||||
m_pRasterCommandList->SetVertexBuffer(0, mesh->m_pVertexBuffer);
|
||||
m_pRasterCommandList->DrawPrimitives(mesh->m_pVertexBuffer->GetSize()/12, 0, mesh->m_instances.GetSize(), 0);
|
||||
m_pRasterCommandList->DrawPrimitives(mesh->m_pVertexBuffer->GetSize()/32, 0, mesh->m_instances.GetSize(), 0);
|
||||
}
|
||||
m_pRasterCommandList->EndRecording();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user