Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

unit app_glscene_postprocess;

interface

uses OpenGL, GLaux, glExt, sux_constant, sux_object, app_constant,
     resource_texture, resource_shader;

type
  TSettings=record
    pixel: SRShader;
    slowmotion: SRShader;
    flower: SRShader;
  end;
  SAGLSPostProcess=class(SUXObject)
    settings:TSettings;

    procedure grabFrameBufferTexture;
    function getFrameBufferTexture: SRTexture;
    procedure renderFrameBufferTextureQuadOnScreen;

    procedure onTimerPixel;
    procedure onTimerSlowMotion;
    procedure onTimerFlower;
    procedure onTimer;

    procedure initialize;
    constructor Create(parent:TObject);
    destructor Destroy; override;
  end;

implementation

uses sux_main, gl_main, main;


// --- SAGLSPostProcess


procedure SAGLSPostProcess.grabFrameBufferTexture;
begin
  app.scene.grabFrameBufferTexture;
end;


function SAGLSPostProcess.getFrameBufferTexture: SRTexture;
begin
  result := app.scene.scene.framebuffer;
end;


procedure SAGLSPostProcess.renderFrameBufferTextureQuadOnScreen;
begin
  app.scene.renderFrameBufferQuadOverScreen;
end;




procedure SAGLSPostProcess.onTimerPixel;
begin
  if (app.game.settings.effects.pixel <= 0) then exit;

  grabFrameBufferTexture;

  gl.material.resetMaterial;
  gl.material.setMaterial2D;
  gl.material.setMaterialShader(nil, settings.pixel);
  gl.material.setMaterialBlending(SX_GL_BLEND_AVERAGE, sx.convert.ColorRGBOf(1,1,1), 1);
  gl.material.setMaterialTexture(getFrameBufferTexture);
  gl.material.renderMaterial;

  settings.pixel.setFragmentEnvParameter(0, sx.convert.Vertex3DOf(app.game.settings.effects.pixel, 0, 0));
  settings.pixel.setFragmentEnvParameter(1, sx.convert.Vertex3DOf(100, 0.01, 0));

  renderFrameBufferTextureQuadOnScreen;
end;


procedure SAGLSPostProcess.onTimerSlowMotion;
begin
  if (app.game.settings.effects.slowmotion <= 0) then exit;

  grabFrameBufferTexture;

  gl.material.resetMaterial;
  gl.material.setMaterial2D;
  gl.material.setMaterialShader(nil, settings.slowmotion);
  gl.material.setMaterialBlending(SX_GL_BLEND_AVERAGE, sx.convert.ColorRGBOf(1,1,1), 1);
  gl.material.setMaterialTexture(getFrameBufferTexture);
  gl.material.renderMaterial;

  settings.slowmotion.setFragmentEnvParameter(0, sx.convert.Vertex3DOf(app.game.settings.effects.slowmotion, 0, 0));
  settings.slowmotion.setFragmentEnvParameter(1, sx.convert.Vertex3DOf(0, 0.003, 0));
  settings.slowmotion.setFragmentEnvParameter(2, sx.convert.Vertex3DOf(0, -0.003, 0));

  renderFrameBufferTextureQuadOnScreen;
end;


procedure SAGLSPostProcess.onTimerFlower;
var offset: SXVertex2D;
begin
  if (app.game.settings.effects.flowers <= 0) then exit;

  offset.x := app.game.getGameTimer * 0.08;
  offset.y := app.game.getGameTimer * 0.1;

  grabFrameBufferTexture;

  gl.material.resetMaterial;
  gl.material.setMaterial2D;
  gl.material.setMaterialShader(nil, settings.flower);
  gl.material.setMaterialBlending(SX_GL_BLEND_AVERAGE, sx.convert.ColorRGBOf(1,1,1), 1);
  gl.material.setMaterialTexture(getFrameBufferTexture);
  gl.material.renderMaterial;

  gl.texture.setTextureToTexelUnit(app.scene.board.settings.flowerpower, 1);

  settings.flower.setFragmentEnvParameter(0, sx.convert.Vertex3DOf(app.game.settings.effects.flowers, 0, 0));
  settings.flower.setFragmentEnvParameter(1, sx.convert.Vertex3DOf(offset.x, offset.y, 0), 0);
  settings.flower.setFragmentEnvParameter(2, sx.convert.Vertex3DOf(0.08, 0.04, 0));

  renderFrameBufferTextureQuadOnScreen;
end;


procedure SAGLSPostProcess.onTimer;
begin
  onTimerPixel;
  onTimerSlowMotion;
  onTimerFlower;
end;




procedure SAGLSPostProcess.initialize;
begin
  settings.pixel := SRShader.Create('shaders\pixel', self);
  settings.slowmotion := SRShader.Create('shaders\slowmotion', self);
  settings.flower := SRShader.Create('shaders\flowers', self);
end;


constructor SAGLSPostProcess.Create(parent:TObject);
begin
  inherited Create(parent,'GL Post Process');
end;


destructor SAGLSPostProcess.Destroy;
begin
  settings.pixel.Free;
  settings.slowmotion.Free;
  settings.flower.Free;
 
  inherited;
end;


end.