void BaseApp::BlurHDR() { glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, g_frameBuffer); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, g_texHDR.GetID(), 0); glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, g_depthRenderBufferHDR); glViewport(0, 0, m_width / 1, m_height / 1); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glBindTexture(GL_TEXTURE_2D, g_texFP16.GetID()); m_shdHDR->enable(); RenderScreenCoveringQuad(); m_shdHDR->disable(); glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, g_renderBufferBlurdHDR); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, g_texHBluredHDR.GetID(), 0); glViewport(0, 0, m_width / 4, m_height / 4); m_shdBlur->enable(); g_texHDR.Activate(0); m_shdBlur->sendUniform2f("blur_offset", blurOffset, 0.0f); RenderScreenCoveringQuad(); g_texHDR.Deactivate(); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, g_texVBluredHDR.GetID(), 0); g_texHBluredHDR.Activate(0); m_shdBlur->sendUniform2f("blur_offset", blurOffset/2.0f, 0.0f); RenderScreenCoveringQuad(); g_texHBluredHDR.Deactivate(); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, g_texHBluredHDR.GetID(), 0); g_texVBluredHDR.Activate(0); m_shdBlur->sendUniform2f("blur_offset", 0.0f, blurOffset); RenderScreenCoveringQuad(); g_texVBluredHDR.Deactivate(); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, g_texVBluredHDR.GetID(), 0); g_texHBluredHDR.Activate(0); m_shdBlur->sendUniform2f("blur_offset", 0.0f, blurOffset/2.0f); RenderScreenCoveringQuad(); g_texHBluredHDR.Deactivate(); m_shdBlur->disable(); glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 ); glViewport(0, 0, m_width, m_height); }
void Object3DS::loadTexture() { glEnable(GL_TEXTURE_2D); Texture* texture = new Texture(); if (texture->Load(textureName, 512, 512)) { glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); object.id_texture = texture->GetID(); } else { object.id_texture = NULL; } glDisable(GL_TEXTURE_2D); }
_JATTA_EXPORT void Jatta::OpenGL::FrameBuffer::Texture2D(Enum attachment, Enum textureTarget, Texture texture, SInt32 level) { glFramebufferTexture2D(type, attachment, textureTarget, texture.GetID(), level); GLCHECK("Failed to attach texture 2D to frame buffer."); }
JNIEXPORT jint JNICALL Java_sp_graphics_Texture_native_1getID (JNIEnv *env, jclass cls, jlong handler) { Texture* texture = getHandle<Texture>(handler); return texture->GetID(); }
void BaseApp::RenderFrame() { m_fpsCounter.MarkFrameStart(); POINT mousePos; GetCursorPos(&mousePos); m_mouseX = mousePos.x - m_winPosX; m_mouseY = mousePos.y - m_winPosY; if(lockMouse) { m_camera.SetViewByMouse( float(m_mouseLockedX - m_mouseX) * 0.2f , float(m_mouseLockedY - m_mouseY) * 0.2f); CenterMouse(); } float height = g_heightMap->GetInterpolatedHeight(m_camera.m_vEye.x, m_camera.m_vEye.z); //if( m_camera.m_vEye.y <= height + 2.0f ) { float oldY = m_camera.m_vEye.y; m_camera.m_vEye.y = height + 12.0f; float newY = m_camera.m_vEye.y; m_camera.m_vCenter.y += newY - oldY; } glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, g_frameBuffer); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, g_texFP16.GetID(), 0); glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, g_renderBuffer[0]); glClearColor(0.8f, 1.0f, 0.8f, 1.0f); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); m_camera.BuildViewMatrix(&modelViewMat); glLoadMatrixf(modelViewMat); if(!m_freezeFrustum) frustum.ComputeFrustum(projMat, modelViewMat); glPushMatrix(); glTranslatef(m_camera.m_vEye.x, m_camera.m_vEye.y, m_camera.m_vEye.z); glDepthMask(GL_FALSE); m_shdSky->enable(); m_shdSky->sendUniform3f("color1", 2.0f, 2.0f, 2.0f); m_shdSky->sendUniform3f("color2", 0.5f, 0.7f, 2.0f); m_skydome.Render(); m_shdSky->disable(); //glDepthMask(GL_TRUE); glPopMatrix(); Vec3 sunPos = m_sunPos * 500.0f; glPopMatrix(); glPushMatrix(); glTranslatef(m_camera.m_vEye.x + sunPos.x, m_camera.m_vEye.y + sunPos.y, m_camera.m_vEye.z + sunPos.z); m_texSun.Activate(0); m_shdSimpleColor->enable(); m_shdSimpleColor->sendUniform3f("color", 4.0f, 4.0f, 2.0f); glEnable(GL_BLEND ); glBlendFunc(GL_SRC_COLOR, GL_ONE); RenderSprite(2000, &m_camera.m_vEye, modelViewMat); glDisable(GL_BLEND ); m_shdSimpleColor->disable(); m_texSun.Deactivate(); glDepthMask(GL_TRUE); glPopMatrix(); g_quadtree->Render(frustum, m_camera.m_vEye); /* glAlphaFunc(GL_GREATER,0.5f); glEnable(GL_ALPHA_TEST); Mat4 tmp; tmp.Identity(); tmp.Translate(Vec3(0.0f, g_heightMap->GetInterpolatedHeight(0.0f, 0.0f), 0.0f)); model.render(tmp, &frustum); tmp.Identity(); tmp.Translate(Vec3(50.0f, g_heightMap->GetInterpolatedHeight(50.0f, 0.0f), 0.0f)); model.render(tmp, &frustum); tmp.Identity(); tmp.Translate(Vec3(0.0f, g_heightMap->GetInterpolatedHeight(0.0f, 100.0f), 100.0f)); model.render(tmp, &frustum); tmp.Identity(); tmp.Translate(Vec3(-50.0f, g_heightMap->GetInterpolatedHeight(-50.0f, -200.0f), -200.0f)); model.render(tmp, &frustum); glDisable(GL_ALPHA_TEST); */ RenderWaterReflection(); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, g_texFP16.GetID(), 0); glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, g_renderBuffer[0]); g_texFP162.Bind(0); glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0,0, 0, m_width, m_height); RenderWater(); RenderWaterSpecular(); RenderUnderwaterNormalMap(); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); // No wireframe glPushAttrib(GL_POLYGON_BIT); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); if(m_camera.m_vEye.y < 0) { m_shdUnderwater->enable(); m_shdUnderwater->sendUniform1i("g_texViewport", 0); m_shdUnderwater->sendUniform1i("g_texNormalMap", 1); LARGE_INTEGER time; QueryPerformanceCounter(&time); m_shdUnderwater->sendUniform1f("g_waterTranslation", float(time.QuadPart) * 0.000000008f); g_texWaterReflect.Bind(1); } g_texFP16.Activate(0); RenderScreenCoveringQuad(); g_texFP16.Deactivate(); /* g_texWaterReflect.Activate(0); RenderScreenCoveringQuad(); g_texWaterReflect.Deactivate(); */ if(m_camera.m_vEye.y < 0) { m_shdUnderwater->disable(); } BlurHDR(); glEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ONE); g_texVBluredHDR.Activate(0); RenderScreenCoveringQuad(); g_texVBluredHDR.Deactivate(); glDisable(GL_BLEND); m_pGui->SetViewportDim(m_width, m_height); m_pGui->Render(m_mouseX, m_mouseY, this->m_mouseButton); m_pFont->Enable(m_width, m_height); m_pFont->SetAlignment(FONT_HORIZ_ALIGN_RIGHT, FONT_VERT_ALIGN_TOP); m_pFont->Print(m_width - 10, 10, "FPS: %d", (int)m_fpsCounter.GetFPS() ); m_pFont->Print(m_width - 10, 30, "Camera eye: %f, %f, %f", m_camera.m_vEye.x, m_camera.m_vEye.y, m_camera.m_vEye.z); m_pFont->Print(m_width - 10, 50, "Camera center: %f, %f, %f", m_camera.m_vCenter.x, m_camera.m_vCenter.y, m_camera.m_vCenter.z); m_pFont->Print(m_width - 10, 70, "Triangles rendered: %d", g_quadtree->GetNumTrisLastRendered()); m_pFont->Print(m_width - 10, 90, "VBOs data size: %d bytes", g_quadtree->m_vboDataSize); //m_pFont->Print(m_width - 10, 110, "Mouse coords: (%d, %d)", m_mouseX, m_mouseY); m_pFont->Disable(); /* RenderTexDebug(3, 3, 2, g_texVBluredHDR.GetID(), "Blured HDR"); RenderTexDebug(2, 3, 2, g_texHDR.GetID(), "HDR"); RenderTexDebug(1, 3, 2, g_texFP16.GetID(), "Water refraction"); RenderTexDebug(0, 3, 2, g_texWaterReflect.GetID(), "Water reflection"); */ glPopAttrib(); SwapBuffers(m_hDC); m_fpsCounter.MarkFrameEnd(); }
void BaseApp::RenderUnderwaterNormalMap() { glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, g_texWaterReflect.GetID(), 0 ); glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, g_depthRenderBuffer2 ); glViewport( 0, 0, 512, 512 ); glMatrixMode(GL_PROJECTION); glLoadMatrixf(projMat); glMatrixMode(GL_MODELVIEW); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glDepthMask(GL_FALSE); glDisable(GL_DEPTH_TEST); m_camera.BuildViewMatrix(&modelViewMat); glMatrixMode(GL_MODELVIEW); glLoadMatrixf(modelViewMat); glScalef(1.0f, -1.0f, 1.0f); glFrontFace(GL_CW); glActiveTextureARB(GL_TEXTURE0_ARB); glEnable(GL_TEXTURE_CUBE_MAP_ARB); glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, m_texCubeUnderwaterNormMap.GetID()); static float a = 0.0f; a+=0.02f; glPushMatrix(); glTranslatef(m_camera.m_vEye.x, -m_camera.m_vEye.y - 500, m_camera.m_vEye.z); glDepthMask(GL_FALSE); glMatrixMode(GL_TEXTURE); glPushMatrix(); glLoadIdentity(); //glTranslatef(a, 0.0f, 0.0f); glRotatef(a, 0.0f, 5.0f, 5.0f); m_skydome.RenderCubeMap(); glRotatef(-2*a, 0.5f, 0.5f, 0.0f); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4f(1.0f, 1.0f, 1.0f, 0.5f); m_skydome.RenderCubeMap(); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); glDisable(GL_BLEND); glMatrixMode(GL_TEXTURE); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glDepthMask(GL_TRUE); glPopMatrix(); glDisable(GL_TEXTURE_CUBE_MAP_ARB); glEnable(GL_DEPTH_TEST); glDepthMask(GL_TRUE); glViewport( 0, 0, m_width, m_height); glFrontFace(GL_CCW); }
void BaseApp::RenderWaterReflection() { glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, g_texWaterReflect.GetID(), 0 ); glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, g_depthRenderBuffer2 ); glViewport( 0, 0, 512, 512 ); glMatrixMode(GL_PROJECTION); glLoadMatrixf(projMat); glMatrixMode(GL_MODELVIEW); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); m_camera.BuildViewMatrix(&modelViewMat); glMatrixMode(GL_MODELVIEW); glLoadMatrixf(modelViewMat); glScalef(1.0f, -1.0f, 1.0f); glFrontFace(GL_CW); glPushMatrix(); glTranslatef(m_camera.m_vEye.x, -m_camera.m_vEye.y - 500, m_camera.m_vEye.z); glDepthMask(GL_FALSE); m_shdSky->enable(); m_shdSky->sendUniform3f("color1", 25.5f, 25.5f, 38.0f); m_shdSky->sendUniform3f("color2", 0.5f, 0.8f, 1.0f); m_skydome.Render(); m_shdSky->disable(); glDepthMask(GL_TRUE); glPopMatrix(); g_quadtree->SetRenderFoliageFlag(false); g_quadtree->RenderStaticLOD(frustum, m_camera.m_vEye, 3); g_quadtree->SetRenderFoliageFlag(true); glViewport( 0, 0, m_width, m_height); glFrontFace(GL_CCW); }