Kindfield
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Friends Pages
Public Slots | Signals | Public Member Functions | Properties | List of all members
VolumeShaderProgram Class Reference

#include <volumeeffect.h>

Inheritance diagram for VolumeShaderProgram:
Inheritance graph
[legend]
Collaboration diagram for VolumeShaderProgram:
Collaboration graph
[legend]

Public Slots

void markAllPropertiesDirty ()
 
void markPropertyDirty (int property)
 
void setVertexShaderSource (QUrl arg)
 
void setFragmentShaderSource (QUrl arg)
 
void setPositionReader (HartreeFock *arg)
 
void forceUpdate ()
 

Signals

void finishedLoading ()
 
void shaderChanged ()
 
void vertexShaderSourceChanged (QUrl arg)
 
void fragmentShaderSourceChanged (QUrl arg)
 
void positionReaderChanged (HartreeFock *arg)
 

Public Member Functions

 VolumeShaderProgram (QObject *parent=0)
 
virtual ~VolumeShaderProgram ()
 
QString vertexShader () const
 
void setVertexShader (const QString &value)
 
QString fragmentShader () const
 
void setFragmentShader (const QString &value)
 
virtual void enableEffect (QGLPainter *painter)
 
virtual void applyTo (QGLSceneNode *node)
 
QUrl vertexShaderSource () const
 
QUrl fragmentShaderSource () const
 
const Texture3Dtexture3Ddata () const
 
HartreeFockpositionReader () const
 

Properties

QString vertexShader
 
QString fragmentShader
 
QUrl vertexShaderSource
 
QUrl fragmentShaderSource
 
HartreeFock positionReader
 

Detailed Description

Definition at line 71 of file volumeeffect.h.

Constructor & Destructor Documentation

VolumeShaderProgram::VolumeShaderProgram ( QObject *  parent = 0)

Definition at line 744 of file volumeeffect.cpp.

745  : QQuickEffect(parent),
746  m_positionReader(0)
747 {
748  d = new VolumeShaderProgramPrivate();
749 }
VolumeShaderProgram::~VolumeShaderProgram ( )
virtual

Definition at line 756 of file volumeeffect.cpp.

757 {
758  delete d->effect;
759  delete d;
760 }

Member Function Documentation

void VolumeShaderProgram::applyTo ( QGLSceneNode *  node)
virtual

Definition at line 851 of file volumeeffect.cpp.

852 {
853  if (!d->effect) {
854  // This function is often called during setup, before glInitilization,
855  // so create the effect now, and then initializion it later.
856  d->effect = new VolumeShaderProgramEffect(this);
857  d->regenerate = true;
858  }
859  node->setUserEffect(d->effect);
860 }
void VolumeShaderProgram::enableEffect ( QGLPainter *  painter)
virtual

Definition at line 809 of file volumeeffect.cpp.

810 {
811  if (!d->shadersSupported && !d->regenerate) {
812  // Use a simple fallback effect.
813  QQuickEffect::enableEffect(painter);
814  return;
815  }
816  if (!d->effect) {
817  // note that the VolumeShaderProgramEffect can also be created when this
818  // effect is applied to a QGLSceneNode if that happens first
819  d->effect = new VolumeShaderProgramEffect(this);
820  if (!d->effect->create(d->vertexShader, d->fragmentShader)) {
821  delete d->effect;
822  d->effect = 0;
823  QQuickEffect::enableEffect(painter);
824  d->regenerate = false;
825  d->shadersSupported = false;
826  return;
827  }
828  d->shadersSupported = true;
829  } else if (d->regenerate) {
830  if (!d->effect->create(d->vertexShader, d->fragmentShader)) {
831  delete d->effect;
832  d->effect = 0;
833  QQuickEffect::enableEffect(painter);
834  d->regenerate = false;
835  d->shadersSupported = false;
836  return;
837  }
838  d->shadersSupported = true;
839  }
840  d->regenerate = false;
841  painter->setUserEffect(d->effect);
842 }
void VolumeShaderProgram::finishedLoading ( )
signal
void VolumeShaderProgram::forceUpdate ( )
slot

Definition at line 975 of file volumeeffect.cpp.

976 {
977  m_texture3Ddata.data = m_positionReader->voxelData();
978  m_texture3Ddata.width = m_positionReader->voxelDataWidth();
979  m_texture3Ddata.height = m_positionReader->voxelDataHeight();
980  m_texture3Ddata.depth = m_positionReader->voxelDataDepth();
981  d->regenerate = true;
982  emit effectChanged();
983 }
QString VolumeShaderProgram::fragmentShader ( ) const
QUrl VolumeShaderProgram::fragmentShaderSource ( ) const
void VolumeShaderProgram::fragmentShaderSourceChanged ( QUrl  arg)
signal
void VolumeShaderProgram::markAllPropertiesDirty ( )
slot

Definition at line 881 of file volumeeffect.cpp.

882 {
884 }
void VolumeShaderProgram::markPropertyDirty ( int  property)
slot

Definition at line 890 of file volumeeffect.cpp.

891 {
892  d->effect->setPropertyDirty(property);
893 }
HartreeFock* VolumeShaderProgram::positionReader ( ) const
inline

Definition at line 99 of file volumeeffect.h.

100  {
101  return m_positionReader;
102  }
void VolumeShaderProgram::positionReaderChanged ( HartreeFock arg)
signal
void VolumeShaderProgram::setFragmentShader ( const QString &  value)

Definition at line 796 of file volumeeffect.cpp.

797 {
798  d->fragmentShader = value;
799  d->regenerate = true;
800  emit shaderChanged();
801  emit effectChanged();
802 }
void VolumeShaderProgram::setFragmentShaderSource ( QUrl  arg)
slot

Definition at line 949 of file volumeeffect.cpp.

950 {
951  if (m_fragmentShaderSource != arg) {
952  m_fragmentShaderSource = arg;
953  QFile file(arg.path());
954  QString fragmentShaderFileContents;
955  if (file.open(QIODevice::ReadOnly)) {
956  fragmentShaderFileContents = file.readAll();
957  } else {
958  qWarning() << "VolumeShaderProgram::setFragmentShaderSource: could not open " << arg;
959  }
960  setFragmentShader(fragmentShaderFileContents);
961  emit fragmentShaderSourceChanged(arg);
962  }
963 }
void VolumeShaderProgram::setPositionReader ( HartreeFock arg)
slot

Definition at line 965 of file volumeeffect.cpp.

966 {
967  if (m_positionReader != arg) {
968  m_positionReader = arg;
969  connect(m_positionReader, SIGNAL(dataChanged()), this, SLOT(forceUpdate()));
970  forceUpdate();
971  emit positionReaderChanged(arg);
972  }
973 }
void VolumeShaderProgram::setVertexShader ( const QString &  value)

Definition at line 775 of file volumeeffect.cpp.

776 {
777  d->vertexShader = value;
778  d->regenerate = true;
779  emit shaderChanged();
780  emit effectChanged();
781 }
void VolumeShaderProgram::setVertexShaderSource ( QUrl  arg)
slot

Definition at line 933 of file volumeeffect.cpp.

934 {
935  if (m_vertexShaderSource != arg) {
936  m_vertexShaderSource = arg;
937  QFile file(arg.path());
938  QString vertexShaderFileContents;
939  if (file.open(QIODevice::ReadOnly)) {
940  vertexShaderFileContents = file.readAll();
941  } else {
942  qWarning() << "VolumeShaderProgram::setVertexShaderSource: could not open " << arg;
943  }
944  setVertexShader(vertexShaderFileContents);
945  emit vertexShaderSourceChanged(arg);
946  }
947 }
void VolumeShaderProgram::shaderChanged ( )
signal
const Texture3D & VolumeShaderProgram::texture3Ddata ( ) const

Definition at line 929 of file volumeeffect.cpp.

929  {
930  return m_texture3Ddata;
931 }
QString VolumeShaderProgram::vertexShader ( ) const
QUrl VolumeShaderProgram::vertexShaderSource ( ) const
void VolumeShaderProgram::vertexShaderSourceChanged ( QUrl  arg)
signal

Property Documentation

QString VolumeShaderProgram::fragmentShader
readwrite

string VolumeShaderProgram::fragmentShader This property defines the source for the fragment shader (ie. pixel shader) to be implemented by this instance of the VolumeShaderProgram.

See Also
vertexShader

Definition at line 75 of file volumeeffect.h.

QUrl VolumeShaderProgram::fragmentShaderSource
readwrite

Definition at line 78 of file volumeeffect.h.

HartreeFock VolumeShaderProgram::positionReader
readwrite

Definition at line 79 of file volumeeffect.h.

QString VolumeShaderProgram::vertexShader
readwrite

string VolumeShaderProgram::vertexShader

This property defines the source for the vertex shader to be implemented by this instance of the VolumeShaderProgram.

See Also
fragmentShader

Definition at line 74 of file volumeeffect.h.

QUrl VolumeShaderProgram::vertexShaderSource
readwrite

Definition at line 77 of file volumeeffect.h.


The documentation for this class was generated from the following files: