#include "glInterface.h" #include "GlobalLinesRenderer.h" #include "common.h" #include #include #include namespace GtpVisibilityPreprocessor { static CGcontext sCgContext = NULL; static CGprogram sCgDepthPeelingProgram = NULL; static CGprofile sCgFragmentProfile; static void handleCgError() { cerr << "Cg error: " << cgGetErrorString(cgGetError()) << endl; exit(1); } GlobalLinesRenderer::GlobalLinesRenderer(QGLPixelBuffer *buffer1, QGLPixelBuffer *buffer2): mNewBuffer(buffer1), mOldBuffer(buffer2) { } GlobalLinesRenderer::~GlobalLinesRenderer() { if (sCgDepthPeelingProgram) cgDestroyProgram(sCgDepthPeelingProgram); if (sCgContext) cgDestroyContext(sCgContext); } void GlobalLinesRenderer::CastGlobalLines(Beam &beam, const int samples) { // bind pixel shader implementing the front depth buffer functionality cgGLBindProgram(sCgDepthPeelingProgram); cgGLEnableProfile(sCgFragmentProfile); ApplyDepthPeeling(beam, samples); } void GlobalLinesRenderer::DrawGeometry() { } void GlobalLinesRenderer::ApplyDepthPeeling(Beam &beam, const int samples) { /* if (rtNew->IsDoubleBuffered()) glDrawBuffer(GL_BACK); rtNew->BeginCapture(); { cgGLBindProgram(passthru); glColor3f(0,0.0,0.0); DrawGeometry(); //just random geomerty } rtNew->EndCapture(); for(int l = 0; l < mCurrentDepth; l++) { // Peel another layer pingpong(); // switch pointer between rendertextures rtNew->BeginCapture(); { if (rtNew->IsDoubleBuffered()) glDrawBuffer(GL_BACK); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); cgGLBindProgram(fragmentProgram); cgGLSetTextureParameter(input1, rtOld->GetDepthTextureID()); cgGLEnableTextureParameter(input1); glColor3f(0,0.0,0.0); DrawGeometry(); cgGLDisableTextureParameter(input1); } rtNew->EndCapture(); }*/ } }