bool RenderTextureOpenGL::create(const Vector2& size, RenderTextureFormat format, int depth) { if (!createRenderbuffer(size, depth)) return false; if (!createTexture(size, format)) return false; glBindFramebuffer(GL_FRAMEBUFFER, mFramebuffer); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, getTextureId(), 0); if (mDepth > 0) glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, mDepthBuffer); GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if(status != GL_FRAMEBUFFER_COMPLETE) { //TODO: Error log; return false; } mSize = size; glBindFramebuffer(GL_FRAMEBUFFER, 0); return true; }
void init() { offsetX = gfx::width / 2.0f; offsetY = gfx::height / 2.0f; initVGExp(); //addDistanceTransformCubic(controlPts, rcubic); addCubic(controlPts, rcubic, rtri); glm::vec3 cpt[3] = { glm::vec3(-20, 0, 1), glm::vec3(0, 20, 1), glm::vec3(20, 5, 1) }; //addAATriangle(cpt, rcubic); //testRCubic(); tessellateCubic(); Array<glm::vec2> cp; cp.assign(controlPts2, controlPts2+4); addCubic(mRasterCubic, mTri, cp); glClearStencil(0x80); colorRB = createRenderbuffer(GL_RGBA8, 8, 800, 600); depthRB = createRenderbuffer(GL_DEPTH24_STENCIL8, 8, 800, 600); fbo = createFramebuffer(colorRB, depthRB); glm::vec2 cps[8] = { glm::vec2(-20.0f, 0.0f), glm::vec2( 30.0f, 40.0f), glm::vec2(-30.0f, 40.0f), glm::vec2( 20.0f, 0.0f), }; const size_t maxIndices = 100 * 9; const size_t maxVertices = 100 * 5; const size_t maxB3Vertices = 100 * 10; vg::geometry_t geomPath = { (uint16_t*)core::thread_stack_alloc(sizeof(uint16_t)*maxIndices), (vf::p2_vertex_t*)core::thread_stack_alloc(sizeof(vf::p2_vertex_t)*maxVertices), (vf::p2uv3_vertex_t*)core::thread_stack_alloc(sizeof(vf::p2uv3_vertex_t)*maxB3Vertices), 0, 0, 0 }; vg::geometry_t geomPathOff = { (uint16_t*)core::thread_stack_alloc(sizeof(uint16_t)*maxIndices), (vf::p2_vertex_t*)core::thread_stack_alloc(sizeof(vf::p2_vertex_t)*maxVertices), (vf::p2uv3_vertex_t*)core::thread_stack_alloc(sizeof(vf::p2uv3_vertex_t)*maxB3Vertices), 0, 0, 0 }; uint16_t prevIdx, curIdx; uint16_t prevIdx2, curIdx2; prevIdx = 0; curIdx = vg::geomAddVertex(&geomPath, *(ml::vec2*)&cps[0]); prevIdx2 = vg::geomAddVertex(&geomPathOff, *(ml::vec2*)&cps[0]); curIdx2 = vg::geomAddVertex(&geomPathOff, *(ml::vec2*)&cps[3]); meshAddBezier3 (&geomPath, prevIdx, curIdx, cps[0], cps[1], cps[2], cps[3]); meshStrokeBezier3(&geomPathOff, prevIdx2, curIdx2, cps[0], cps[1], cps[2], cps[3]); testPath = vg::geomToPath(&geomPath); testPathOff = vg::geomToPath(&geomPathOff); core::thread_stack_reset(geomPath.indices); }
/*! \internal */ QCLImage2D QCLContextGL::createRenderbuffer (QMacCompatGLuint renderbuffer, QCLMemoryObject::Access access) { return createRenderbuffer(GLuint(renderbuffer), access); }