// ok let's start things up void GPUVolRTV0::init(DrawEnv *pEnv) { create_volumetexture(); load_vertex_program (vertexprog, "raycasting_shader.vp.cg"); load_fragment_program(fragmentprog,"raycasting_shader.fp.cg"); shaderprog = glCreateProgram(); glAttachShader(shaderprog, vertexprog); glAttachShader(shaderprog, fragmentprog); glLinkProgram(shaderprog); check_program_status(shaderprog); stepsizeLoc = glGetUniformLocation(shaderprog, "stepsize"); mvLoc = glGetUniformLocation(shaderprog, "ModelView"); mpLoc = glGetUniformLocation(shaderprog, "Proj"); texLoc = glGetUniformLocation(shaderprog, "tex"); volumeTexLoc = glGetUniformLocation(shaderprog, "volume_tex"); // Create the to FBO's one for the backside of the volumecube and one for the finalimage rendering glGenFramebuffersEXT(1, &framebuffer); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,framebuffer); glGenTextures(1, &backface_buffer); glBindTexture(GL_TEXTURE_2D, backface_buffer); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); // glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA16F_ARB, WINDOW_SIZE, WINDOW_SIZE, 0, GL_RGBA, GL_FLOAT, NULL); glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA16F_ARB, pEnv->getPixelWidth(), pEnv->getPixelHeight(), 0, GL_RGBA, GL_FLOAT, NULL); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, backface_buffer, 0); glGenTextures(1, &final_image); glBindTexture(GL_TEXTURE_2D, final_image); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); // glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA16F_ARB, WINDOW_SIZE, WINDOW_SIZE, 0, GL_RGBA, GL_FLOAT, NULL); glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA16F_ARB, pEnv->getPixelWidth(), pEnv->getPixelHeight(), 0, GL_RGBA, GL_FLOAT, NULL); glGenRenderbuffersEXT(1, &renderbuffer); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, renderbuffer); // glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, WINDOW_SIZE, WINDOW_SIZE); glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, pEnv->getPixelWidth(), pEnv->getPixelHeight()); glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, renderbuffer); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); bInitialized = true; }
void cgtk::init() { cout << "glew init " << endl; GLenum err = glewInit(); // initialize all the OpenGL extensions glewGetExtension("glMultiTexCoord2fvARB"); if(glewGetExtension("GL_EXT_framebuffer_object") )cout << "GL_EXT_framebuffer_object support " << endl; if(glewGetExtension("GL_EXT_renderbuffer_object"))cout << "GL_EXT_renderbuffer_object support " << endl; if(glewGetExtension("GL_ARB_vertex_buffer_object")) cout << "GL_ARB_vertex_buffer_object support" << endl; if(GL_ARB_multitexture)cout << "GL_ARB_multitexture support " << endl; if (glewGetExtension("GL_ARB_fragment_shader") != GL_TRUE || glewGetExtension("GL_ARB_vertex_shader") != GL_TRUE || glewGetExtension("GL_ARB_shader_objects") != GL_TRUE || glewGetExtension("GL_ARB_shading_language_100") != GL_TRUE) { cout << "Driver does not support OpenGL Shading Language" << endl; exit(1); } //glEnable(GL_CULL_FACE); glClearColor(0.0, 0.0, 0.0, 0); create_volumetexture(); //load_volumetexture_k("data\\output31_int.bin"); //load_volumetexture_step("data\\step_by_step2.bin"); // CG init //cgSetErrorCallback(cgErrorCallback); context = cgCreateContext(); if (cgGLIsProfileSupported(CG_PROFILE_VP40)) { vertexProfile = CG_PROFILE_VP40; cout << "CG_PROFILE_VP40 supported." << endl; } else { if (cgGLIsProfileSupported(CG_PROFILE_ARBVP1)) vertexProfile = CG_PROFILE_ARBVP1; else { cout << "Neither arbvp1 or vp40 vertex profiles supported on this system." << endl; exit(1); } } if (cgGLIsProfileSupported(CG_PROFILE_FP40)) { fragmentProfile = CG_PROFILE_FP40; cout << "CG_PROFILE_FP40 supported." << endl; } else { if (cgGLIsProfileSupported(CG_PROFILE_ARBFP1)) fragmentProfile = CG_PROFILE_ARBFP1; else { cout << "Neither arbfp1 or fp40 fragment profiles supported on this system." << endl; exit(1); } } // load the vertex and fragment raycasting programs load_vertex_program(vertex_main,"raycasting_shader.cg","vertex_main"); cgErrorCallback(); load_fragment_program(fragment_main,"raycasting_shader.cg","fragment_main"); cgErrorCallback(); // Create the to FBO's one for the backside of the volumecube and one for the finalimage rendering glGenFramebuffersEXT(1, &framebuffer); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,framebuffer); glGenTextures(1, &backface_buffer); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, backface_buffer); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0,GL_RGBA16F_ARB, WINDOW_SIZE_W, WINDOW_SIZE_H, 0, GL_RGBA, GL_FLOAT, NULL); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_RECTANGLE_ARB, backface_buffer, 0); glGenTextures(1, &final_image); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, final_image); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0,GL_RGBA16F_ARB, WINDOW_SIZE_W, WINDOW_SIZE_H, 0, GL_RGBA, GL_FLOAT, NULL); glGenRenderbuffersEXT(1, &renderbuffer); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, renderbuffer); glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, WINDOW_SIZE_W, WINDOW_SIZE_H); glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, renderbuffer); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); }