1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
/*=========================================================================
Program: ParaView
Module: vtkPVColorMaterialHelper.cxx
Copyright (c) Kitware, Inc.
All rights reserved.
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#include "vtkPVColorMaterialHelper.h"
#include "vtkShaderProgram2.h"
#include "vtkObjectFactory.h"
#include "vtkShader2.h"
#include "vtkShader2Collection.h"
#include "vtkUniformVariables.h"
#include "vtkgl.h"
extern const char* vtkPVColorMaterialHelper_vs;
vtkStandardNewMacro(vtkPVColorMaterialHelper);
vtkCxxSetObjectMacro(vtkPVColorMaterialHelper, Shader, vtkShaderProgram2);
//----------------------------------------------------------------------------
vtkPVColorMaterialHelper::vtkPVColorMaterialHelper()
{
this->Shader = 0;
}
//----------------------------------------------------------------------------
vtkPVColorMaterialHelper::~vtkPVColorMaterialHelper()
{
this->SetShader(0);
}
//----------------------------------------------------------------------------
void vtkPVColorMaterialHelper::Initialize(vtkShaderProgram2* pgm)
{
if (this->Shader != pgm)
{
this->SetShader(pgm);
if (pgm)
{
vtkShader2 *s=vtkShader2::New();
s->SetSourceCode(vtkPVColorMaterialHelper_vs);
s->SetType(VTK_SHADER_TYPE_VERTEX);
s->SetContext(pgm->GetContext());
pgm->GetShaders()->AddItem(s);
s->Delete();
}
}
}
//----------------------------------------------------------------------------
void vtkPVColorMaterialHelper::PrepareForRendering()
{
if (!this->Shader)
{
vtkErrorMacro("Please Initialize() before calling PrepareForRendering().");
return ;
}
this->Mode = vtkPVColorMaterialHelper::DISABLED;
if (glIsEnabled(GL_COLOR_MATERIAL))
{
GLint colorMaterialParameter;
glGetIntegerv(GL_COLOR_MATERIAL_PARAMETER, &colorMaterialParameter);
switch (colorMaterialParameter)
{
case GL_AMBIENT:
this->Mode = vtkPVColorMaterialHelper::AMBIENT;
break;
case GL_DIFFUSE:
this->Mode = vtkPVColorMaterialHelper::DIFFUSE;
break;
case GL_SPECULAR:
this->Mode = vtkPVColorMaterialHelper::SPECULAR;
break;
case GL_AMBIENT_AND_DIFFUSE:
this->Mode = vtkPVColorMaterialHelper::AMBIENT_AND_DIFFUSE;
break;
case GL_EMISSION:
this->Mode = vtkPVColorMaterialHelper::EMISSION;
break;
}
}
}
//----------------------------------------------------------------------------
void vtkPVColorMaterialHelper::Render()
{
if (!this->Shader)
{
vtkErrorMacro("Please Initialize() before calling Render().");
return;
}
int value=this->Mode;
this->Shader->GetUniformVariables()->SetUniformi("vtkPVColorMaterialHelper_Mode",1,&value);
}
//----------------------------------------------------------------------------
void vtkPVColorMaterialHelper::PrintSelf(ostream& os, vtkIndent indent)
{
this->Superclass::PrintSelf(os, indent);
os << indent << "Shader: " << this->Shader << endl;
}
|