Jump to content

  • Log In with Google      Sign In   
  • Create Account

#ActualShotoReaper

Posted 24 January 2013 - 01:37 PM

The problem isn´t the VAO or VBO. Before I load the cube, the plane have his data. After I load the cube, plane have the cube data. While the data cube load , the plane have the correctly data. I don´t know what its the problem. At least VBO and VAO are discarted.

 

Thanks for your attention.


#4ShotoReaper

Posted 24 January 2013 - 01:09 PM

It seems that the problem is in GEContentManager class, in the Load template method, but I can´t found the error.


#ifndef GECONTENTMANAGER_H#define GECONTENTMANAGER_H#include <string>#include <typeinfo>#include <map>#include <sstream>#include <iostream>#include "object.hpp"class Engine;class Mesh;class Shader;class Texture;class GEContentManager{    public:        GEContentManager();        Engine* eng;        std::string rootDirectory;        // Funcion que carga cualquier tipo de archivo a partir de una ruta y un T.        // Funcion que carga un archivo a partir del rootDirectory + filename. Por ejemplo 'C:\\Data\' + 'cube.obj'        template <class T> T* Load(std::string filename)        {            //std::cout<<" EL JODIDO PLANO EN CUBE.LOAD "<<eng->pl<<std::endl;            if(typeid(T) != typeid(Mesh) && typeid(T) != typeid(Shader) && typeid(T) != typeid(Texture))            {                std::cerr<<"ERROR: Solo puedes cargar un mesh, shader o texture"<<std::endl;                //exit(1);            }            // Buscamos el objeto, para ver si ya esta registrado            std::map<std::string, object*>::iterator it = loadedObjects.find(filename);            // Retorna el puntero del objeto si esta almacenado ya            if(it!=loadedObjects.end())            {                std::cout<<"El objeto "<<it->first<<" ya habia sido cargado. Devolviendo"<<std::endl;                return (T*)it->second;            }            //Si no lo hay, carga una nueva            // Obtenemos la ruta del archivo            std::stringstream sstm;            sstm << rootDirectory << filename;            std::cout<<"Load file "<<sstm.str()<<std::endl;            std::string path = sstm.str();            // Creamos un nuevo objeto del tipo enviado            T* t = new T;            // Llenamos el objeto            t->Load(path);            // Lo añadimos al mapa de objetos cargados            loadedObjects.insert(std::pair<std::string, object*>(filename,t));            // retornamos la instancia con los datos cargados            return t;        }    protected:    private:        // Mapa donde almacenamos punteros hacia los objetos cargados.        //Asi evitamos cargar dos veces un mismo objeto        std::map<std::string, object*> loadedObjects;};#endif // GECONTENTMANAGER_H
The problem isn´t VAO or VBO. The problem is T* t = new T(); I don´t known why this overwrite the Plane class...

#3ShotoReaper

Posted 24 January 2013 - 01:09 PM

It seems that the problem is in GEContentManager class, in the Load template method, but I can´t found the error.


#ifndef GECONTENTMANAGER_H#define GECONTENTMANAGER_H#include <string>#include <typeinfo>#include <map>#include <sstream>#include <iostream>#include "object.hpp"class Engine;class Mesh;class Shader;class Texture;class GEContentManager{    public:        GEContentManager();        Engine* eng;        std::string rootDirectory;        // Funcion que carga cualquier tipo de archivo a partir de una ruta y un T.        // Funcion que carga un archivo a partir del rootDirectory + filename. Por ejemplo 'C:\\Data\' + 'cube.obj'        template <class T> T* Load(std::string filename)        {            //std::cout<<" EL JODIDO PLANO EN CUBE.LOAD "<<eng->pl<<std::endl;            if(typeid(T) != typeid(Mesh) && typeid(T) != typeid(Shader) && typeid(T) != typeid(Texture))            {                std::cerr<<"ERROR: Solo puedes cargar un mesh, shader o texture"<<std::endl;                //exit(1);            }            // Buscamos el objeto, para ver si ya esta registrado            std::map<std::string, object*>::iterator it = loadedObjects.find(filename);            // Retorna el puntero del objeto si esta almacenado ya            if(it!=loadedObjects.end())            {                std::cout<<"El objeto "<<it->first<<" ya habia sido cargado. Devolviendo"<<std::endl;                return (T*)it->second;            }            //Si no lo hay, carga una nueva            // Obtenemos la ruta del archivo            std::stringstream sstm;            sstm << rootDirectory << filename;            std::cout<<"Load file "<<sstm.str()<<std::endl;            std::string path = sstm.str();            // Creamos un nuevo objeto del tipo enviado            T* t = new T;            // Llenamos el objeto            t->Load(path);            // Lo añadimos al mapa de objetos cargados            loadedObjects.insert(std::pair<std::string, object*>(filename,t));            // retornamos la instancia con los datos cargados            return t;        }    protected:    private:        // Mapa donde almacenamos punteros hacia los objetos cargados.        //Asi evitamos cargar dos veces un mismo objeto        std::map<std::string, object*> loadedObjects;};#endif // GECONTENTMANAGER_H
The problem isn´t VAO or VBO. The problem is T* t = new T(); I don´t known why this overwrite the Plane class...

#2ShotoReaper

Posted 24 January 2013 - 01:03 PM

It seems that the problem is in GEContentManager class, in the Load template method, but I can´t found the error.


#ifndef GECONTENTMANAGER_H#define GECONTENTMANAGER_H#include <string>#include <typeinfo>#include <map>#include <sstream>#include <iostream>#include "object.hpp"class Engine;class Mesh;class Shader;class Texture;class GEContentManager{    public:        GEContentManager();        Engine* eng;        std::string rootDirectory;        // Funcion que carga cualquier tipo de archivo a partir de una ruta y un T.        // Funcion que carga un archivo a partir del rootDirectory + filename. Por ejemplo 'C:\\Data\' + 'cube.obj'        template <class T> T* Load(std::string filename)        {            //std::cout<<" EL JODIDO PLANO EN CUBE.LOAD "<<eng->pl<<std::endl;            if(typeid(T) != typeid(Mesh) && typeid(T) != typeid(Shader) && typeid(T) != typeid(Texture))            {                std::cerr<<"ERROR: Solo puedes cargar un mesh, shader o texture"<<std::endl;                //exit(1);            }            // Buscamos el objeto, para ver si ya esta registrado            std::map<std::string, object*>::iterator it = loadedObjects.find(filename);            // Retorna el puntero del objeto si esta almacenado ya            if(it!=loadedObjects.end())            {                std::cout<<"El objeto "<<it->first<<" ya habia sido cargado. Devolviendo"<<std::endl;                return (T*)it->second;            }            //Si no lo hay, carga una nueva            // Obtenemos la ruta del archivo            std::stringstream sstm;            sstm << rootDirectory << filename;            std::cout<<"Load file "<<sstm.str()<<std::endl;            std::string path = sstm.str();            // Creamos un nuevo objeto del tipo enviado            T* t = new T;            // Llenamos el objeto            t->Load(path);            // Lo añadimos al mapa de objetos cargados            loadedObjects.insert(std::pair<std::string, object*>(filename,t));            // retornamos la instancia con los datos cargados            return t;        }    protected:    private:        // Mapa donde almacenamos punteros hacia los objetos cargados.        //Asi evitamos cargar dos veces un mismo objeto        std::map<std::string, object*> loadedObjects;};#endif // GECONTENTMANAGER_H
The problem isn´t VAO or VBO. The problem is T* t = new T(); I don´t known why this overwrite the Plane class...

#1ShotoReaper

Posted 24 January 2013 - 09:27 AM

It seems that the problem  is in GEContentManager class, in the Load template method, but I can´t found the error.

 

 

 

#ifndef GECONTENTMANAGER_H
#define GECONTENTMANAGER_H


#include <string>
#include <typeinfo>
#include <map>
#include <sstream>
#include <iostream>
#include "object.hpp"


class Engine;


class Mesh;
class Shader;
class Texture;
class GEContentManager
{
    public:
        GEContentManager();
        Engine* eng;
        std::string rootDirectory;


        // Funcion que carga cualquier tipo de archivo a partir de una ruta y un T.
        // Funcion que carga un archivo a partir del rootDirectory + filename. Por ejemplo 'C:\\Data\' + 'cube.obj'
        template <class T> T* Load(std::string filename)
        {
            //std::cout<<" EL JODIDO PLANO EN CUBE.LOAD "<<eng->pl<<std::endl;
            if(typeid(T) != typeid(Mesh) && typeid(T) != typeid(Shader) && typeid(T) != typeid(Texture))
            {
                std::cerr<<"ERROR: Solo puedes cargar un mesh, shader o texture"<<std::endl;
                //exit(1);
            }


            // Buscamos el objeto, para ver si ya esta registrado
            std::map<std::string, object*>::iterator it = loadedObjects.find(filename);


            // Retorna el puntero del objeto si esta almacenado ya
            if(it!=loadedObjects.end())
            {
                std::cout<<"El objeto "<<it->first<<" ya habia sido cargado. Devolviendo"<<std::endl;
                return (T*)it->second;
            }
            //Si no lo hay, carga una nueva


            // Obtenemos la ruta del archivo
            std::stringstream sstm;
            sstm << rootDirectory << filename;
            std::cout<<"Load file "<<sstm.str()<<std::endl;
            std::string path = sstm.str();
            // Creamos un nuevo objeto del tipo enviado
            T* t = new T;
            // Llenamos el objeto
            t->Load(path);
            // Lo añadimos al mapa de objetos cargados
            loadedObjects.insert(std::pair<std::string, object*>(filename,t));
            // retornamos la instancia con los datos cargados
            return t;
        }


    protected:


    private:


        // Mapa donde almacenamos punteros hacia los objetos cargados.
        //Asi evitamos cargar dos veces un mismo objeto
        std::map<std::string, object*> loadedObjects;
};


#endif // GECONTENTMANAGER_H
 

I have a Actor class with a Mesh variable. When I call the method CreateWorld I instance an two Actor class, plane and cube. I load variable mesh from plane with plane.obj, that I load with this method perfectly. But when I finish to load variable cube from cube.obj, plane.mesh have the data from cube.obj.I can´t think now that the VAO or VBO are the problem, but I am not sure. Can anybody see any error in the content class?


PARTNERS