commit x64 compilation from lulu cause the other branch dont seems to compile properly at home
This commit is contained in:
109
include/engine/gpu/gpu_geometry.cpp
Normal file
109
include/engine/gpu/gpu_geometry.cpp
Normal file
@ -0,0 +1,109 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
GSFramework
|
||||
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
||||
----------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#include "gpu/gpu_geometry.h"
|
||||
#include "gpu/gpu_renderer.h"
|
||||
#include "core/geometry.h"
|
||||
#include "core/geometry_to_triangle_list.h"
|
||||
#include "core/triangle_list.h"
|
||||
#include "log/log.h"
|
||||
|
||||
using namespace GS::GPU;
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
bool Geometry::AllocateVBO(uint count)
|
||||
{
|
||||
if (!vbo.Allocate(count))
|
||||
return false;
|
||||
|
||||
for (uint n = 0; n < count; ++n)
|
||||
vbo[n] = renderer.NewVBO();
|
||||
|
||||
return true;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
bool Geometry::SetMaterial(uint index, GS::Render::Material *m)
|
||||
{
|
||||
if (index >= material_table.GetCount())
|
||||
return false;
|
||||
|
||||
// Update all display lists using this material index.
|
||||
for (uint n = 0; n < display_list.GetCount(); ++n)
|
||||
if (DisplayList *dlist = display_list[n])
|
||||
if (dlist->material == material_table[index])
|
||||
dlist->material = (GPU::Material *)m;
|
||||
|
||||
// Update the material table.
|
||||
material_table[index] = m;
|
||||
|
||||
return true;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
bool Geometry::ShouldReloadOnDependencyChange(const char *n) const
|
||||
{
|
||||
for (uint i = 0; i < material_table.GetCount(); ++i)
|
||||
if (material_table[i] && (material_table[i]->name == n))
|
||||
return true;
|
||||
|
||||
return name == n;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
bool Geometry::Create(GS::Render::ResourceFactory &rf, const GS::Core::Geometry &g)
|
||||
{
|
||||
__LOG_H__ << "Setup geometry '" << g.name << "'.\n";
|
||||
name = g.name;
|
||||
|
||||
using namespace Core;
|
||||
|
||||
// Setup materials.
|
||||
if (material_table.Allocate(g.material_table.GetCount()))
|
||||
for (uint n = 0; n < g.material_table.GetCount(); ++n)
|
||||
material_table[n] = rf.LoadMaterial(g.material_table[n].name, !g.material_table[n].use_cache);
|
||||
|
||||
// Build geometry triangle list.
|
||||
AutoList <Trilist *> tlist;
|
||||
if (!GeometryToTriangleList::Convert(g, tlist))
|
||||
return false;
|
||||
|
||||
// Setup geometry display lists.
|
||||
if (display_list.Allocate(tlist.GetCount()))
|
||||
{
|
||||
uint n = 0;
|
||||
ListForeachPtr(Trilist *, t, tlist)
|
||||
{
|
||||
display_list[n] = renderer.NewDisplayList();
|
||||
display_list[n]->Create(t, material_table[t->mat]);
|
||||
++n;
|
||||
}
|
||||
}
|
||||
flag = g.flag;
|
||||
|
||||
// Skinning.
|
||||
bone_bind_matrix.Clone(g.bone_bind_matrix);
|
||||
g.ComputeBoneBoundingVolumes(bone_minmax);
|
||||
|
||||
// Load proxies.
|
||||
if (!g.lod_proxy.IsEmpty())
|
||||
lod_proxy = rf.LoadGeometry(g.lod_proxy);
|
||||
lod_distance = g.lod_distance;
|
||||
|
||||
if (!g.shadow_proxy.IsEmpty())
|
||||
shadow_proxy = rf.LoadGeometry(g.shadow_proxy);
|
||||
|
||||
minmax = g.ComputeMinMax();
|
||||
// hotspot.Set(0, 0, 0);
|
||||
hotspot = (minmax.mn + minmax.mx) * 0.5f;
|
||||
|
||||
return true;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user