示例#1
0
文件: glshared.c 项目: mewbak/arcan
void agp_resize_rendertarget(
	struct agp_rendertarget* tgt, size_t neww, size_t newh)
{
	if (!tgt || !tgt->store){
		arcan_warning("attempted resize on broken rendertarget\n");
		return;
	}

/* same dimensions, no need to resize */
	if (tgt->store->w == neww && tgt->store->h == newh)
		return;

	erase_store(tgt->store);
	erase_store(tgt->store_back);

	struct agp_fenv* env = agp_env();

	agp_empty_vstore(tgt->store, neww, newh);
	if (tgt->store_back)
		agp_empty_vstore(tgt->store_back, neww, newh);

/* we inplace- modify, want the refcounter intact */
	env->delete_framebuffers(1,&tgt->fbo);
	env->delete_renderbuffers(1,&tgt->depth);
	tgt->fbo = GL_NONE;
	tgt->depth = GL_NONE;
	alloc_fbo(tgt, false);
}
示例#2
0
文件: glshared.c 项目: jeoerl/arcan
void agp_resize_rendertarget(
	struct agp_rendertarget* tgt, size_t neww, size_t newh)
{
	if (!tgt || !tgt->store){
		arcan_warning("attempted resize on broken rendertarget\n");
		return;
	}

/* same dimensions, no need to resize */
	if (tgt->store->w == neww && tgt->store->h == newh)
		return;

	struct storage_info_t* os = tgt->store;

/* we inplace- modify, want the refcounter intact */
	agp_null_vstore(os);
	arcan_mem_free(os->vinf.text.raw);
	os->vinf.text.raw = NULL;
	os->vinf.text.s_raw = 0;
	agp_empty_vstore(os, neww, newh);

	glDeleteFramebuffers(1,&tgt->fbo);
	glDeleteRenderbuffers(1,&tgt->depth);
	tgt->fbo = GL_NONE;
	tgt->depth = GL_NONE;
	alloc_fbo(tgt, tgt->mode);
}
示例#3
0
文件: glshared.c 项目: mewbak/arcan
struct agp_rendertarget* agp_setup_rendertarget(
	struct storage_info_t* vstore, enum rendertarget_mode m)
{
	struct agp_rendertarget* r = arcan_alloc_mem(sizeof(struct agp_rendertarget),
		ARCAN_MEM_VSTRUCT, ARCAN_MEM_BZERO, ARCAN_MEMALIGN_NATURAL);

	r->store = vstore;
	r->mode = m;
	r->clearcol[3] = 1.0;

/* need this tracking because there's no external memory management for _back */
	r->front_active = true;

	if (m & RENDERTARGET_DOUBLEBUFFER){
		r->store_back = arcan_alloc_mem(sizeof(struct storage_info_t),
			ARCAN_MEM_VSTRUCT, ARCAN_MEM_BZERO, ARCAN_MEMALIGN_NATURAL);
		r->store_back->vinf.text.s_fmt = vstore->vinf.text.s_fmt;
		r->store_back->vinf.text.d_fmt = vstore->vinf.text.d_fmt;
		agp_empty_vstore(r->store_back, vstore->w, vstore->h);
	}

	alloc_fbo(r, false);
	return r;
}
示例#4
0
文件: glshared.c 项目: mewbak/arcan
void agp_empty_vstoreext(struct storage_info_t* vs,
	size_t w, size_t h, enum vstore_hint hint)
{
	agp_empty_vstore(vs, w, h);
}