8 #include <OpenGLFramework/SpecializedBatches/PerPixelProcessingBase.hh>
13 PerPixelProcessingBase::PerPixelProcessingBase() {
14 renderTargetP_ = NULL;
17 shaderProgramP_ = NULL;
18 fragmentShaderP_ = NULL;
19 renderTargetCreated_ =
false;
22 PerPixelProcessingBase::~PerPixelProcessingBase() {
23 if (renderTargetP_ != NULL && renderTargetCreated_) {
24 delete renderTargetP_;
27 if (textureP_ != NULL) {
31 if (zBufferP_ != NULL) {
35 if (shaderProgramP_ != NULL) {
36 delete shaderProgramP_;
39 if (fragmentShaderP_ != NULL) {
40 delete fragmentShaderP_;
44 void PerPixelProcessingBase::SetDefaultRenderTarget(
unsigned int width,
45 unsigned height, GLenum internalFormat) {
47 BIASASSERT(width > 0 && height > 0);
49 if (zBufferP_ != NULL) {
55 if (textureP_ != NULL) {
61 if (renderTargetP_ != NULL && renderTargetCreated_) {
62 delete renderTargetP_;
68 zBufferP_->SetMagFilter(GL_NEAREST);
69 zBufferP_->SetMinFilter(GL_NEAREST);
70 zBufferP_->SetWrapS(GL_CLAMP);
71 zBufferP_->SetWrapT(GL_CLAMP);
72 zBufferP_->Allocate(width, height, GL_DEPTH_COMPONENT);
75 textureP_->SetMagFilter(GL_NEAREST);
76 textureP_->SetMinFilter(GL_NEAREST);
77 textureP_->SetWrapS(GL_CLAMP);
78 textureP_->SetWrapT(GL_CLAMP);
79 textureP_->Allocate(width, height, internalFormat);
81 renderTargetP_->Create();
82 renderTargetP_->AttachTexture(*textureP_, GL_COLOR_ATTACHMENT0_EXT);
83 renderTargetP_->AttachTexture(*zBufferP_, GL_DEPTH_ATTACHMENT_EXT);
84 renderTargetP_->CheckComplete();
86 renderTargetCreated_ =
true;
88 batch_.SetRenderTarget(renderTargetP_);
96 void PerPixelProcessingBase::SetDefaultFloatRenderTarget(
unsigned int width,
98 SetDefaultRenderTarget(width, height, GL_LUMINANCE32F_ARB);
101 void PerPixelProcessingBase::SetDefaultRGBRenderTarget(
unsigned int width,
103 SetDefaultRenderTarget(width, height, GL_RGB);
107 const std::string& fragmentShaderCode) {
109 if (fragmentShaderP_ != NULL) {
110 delete fragmentShaderP_;
113 if (shaderProgramP_ != NULL) {
114 delete shaderProgramP_;
120 shaderProgramP_->Create();
121 fragmentShaderP_->Create(GL_FRAGMENT_SHADER, fragmentShaderCode);
122 shaderProgramP_->AttachShader(*fragmentShaderP_);
123 shaderProgramP_->Link();
124 batch_.SetShaderProgram(shaderProgramP_);
130 return shaderProgramP_;
134 const std::string& fragmentShaderPath) {
136 if (fragmentShaderP_ != NULL) {
137 delete fragmentShaderP_;
140 if (shaderProgramP_ != NULL) {
141 delete shaderProgramP_;
147 shaderProgramP_->Create();
148 fragmentShaderP_->CreateFromFile(GL_FRAGMENT_SHADER, fragmentShaderPath);
149 shaderProgramP_->AttachShader(*fragmentShaderP_);
150 shaderProgramP_->Link();
151 batch_.SetShaderProgram(shaderProgramP_);
157 return shaderProgramP_;
Exception class used for run-time errors in the OpenGLFramework.
const std::string & GetMessageString() const
Returns the description of the error including the file name and line number where the error occured...
A shader program composed of several shaders.
A GLSL vertex shader or fragment shader, which must be linked in a shader program.