pass Engine ref to Engine::Object for accessing program data
This commit is contained in:
parent
be307c2c32
commit
9fc482dbcc
@ -356,7 +356,7 @@ int Engine::addObject(WFObj * obj, bool is_static, bool is_reference,
|
|||||||
bool enable_blending, float scale)
|
bool enable_blending, float scale)
|
||||||
{
|
{
|
||||||
Object * o = new Object(is_static, is_reference, enable_blending,
|
Object * o = new Object(is_static, is_reference, enable_blending,
|
||||||
m_world, obj, scale);
|
m_world, *this, obj, scale);
|
||||||
int id = m_objects.add(o);
|
int id = m_objects.add(o);
|
||||||
o->setID(id);
|
o->setID(id);
|
||||||
return id;
|
return id;
|
||||||
@ -366,7 +366,7 @@ int Engine::addObject(bool is_static, bool is_reference, bool enable_blending,
|
|||||||
OdeWorld::GeomType geom_type, refptr< vector<float> > args)
|
OdeWorld::GeomType geom_type, refptr< vector<float> > args)
|
||||||
{
|
{
|
||||||
Object * o = new Object(is_static, is_reference, enable_blending,
|
Object * o = new Object(is_static, is_reference, enable_blending,
|
||||||
m_world, geom_type, args);
|
m_world, *this, geom_type, args);
|
||||||
int id = m_objects.add(o);
|
int id = m_objects.add(o);
|
||||||
o->setID(id);
|
o->setID(id);
|
||||||
return id;
|
return id;
|
||||||
|
@ -23,10 +23,11 @@ class Engine
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Object(bool is_static, bool is_reference, bool enable_blending,
|
Object(bool is_static, bool is_reference, bool enable_blending,
|
||||||
OdeWorld & world, WFObj * wfobj,
|
OdeWorld & world, Engine & e, WFObj * wfobj,
|
||||||
float scale = 1.0f);
|
float scale = 1.0f);
|
||||||
Object(bool is_static, bool is_reference, bool enable_blending,
|
Object(bool is_static, bool is_reference, bool enable_blending,
|
||||||
OdeWorld & world, OdeWorld::GeomType geom_type,
|
OdeWorld & world, Engine & e,
|
||||||
|
OdeWorld::GeomType geom_type,
|
||||||
refptr< std::vector<float> > args);
|
refptr< std::vector<float> > args);
|
||||||
Object(const Object & orig);
|
Object(const Object & orig);
|
||||||
~Object();
|
~Object();
|
||||||
@ -102,6 +103,7 @@ class Engine
|
|||||||
void createManagedObject();
|
void createManagedObject();
|
||||||
void render();
|
void render();
|
||||||
|
|
||||||
|
Engine & m_engine;
|
||||||
OdeWorld::Object * m_ode_object;
|
OdeWorld::Object * m_ode_object;
|
||||||
GLuint m_display_list;
|
GLuint m_display_list;
|
||||||
bool m_is_visible;
|
bool m_is_visible;
|
||||||
|
@ -27,8 +27,8 @@ static void checkGLErrorLine(const char * function, int line)
|
|||||||
|
|
||||||
/* used for objects loaded directly from model files */
|
/* used for objects loaded directly from model files */
|
||||||
Engine::Object::Object(bool is_static, bool is_reference, bool enable_blending,
|
Engine::Object::Object(bool is_static, bool is_reference, bool enable_blending,
|
||||||
OdeWorld & world, WFObj * obj, float scale)
|
OdeWorld & world, Engine & e, WFObj * obj, float scale)
|
||||||
: m_world(world)
|
: m_engine(e), m_world(world)
|
||||||
{
|
{
|
||||||
m_is_reference = is_reference;
|
m_is_reference = is_reference;
|
||||||
if (m_is_reference)
|
if (m_is_reference)
|
||||||
@ -60,9 +60,10 @@ Engine::Object::Object(bool is_static, bool is_reference, bool enable_blending,
|
|||||||
|
|
||||||
/* used for "managed" objects with one geom */
|
/* used for "managed" objects with one geom */
|
||||||
Engine::Object::Object(bool is_static, bool is_reference, bool enable_blending,
|
Engine::Object::Object(bool is_static, bool is_reference, bool enable_blending,
|
||||||
OdeWorld & world, OdeWorld::GeomType geom_type,
|
OdeWorld & world, Engine & e,
|
||||||
|
OdeWorld::GeomType geom_type,
|
||||||
refptr< std::vector<float> > args)
|
refptr< std::vector<float> > args)
|
||||||
: m_world(world)
|
: m_engine(e), m_world(world)
|
||||||
{
|
{
|
||||||
m_is_reference = is_reference;
|
m_is_reference = is_reference;
|
||||||
m_enable_blending = enable_blending;
|
m_enable_blending = enable_blending;
|
||||||
@ -98,7 +99,7 @@ Engine::Object::Object(bool is_static, bool is_reference, bool enable_blending,
|
|||||||
|
|
||||||
/* used to clone objects */
|
/* used to clone objects */
|
||||||
Engine::Object::Object(const Engine::Object & orig)
|
Engine::Object::Object(const Engine::Object & orig)
|
||||||
: m_world(orig.m_world)
|
: m_engine(orig.m_engine), m_world(orig.m_world)
|
||||||
{
|
{
|
||||||
m_is_reference = false;
|
m_is_reference = false;
|
||||||
m_is_visible = orig.m_is_visible;
|
m_is_visible = orig.m_is_visible;
|
||||||
@ -525,7 +526,7 @@ void Engine::Object::draw()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GLuint program = m_programs[PROG_OBJ];
|
GLuint program = m_engine.m_programs[PROG_OBJ];
|
||||||
glUseProgram(program);
|
glUseProgram(program);
|
||||||
glEnableVertexAttribArray(ATTRIBUTE_OBJ_POS);
|
glEnableVertexAttribArray(ATTRIBUTE_OBJ_POS);
|
||||||
glEnableVertexAttribArray(ATTRIBUTE_OBJ_NORMAL);
|
glEnableVertexAttribArray(ATTRIBUTE_OBJ_NORMAL);
|
||||||
@ -548,56 +549,60 @@ void Engine::Object::draw()
|
|||||||
WFObj::Material & m = it->second;
|
WFObj::Material & m = it->second;
|
||||||
if (m.flags & WFObj::Material::TEXTURE_BIT)
|
if (m.flags & WFObj::Material::TEXTURE_BIT)
|
||||||
{
|
{
|
||||||
if (program != m_programs[PROG_OBJ_TEX])
|
if (program != m_engine.m_programs[PROG_OBJ_TEX])
|
||||||
{
|
{
|
||||||
program = m_programs[PROG_OBJ_TEX];
|
program = m_engine.m_programs[PROG_OBJ_TEX];
|
||||||
glUseProgram(program);
|
glUseProgram(program);
|
||||||
glEnableVertexAttribArray(ATTRIBUTE_OBJ_TEX_TEX_COORD);
|
glEnableVertexAttribArray(ATTRIBUTE_OBJ_TEX_TEX_COORD);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (program != m_programs[PROG_OBJ])
|
if (program != m_engine.m_programs[PROG_OBJ])
|
||||||
{
|
{
|
||||||
program = m_programs[PROG_OBJ];
|
program = m_engine.m_programs[PROG_OBJ];
|
||||||
glUseProgram(program);
|
glUseProgram(program);
|
||||||
glDisableVertexAttribArray(ATTRIBUTE_OBJ_TEX_TEX_COORD);
|
glDisableVertexAttribArray(ATTRIBUTE_OBJ_TEX_TEX_COORD);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (m.flags & WFObj::Material::SHININESS_BIT)
|
if (m.flags & WFObj::Material::SHININESS_BIT)
|
||||||
{
|
{
|
||||||
if (program == m_programs[PROG_OBJ_TEX])
|
if (program == m_engine.m_programs[PROG_OBJ_TEX])
|
||||||
glUniform1f(
|
glUniform1f(m_engine.m_uniforms_obj_tex[
|
||||||
m_uniforms_obj_tex[UNIFORM_OBJ_TEX_SHININESS],
|
UNIFORM_OBJ_TEX_SHININESS],
|
||||||
m.shininess);
|
m.shininess);
|
||||||
else
|
else
|
||||||
glUniform1f(m_uniforms_obj[UNIFORM_OBJ_SHININESS],
|
glUniform1f(m_engine.m_uniforms_obj[
|
||||||
|
UNIFORM_OBJ_SHININESS],
|
||||||
m.shininess);
|
m.shininess);
|
||||||
}
|
}
|
||||||
if (m.flags & WFObj::Material::AMBIENT_BIT)
|
if (m.flags & WFObj::Material::AMBIENT_BIT)
|
||||||
{
|
{
|
||||||
if (program == m_programs[PROG_OBJ_TEX])
|
if (program == m_engine.m_programs[PROG_OBJ_TEX])
|
||||||
glUniform4fv(
|
glUniform4fv(m_engine.m_uniforms_obj_tex[
|
||||||
m_uniforms_obj_tex[UNIFORM_OBJ_TEX_AMBIENT],
|
UNIFORM_OBJ_TEX_AMBIENT],
|
||||||
1, &m.ambient[0]);
|
1, &m.ambient[0]);
|
||||||
else
|
else
|
||||||
glUniform4fv(m_uniforms_obj[UNIFORM_OBJ_AMBIENT],
|
glUniform4fv(m_engine.m_uniforms_obj[
|
||||||
|
UNIFORM_OBJ_AMBIENT],
|
||||||
1, &m.ambient[0]);
|
1, &m.ambient[0]);
|
||||||
}
|
}
|
||||||
if (m.flags & WFObj::Material::DIFFUSE_BIT)
|
if (m.flags & WFObj::Material::DIFFUSE_BIT)
|
||||||
{
|
{
|
||||||
if (program != m_programs[PROG_OBJ_TEX])
|
if (program != m_engine.m_programs[PROG_OBJ_TEX])
|
||||||
glUniform4fv(m_uniforms_obj[UNIFORM_OBJ_DIFFUSE],
|
glUniform4fv(m_engine.m_uniforms_obj[
|
||||||
|
UNIFORM_OBJ_DIFFUSE],
|
||||||
1, &m.diffuse[0]);
|
1, &m.diffuse[0]);
|
||||||
}
|
}
|
||||||
if (m.flags & WFObj::Material::SPECULAR_BIT)
|
if (m.flags & WFObj::Material::SPECULAR_BIT)
|
||||||
{
|
{
|
||||||
if (program == m_programs[PROG_OBJ_TEX])
|
if (program == m_engine.m_programs[PROG_OBJ_TEX])
|
||||||
glUniform4fv(
|
glUniform4fv(m_engine.m_uniforms_obj_tex[
|
||||||
m_uniforms_obj_tex[UNIFORM_OBJ_TEX_SPECULAR],
|
UNIFORM_OBJ_TEX_SPECULAR],
|
||||||
1, &m.specular[0]);
|
1, &m.specular[0]);
|
||||||
else
|
else
|
||||||
glUniform4fv(m_uniforms_obj[UNIFORM_OBJ_SPECULAR],
|
glUniform4fv(m_engine.m_uniforms_obj[
|
||||||
|
UNIFORM_OBJ_SPECULAR],
|
||||||
1, &m.specular[0]);
|
1, &m.specular[0]);
|
||||||
}
|
}
|
||||||
glDrawElements(GL_TRIANGLES, m.num_vertices,
|
glDrawElements(GL_TRIANGLES, m.num_vertices,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user