Completely overhauled resource loading in preparation for projects

This commit is contained in:
parax0
2016-06-29 17:18:31 -06:00
parent e53a895b29
commit 2d6dfad2d3
102 changed files with 1334 additions and 835 deletions

View File

@@ -2,8 +2,8 @@
#include <iostream>
#include <list>
CBasicModel::CBasicModel()
: CResource()
CBasicModel::CBasicModel(CResourceEntry *pEntry /*= 0*/)
: CResource(pEntry)
, mVertexCount(0)
, mTriangleCount(0)
, mBuffered(false)

View File

@@ -21,7 +21,7 @@ protected:
std::vector<SSurface*> mSurfaces;
public:
CBasicModel();
CBasicModel(CResourceEntry *pEntry = 0);
~CBasicModel();
u32 GetVertexCount();

View File

@@ -1,11 +1,12 @@
#include "CModel.h"
#include "Core/Render/CDrawUtil.h"
#include "Core/Render/CRenderer.h"
#include "Core/Resource/Area/CGameArea.h"
#include "Core/OpenGL/GLCommon.h"
#include <Common/AssertMacro.h>
CModel::CModel()
: CBasicModel()
CModel::CModel(CResourceEntry *pEntry /*= 0*/)
: CBasicModel(pEntry)
{
mHasOwnMaterials = true;
mHasOwnSurfaces = true;

View File

@@ -21,7 +21,7 @@ class CModel : public CBasicModel
bool mHasOwnMaterials;
public:
CModel();
CModel(CResourceEntry *pEntry = 0);
CModel(CMaterialSet *pSet, bool OwnsMatSet);
~CModel();

View File

@@ -4,7 +4,7 @@
#include "Core/OpenGL/GLCommon.h"
CStaticModel::CStaticModel()
: CBasicModel()
: CBasicModel(nullptr)
, mpMaterial(nullptr)
, mTransparent(false)
{
@@ -75,11 +75,11 @@ void CStaticModel::BufferGL()
}
// Make sure the number of submesh offset vectors matches the number of IBOs, then add the offsets
while (mIBOs.size() > mSubmeshEndOffsets.size())
mSubmeshEndOffsets.emplace_back(std::vector<u32>(mSurfaces.size()));
while (mIBOs.size() > mSurfaceEndOffsets.size())
mSurfaceEndOffsets.emplace_back(std::vector<u32>(mSurfaces.size()));
for (u32 iIBO = 0; iIBO < mIBOs.size(); iIBO++)
mSubmeshEndOffsets[iIBO][iSurf] = mIBOs[iIBO].GetSize();
mSurfaceEndOffsets[iIBO][iSurf] = mIBOs[iIBO].GetSize();
}
mVBO.Buffer();
@@ -101,7 +101,7 @@ void CStaticModel::ClearGLBuffer()
{
mVBO.Clear();
mIBOs.clear();
mSubmeshEndOffsets.clear();
mSurfaceEndOffsets.clear();
mBuffered = false;
}
@@ -139,8 +139,8 @@ void CStaticModel::DrawSurface(FRenderOptions Options, u32 Surface)
{
// Since there is a shared IBO for every mesh, we need two things to draw a single one: an offset and a size
u32 Offset = 0;
if (Surface > 0) Offset = mSubmeshEndOffsets[iIBO][Surface - 1];
u32 Size = mSubmeshEndOffsets[iIBO][Surface] - Offset;
if (Surface > 0) Offset = mSurfaceEndOffsets[iIBO][Surface - 1];
u32 Size = mSurfaceEndOffsets[iIBO][Surface] - Offset;
if (!Size) continue; // The chosen submesh doesn't use this IBO
@@ -179,7 +179,7 @@ CMaterial* CStaticModel::GetMaterial()
void CStaticModel::SetMaterial(CMaterial *pMat)
{
mpMaterial = pMat;
mTransparent = ((pMat->Options() & CMaterial::eTransparent) != 0);
mTransparent = pMat->Options().HasFlag(CMaterial::eTransparent);
}
bool CStaticModel::IsTransparent()
@@ -189,7 +189,7 @@ bool CStaticModel::IsTransparent()
bool CStaticModel::IsOccluder()
{
return ((mpMaterial->Options() & CMaterial::eOccluder) != 0);
return mpMaterial->Options().HasFlag(CMaterial::eOccluder);
}
CIndexBuffer* CStaticModel::InternalGetIBO(EGXPrimitiveType Primitive)

View File

@@ -5,14 +5,14 @@
#include "Core/Render/FRenderOptions.h"
#include "Core/OpenGL/CIndexBuffer.h"
/* A CStaticModel is meant for meshes that don't move. It's built specifically with terrain in mind.
* It only links to one material, and what it does best is combining submeshes from different models
* into shared VBOs and IBOs. This allows for a significantly reduced number of draw calls. */
/* A CStaticModel is meant for meshes that don't move. It only links to one material,
* and is used to combine surfaces from different world models into shared VBOs and
* IBOs. This allows for a significantly reduced number of draw calls. */
class CStaticModel : public CBasicModel
{
CMaterial *mpMaterial;
std::vector<CIndexBuffer> mIBOs;
std::vector<std::vector<u32>> mSubmeshEndOffsets;
std::vector<std::vector<u32>> mSurfaceEndOffsets;
bool mTransparent;
public: