static void Init( void ) { if (!glutExtensionSupported("GL_EXT_framebuffer_object")) { printf("fbotest2: GL_EXT_framebuffer_object not found!\n"); exit(0); } printf("fbotest2: GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); glGenFramebuffersEXT(1, &MyFB); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, MyFB); assert(glIsFramebufferEXT(MyFB)); /* set color buffer */ glGenRenderbuffersEXT(1, &ColorRb); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, ColorRb); assert(glIsRenderbufferEXT(ColorRb)); glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, ColorRb); glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, Width, Height); /* setup depth buffer */ glGenRenderbuffersEXT(1, &DepthRb); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, DepthRb); assert(glIsRenderbufferEXT(DepthRb)); glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, DepthRb); glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, Width, Height); CheckError(__LINE__); /* restore to default */ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); CheckError(__LINE__); }
static void Init( void ) { if (!glutExtensionSupported("GL_EXT_framebuffer_object")) { printf("fbotest3: GL_EXT_framebuffer_object not found!\n"); exit(0); } printf("fbotest3: GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); /* create initial tex obj as an RGBA texture */ glGenTextures(1, &Tex); glBindTexture(GL_TEXTURE_2D, Tex); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glEnable(GL_TEXTURE_2D); /* draw something to make sure the texture is used */ glBegin(GL_POINTS); glVertex2f(0, 0); glEnd(); /* done w/ texturing */ glDisable(GL_TEXTURE_2D); /* Create my Framebuffer Object */ glGenFramebuffersEXT(1, &MyFB); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, MyFB); assert(glIsFramebufferEXT(MyFB)); /* Setup color renderbuffer */ glGenRenderbuffersEXT(1, &ColorRb); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, ColorRb); assert(glIsRenderbufferEXT(ColorRb)); glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, ColorRb); glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, Width, Height); /* Setup depth renderbuffer (a texture) */ glGenRenderbuffersEXT(1, &DepthRb); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, DepthRb); assert(glIsRenderbufferEXT(DepthRb)); /* replace RGBA texture with Z texture */ glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, Width, Height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, Tex, 0); CheckError(__LINE__); /* restore to default */ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); CheckError(__LINE__); }
static void CleanUp(void) { glDeleteFramebuffersEXT(1, &MyFB); glDeleteRenderbuffersEXT(1, &ColorRb); glDeleteRenderbuffersEXT(1, &DepthRb); assert(!glIsFramebufferEXT(MyFB)); assert(!glIsRenderbufferEXT(ColorRb)); assert(!glIsRenderbufferEXT(DepthRb)); glutDestroyWindow(Win); exit(0); }
void RenderBuffer::init(const QSize& size, uint internal_format, int numSamp) { if (m_obj != -1) destroy(); glGenRenderbuffersEXT(1, &m_obj); Q_ASSERT(!glIsRenderbufferEXT(m_obj)); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, m_obj); Q_ASSERT(glIsRenderbufferEXT(m_obj)); glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, numSamp, internal_format, size.width(), size.height()); mglCheckErrors("renderBuf"); }
EXTERN_C_ENTER JNIEXPORT jboolean JNICALL Java_org_lwjgl_opengl_EXTFramebufferObject_glIsRenderbufferEXT(JNIEnv *__env, jclass clazz, jint renderbuffer) { glIsRenderbufferEXTPROC glIsRenderbufferEXT = (glIsRenderbufferEXTPROC)tlsGetFunction(1698); UNUSED_PARAM(clazz) return (jboolean)glIsRenderbufferEXT(renderbuffer); }
/** * @brief GLContextReinit */ void FBO::GLContextReinit() { if (!IsSupported()) return; for (std::map<GLuint,FBO::TexData*>::iterator ti=texBuf.begin(); ti!=texBuf.end(); ++ti) { FBO::TexData* tex = ti->second; if (glIsTexture(tex->id)) { glBindTexture(tex->target,tex->id); //todo: regen mipmaps? switch (tex->target) { case GL_TEXTURE_3D: //glTexSubImage3D(tex->target, 0, 0,0,0, tex->xsize, tex->ysize, tex->zsize, /*FIXME?*/GL_RGBA, /*FIXME?*/GL_UNSIGNED_BYTE, tex->pixels); glTexImage3D(tex->target, 0, tex->format, tex->xsize, tex->ysize, tex->zsize, 0, /*FIXME?*/GL_RGBA, /*FIXME?*/GL_UNSIGNED_BYTE, tex->pixels); break; case GL_TEXTURE_1D: //glTexSubImage1D(tex->target, 0, 0, tex->xsize, /*FIXME?*/GL_RGBA, /*FIXME?*/GL_UNSIGNED_BYTE, tex->pixels); glTexImage1D(tex->target, 0, tex->format, tex->xsize, /*FIXME?*/GL_RGBA, 0, /*FIXME?*/GL_UNSIGNED_BYTE, tex->pixels); break; default: //GL_TEXTURE_2D & GL_TEXTURE_RECTANGLE //glTexSubImage2D(tex->target, 0, 0,0, tex->xsize, tex->ysize, /*FIXME?*/GL_RGBA, /*FIXME?*/GL_UNSIGNED_BYTE, tex->pixels); glTexImage2D(tex->target, 0, tex->format, tex->xsize, tex->ysize, 0, /*FIXME?*/GL_RGBA, /*FIXME?*/GL_UNSIGNED_BYTE, tex->pixels); } }else if (glIsRenderbufferEXT(tex->id)) { //FIXME } delete[] tex->pixels; delete tex; } texBuf.clear(); }
int LuaRBOs::meta_index(lua_State* L) { const RBO* rbo = static_cast<RBO*>(luaL_checkudata(L, 1, "RBO")); const string key = luaL_checkstring(L, 2); if (key == "valid") { lua_pushboolean(L, glIsRenderbufferEXT(rbo->id)); } else if (key == "target") { lua_pushnumber(L, rbo->target); } else if (key == "format") { lua_pushnumber(L, rbo->format); } else if (key == "xsize") { lua_pushnumber(L, rbo->xsize); } else if (key == "ysize") { lua_pushnumber(L, rbo->ysize); } else { return 0; } return 1; }
/////////////////////////////////////////////////////////////////////////////// // return renderbuffer parameters as string using glGetRenderbufferParameterivEXT /////////////////////////////////////////////////////////////////////////////// std::string GetRenderbufferParameters(GLuint id) { if(glIsRenderbufferEXT(id) == GL_FALSE) return "Not Renderbuffer object"; int width, height, format; std::string formatName; glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, id); glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_WIDTH_EXT, &width); // get renderbuffer width glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_HEIGHT_EXT, &height); // get renderbuffer height glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_INTERNAL_FORMAT_EXT, &format); // get renderbuffer internal format glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); formatName = ConvertInternalFormatToString(format); std::stringstream ss; ss << width << "x" << height << ", " << formatName; return ss.str(); }
void GlRenderbufferObject::deleteObject() { if (_handle && glIsRenderbufferEXT(_handle)) { glDeleteRenderbuffersEXT(1, &_handle); } _handle = 0; }
// FBO functions GLboolean is_render_buffer(GLuint renderbuffer) { GLboolean result = glIsRenderbufferEXT(renderbuffer); CHECK_GL_ERROR(); return result; }
JNIEXPORT jboolean JNICALL Java_org_lwjgl_opengl_EXTFramebufferObject_nglIsRenderbufferEXT(JNIEnv *env, jclass clazz, jint renderbuffer, jlong function_pointer) { glIsRenderbufferEXTPROC glIsRenderbufferEXT = (glIsRenderbufferEXTPROC)((intptr_t)function_pointer); GLboolean __result = glIsRenderbufferEXT(renderbuffer); return __result; }
static void Init(int argc, char *argv[]) { static const GLfloat mat[4] = { 1.0, 0.5, 0.5, 1.0 }; GLint i; if (!glutExtensionSupported("GL_EXT_framebuffer_object")) { printf("GL_EXT_framebuffer_object not found!\n"); exit(0); } if (argc > 1 && strcmp(argv[1], "-ds") == 0) { if (!glutExtensionSupported("GL_EXT_packed_depth_stencil")) { printf("GL_EXT_packed_depth_stencil not found!\n"); exit(0); } UsePackedDepthStencil = GL_TRUE; printf("Using GL_EXT_packed_depth_stencil\n"); } printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); /* gen framebuffer id, delete it, do some assertions, just for testing */ glGenFramebuffersEXT(1, &MyFB); assert(MyFB); assert(!glIsFramebufferEXT(MyFB)); glDeleteFramebuffersEXT(1, &MyFB); assert(!glIsFramebufferEXT(MyFB)); /* Note, continue to use MyFB below */ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, MyFB); assert(glIsFramebufferEXT(MyFB)); glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &i); assert(i == MyFB); /* Make texture object/image */ glGenTextures(1, &TexObj); glBindTexture(TexTarget, TexObj); /* make two image levels */ glTexImage2D(TexTarget, 0, TexIntFormat, TexWidth, TexHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); glTexImage2D(TexTarget, 1, TexIntFormat, TexWidth/2, TexHeight/2, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); TexWidth = TexWidth >> TextureLevel; TexHeight = TexHeight >> TextureLevel; glTexParameteri(TexTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(TexTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexParameteri(TexTarget, GL_TEXTURE_BASE_LEVEL, TextureLevel); glTexParameteri(TexTarget, GL_TEXTURE_MAX_LEVEL, TextureLevel); CheckError(__LINE__); /* Render color to texture */ glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, TexTarget, TexObj, TextureLevel); #if DEPTH /* make depth renderbuffer */ glGenRenderbuffersEXT(1, &DepthRB); assert(DepthRB); assert(!glIsRenderbufferEXT(DepthRB)); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, DepthRB); assert(glIsRenderbufferEXT(DepthRB)); if (UsePackedDepthStencil) glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_STENCIL_EXT, TexWidth, TexHeight); else glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, TexWidth, TexHeight); CheckError(__LINE__); glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_DEPTH_SIZE_EXT, &i); CheckError(__LINE__); printf("Depth renderbuffer size = %d bits\n", i); assert(i > 0); /* attach DepthRB to MyFB */ glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, DepthRB); #endif CheckError(__LINE__); #if STENCIL if (UsePackedDepthStencil) { /* DepthRb is a combined depth/stencil renderbuffer */ glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, DepthRB); } else { /* make stencil renderbuffer */ glGenRenderbuffersEXT(1, &StencilRB); assert(StencilRB); assert(!glIsRenderbufferEXT(StencilRB)); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, StencilRB); assert(glIsRenderbufferEXT(StencilRB)); glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_STENCIL_INDEX, TexWidth, TexHeight); /* attach StencilRB to MyFB */ glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, StencilRB); } glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_STENCIL_SIZE_EXT, &i); CheckError(__LINE__); printf("Stencil renderbuffer size = %d bits\n", i); assert(i > 0); #endif CheckError(__LINE__); /* bind regular framebuffer */ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); /* lighting */ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, mat); }
static void Init( void ) { GLboolean ARB_fbo = glutExtensionSupported("GL_ARB_framebuffer_object"); GLint i; if (!glutExtensionSupported("GL_EXT_framebuffer_object")) { printf("GL_EXT_framebuffer_object not found!\n"); exit(0); } printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); glGenFramebuffersEXT(1, &MyFB); assert(MyFB); assert(!glIsFramebufferEXT(MyFB)); if (!ARB_fbo) { glDeleteFramebuffersEXT(1, &MyFB); assert(!glIsFramebufferEXT(MyFB)); } /* Note, continue to use MyFB below */ glGenRenderbuffersEXT(1, &MyRB); assert(MyRB); assert(!glIsRenderbufferEXT(MyRB)); if (!ARB_fbo) { glDeleteRenderbuffersEXT(1, &MyRB); assert(!glIsRenderbufferEXT(MyRB)); MyRB = 42; /* an arbitrary ID */ } glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, MyFB); assert(glIsFramebufferEXT(MyFB)); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, MyRB); assert(glIsRenderbufferEXT(MyRB)); glGetIntegerv(GL_RENDERBUFFER_BINDING_EXT, &i); assert(i == MyRB); glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &i); assert(i == MyFB); CheckError(__LINE__); glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, MyRB); glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, Width, Height); CheckError(__LINE__); { GLint r, g, b, a; glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_RED_SIZE_EXT, &r); glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_GREEN_SIZE_EXT, &g); glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_BLUE_SIZE_EXT, &b); glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_ALPHA_SIZE_EXT, &a); CheckError(__LINE__); printf("renderbuffer RGBA sizes = %d %d %d %d\n", r, g, b, a); glGetIntegerv(GL_RED_BITS, &r); glGetIntegerv(GL_GREEN_BITS, &g); glGetIntegerv(GL_BLUE_BITS, &b); glGetIntegerv(GL_ALPHA_BITS, &a); printf("Visual RGBA sizes = %d %d %d %d\n", r, g, b, a); } /* restore to default */ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); CheckError(__LINE__); }