Made compliant with out coding style.

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@12539 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
hikerstk 2013-03-03 20:47:08 +00:00
parent ef5352165d
commit 90bcf9f304

View File

@ -15,13 +15,16 @@
// along with this program; if not, write to the Free Software // along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
#include <IGPUProgrammingServices.h>
#include <IMaterialRendererServices.h>
#include "post_processing.hpp" #include "post_processing.hpp"
#include "irr_driver.hpp"
#include "config/user_config.hpp" #include "config/user_config.hpp"
#include "io/file_manager.hpp" #include "io/file_manager.hpp"
#include "graphics/irr_driver.hpp"
#include "race/race_manager.hpp" #include "race/race_manager.hpp"
#include "utils/log.hpp"
#include <IGPUProgrammingServices.h>
#include <IMaterialRendererServices.h>
#define MOTION_BLUR_FACTOR (1.0f/15.0f) #define MOTION_BLUR_FACTOR (1.0f/15.0f)
#define MOTION_BLUR_OFFSET 20.0f #define MOTION_BLUR_OFFSET 20.0f
@ -32,12 +35,14 @@ using namespace scene;
PostProcessing::PostProcessing() PostProcessing::PostProcessing()
{ {
m_boost_amount = 0.0f; m_boost_amount = 0.0f;
} } // PostProcessing
// ----------------------------------------------------------------------------
PostProcessing::~PostProcessing() PostProcessing::~PostProcessing()
{ {
} } // ~PostProcessing
// ----------------------------------------------------------------------------
/** Initialization */ /** Initialization */
void PostProcessing::init(video::IVideoDriver* video_driver) void PostProcessing::init(video::IVideoDriver* video_driver)
{ {
@ -54,36 +59,45 @@ void PostProcessing::init(video::IVideoDriver* video_driver)
bool nonsquare = video_driver->queryFeature(video::EVDF_TEXTURE_NSQUARE); bool nonsquare = video_driver->queryFeature(video::EVDF_TEXTURE_NSQUARE);
bool nonpower = video_driver->queryFeature(video::EVDF_TEXTURE_NPOT); bool nonpower = video_driver->queryFeature(video::EVDF_TEXTURE_NPOT);
if (!nonpower) { if (!nonpower) {
fprintf(stdout, "WARNING: Only power of two textures are supported.\n"); Log::warn("PostProcessing",
"Only power of two textures are supported.");
} }
if (!nonsquare) { if (!nonsquare) {
fprintf(stdout, "WARNING: Only square textures are supported.\n"); Log::warn("PostProcessing", "Only square textures are supported.");
} }
// Initialization // Initialization
if(m_supported) if(m_supported)
{ {
// Render target // Render target
m_render_target = video_driver->addRenderTargetTexture(video_driver->getScreenSize().getOptimalSize(!nonpower, !nonsquare), "postprocess"); core::dimension2du opt = video_driver->getScreenSize()
.getOptimalSize(!nonpower, !nonsquare);
m_render_target =
video_driver->addRenderTargetTexture(opt, "postprocess");
if(!m_render_target) if(!m_render_target)
{ {
fprintf(stderr, "Couldn't create the render target for post-processing, disabling it\n"); Log::warn("PostProcessing", "Couldn't create the render target "
"for post-processing, disabling it.");
UserConfigParams::m_postprocess_enabled = false; UserConfigParams::m_postprocess_enabled = false;
} }
// Material and shaders // Material and shaders
IGPUProgrammingServices* gpu = video_driver->getGPUProgrammingServices(); IGPUProgrammingServices* gpu =
video_driver->getGPUProgrammingServices();
s32 material_type = gpu->addHighLevelShaderMaterialFromFiles( s32 material_type = gpu->addHighLevelShaderMaterialFromFiles(
(file_manager->getShaderDir() + "motion_blur.vert").c_str(), "main", video::EVST_VS_2_0, (file_manager->getShaderDir() + "motion_blur.vert").c_str(),
(file_manager->getShaderDir() + "motion_blur.frag").c_str(), "main", video::EPST_PS_2_0, "main", video::EVST_VS_2_0,
this, video::EMT_SOLID); (file_manager->getShaderDir() + "motion_blur.frag").c_str(),
"main", video::EPST_PS_2_0,
this, video::EMT_SOLID);
m_material.MaterialType = (E_MATERIAL_TYPE)material_type; m_material.MaterialType = (E_MATERIAL_TYPE)material_type;
m_material.setTexture(0, m_render_target); m_material.setTexture(0, m_render_target);
m_material.Wireframe = false; m_material.Wireframe = false;
m_material.Lighting = false; m_material.Lighting = false;
m_material.ZWriteEnable = false; m_material.ZWriteEnable = false;
} }
} } // init
// ----------------------------------------------------------------------------
/** Termination */ /** Termination */
void PostProcessing::shut() void PostProcessing::shut()
{ {
@ -91,8 +105,9 @@ void PostProcessing::shut()
return; return;
// TODO: do we have to delete/drop anything? // TODO: do we have to delete/drop anything?
} } // shut
// ----------------------------------------------------------------------------
/** Setup the render target */ /** Setup the render target */
void PostProcessing::beginCapture() void PostProcessing::beginCapture()
{ {
@ -110,8 +125,9 @@ void PostProcessing::beginCapture()
m_used_pp_this_frame = true; m_used_pp_this_frame = true;
irr_driver->getVideoDriver()->setRenderTarget(m_render_target, true, true); irr_driver->getVideoDriver()->setRenderTarget(m_render_target, true, true);
} } // beginCapture
// ----------------------------------------------------------------------------
/** Restore the framebuffer render target */ /** Restore the framebuffer render target */
void PostProcessing::endCapture() void PostProcessing::endCapture()
{ {
@ -121,10 +137,12 @@ void PostProcessing::endCapture()
if (m_used_pp_this_frame) if (m_used_pp_this_frame)
{ {
irr_driver->getVideoDriver()->setRenderTarget(video::ERT_FRAME_BUFFER, true, true, 0); irr_driver->getVideoDriver()->setRenderTarget(video::ERT_FRAME_BUFFER,
true, true, 0);
} }
} } // endCapture
// ----------------------------------------------------------------------------
void PostProcessing::update(float dt) void PostProcessing::update(float dt)
{ {
if (m_boost_amount > 0.0f) if (m_boost_amount > 0.0f)
@ -132,8 +150,9 @@ void PostProcessing::update(float dt)
m_boost_amount -= dt*3.5f; m_boost_amount -= dt*3.5f;
if (m_boost_amount < 0.0f) m_boost_amount = 0.0f; if (m_boost_amount < 0.0f) m_boost_amount = 0.0f;
} }
} } // update
// ----------------------------------------------------------------------------
/** Render the post-processed scene */ /** Render the post-processed scene */
void PostProcessing::render() void PostProcessing::render()
{ {
@ -146,7 +165,8 @@ void PostProcessing::render()
return; return;
} }
// Draw the fullscreen quad while applying the corresponding post-processing shaders // Draw the fullscreen quad while applying the corresponding
// post-processing shaders
video::IVideoDriver* video_driver = irr_driver->getVideoDriver(); video::IVideoDriver* video_driver = irr_driver->getVideoDriver();
video::S3DVertex vertices[6]; video::S3DVertex vertices[6];
@ -155,28 +175,27 @@ void PostProcessing::render()
vertices[1] = irr::video::S3DVertex(-1.0f, 1.0f,0.0f,0,0,1, white, 0.0f,0.0f); vertices[1] = irr::video::S3DVertex(-1.0f, 1.0f,0.0f,0,0,1, white, 0.0f,0.0f);
vertices[2] = irr::video::S3DVertex( 1.0f, 1.0f,0.0f,0,0,1, white, 1.0f,0.0f); vertices[2] = irr::video::S3DVertex( 1.0f, 1.0f,0.0f,0,0,1, white, 1.0f,0.0f);
vertices[3] = irr::video::S3DVertex( 1.0f,-1.0f,0.0f,0,0,1, white, 1.0f,1.0f); vertices[3] = irr::video::S3DVertex( 1.0f,-1.0f,0.0f,0,0,1, white, 1.0f,1.0f);
vertices[4] = irr::video::S3DVertex(-1.0f,-1.0f,0.0f,0,0,1, white, 0.0f,1.0f);
vertices[5] = irr::video::S3DVertex( 1.0f, 1.0f,0.0f,0,0,1, white, 1.0f,0.0f); u16 indices[6] = {0, 1, 2, 3, 0, 2};
u16 indices[6] = {0, 1, 2, 3, 4, 5};
video_driver->setMaterial(m_material); video_driver->setMaterial(m_material);
video_driver->drawIndexedTriangleList(&vertices[0], 6, &indices[0], 2); video_driver->drawIndexedTriangleList(&vertices[0], 4, &indices[0], 2);
} } // render
// ----------------------------------------------------------------------------
/** Set the boost amount according to the speed of the camera */ /** Set the boost amount according to the speed of the camera */
void PostProcessing::giveBoost() void PostProcessing::giveBoost()
{ {
m_boost_amount = 2.5f; m_boost_amount = 2.5f;
//printf("setCameraSpeed(%f)\n", cam_speed); } // giveBoost
//m_boost_amount = core::clamp(MOTION_BLUR_FACTOR * (cam_speed - MOTION_BLUR_OFFSET), 0.0f, 1.0f);
}
/** Implement IShaderConstantsSetCallback. Shader constants setter for post-processing */ // ----------------------------------------------------------------------------
void PostProcessing::OnSetConstants(video::IMaterialRendererServices *services, s32 user_data) /** Implement IShaderConstantsSetCallback. Shader constants setter for
* post-processing */
void PostProcessing::OnSetConstants(video::IMaterialRendererServices *services,
s32 user_data)
{ {
services->setPixelShaderConstant("boost_amount", &m_boost_amount, 1); services->setPixelShaderConstant("boost_amount", &m_boost_amount, 1);
const float texunit = 0.0f; const int texunit = 0;
services->setPixelShaderConstant("color_buffer", &texunit, 1); // Irrlicht knows this is actually a GLint and makes services->setPixelShaderConstant("color_buffer", &texunit, 1);
// the conversion } // OnSetConstants
}