Main Page | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals

/Users/blackie/Documents/myRepository/phobosengine-vc2005/phobosengine/phobosengine/GPUFire.cpp

Go to the documentation of this file.
00001 
00002 
00003 #include "GPUFire.h"
00004 
00005 #include "GPUProgram.h"
00006 #include "Renderer.h"
00007 #include "Texture.h"
00008 #include "TextureDatabase.h"
00009 #include "Vector4f.h"
00010 
00011 
00012 namespace pge{
00013 
00014 
00015         //****************************************************************************
00016         //
00017         //
00018         //
00019         //****************************************************************************
00020         GPUFire::GPUFire(Vector3f center, float size) : Sprite(center, size) {
00021                 m_time = 0.0f;
00022 
00023                 m_firecolor = TextureDatabase::getInstance()->addTexture("firecolor.jpg");
00024                 m_firemask = TextureDatabase::getInstance()->addTexture("firemask.bmp");
00025                 m_noise = TextureDatabase::getInstance()->addTexture("firenoise.jpg");
00026 
00027                 m_program = new GPUProgram("../data/shader/fire_vs.txt", "../data/shader/fire_fs.txt");
00028         }
00029 
00030 
00031         //****************************************************************************
00032         //
00033         //
00034         //
00035         //****************************************************************************
00036         GPUFire::~GPUFire(void) {
00037                 if(m_program != NULL) {
00038                         delete m_program;
00039                         m_program = NULL;
00040                 }
00041         }
00042 
00043 
00044         //****************************************************************************
00045         //
00046         //
00047         //
00048         //****************************************************************************
00049         bool GPUFire::init(void) {
00050                 return Sprite::init();
00051         }
00052 
00053 
00054         //****************************************************************************
00055         //
00056         //
00057         //
00058         //****************************************************************************
00059         void GPUFire::render(void) {
00060                 // Fire color texture.
00061                 glActiveTexture(GL_TEXTURE0);
00062                 glEnable(GL_TEXTURE_2D);
00063                 glBindTexture(GL_TEXTURE_2D, m_firecolor->getDescriptor());
00064 
00065                 // Fire mask texture.
00066                 glActiveTexture(GL_TEXTURE1);
00067                 glEnable(GL_TEXTURE_2D);
00068                 glBindTexture(GL_TEXTURE_2D, m_firemask->getDescriptor());
00069 
00070                 // Fire noise texture.
00071                 glActiveTexture(GL_TEXTURE2);
00072                 glEnable(GL_TEXTURE_2D);
00073                 glBindTexture(GL_TEXTURE_2D, m_noise->getDescriptor());
00074 
00075                 m_program->bind();
00076 
00077                 m_program->passUniform1f("time", m_time);
00078                 m_program->passUniform3f("layerSpeed", Vector3f(0.1f, 0.1f, 0.1f));
00079                 m_program->passUniform4f("height", Vector4f(0.44f, 0.29f, 0.0f, 1.0f));
00080 
00081                 m_program->passUniform1f("distortion0", 0.09f);
00082                 m_program->passUniform1f("distortion1", 0.08f);
00083                 m_program->passUniform1f("distortion2", 0.1f);
00084 
00085                 m_program->passUniform1i("baseTex", 0);
00086                 m_program->passUniform1i("opacityTex", 1);
00087                 m_program->passUniform1i("distortionTex", 2);
00088 
00089                 //Renderer.pushMatrix();
00090                 renderer::setTextureAlphaBlendEnabled(true);
00091 
00092                 // Render sprite.
00093                 Sprite::render();
00094 
00095                 renderer::setTextureAlphaBlendEnabled(false);
00096                 //Renderer.popMatrix();
00097 
00098                 // Cleanup
00099                 m_program->release();
00100 
00101                 glActiveTexture(GL_TEXTURE1);
00102                 glDisable(GL_TEXTURE_2D);
00103 
00104                 glActiveTexture(GL_TEXTURE2);
00105                 glDisable(GL_TEXTURE_2D);
00106 
00107                 // Texture unit0 active as default.
00108                 glActiveTexture(GL_TEXTURE0);
00109         }
00110 
00111 
00112         //****************************************************************************
00113         //
00114         //
00115         //
00116         //****************************************************************************
00117         void GPUFire::timer(unsigned int delay) {
00118                 m_time += 0.1f;
00119 
00120                 // TODO: float max value
00121                 if (m_time >= 100000.0f - 1.0f) {
00122                         m_time = 0.0f;
00123                 }
00124         }
00125 };

Generated on Mon Oct 16 12:08:10 2006 for Phobosengine by doxygen 1.3.4