Пример #1
0
	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;
	}
Пример #2
0
    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);
    }
Пример #3
0
/*!
    \internal
*/
QCLImage2D QCLContextGL::createRenderbuffer
    (QMacCompatGLuint renderbuffer, QCLMemoryObject::Access access)
{
    return createRenderbuffer(GLuint(renderbuffer), access);
}