~ubuntu-branches/ubuntu/oneiric/nux/oneiric

« back to all changes in this revision

Viewing changes to NuxGraphics/GLSh_ColorPicker.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Didier Roche
  • Date: 2011-06-22 17:16:16 UTC
  • mfrom: (1.1.21 upstream)
  • Revision ID: james.westby@ubuntu.com-20110622171616-3cyhhiwsb6ga9d30
Tags: 1.0.2-0ubuntu1
* New upstream release.
* Cherry-pick a fix for FTBFS with -fpermissive
* debian/control:
  - add new libxdamage-dev and libxcomposite-dev build-dep
  - add new libboost1.42-dev dep as well, should be transitionned to 1.46 once
    compiz is transitionned as well
* remove debian/patches/01_build_with_gcc46.patch as included upstream
* debian/rules:
  - disable google code tests while building
* debian/control, debian/rules, debian/libnux-1.0-common.install,
  debian/libnux-1.0-dev.install, debian/libnux-1.0-doc.install,
  debian/libnux-1.0-0.install:
  - change, prepare next ABI breakage and remove no more needed Breaks: with
    new soname bump
* libnux-1.0-common now replaces: libnux-0.9-common for the apport hook

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
 *
20
20
 */
21
21
 
22
 
 
23
22
#include "NuxCore/NuxCore.h"
24
23
#include "NuxCore/Math/Matrix4.h"
25
24
#include "GLResource.h"
37
36
namespace nux
38
37
{
39
38
 
40
 
  extern bool USE_ARB_SHADERS;
41
 
 
42
39
// The GLSL shaders may contain branches. Intel GPU so far fails on these shaders.
43
40
// Use assembly shaders for Intel GPUs: ARB_fragment_program does not have the required
44
41
// instruction to implement the HSV to RGB color conversion.
224
221
 
225
222
 
226
223
 
227
 
  GLSh_ColorPicker::GLSh_ColorPicker (eColorChannel cc)
 
224
GLSh_ColorPicker::GLSh_ColorPicker (color::Channel color_channel)
228
225
    :   _R (1.0)
229
226
    ,   _G (0.0)
230
227
    ,   _B (0.0)
233
230
    ,   _ScreenOffsetY (0)
234
231
  {
235
232
    NString FrgShaderCode;
236
 
    m_ColorChannel = cc;
237
233
 
238
 
    if (!USE_ARB_SHADERS && (GetGpuDevice()->GetGPUBrand() != GPU_BRAND_INTEL) )
 
234
    if (GetGraphicsDisplay()->GetGraphicsEngine()->UsingGLSLCodePath() && (GetGraphicsDisplay()->GetGpuDevice()->GetGPUBrand() != GPU_BRAND_INTEL) )
239
235
    {
240
 
      switch (m_ColorChannel)
 
236
      switch (color_channel)
241
237
      {
242
 
        case CC_RED:
 
238
        case color::RED:
243
239
        {
244
240
          FrgShaderCode = RedFrgShader;
245
241
          break;
246
242
        }
247
 
        case CC_GREEN:
 
243
        case color::GREEN:
248
244
        {
249
245
          FrgShaderCode = GreenFrgShader;
250
246
          break;
251
247
        }
252
 
        case CC_BLUE:
 
248
        case color::BLUE:
253
249
        {
254
250
          FrgShaderCode = BlueFrgShader;
255
251
          break;
256
252
        }
257
 
        case CC_HUE:
 
253
        case color::HUE:
258
254
        {
259
255
          FrgShaderCode = HueFrgShader;
260
256
          break;
261
257
        }
262
 
        case CC_SATURATION:
 
258
        case color::SATURATION:
263
259
        {
264
260
          FrgShaderCode = SaturationFrgShader;
265
261
          break;
266
262
        }
267
 
        case CC_VALUE:
 
263
        case color::VALUE:
268
264
        {
269
265
          FrgShaderCode = ValueFrgShader;
270
266
          break;
277
273
        }
278
274
      }
279
275
 
280
 
      GlobalPixelShader = GetGpuDevice()->CreatePixelShader();
281
 
      sprog = GetGpuDevice()->CreateShaderProgram();
 
276
      GlobalPixelShader = GetGraphicsDisplay()->GetGpuDevice()->CreatePixelShader();
 
277
      sprog = GetGraphicsDisplay()->GetGpuDevice()->CreateShaderProgram();
282
278
 
283
279
      GlobalPixelShader->SetShaderCode (HSV_To_RGBFrgShader.GetTCharPtr() );
284
280
 
289
285
    }
290
286
    else
291
287
    {
292
 
      switch (m_ColorChannel)
 
288
      switch (color_channel)
293
289
      {
294
 
        case CC_RED:
 
290
        case color::RED:
295
291
        {
296
292
          FrgShaderCode = AsmRedFrgShader;
297
293
          break;
298
294
        }
299
 
        case CC_GREEN:
 
295
        case color::GREEN:
300
296
        {
301
297
          FrgShaderCode = AsmGreenFrgShader;
302
298
          break;
303
299
        }
304
 
        case CC_BLUE:
 
300
        case color::BLUE:
305
301
        {
306
302
          FrgShaderCode = AsmBlueFrgShader;
307
303
          break;
308
304
        }
309
 
        case CC_HUE:
 
305
        case color::HUE:
310
306
        {
311
307
          FrgShaderCode = AsmHueFrgShader;
312
308
          break;
313
309
        }
314
 
        case CC_SATURATION:
 
310
        case color::SATURATION:
315
311
        {
316
312
          FrgShaderCode = AsmSaturationFrgShader;
317
313
          break;
318
314
        }
319
 
        case CC_VALUE:
 
315
        case color::VALUE:
320
316
        {
321
317
          FrgShaderCode = AsmValueFrgShader;
322
318
          break;
329
325
        }
330
326
      }
331
327
 
332
 
      m_AsmProg = GetGpuDevice()->CreateAsmShaderProgram();
 
328
      m_AsmProg = GetGraphicsDisplay()->GetGpuDevice()->CreateAsmShaderProgram();
333
329
      m_AsmProg->LoadVertexShader (AsmVtxShader.GetTCharPtr() );
334
330
      m_AsmProg->LoadPixelShader (FrgShaderCode.GetTCharPtr() );
335
331
      m_AsmProg->Link();
359
355
 
360
356
  void GLSh_ColorPicker::Render (int x, int y, int z, int width, int height, int WindowWidth, int WindowHeight)
361
357
  {
 
358
    float fx = x, fy = y;
362
359
    float VtxBuffer[] =
363
360
    {
364
 
      x,          y,          0.0f, 1.0f,
365
 
      x,          y + height, 0.0f, 1.0f,
366
 
      x + width,  y + height, 0.0f, 1.0f,
367
 
      x + width,  y,          0.0f, 1.0f,
 
361
      fx,          fy,          0.0f, 1.0f,
 
362
      fx,          fy + height, 0.0f, 1.0f,
 
363
      fx + width,  fy + height, 0.0f, 1.0f,
 
364
      fx + width,  fy,          0.0f, 1.0f,
368
365
    };
369
366
 
370
 
    if (!USE_ARB_SHADERS && (GetGpuDevice()->GetGPUBrand() != GPU_BRAND_INTEL) )
 
367
    if (GetGraphicsDisplay()->GetGraphicsEngine()->UsingGLSLCodePath() && (GetGraphicsDisplay()->GetGpuDevice()->GetGPUBrand() != GPU_BRAND_INTEL) )
371
368
    {
372
369
      CHECKGL (glBindBufferARB (GL_ARRAY_BUFFER_ARB, 0) );
373
370
      CHECKGL (glBindBufferARB (GL_ELEMENT_ARRAY_BUFFER_ARB, 0) );
376
373
      int VertexLocation = sprog->GetAttributeLocation ("AVertex");
377
374
 
378
375
      int VPMatrixLocation = sprog->GetUniformLocationARB ("ViewProjectionMatrix");
379
 
      sprog->SetUniformLocMatrix4fv ( (GLint) VPMatrixLocation, 1, false, (GLfloat *) & (GetThreadGraphicsContext()->GetOpenGLModelViewProjectionMatrix().m) );
 
376
      Matrix4 MVPMatrix = GetGraphicsDisplay()->GetGraphicsEngine ()->GetOpenGLModelViewProjectionMatrix ();
 
377
 
 
378
      sprog->SetUniformLocMatrix4fv ( (GLint) VPMatrixLocation, 1, false, (GLfloat *) & (MVPMatrix.m) );
380
379
 
381
380
      int ColorBase    = sprog->GetUniformLocationARB ("Color");
382
381
      int RectPosition    = sprog->GetUniformLocationARB ("RectPosition");
409
408
 
410
409
      CHECKGL ( glMatrixMode (GL_MODELVIEW) );
411
410
      CHECKGL ( glLoadIdentity() );
412
 
      CHECKGL ( glLoadMatrixf ( (FLOAT *) GetThreadGraphicsContext()->GetOpenGLModelViewMatrix().m) );
 
411
      CHECKGL ( glLoadMatrixf ( (FLOAT *) GetGraphicsDisplay()->GetGraphicsEngine()->GetOpenGLModelViewMatrix().m) );
413
412
      CHECKGL ( glMatrixMode (GL_PROJECTION) );
414
413
      CHECKGL ( glLoadIdentity() );
415
 
      CHECKGL ( glLoadMatrixf ( (FLOAT *) GetThreadGraphicsContext()->GetOpenGLProjectionMatrix().m) );
 
414
      CHECKGL ( glLoadMatrixf ( (FLOAT *) GetGraphicsDisplay()->GetGraphicsEngine()->GetOpenGLProjectionMatrix().m) );
416
415
 
417
416
      int VertexLocation          = VTXATTRIB_POSITION;
418
417