~jaytaoko/nuxcodesamples/nuxcodesamples-gst-video-decode

« back to all changes in this revision

Viewing changes to src/visual-fx/PixelBlocks.cpp

  • Committer: Jay Taoko
  • Date: 2012-01-07 19:20:32 UTC
  • Revision ID: jay.taoko@canonical.com-20120107192032-5fymlfzbeyx84fz3
- Visual FX program

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "Nux/Nux.h"
 
2
 
 
3
#include "NuxGraphics/GraphicsDisplay.h"
 
4
#include "NuxGraphics/GLShader.h"
 
5
#include "NuxGraphics/GpuDevice.h"
 
6
#include "NuxGraphics/GLDeviceObjects.h"
 
7
#include "NuxGraphics/GLShader.h"
 
8
#include "NuxGraphics/GraphicsEngine.h"
 
9
 
 
10
#include "NuxMesh/NWorldArchiveManager.h"
 
11
#include "NuxMesh/NMeshObject.h"
 
12
 
 
13
#include "PixelBlocks.h"
 
14
 
 
15
PixelBlocks::PixelBlocks()
 
16
{
 
17
  _pixel_block_size = 1;
 
18
 
 
19
  nux::NString Path = PKGDATADIR"/textures/nfl.png";
 
20
  m_Texture = new nux::Texture2D ();
 
21
  m_Texture->Update (Path.GetTCharPtr ());
 
22
  nux::ObjectPtr<nux::CachedBaseTexture> DeviceTexture = nux::GetGraphicsDisplay()->GetGraphicsEngine()->CacheResource (m_Texture);
 
23
  DeviceTexture->m_Texture->SetWrap (GL_CLAMP, GL_CLAMP, GL_CLAMP);
 
24
  DeviceTexture->m_Texture->SetFiltering (GL_NEAREST, GL_NEAREST);
 
25
}
 
26
 
 
27
PixelBlocks::~PixelBlocks ()
 
28
{
 
29
  m_Texture->UnReference ();
 
30
}
 
31
 
 
32
void PixelBlocks::Draw(nux::GraphicsEngine& GfxContext, nux::Geometry viewport, const nux::Matrix4 &CameraMatrix, const nux::Matrix4 &ProjectionMatrix)
 
33
{
 
34
  float sigma = 0.1f;
 
35
  int margin = 0;
 
36
  int X = (viewport.GetWidth () - m_Texture->GetWidth () - 2 * margin) / 2.0f;
 
37
  int Y = (viewport.GetHeight () - m_Texture->GetHeight () - 2 * margin) / 2.0f;
 
38
 
 
39
  RenderEffect(GfxContext, viewport, 0, X, Y);
 
40
}
 
41
 
 
42
void PixelBlocks::RenderEffect(nux::GraphicsEngine& GfxContext, nux::Geometry viewport, int margin, int X, int Y)
 
43
{
 
44
  unsigned int window_width, window_height;
 
45
  window_width = viewport.GetWidth();
 
46
  window_height = viewport.GetHeight();
 
47
 
 
48
  nux::ObjectPtr< nux::CachedBaseTexture > DeviceTexture = GfxContext.CacheResource(m_Texture);
 
49
 
 
50
  unsigned int offset = margin;
 
51
  int quad_width = m_Texture->GetWidth();
 
52
  int quad_height = m_Texture->GetHeight();
 
53
 
 
54
  unsigned int buffer_width = quad_width + 2*offset;
 
55
  unsigned int buffer_height = quad_height + 2*offset;
 
56
  int x =  (buffer_width - quad_width)/2;
 
57
  int y =  (buffer_height - quad_height)/2;
 
58
  
 
59
  nux::TexCoordXForm texxform;
 
60
  
 
61
  m_MainColorRT1 = GfxContext.QRP_GetPixelBlocks (DeviceTexture->m_Texture, texxform, nux::color::White, _pixel_block_size);
 
62
  GfxContext.SetOrthographicProjectionMatrix (window_width, window_height);
 
63
 
 
64
  m_MainColorRT1->SetFiltering (GL_LINEAR, GL_LINEAR);
 
65
  texxform.flip_v_coord = true;
 
66
  GfxContext.QRP_1Tex (X, Y, quad_width, quad_height, m_MainColorRT1, texxform, _texture_color_mod);
 
67
}
 
68
 
 
69
 
 
70
void PixelBlocks::SetPixelBlockSize (int pixel_block_size, MainSceneView* scene)
 
71
{
 
72
  _pixel_block_size = pixel_block_size;
 
73
  if(scene)
 
74
    scene->QueueDraw();
 
75
}
 
76
 
 
77
void PixelBlocks::SetTextureColorModulation (float r, float g, float b, float a, MainSceneView* scene)
 
78
{
 
79
  _texture_color_mod  = nux::Color(r, g, b, a);
 
80
  if(scene)
 
81
    scene->QueueDraw();
 
82
}