#include <GPUWater.h>
Inheritance diagram for pge::GPUWater:
Public Member Functions | |
GPUWater (Vector3f startCorner, float width, float height) | |
Constructor. | |
virtual | ~GPUWater (void) |
Destructor. | |
bool | init (void) |
void | render (void) |
Called when the object should render itself. | |
void | timer (unsigned int delay) |
Called when the timer event comes. | |
Private Attributes | |
Vector3f | m_backLeft |
Vector3f | m_frontLeft |
Vector3f | m_frontRight |
Vector3f | m_backRight |
float | m_width |
float | m_height |
GPUProgram * | m_waterProgram |
unsigned int | m_cubemap |
Texture * | m_noise |
float | m_time |
|
Constructor.
Definition at line 33 of file GPUWater.h. References m_backLeft, m_backRight, m_cubemap, m_frontLeft, m_frontRight, m_height, m_noise, m_time, pge::Vector3f::m_v, m_waterProgram, m_width, and TEXTURE_PREFIX.
00033 { 00034 m_width = width; 00035 m_height = height; 00036 m_time = 0.0f; 00037 00038 m_backLeft = Vector3f(startCorner.m_v[0], startCorner.m_v[1], startCorner.m_v[2] + m_height); 00039 m_frontLeft = startCorner; 00040 m_frontRight = Vector3f(startCorner.m_v[0] + m_width, startCorner.m_v[1], startCorner.m_v[2]); 00041 m_backRight = Vector3f(startCorner.m_v[0] + m_width, startCorner.m_v[1], startCorner.m_v[2] + m_height); 00042 00043 m_cubemap = TextureFactory::createCubemapTexture(TEXTURE_PREFIX.append("water")); 00044 m_noise = TextureDatabase::getInstance()->addTexture("noise_0.jpg"); 00045 m_waterProgram = new GPUProgram("../data/shader/water_vs.txt", "../data/shader/water_fs.txt"); 00046 } |
|
Destructor.
Definition at line 55 of file GPUWater.h. References m_cubemap.
00055 { 00056 glDeleteTextures(1, &m_cubemap); 00057 } |
|
Implements pge::IRenderableObject. Definition at line 65 of file GPUWater.h.
00065 { 00066 return true; 00067 } |
|
Called when the object should render itself.
Implements pge::IRenderableObject. Definition at line 69 of file GPUWater.h. References pge::GPUProgram::bind(), pge::Texture::getDescriptor(), m_backLeft, m_backRight, m_cubemap, m_frontLeft, m_frontRight, m_noise, m_time, m_waterProgram, pge::GPUProgram::passUniform1f(), pge::GPUProgram::passUniform1i(), pge::GPUProgram::passUniform3f(), and pge::GPUProgram::release().
00069 { 00070 // Cubemap. 00071 glActiveTexture(GL_TEXTURE0); 00072 glEnable(GL_TEXTURE_CUBE_MAP); 00073 glBindTexture(GL_TEXTURE_CUBE_MAP, m_cubemap); 00074 00075 // Noise texture. 00076 glActiveTexture(GL_TEXTURE1); 00077 glEnable(GL_TEXTURE_2D); 00078 glBindTexture(GL_TEXTURE_2D, m_noise->getDescriptor()); 00079 00080 m_waterProgram->bind(); 00081 00082 m_waterProgram->passUniform1f("dayNightCycle", DayNightCycle::getInstance()->getDayNightCycle()); 00083 00084 m_waterProgram->passUniform3f("cameraPosition", CoreEngine::getInstance()->getCurrentWorld()->getCamera()->getPosition()); 00085 m_waterProgram->passUniform3f("cameraLightColor", Vector3f(1.0f, 1.0f, 0.6f)); 00086 00087 m_waterProgram->passUniform1f("waveSpeed", 0.5f); 00088 m_waterProgram->passUniform1f("noiseSpeed", 0.5f); 00089 m_waterProgram->passUniform1f("time", m_time); 00090 00091 m_waterProgram->passUniform1i("cubemap", 0); 00092 m_waterProgram->passUniform1i("noise", 1); 00093 00094 glBegin(GL_QUADS); 00095 renderer::normal3f(Vector3f(0.0f, 1.0f, 0.0f)); 00096 renderer::vertex3f(m_frontLeft, 0.0f, 0.0f); 00097 renderer::vertex3f(m_backLeft, 0.0f, 1.0f); 00098 renderer::vertex3f(m_backRight, 1.0f, 1.0f); 00099 renderer::vertex3f(m_frontRight, 1.0f, 0.0f); 00100 glEnd(); 00101 00102 // Cleanup 00103 m_waterProgram->release(); 00104 00105 glActiveTexture(GL_TEXTURE1); 00106 glDisable(GL_TEXTURE_2D); 00107 00108 glActiveTexture(GL_TEXTURE0); 00109 glBindTexture(GL_TEXTURE_CUBE_MAP, 0); 00110 glDisable(GL_TEXTURE_CUBE_MAP); 00111 } |
Here is the call graph for this function:
|
Called when the timer event comes.
Implements pge::IRenderableObject. Definition at line 113 of file GPUWater.h. References m_time.
|
|
Definition at line 127 of file GPUWater.h. Referenced by GPUWater(), and render(). |
|
Definition at line 130 of file GPUWater.h. Referenced by GPUWater(), and render(). |
|
Definition at line 135 of file GPUWater.h. Referenced by GPUWater(), render(), and ~GPUWater(). |
|
Definition at line 128 of file GPUWater.h. Referenced by GPUWater(), and render(). |
|
Definition at line 129 of file GPUWater.h. Referenced by GPUWater(), and render(). |
|
Definition at line 133 of file GPUWater.h. Referenced by GPUWater(). |
|
Definition at line 136 of file GPUWater.h. Referenced by GPUWater(), and render(). |
|
Definition at line 137 of file GPUWater.h. Referenced by GPUWater(), render(), and timer(). |
|
Definition at line 134 of file GPUWater.h. Referenced by GPUWater(), and render(). |
|
Definition at line 132 of file GPUWater.h. Referenced by GPUWater(). |