#pragma once #include "GLSLShader.h" #include "VectorFwd.h" namespace Aftr { class Model; class GLSLShaderCUDAWaterFFT : public GLSLShader { public: static GLSLShaderCUDAWaterFFT* New( float heightScale, float chopiness, float size, Vector shallowColor, Vector deepColor, Vector skyColor ); virtual ~GLSLShaderCUDAWaterFFT(); GLSLShaderCUDAWaterFFT& operator =( const GLSLShaderCUDAWaterFFT& shader ); /** Returns a copy of this instance. This is identical to invoking the copy constructor with the addition that this preserves the polymorphic type. That is, if this was a subclass of GLSLShader with additional members and methods, this will internally create the shader instance as that subclass, thereby preserving polymorphic behavior, members, and methods. This is in contrast with a copy constructor in the case where one performs: GLSLShader* myCopy = new GLSLShader( shaderToBeCopied ); This will always create a GLSLShader* instance, not a subclass corresponding to the exact type of shaderToBeCopied. */ virtual GLSLShader* getCopyOfThisInstance(); void setModel( Model* m ) { this->model = m; } virtual void bind() const override; virtual void unbind() const override; protected: GLSLShaderCUDAWaterFFT( GLSLShaderDataShared* dataShared, float heightScale, float chopiness, float size, Vector shallowColor, Vector deepColor, Vector skyColor ); GLSLShaderCUDAWaterFFT( const GLSLShaderCUDAWaterFFT& ); Model* model = nullptr; ///< Not owned, do not delete }; }